tachybase_todo/packages/database/src/__tests__/sync.test.ts

166 lines
3.2 KiB
TypeScript
Raw Normal View History

import Database from '..';
2020-10-24 15:34:43 +08:00
import { getDatabase } from './';
let db: Database;
beforeEach(async () => {
db = getDatabase();
});
afterEach(async () => {
await db.close();
});
2020-10-24 15:34:43 +08:00
describe('db sync', () => {
describe('table.sync', () => {
it('shound be ok1', async () => {
const table = db.table({
name: 'foos',
});
await table.sync();
});
it('sync#belongsTo', async () => {
db.table({
name: 'foos',
tableName: 'foos1',
fields: [
{
type: 'belongsTo',
name: 'bar',
}
],
});
db.table({
name: 'bars',
tableName: 'bars1',
fields: [
{
type: 'hasMany',
name: 'foos',
}
],
});
await db.sequelize.drop();
await db.getTable('foos').sync({
force: false,
alter: {
drop: false,
}
});
});
it('sync#hasMany', async () => {
db.table({
name: 'foos',
tableName: 'foos2',
fields: [
{
type: 'belongsTo',
name: 'bar',
}
],
});
db.table({
name: 'bars',
tableName: 'bars2',
fields: [
{
type: 'hasMany',
name: 'foos',
}
],
});
await db.sequelize.drop();
await db.getTable('bars').sync({
force: false,
alter: {
drop: false,
}
});
});
it('sync#belongsToMany', async () => {
db.table({
name: 'foos',
fields: [
{
type: 'belongsToMany',
name: 'bars',
},
{
type: 'string',
name: 'name',
},
],
});
db.table({
name: 'bars',
fields: [
{
type: 'belongsToMany',
name: 'foos',
},
{
type: 'string',
name: 'name',
}
],
});
await db.sequelize.drop();
await db.getTable('foos').sync({
force: false,
alter: {
drop: false,
}
});
await db.getModel('bars').create({
name: 'aa',
});
expect(await db.getModel('bars').count()).toBe(1);
db.getTable('bars').addField({
type: 'string',
name: 'col1',
});
await db.getTable('bars').sync({
force: false,
alter: {
drop: false,
}
});
await db.getModel('bars').create({
name: 'bb',
col1: 'val1'
});
expect(await db.getModel('bars').count()).toBe(2);
});
it('shound be ok2', async () => {
const table = db.table({
name: 'goos',
});
await table.sync({
force: true,
});
table.addField({
type: 'string',
name: 'col1',
});
await table.sync({
force: false,
alter: {
drop: false,
}
});
table.addField({
type: 'string',
name: 'col2',
});
await table.sync({
force: false,
alter: {
drop: false,
}
});
});
});
});