From 8515ad43376675f242ab7390deb2ef674f95a3d5 Mon Sep 17 00:00:00 2001 From: Max Strasinsky Date: Fri, 30 Aug 2024 11:52:56 +0200 Subject: [PATCH] test: should add imported tokens to the icrcCanistersStore --- .../lib/services/imported-tokens.services.ts | 9 +++-- .../services/imported-tokens.services.spec.ts | 35 +++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/frontend/src/lib/services/imported-tokens.services.ts b/frontend/src/lib/services/imported-tokens.services.ts index 686cdce003f..bd6918d5798 100644 --- a/frontend/src/lib/services/imported-tokens.services.ts +++ b/frontend/src/lib/services/imported-tokens.services.ts @@ -44,9 +44,14 @@ export const loadImportedTokens = async ({ certified, }); - const icrcCanistersStoreData = get(icrcCanistersStore); + if (!certified && notForceCallStrategy()) { + return; + } + + // Populate icrcCanistersStore with the imported tokens. for (const { ledgerCanisterId, indexCanisterId } of importedTokens) { - if (isNullish(icrcCanistersStoreData[ledgerCanisterId.toText()])) { + // If the imported token is not already in the store, add it. + if (isNullish(get(icrcCanistersStore)[ledgerCanisterId.toText()])) { icrcCanistersStore.setCanisters({ ledgerCanisterId, indexCanisterId, diff --git a/frontend/src/tests/lib/services/imported-tokens.services.spec.ts b/frontend/src/tests/lib/services/imported-tokens.services.spec.ts index a91b35a19f3..6fbda730a71 100644 --- a/frontend/src/tests/lib/services/imported-tokens.services.spec.ts +++ b/frontend/src/tests/lib/services/imported-tokens.services.spec.ts @@ -9,12 +9,14 @@ import { loadImportedTokens, removeImportedTokens, } from "$lib/services/imported-tokens.services"; +import { icrcCanistersStore } from "$lib/stores/icrc-canisters.store"; import { importedTokensStore } from "$lib/stores/imported-tokens.store"; import * as toastsStore from "$lib/stores/toasts.store"; import type { ImportedTokenData } from "$lib/types/imported-tokens"; import { mockIdentity, resetIdentity } from "$tests/mocks/auth.store.mock"; import { principal } from "$tests/mocks/sns-projects.mock"; import { get } from "svelte/store"; +import { runResolvedPromises } from "../../utils/timers.test-utils"; describe("imported-tokens-services", () => { const importedTokenA: ImportedToken = { @@ -39,6 +41,7 @@ describe("imported-tokens-services", () => { vi.clearAllMocks(); resetIdentity(); importedTokensStore.reset(); + icrcCanistersStore.reset(); vi.spyOn(console, "error").mockReturnValue(); }); @@ -74,6 +77,38 @@ describe("imported-tokens-services", () => { }); }); + it("should add imported tokens to the icrcCanistersStore", async () => { + const spyGetImportedTokens = vi + .spyOn(importedTokensApi, "getImportedTokens") + .mockResolvedValueOnce({ + imported_tokens: [importedTokenA, importedTokenB], + }); + + expect(spyGetImportedTokens).toBeCalledTimes(0); + expect(get(icrcCanistersStore)).toEqual({}); + + expect(get(importedTokensStore)).toEqual({ + importedTokens: undefined, + certified: undefined, + }); + + await loadImportedTokens(); + // Wait for the store to update. + await runResolvedPromises(); + + expect(spyGetImportedTokens).toBeCalledTimes(2); + expect(get(icrcCanistersStore)).toEqual({ + [importedTokenDataA.ledgerCanisterId.toText()]: { + ledgerCanisterId: importedTokenDataA.ledgerCanisterId, + indexCanisterId: importedTokenDataA.indexCanisterId, + }, + [importedTokenDataB.ledgerCanisterId.toText()]: { + ledgerCanisterId: importedTokenDataB.ledgerCanisterId, + indexCanisterId: importedTokenDataB.indexCanisterId, + }, + }); + }); + it("should display toast on error", async () => { const spyToastError = vi.spyOn(toastsStore, "toastsError"); const spyGetImportedTokens = vi