saleor-apps-redis_apl/apps/invoices/src/modules/app-configuration/schema-v2/config-v1-to-v2-migration.service.test.ts

96 lines
3.3 KiB
TypeScript
Raw Normal View History

2023-09-07 14:59:20 +00:00
import { beforeEach, describe, expect, it, vi } from "vitest";
import { ConfigV1ToV2MigrationService } from "./config-v1-to-v2-migration.service";
import { SimpleGraphqlClient } from "../metadata-manager";
import { getMockAddress } from "../../../fixtures/mock-address";
import { AppConfigV2 } from "./app-config";
describe("config-v1-to-v2-migration.service", () => {
const mockClient: SimpleGraphqlClient = {
mutation: vi.fn(),
query: vi.fn(),
};
let service: ConfigV1ToV2MigrationService;
beforeEach(() => {
vi.resetAllMocks();
service = new ConfigV1ToV2MigrationService(mockClient, "https://example.com/graphql/");
vi.spyOn(service.configMetadataManager, "set").mockImplementationOnce(async () =>
Promise.resolve(),
);
});
it("Returns a pure V2 config if V1 config is not present", async () => {
vi.spyOn(service.metadataV1AppConfigurator, "getConfig").mockImplementationOnce(async () =>
Promise.resolve(undefined),
);
const migrationResult = await service.migrate();
expect(migrationResult.getChannelsOverrides()).toEqual({});
expect(service.configMetadataManager.set).toHaveBeenCalledWith(migrationResult.serialize());
});
it("Returns a migrated V2 config from V1 if V1 config is present", async () => {
vi.spyOn(service.metadataV1AppConfigurator, "getConfig").mockImplementationOnce(async () =>
Promise.resolve({
shopConfigPerChannel: {
"default-channel": {
address: getMockAddress(),
},
},
}),
);
const migrationResult = await service.migrate();
expect(migrationResult.getChannelsOverrides()).toEqual(
expect.objectContaining({
"default-channel": expect.objectContaining(getMockAddress()),
}),
);
});
it("Runs a beforeSave callback and saves modified state in metadata - missing v1 config scenario", async () => {
vi.spyOn(service.metadataV1AppConfigurator, "getConfig").mockImplementationOnce(async () =>
Promise.resolve(undefined),
);
const beforeSaveCb = vi.fn().mockImplementationOnce((config: AppConfigV2) => {
config.upsertOverride("test", getMockAddress());
});
const migrationResult = await service.migrate(beforeSaveCb);
expect(migrationResult.getChannelsOverrides()).toEqual({
test: expect.objectContaining(getMockAddress()),
});
expect(service.configMetadataManager.set).toHaveBeenCalledWith(migrationResult.serialize());
expect(beforeSaveCb).toHaveBeenCalledWith(migrationResult);
});
it("Runs a beforeSave callback and saves modified state in metadata - present v1 config scenario", async () => {
vi.spyOn(service.metadataV1AppConfigurator, "getConfig").mockImplementationOnce(async () =>
Promise.resolve({
shopConfigPerChannel: {
"default-channel": {
address: getMockAddress(),
},
},
}),
);
const beforeSaveCb = vi.fn().mockImplementationOnce((config: AppConfigV2) => {
config.removeOverride("default-channel");
});
const migrationResult = await service.migrate(beforeSaveCb);
expect(migrationResult.getChannelsOverrides()).toEqual({});
expect(service.configMetadataManager.set).toHaveBeenCalledWith(migrationResult.serialize());
expect(beforeSaveCb).toHaveBeenCalledWith(migrationResult);
});
});