{"version":3,"file":"createMockAmplifyContext.mjs","sources":["../../../src/testing/createMockAmplifyContext.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { AMPLIFY_CONTEXT_BRAND } from '../context/contextBrand';\nimport { createAmplifyContextToken } from '../context/contextToken';\n/**\n * Creates a mock {@link AmplifyContext} for unit tests.\n *\n * The returned context is branded via {@link AMPLIFY_CONTEXT_BRAND} (so it\n * passes `isAmplifyContext()` / `resolveCtxArgs()` checks) but — unlike\n * `createAmplifyContext()` — it is deliberately **not** frozen, because tests\n * mutate the mocks between cases.\n *\n * Note: `resourcesConfig` is exposed through a getter only (read-only) —\n * unlike the per-package mocks this helper replaces, it cannot be reassigned.\n * Tests that need to change config per test should pass the\n * {@link CreateMockAmplifyContextOptions.getConfig} option (or create a new\n * context) instead of assigning `ctx.resourcesConfig`.\n *\n * @param resourcesConfig - A (deep-partial) resource config, or the options\n *   object (mirrors the per-package copies this helper consolidates).\n * @param options - Optional overrides; see {@link CreateMockAmplifyContextOptions}.\n */\nexport function createMockAmplifyContext(resourcesConfig, options) {\n    // Determine whether the first argument is the options form.\n    const configIsOptions = isCreateMockAmplifyContextOptions(resourcesConfig);\n    const resolvedOptions = (configIsOptions\n        ? resourcesConfig\n        : options) ?? {};\n    const staticConfig = configIsOptions\n        ? undefined\n        : resourcesConfig;\n    const ctx = {\n        // Live getter so `getConfig`-driven per-test config changes propagate.\n        get resourcesConfig() {\n            return resolvedOptions.getConfig\n                ? resolvedOptions.getConfig()\n                : (staticConfig ?? {});\n        },\n        libraryOptions: resolvedOptions.libraryOptions ?? {},\n        // Unique, frozen per-context identity handle, matching the real\n        // producers (see AmplifyContextToken) — also satisfies\n        // @aws-amplify/data-schema's structural ContextSpec duck-check in tests.\n        token: createAmplifyContextToken(),\n        fetchAuthSession: resolvedOptions.fetchAuthSession ?? jest.fn().mockResolvedValue({}),\n        clearCredentials: resolvedOptions.clearCredentials ??\n            jest.fn().mockResolvedValue(undefined),\n        getTokens: resolvedOptions.getTokens ?? jest.fn().mockResolvedValue(undefined),\n    };\n    // Brand the context (non-enumerable) for runtime identification by\n    // isAmplifyContext(). Deliberately NOT frozen — see the function docs.\n    Object.defineProperty(ctx, AMPLIFY_CONTEXT_BRAND, {\n        value: true,\n        enumerable: false,\n    });\n    return ctx;\n}\n/**\n * Convenience: primes the given mock context's session/token mocks with the\n * provided access token, so signed-request tests need a single call instead\n * of two `mockResolvedValue` invocations.\n *\n * @param ctx - A context created by {@link createMockAmplifyContext}.\n * @param accessToken - Raw token string (wrapped in a minimal {@link JWT}\n *   with an empty payload) or an already-constructed {@link JWT}.\n * @returns The same context, for chaining.\n */\nexport function withTokens(ctx, accessToken) {\n    const jwt = typeof accessToken === 'string'\n        ? { payload: {}, toString: () => accessToken }\n        : accessToken;\n    const tokens = { accessToken: jwt };\n    ctx.getTokens.mockResolvedValue(tokens);\n    ctx.fetchAuthSession.mockResolvedValue({ tokens });\n    return ctx;\n}\nfunction isCreateMockAmplifyContextOptions(value) {\n    return (value != null &&\n        ('getConfig' in value ||\n            'libraryOptions' in value ||\n            'fetchAuthSession' in value ||\n            'clearCredentials' in value ||\n            'getTokens' in value));\n}\n"],"names":[],"mappings":";;;AAAA;AACA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,wBAAwB,CAAC,eAAe,EAAE,OAAO,EAAE;AACnE;AACA,IAAI,MAAM,eAAe,GAAG,iCAAiC,CAAC,eAAe,CAAC;AAC9E,IAAI,MAAM,eAAe,GAAG,CAAC;AAC7B,UAAU;AACV,UAAU,OAAO,KAAK,EAAE;AACxB,IAAI,MAAM,YAAY,GAAG;AACzB,UAAU;AACV,UAAU,eAAe;AACzB,IAAI,MAAM,GAAG,GAAG;AAChB;AACA,QAAQ,IAAI,eAAe,GAAG;AAC9B,YAAY,OAAO,eAAe,CAAC;AACnC,kBAAkB,eAAe,CAAC,SAAS;AAC3C,mBAAmB,YAAY,IAAI,EAAE,CAAC;AACtC,QAAQ,CAAC;AACT,QAAQ,cAAc,EAAE,eAAe,CAAC,cAAc,IAAI,EAAE;AAC5D;AACA;AACA;AACA,QAAQ,KAAK,EAAE,yBAAyB,EAAE;AAC1C,QAAQ,gBAAgB,EAAE,eAAe,CAAC,gBAAgB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;AAC7F,QAAQ,gBAAgB,EAAE,eAAe,CAAC,gBAAgB;AAC1D,YAAY,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;AAClD,QAAQ,SAAS,EAAE,eAAe,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;AACtF,KAAK;AACL;AACA;AACA,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,qBAAqB,EAAE;AACtD,QAAQ,KAAK,EAAE,IAAI;AACnB,QAAQ,UAAU,EAAE,KAAK;AACzB,KAAK,CAAC;AACN,IAAI,OAAO,GAAG;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,UAAU,CAAC,GAAG,EAAE,WAAW,EAAE;AAC7C,IAAI,MAAM,GAAG,GAAG,OAAO,WAAW,KAAK;AACvC,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,WAAW;AACpD,UAAU,WAAW;AACrB,IAAI,MAAM,MAAM,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE;AACvC,IAAI,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAC3C,IAAI,GAAG,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;AACtD,IAAI,OAAO,GAAG;AACd;AACA,SAAS,iCAAiC,CAAC,KAAK,EAAE;AAClD,IAAI,QAAQ,KAAK,IAAI,IAAI;AACzB,SAAS,WAAW,IAAI,KAAK;AAC7B,YAAY,gBAAgB,IAAI,KAAK;AACrC,YAAY,kBAAkB,IAAI,KAAK;AACvC,YAAY,kBAAkB,IAAI,KAAK;AACvC,YAAY,WAAW,IAAI,KAAK,CAAC;AACjC;;;;"}