Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[NayNay] User Program Management::Remove a program + Testing #178

Merged
merged 2 commits into from
Jul 16, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -20,11 +20,13 @@ Version header format: `[version] Name - year-month-day (entropy-core compatibil
- new: './tests/user-program-management.test.ts' - unit tests file for user program management flows
- added test for adding a user program
- added test for viewing a user program
- added test for removing a user program
- new: './src/flows/user-program-management/add.ts' - service file for adding user program pure function
- new: 'src/flows/user-program-management/helpers/questions.ts' - utility helper file for all the different inquirer questions used
- new: 'src/flows/user-program-management/types.ts' - user program management method types
- new: 'src/flows/user-program-management/view.ts' - service file for pure functions of viewing user programs
- new: 'src/flows/user-program-management/helpers/utils.ts' - utility helper file for user program management specific methods
- new: './src/flows/user-program-management/remove.ts' - service file for removing user program pure function
### Fixed

### Changed
8 changes: 8 additions & 0 deletions src/flows/user-program-management/helpers/questions.ts
Original file line number Diff line number Diff line change
@@ -23,6 +23,14 @@ export const addQuestions = [
},
]

export const getProgramPointerInput = [
{
type: "input",
name: "programPointer",
message: "Enter the program pointer you wish to remove:",
},
]

export const verifyingKeyQuestion = (entropy: Entropy) => [{
type: 'list',
name: 'verifyingKey',
17 changes: 4 additions & 13 deletions src/flows/user-program-management/index.ts
Original file line number Diff line number Diff line change
@@ -5,8 +5,9 @@ import { getSelectedAccount, print } from "../../common/utils"
import { EntropyLogger } from "src/common/logger";
import { addProgram } from "./add";
import { viewPrograms } from "./view";
import { addQuestions, verifyingKeyQuestion } from "./helpers/questions";
import { addQuestions, getProgramPointerInput, verifyingKeyQuestion } from "./helpers/questions";
import { displayPrograms } from "./helpers/utils";
import { removeProgram } from "./remove";

let verifyingKey: string;

@@ -98,21 +99,11 @@ export async function userPrograms ({ accounts, selectedAccount: selectedAccount
if (!verifyingKey) {
({ verifyingKey } = await inquirer.prompt(verifyingKeyQuestion(entropy)))
}
const { programPointerToRemove } = await inquirer.prompt([
{
type: "input",
name: "programPointerToRemove",
message: "Enter the program pointer you wish to remove:",
},
])
await entropy.programs.remove(
programPointerToRemove,
verifyingKey
)
const { programPointer: programPointerToRemove } = await inquirer.prompt(getProgramPointerInput)
await removeProgram(entropy, { programPointer: programPointerToRemove, verifyingKey })
print("Program removed successfully.")
} catch (error) {
console.error(error.message)

}
break
}
9 changes: 9 additions & 0 deletions src/flows/user-program-management/remove.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import Entropy from "@entropyxyz/sdk";
import { RemoveProgramParams } from "./types";

export async function removeProgram (entropy: Entropy, { programPointer, verifyingKey }: RemoveProgramParams): Promise<any> {
return entropy.programs.remove(
programPointer,
verifyingKey
)
}
6 changes: 6 additions & 0 deletions src/flows/user-program-management/types.ts
Original file line number Diff line number Diff line change
@@ -3,6 +3,12 @@ export interface AddProgramParams {
programConfig: string
verifyingKey?: string
}

export interface ViewProgramsParams {
verifyingKey: string
}

export interface RemoveProgramParams {
programPointer: string
verifyingKey: string
}
51 changes: 32 additions & 19 deletions tests/user-program-management.test.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import test from 'tape'
import { readFileSync } from 'node:fs'
import { charlieSeed, charlieStashSeed, setupTest } from './testing-utils'
import { promiseRunner, charlieStashSeed, setupTest } from './testing-utils'
import { AddProgramParams } from 'src/flows/user-program-management/types'
import { addProgram } from 'src/flows/user-program-management/add'
import { viewPrograms } from 'src/flows/user-program-management/view'
import { removeProgram } from 'src/flows/user-program-management/remove'

const networkType = 'two-nodes'

test('User Program Management::Add Programs', async t => {
test('User Program Management', async t => {
const { run, entropy } = await setupTest(t, { seed: charlieStashSeed, networkType })
await run('charlie stash register', entropy.register())
const noopProgram: any = readFileSync(
@@ -23,21 +24,33 @@ test('User Program Management::Add Programs', async t => {
programConfig: '',
}

const programsBeforeAdd = await run('get programs initial', entropy.programs.get(entropy.programs.verifyingKey))
t.equal(programsBeforeAdd.length, 1, 'charlie has 1 program')
await run('adding program', addProgram(entropy, noopProgramInstance))
const programsAfterAdd = await run('get programs after add', entropy.programs.get(entropy.programs.verifyingKey))
t.equal(programsAfterAdd.length, 2, 'charlie has 2 programs')

t.end()
})

test('User Program Management::View Programs', async t => {
const { run, entropy } = await setupTest(t, { seed: charlieSeed, networkType })

await run('charlie register', entropy.register())
const programs = await run('get charlie programs', viewPrograms(entropy, { verifyingKey: entropy.programs.verifyingKey }))

t.equal(programs.length, 1, 'charlie has 1 program')
t.end()
t.test('Add Program', async ap => {
const runAp = promiseRunner(ap)

const programsBeforeAdd = await runAp('get programs initial', entropy.programs.get(entropy.programs.verifyingKey))
ap.equal(programsBeforeAdd.length, 1, 'charlie has 1 program')
await runAp('adding program', addProgram(entropy, noopProgramInstance))
const programsAfterAdd = await runAp('get programs after add', entropy.programs.get(entropy.programs.verifyingKey))
ap.equal(programsAfterAdd.length, 2, 'charlie has 2 programs')
ap.end()
})

t.test('Remove Program', async rp => {
const runRp = promiseRunner(rp)
const programsBeforeRemove = await runRp('get programs initial', entropy.programs.get(entropy.programs.verifyingKey))

rp.equal(programsBeforeRemove.length, 2, 'charlie has 2 programs')
await runRp('removing noop program', removeProgram(entropy, { programPointer: newPointer, verifyingKey: entropy.programs.verifyingKey }))
const programsAfterRemove = await runRp('get programs initial', entropy.programs.get(entropy.programs.verifyingKey))
rp.equal(programsAfterRemove.length, 1, 'charlie has 1 less program')
rp.end()
})

t.test('View Program', async vp => {
const runVp = promiseRunner(vp)
const programs = await runVp('get charlie programs', viewPrograms(entropy, { verifyingKey: entropy.programs.verifyingKey }))

vp.equal(programs.length, 1, 'charlie has 1 program')
vp.end()
})
})