test-ic-wallet-middleware-icrc
Version:
Ic middleware wallet ICRC protocol
223 lines (222 loc) • 10.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const agent_1 = require("@dfinity/agent");
const principal_1 = require("@dfinity/principal");
const common_1 = require("@ic-wallet-middleware/common");
const mockLogger_1 = require("../../../__tests_utils/mockLogger");
const transferFromServiceHandler_1 = require("../../../handlers/serviceHandlers/transferFromServiceHandler/transferFromServiceHandler");
const assetMetaDataCacheHandler_1 = require("../../../internalHandlers/icrcCacheDataHandlers/assets/assetMetaDataCacheHandler/assetMetaDataCacheHandler");
const subAccountBalanceHandler_1 = require("../../../internalHandlers/icrcCacheDataHandlers/assets/subAccountBalanceHandler/subAccountBalanceHandler");
const ServiceAssetCacheCreditHandler_1 = require("../../../internalHandlers/icrcCacheDataHandlers/services/serviceAssetCreditCacheHandler/ServiceAssetCacheCreditHandler");
const serviceAssetDepositHandler_1 = require("../../../internalHandlers/icrcCacheDataHandlers/services/serviceAssetDepositHandler/serviceAssetDepositHandler");
const serviceAssetDetailsHandler_1 = require("../../../internalHandlers/icrcCacheDataHandlers/services/serviceAssetDetailsHandler/serviceAssetDetailsHandler");
const types_1 = require("../../../types");
describe("Unit ServiceAssetCacheCreditHandler tests", () => {
const testData = [
{
name: "transfer",
input: {
amount: "0.0002",
fromPrincipal: "pmr6h-yaaaa-aaaao-a3myq-cai",
ledgerAddress: "ryjl3-tyaaa-aaaaa-aaaba-cai",
toPrincipal: "3etep-celzb-5t4iw-swa7s-3yek6-g45iq-cuopt-6t3lp-phfdf-xh7va-gqe",
toSubId: types_1.SubAccountId.parseFromString("0x1")
},
data: {
details: {
assetDetail: {
allowanceFee: BigInt(1000),
withdrawalFee: BigInt(1000),
depositFee: BigInt(1000),
}
},
credit: {
ledgerAddress: "ryjl3-tyaaa-aaaaa-aaaba-cai",
credit: BigInt(1000000)
},
debit: {
serviceAssetDeposit: BigInt(0)
},
metadata: {
symbol: "ICP",
name: "Internet Computer",
decimals: 8,
logo: "",
fee: BigInt(10000),
}
},
result: common_1.FormResult.error([{
fieldName: "",
localizationKey: "default.error.message",
message: "Insufficient Credit"
}])
},
{
name: "error, Amount should be more that withdrawal fee",
input: {
amount: "0.0001",
fromPrincipal: "pmr6h-yaaaa-aaaao-a3myq-cai",
ledgerAddress: "ryjl3-tyaaa-aaaaa-aaaba-cai",
toPrincipal: "3etep-celzb-5t4iw-swa7s-3yek6-g45iq-cuopt-6t3lp-phfdf-xh7va-gqe",
toSubId: types_1.SubAccountId.parseFromString("0x1")
},
data: {
details: {
assetDetail: {
allowanceFee: BigInt(10000),
withdrawalFee: BigInt(10000),
depositFee: BigInt(10000),
}
},
credit: {
ledgerAddress: "ryjl3-tyaaa-aaaaa-aaaba-cai",
credit: BigInt(1000000)
},
debit: {
serviceAssetDeposit: BigInt(0)
},
metadata: {
symbol: "ICP",
name: "Internet Computer",
decimals: 8,
logo: "",
fee: BigInt(10000),
}
},
result: common_1.FormResult.error([{
fieldName: "amount",
localizationKey: "transfer.amount.less.minimum.withdrawal",
message: "Amount should be more that withdrawal fee: 10000"
}])
},
{
name: "error, Amount should be more that 0",
input: {
amount: "0",
fromPrincipal: "pmr6h-yaaaa-aaaao-a3myq-cai",
ledgerAddress: "ryjl3-tyaaa-aaaaa-aaaba-cai",
toPrincipal: "3etep-celzb-5t4iw-swa7s-3yek6-g45iq-cuopt-6t3lp-phfdf-xh7va-gqe",
toSubId: types_1.SubAccountId.parseFromString("0x1")
},
data: {
details: {
assetDetail: {
allowanceFee: BigInt(10000),
withdrawalFee: BigInt(10000),
depositFee: BigInt(10000),
}
},
credit: {
ledgerAddress: "ryjl3-tyaaa-aaaaa-aaaba-cai",
credit: BigInt(10000)
},
debit: {
serviceAssetDeposit: BigInt(10000)
},
metadata: {
symbol: "ICP",
name: "Internet Computer",
decimals: 8,
logo: "",
fee: BigInt(10000),
}
},
result: common_1.FormResult.error([{
fieldName: "amount",
localizationKey: "transfer.service.invalid.amount",
message: "Invalid amount",
}])
},
{
name: "error, Sent amount should be less than balance ",
input: {
amount: "0.0002",
fromPrincipal: "pmr6h-yaaaa-aaaao-a3myq-cai",
ledgerAddress: "ryjl3-tyaaa-aaaaa-aaaba-cai",
toPrincipal: "3etep-celzb-5t4iw-swa7s-3yek6-g45iq-cuopt-6t3lp-phfdf-xh7va-gqe",
toSubId: types_1.SubAccountId.parseFromString("0x1")
},
data: {
details: {
assetDetail: {
allowanceFee: BigInt(10000),
withdrawalFee: BigInt(10000),
depositFee: BigInt(10000),
}
},
credit: {
ledgerAddress: "ryjl3-tyaaa-aaaaa-aaaba-cai",
credit: BigInt(10000)
},
debit: {
serviceAssetDeposit: BigInt(10000)
},
metadata: {
symbol: "ICP",
name: "Internet Computer",
decimals: 8,
logo: "",
fee: BigInt(10000),
},
},
result: common_1.FormResult.error([{
fieldName: "amount",
localizationKey: "transfer.from.no.enough.balance",
message: "Sent amount should be less than balance",
}])
},
{
name: "error, Sent amount should be less than balance ",
input: {
amount: "0.0002",
fromPrincipal: "pmr6h-yaaaa-aaaao-a3myq-cai",
ledgerAddress: "ryjl3-tyaaa-aaaaa-aaaba-cai",
toPrincipal: "3etep-celzb-5t4iw-swa7s-3yek6-g45iq-cuopt-6t3lp-phfdf-xh7va-gqe",
toSubId: types_1.SubAccountId.parseFromString("0x1")
},
data: {
details: {
assetDetail: {
allowanceFee: BigInt(10000),
withdrawalFee: BigInt(10000),
depositFee: BigInt(10000),
}
},
credit: {
ledgerAddress: "ryjl3-tyaaa-aaaaa-aaaba-cai",
credit: BigInt(10000)
},
debit: {
serviceAssetDeposit: BigInt(10000)
},
metadata: undefined,
},
result: common_1.FormResult.error([{
fieldName: "fromPrincipal",
localizationKey: "asset.not.found",
message: "Asset Not Found",
}])
}
];
for (let test of testData) {
it(test.name, async () => {
jest.restoreAllMocks();
const identifierService = new common_1.IdentifierService();
const assetMetaDataHandler = new assetMetaDataCacheHandler_1.AssetMetaDataCacheHandler();
assetMetaDataHandler.handle = jest.fn().mockReturnValue(Promise.resolve(test.data.metadata));
const serviceAssetDetailsHandler = new serviceAssetDetailsHandler_1.ServiceAssetDetailsHandler();
serviceAssetDetailsHandler.process = jest.fn().mockReturnValue(Promise.resolve(test.data.details));
const serviceAssetCreditHandler = new ServiceAssetCacheCreditHandler_1.ServiceAssetCacheCreditHandler();
serviceAssetCreditHandler.process = jest.fn().mockReturnValue(Promise.resolve(test.data.credit));
const serviceAssetDepositHandler = new serviceAssetDepositHandler_1.ServiceAssetDepositHandler();
serviceAssetDepositHandler.process = jest.fn().mockReturnValue(Promise.resolve(test.data.debit));
const subAccountBalanceHandler = new subAccountBalanceHandler_1.SubAccountBalanceHandler();
identifierService.getAgent = jest.fn().mockReturnValue(new agent_1.HttpAgent());
identifierService.getPrincipal = jest.fn().mockReturnValue(principal_1.Principal.fromText("gjcgk-x4xlt-6dzvd-q3mrr-pvgj5-5bjoe-beege-n4b7d-7hna5-pa5uq-5qe"));
const logger = new mockLogger_1.MockLogger();
const transferFromServiceHandler = new transferFromServiceHandler_1.TransferFromServiceHandler(logger, assetMetaDataHandler, serviceAssetDetailsHandler, serviceAssetCreditHandler, serviceAssetDepositHandler, identifierService, subAccountBalanceHandler);
const result = await transferFromServiceHandler.handle(test.input);
expect(result).toEqual(test.result);
}, 100000);
}
});