Skip to content

Commit

Permalink
fix: Refactor validation to a new funtion.
Browse files Browse the repository at this point in the history
  • Loading branch information
yanguoyu committed Jul 14, 2022
1 parent ec9bfc1 commit bf56388
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 15 deletions.
32 changes: 18 additions & 14 deletions packages/neuron-wallet/src/controllers/multisig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,20 @@ interface MultisigConfigOutput {
}>
}

const validImportConfig = (configOutput: MultisigConfigOutput) => {
return configOutput.multisig_configs &&
Object.values(configOutput.multisig_configs).length &&
Object.values(configOutput.multisig_configs).every(config => config.require_first_n !== undefined
&& config.threshold !== undefined
&& config.sighash_addresses !== undefined
&& !Number.isNaN(+config.require_first_n)
&& !Number.isNaN(+config.threshold)
&& config.sighash_addresses?.length
&& config.sighash_addresses?.length >= +config.require_first_n
&& config.sighash_addresses?.length >= +config.threshold
)
}

export default class MultisigController {
// eslint-disable-next-line prettier/prettier
#multisigService: MultisigService;
Expand Down Expand Up @@ -115,24 +129,14 @@ export default class MultisigController {
}
try {
const json = fs.readFileSync(filePaths[0], 'utf-8')
let configOutput: MultisigConfigOutput = JSON.parse(json)
if (
!configOutput.multisig_configs ||
!Object.values(configOutput.multisig_configs).length ||
Object.values(configOutput.multisig_configs).some(config => config.require_first_n === undefined
|| config.threshold === undefined
|| config.sighash_addresses === undefined
|| !config.sighash_addresses?.length
|| config.sighash_addresses?.length < +config.require_first_n
|| config.sighash_addresses?.length < +config.threshold
)
) {
const configOutput: MultisigConfigOutput = JSON.parse(json)
if (!validImportConfig(configOutput)) {
dialog.showErrorBox(t('common.error'), t('messages.invalid-json'))
return
}
const saveConfigs = Object.values(configOutput.multisig_configs).map(config => ({
r: config.require_first_n,
m: config.threshold,
r: +config.require_first_n,
m: +config.threshold,
n: config.sighash_addresses.length,
blake160s: config.sighash_addresses.map(v => addressToScript(v).args),
walletId,
Expand Down
41 changes: 40 additions & 1 deletion packages/neuron-wallet/tests/controllers/multisig.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ describe('test for multisig controller', () => {
await multisigController.importConfig('1234')
expect(showErrorBoxMock).toHaveBeenCalledWith()
}),
it('import data is error', async () => {
it('import data is error no require_first_n', async () => {
readFileSyncMock.mockReturnValue(JSON.stringify({
multisig_configs: {
[multisigArgs]: {
Expand All @@ -177,6 +177,45 @@ describe('test for multisig controller', () => {
expect(res).toBeUndefined()
expect(showErrorBoxMock).toHaveBeenCalledWith()
})
it('import data is error no threshold', async () => {
readFileSyncMock.mockReturnValue(JSON.stringify({
multisig_configs: {
[multisigArgs]: {
...multisigConfig.testnet.params.multisig_configs,
threshold: undefined
}
}
}))
const res = await multisigController.importConfig('1234')
expect(res).toBeUndefined()
expect(showErrorBoxMock).toHaveBeenCalledWith()
})
it('import data is error require_first_n is not number', async () => {
readFileSyncMock.mockReturnValue(JSON.stringify({
multisig_configs: {
[multisigArgs]: {
...multisigConfig.testnet.params.multisig_configs,
require_first_n: 'dd'
}
}
}))
const res = await multisigController.importConfig('1234')
expect(res).toBeUndefined()
expect(showErrorBoxMock).toHaveBeenCalledWith()
})
it('import data is error threshold is not number', async () => {
readFileSyncMock.mockReturnValue(JSON.stringify({
multisig_configs: {
[multisigArgs]: {
...multisigConfig.testnet.params.multisig_configs,
threshold: 'undefined'
}
}
}))
const res = await multisigController.importConfig('1234')
expect(res).toBeUndefined()
expect(showErrorBoxMock).toHaveBeenCalledWith()
})
it('import data is invalidation r > n', async () => {
readFileSyncMock.mockReturnValue(JSON.stringify({
multisig_configs: {
Expand Down

0 comments on commit bf56388

Please sign in to comment.