96 lines
3.3 KiB
TypeScript
96 lines
3.3 KiB
TypeScript
![]() |
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);
|
||
|
});
|
||
|
});
|