@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
89 lines (72 loc) • 2.13 kB
text/typescript
import { Migration, MigrationData, VersionController } from './VersionController';
class TestMigration0 implements Migration {
version = 0;
migrate(data: MigrationData): MigrationData {
return data;
}
}
class TestMigration1 implements Migration {
version = 1;
migrate(data: MigrationData): MigrationData {
return {
state: {
...data.state,
value1: data.state.value * 2,
},
version: this.version,
};
}
}
class TestMigration2 implements Migration {
version = 2;
migrate(data: MigrationData): MigrationData {
return {
state: {
...data.state,
value2: data.state.value1 * 2,
},
version: this.version,
};
}
}
describe('VersionController', () => {
let migrations;
let versionController: VersionController<any>;
beforeEach(() => {
migrations = [TestMigration0, TestMigration1, TestMigration2];
versionController = new VersionController(migrations);
});
it('should instantiate with sorted migrations', () => {
expect(versionController['migrations'][0].version).toBe(0);
expect(versionController['migrations'][1].version).toBe(1);
expect(versionController['migrations'][2].version).toBe(2);
});
it('should throw error if data version is undefined', () => {
const data = {
state: { value: 10 },
};
expect(() => versionController.migrate(data as any)).toThrow();
});
it('should migrate data correctly through multiple versions', () => {
const data: MigrationData = {
state: { value: 10 },
version: 0,
};
const migratedData = versionController.migrate(data);
expect(migratedData).toEqual({
state: { value: 10, value1: 20, value2: 40 },
version: 3,
});
});
it('should migrate data correctly if starting from a specific version', () => {
const data: MigrationData = {
state: { value: 10, value1: 20 },
version: 1,
};
const migratedData = versionController.migrate(data);
expect(migratedData).toEqual({
state: { value: 10, value1: 20, value2: 40 },
version: 3,
});
});
});