From 48b6a40ef7b40fccd21bada043b3245d944871a9 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Thu, 23 Oct 2025 12:56:02 +0400 Subject: [PATCH] Add DataSource tests --- .../specs/data_sources/model/DataSource.ts | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 packages/core/test/specs/data_sources/model/DataSource.ts diff --git a/packages/core/test/specs/data_sources/model/DataSource.ts b/packages/core/test/specs/data_sources/model/DataSource.ts new file mode 100644 index 000000000..19bb07475 --- /dev/null +++ b/packages/core/test/specs/data_sources/model/DataSource.ts @@ -0,0 +1,84 @@ +import { DataSourceManager } from '../../../../src'; +import DataSource from '../../../../src/data_sources/model/DataSource'; +import { + DataFieldPrimitiveType, + DataFieldSchemaNumber, + DataFieldSchemaString, + DataRecordProps, +} from '../../../../src/data_sources/types'; +import Editor from '../../../../src/editor/model/Editor'; +import { setupTestEditor } from '../../../common'; + +interface TestRecord extends DataRecordProps { + name?: string; + age?: number; +} + +describe('DataSource', () => { + let em: Editor; + let dsm: DataSourceManager; + let ds: DataSource; + + const addTestDataSource = (records?: TestRecord[]) => { + return dsm.add({ id: 'test', records: records || [{ id: 'user1', age: 30 }] }); + }; + + beforeEach(() => { + ({ em, dsm } = setupTestEditor()); + }); + + afterEach(() => { + em.destroy(); + }); + + describe('Schema', () => { + const schemaName: DataFieldSchemaString = { + type: DataFieldPrimitiveType.string, + label: 'Name', + }; + const schemaAge: DataFieldSchemaNumber = { + type: DataFieldPrimitiveType.number, + label: 'Age', + default: 18, + }; + + beforeEach(() => { + ds = addTestDataSource(); + }); + + test('Initialize with empty schema', () => { + expect(ds.schema).toEqual({}); + }); + + test('Add and update schema', () => { + const schemaNameDef: typeof ds.schema = { name: schemaName }; + const schemaAgeDef: typeof ds.schema = { age: schemaAge }; + ds.upSchema(schemaNameDef); + ds.upSchema(schemaAgeDef); + expect(ds.schema).toEqual({ ...schemaNameDef, ...schemaAgeDef }); + }); + + test('Should update existing field schema', () => { + ds.upSchema({ name: schemaName }); + + const updatedSchema: typeof ds.schema = { + name: { + ...schemaName, + description: 'User name field', + }, + }; + ds.upSchema(updatedSchema); + expect(ds.schema).toEqual(updatedSchema); + }); + + test('Should get field schema', () => { + ds.upSchema({ + name: schemaName, + age: schemaAge, + }); + expect(ds.getSchemaField('name')).toEqual(schemaName); + expect(ds.getSchemaField('age')).toEqual(schemaAge); + expect(ds.getSchemaField('nonExistentField')).toBeUndefined(); + }); + }); +});