import { AntSqlModel } from '../../model/AntSqlModel'; import { AutoGeneratedStrategyMode } from '../../model/AutoGenerationStrategyMode'; import { IAntSQLColumn } from '../../model/IAntSQLColumn'; import { ITest } from '../ITest'; const MAX_SAFE_TIMEOUT = Math.pow(2, 31) - 1; export class AntSqlModelTest implements ITest { /** * Declare name for the test */ protected _declareName: string; public constructor() { this._declareName = AntSqlModelTest.name; } public performTests(): void { describe(this._declareName, () => { this._itMustBeInitializable(); this._itMustGetInitialValues(); this._itMustGetAnAutogeneratedColumn(); this._itMustNotAllowMultipleAutogeneratedColumns(); this._itMustNotGetAnAutogeneratedColumn(); }); } private _itMustBeInitializable(): void { const itsName = 'mustBeInitializable'; it(itsName, async (done) => { expect(() => { // tslint:disable-next-line:no-unused-expression new AntSqlModel( 'id', { prefix: 'somePrefix', suffix: 'someSuffix'}, [{ entityAlias: 'id', sqlName: 'id', }], 'ModelSqlTableName', ); }).not.toThrowError(); done(); }, MAX_SAFE_TIMEOUT); } private _itMustGetInitialValues(): void { const itsName = 'mustGetInitialValues'; it(itsName, async (done) => { const tableName = 'ModelSqlTableName'; const model = new AntSqlModel( 'id', { prefix: 'somePrefix', suffix: 'someSuffix'}, [{ entityAlias: 'id', sqlName: 'id', }], tableName, ); expect(model.tableName).toBe(tableName); done(); }, MAX_SAFE_TIMEOUT); } private _itMustGetAnAutogeneratedColumn(): void { const itsName = 'mustGetAnAutogeneratedColumn'; it(itsName, async (done) => { const tableName = 'ModelSqlTableName'; const column: IAntSQLColumn = { autoGenerationStrategy: AutoGeneratedStrategyMode.AutoIncrement, entityAlias: 'id', sqlName: 'id', }; const model = new AntSqlModel( 'id', { prefix: 'somePrefix', suffix: 'someSuffix'}, [column], tableName, ); expect(model.getAutoGeneratedColumn()).toEqual(column); done(); }, MAX_SAFE_TIMEOUT); } private _itMustNotAllowMultipleAutogeneratedColumns(): void { const itsName = 'mustNotAllowMultipleAutogeneratedColumns'; it(itsName, async (done) => { const tableName = 'ModelSqlTableName'; const column1: IAntSQLColumn = { autoGenerationStrategy: AutoGeneratedStrategyMode.AutoIncrement, entityAlias: 'id', sqlName: 'id', }; const column2: IAntSQLColumn = { autoGenerationStrategy: AutoGeneratedStrategyMode.AutoIncrement, entityAlias: 'name', sqlName: 'name', }; expect(() => new AntSqlModel( 'id', { prefix: 'somePrefix', suffix: 'someSuffix'}, [column1, column2], tableName, )).toThrowError(); done(); }, MAX_SAFE_TIMEOUT); } private _itMustNotGetAnAutogeneratedColumn(): void { const itsName = 'mustNotGetAnAutogeneratedColumn'; it(itsName, async (done) => { const tableName = 'ModelSqlTableName'; const model = new AntSqlModel( 'id', { prefix: 'somePrefix', suffix: 'someSuffix'}, [{ entityAlias: 'id', sqlName: 'id', }], tableName, ); expect(model.getAutoGeneratedColumn()).toBeNull(); done(); }, MAX_SAFE_TIMEOUT); } }