From 9f00b573614640a6c6da8f1834aa67048723b92c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Carneiro?= Date: Fri, 11 Apr 2025 13:25:11 -0300 Subject: [PATCH 1/4] feat: use defaults for optional fields --- packages/wallet-service/src/nodeConfig.ts | 7 ++++--- packages/wallet-service/src/types.ts | 8 ++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/wallet-service/src/nodeConfig.ts b/packages/wallet-service/src/nodeConfig.ts index 189506e4..4038dfba 100644 --- a/packages/wallet-service/src/nodeConfig.ts +++ b/packages/wallet-service/src/nodeConfig.ts @@ -10,6 +10,7 @@ import { ServerlessMysql } from 'serverless-mysql'; import { getVersionData, updateVersionData } from '@src/db'; import { FullNodeVersionData, FullNodeApiVersionResponse } from '@src/types'; import fullnode from '@src/fullnode'; +import { constants } from '@hathor/wallet-lib'; const VERSION_CHECK_MAX_DIFF = 60 * 60; // 1 hour @@ -48,9 +49,9 @@ export function convertApiVersionData(data: FullNodeApiVersionResponse): FullNod rewardSpendMinBlocks: data.reward_spend_min_blocks, maxNumberInputs: data.max_number_inputs, maxNumberOutputs: data.max_number_outputs, - decimalPlaces: data.decimal_places, - nativeTokenName: data.native_token.name, - nativeTokenSymbol: data.native_token.symbol, + decimalPlaces: data.decimal_places ?? constants.DECIMAL_PLACES, + nativeTokenName: data.native_token?.name ?? constants.DEFAULT_NATIVE_TOKEN_CONFIG.name, + nativeTokenSymbol: data.native_token?.symbol ?? constants.DEFAULT_NATIVE_TOKEN_CONFIG.symbol, }; } diff --git a/packages/wallet-service/src/types.ts b/packages/wallet-service/src/types.ts index e2c8d811..90c82063 100644 --- a/packages/wallet-service/src/types.ts +++ b/packages/wallet-service/src/types.ts @@ -114,11 +114,11 @@ export interface FullNodeApiVersionResponse { reward_spend_min_blocks: number; max_number_inputs: number; max_number_outputs: number; - decimal_places: number; + decimal_places?: number; genesis_block_hash: string, - genesis_tx1_hash: string, - genesis_tx2_hash: string, - native_token: { name: string, symbol: string}; + genesis_tx1_hash?: string, + genesis_tx2_hash?: string, + native_token?: { name: string, symbol: string}; } export interface TxProposal { From fead5664c27fd44e60bc1ebcabdfb9ee95db341b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Carneiro?= Date: Mon, 14 Apr 2025 14:09:49 -0300 Subject: [PATCH 2/4] chore: add test to improve coverage --- packages/wallet-service/src/types.ts | 2 +- .../wallet-service/tests/nodeConfig.test.ts | 94 +++++++++++++++++++ 2 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 packages/wallet-service/tests/nodeConfig.test.ts diff --git a/packages/wallet-service/src/types.ts b/packages/wallet-service/src/types.ts index 90c82063..edd97b56 100644 --- a/packages/wallet-service/src/types.ts +++ b/packages/wallet-service/src/types.ts @@ -115,7 +115,7 @@ export interface FullNodeApiVersionResponse { max_number_inputs: number; max_number_outputs: number; decimal_places?: number; - genesis_block_hash: string, + genesis_block_hash?: string, genesis_tx1_hash?: string, genesis_tx2_hash?: string, native_token?: { name: string, symbol: string}; diff --git a/packages/wallet-service/tests/nodeConfig.test.ts b/packages/wallet-service/tests/nodeConfig.test.ts new file mode 100644 index 00000000..de2cb014 --- /dev/null +++ b/packages/wallet-service/tests/nodeConfig.test.ts @@ -0,0 +1,94 @@ +import { + closeDbConnection, + getDbConnection, + getUnixTimestamp, +} from '@src/utils'; +import { addToVersionDataTable, cleanDatabase } from '@tests/utils'; +import { FullNodeApiVersionResponse } from '@src/types'; +import { convertApiVersionData, getRawFullnodeData } from '@src/nodeConfig'; + +const mysql = getDbConnection(); + +const VERSION_DATA: FullNodeApiVersionResponse = { + version: "0.63.1", + network: "mainnet", + min_weight: 14, + min_tx_weight: 14, + min_tx_weight_coefficient: 1.6, + min_tx_weight_k: 100, + token_deposit_percentage: 0.01, + reward_spend_min_blocks: 300, + max_number_inputs: 255, + max_number_outputs: 255, + decimal_places: 2, + genesis_block_hash: "000006cb93385b8b87a545a1cbb6197e6caff600c12cc12fc54250d39c8088fc", + genesis_tx1_hash: "0002d4d2a15def7604688e1878ab681142a7b155cbe52a6b4e031250ae96db0a", + genesis_tx2_hash: "0002ad8d1519daaddc8e1a37b14aac0b045129c01832281fb1c02d873c7abbf9", + native_token: { + name: "Hathor-new", + symbol: "nHTR" + } +}; + +const OLD_VERSION_DATA: FullNodeApiVersionResponse = { + version: "0.63.1", + network: "mainnet", + min_weight: 14, + min_tx_weight: 14, + min_tx_weight_coefficient: 1.6, + min_tx_weight_k: 100, + token_deposit_percentage: 0.01, + reward_spend_min_blocks: 300, + max_number_inputs: 255, + max_number_outputs: 255, +}; + +beforeEach(async () => { + jest.resetModules(); + await cleanDatabase(mysql); +}); + +afterAll(async () => { + await closeDbConnection(mysql); +}); + +test('getRawFullnodeData', async () => { + const now = getUnixTimestamp(); + await addToVersionDataTable(mysql, now, VERSION_DATA); + + await expect(() => getRawFullnodeData(mysql)).resolves.toStrictEqual(VERSION_DATA); +}); + +test('convertApiVersionData', async () => { + expect(convertApiVersionData(OLD_VERSION_DATA)).toStrictEqual({ + version: OLD_VERSION_DATA.version, + network: OLD_VERSION_DATA.network, + minWeight: OLD_VERSION_DATA.min_weight, + minTxWeight: OLD_VERSION_DATA.min_tx_weight, + minTxWeightCoefficient: OLD_VERSION_DATA.min_tx_weight_coefficient, + minTxWeightK: OLD_VERSION_DATA.min_tx_weight_k, + tokenDepositPercentage: OLD_VERSION_DATA.token_deposit_percentage, + rewardSpendMinBlocks: OLD_VERSION_DATA.reward_spend_min_blocks, + maxNumberInputs: OLD_VERSION_DATA.max_number_inputs, + maxNumberOutputs: OLD_VERSION_DATA.max_number_outputs, + decimalPlaces: 2, + nativeTokenName: "Hathor", + nativeTokenSymbol: "HTR", + }); + + expect(convertApiVersionData(VERSION_DATA)).toStrictEqual({ + version: VERSION_DATA.version, + network: VERSION_DATA.network, + minWeight: VERSION_DATA.min_weight, + minTxWeight: VERSION_DATA.min_tx_weight, + minTxWeightCoefficient: VERSION_DATA.min_tx_weight_coefficient, + minTxWeightK: VERSION_DATA.min_tx_weight_k, + tokenDepositPercentage: VERSION_DATA.token_deposit_percentage, + rewardSpendMinBlocks: VERSION_DATA.reward_spend_min_blocks, + maxNumberInputs: VERSION_DATA.max_number_inputs, + maxNumberOutputs: VERSION_DATA.max_number_outputs, + decimalPlaces: VERSION_DATA.decimal_places, + nativeTokenName: VERSION_DATA.native_token.name, + nativeTokenSymbol: VERSION_DATA.native_token.symbol, + }); +}); From f8acee0c8586613c7e851213f3765fae7fcf5613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Carneiro?= Date: Mon, 14 Apr 2025 14:16:10 -0300 Subject: [PATCH 3/4] tests: use promise with resolves --- packages/wallet-service/tests/nodeConfig.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/wallet-service/tests/nodeConfig.test.ts b/packages/wallet-service/tests/nodeConfig.test.ts index de2cb014..bbe8ff97 100644 --- a/packages/wallet-service/tests/nodeConfig.test.ts +++ b/packages/wallet-service/tests/nodeConfig.test.ts @@ -56,7 +56,7 @@ test('getRawFullnodeData', async () => { const now = getUnixTimestamp(); await addToVersionDataTable(mysql, now, VERSION_DATA); - await expect(() => getRawFullnodeData(mysql)).resolves.toStrictEqual(VERSION_DATA); + await expect(getRawFullnodeData(mysql)).resolves.toStrictEqual(VERSION_DATA); }); test('convertApiVersionData', async () => { From a5e9481646f6f0bb424e496e8905df4246486a41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Carneiro?= Date: Mon, 14 Apr 2025 15:21:25 -0300 Subject: [PATCH 4/4] tests: use single quotes --- .../wallet-service/tests/nodeConfig.test.ts | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/wallet-service/tests/nodeConfig.test.ts b/packages/wallet-service/tests/nodeConfig.test.ts index bbe8ff97..92352adb 100644 --- a/packages/wallet-service/tests/nodeConfig.test.ts +++ b/packages/wallet-service/tests/nodeConfig.test.ts @@ -10,8 +10,8 @@ import { convertApiVersionData, getRawFullnodeData } from '@src/nodeConfig'; const mysql = getDbConnection(); const VERSION_DATA: FullNodeApiVersionResponse = { - version: "0.63.1", - network: "mainnet", + version: '0.63.1', + network: 'mainnet', min_weight: 14, min_tx_weight: 14, min_tx_weight_coefficient: 1.6, @@ -21,18 +21,18 @@ const VERSION_DATA: FullNodeApiVersionResponse = { max_number_inputs: 255, max_number_outputs: 255, decimal_places: 2, - genesis_block_hash: "000006cb93385b8b87a545a1cbb6197e6caff600c12cc12fc54250d39c8088fc", - genesis_tx1_hash: "0002d4d2a15def7604688e1878ab681142a7b155cbe52a6b4e031250ae96db0a", - genesis_tx2_hash: "0002ad8d1519daaddc8e1a37b14aac0b045129c01832281fb1c02d873c7abbf9", + genesis_block_hash: '000006cb93385b8b87a545a1cbb6197e6caff600c12cc12fc54250d39c8088fc', + genesis_tx1_hash: '0002d4d2a15def7604688e1878ab681142a7b155cbe52a6b4e031250ae96db0a', + genesis_tx2_hash: '0002ad8d1519daaddc8e1a37b14aac0b045129c01832281fb1c02d873c7abbf9', native_token: { - name: "Hathor-new", - symbol: "nHTR" + name: 'Hathor-new', + symbol: 'nHTR' } }; const OLD_VERSION_DATA: FullNodeApiVersionResponse = { - version: "0.63.1", - network: "mainnet", + version: '0.63.1', + network: 'mainnet', min_weight: 14, min_tx_weight: 14, min_tx_weight_coefficient: 1.6, @@ -72,8 +72,8 @@ test('convertApiVersionData', async () => { maxNumberInputs: OLD_VERSION_DATA.max_number_inputs, maxNumberOutputs: OLD_VERSION_DATA.max_number_outputs, decimalPlaces: 2, - nativeTokenName: "Hathor", - nativeTokenSymbol: "HTR", + nativeTokenName: 'Hathor', + nativeTokenSymbol: 'HTR', }); expect(convertApiVersionData(VERSION_DATA)).toStrictEqual({