mirror of
https://github.com/withastro/astro.git
synced 2024-12-23 21:53:55 -05:00
f76dcb769f
* export DB types * refactor: move schemas to separate file * chore: changeset * chore: add typesVersions --------- Co-authored-by: bholmesdev <hey@bholmes.dev>
98 lines
2.4 KiB
JavaScript
98 lines
2.4 KiB
JavaScript
import { expect } from 'chai';
|
|
import { describe, it } from 'mocha';
|
|
import { getCollectionChangeQueries } from '../../dist/core/cli/migration-queries.js';
|
|
import { tableSchema } from '../../dist/core/schemas.js';
|
|
import { column } from '../../dist/runtime/config.js';
|
|
|
|
const userInitial = tableSchema.parse({
|
|
columns: {
|
|
name: column.text(),
|
|
age: column.number(),
|
|
email: column.text({ unique: true }),
|
|
mi: column.text({ optional: true }),
|
|
},
|
|
indexes: {},
|
|
writable: false,
|
|
});
|
|
|
|
describe('index queries', () => {
|
|
it('adds indexes', async () => {
|
|
/** @type {import('../../dist/types.js').DBTable} */
|
|
const userFinal = {
|
|
...userInitial,
|
|
indexes: {
|
|
nameIdx: { on: ['name'], unique: false },
|
|
emailIdx: { on: ['email'], unique: true },
|
|
},
|
|
};
|
|
|
|
const { queries } = await getCollectionChangeQueries({
|
|
collectionName: 'user',
|
|
oldCollection: userInitial,
|
|
newCollection: userFinal,
|
|
});
|
|
|
|
expect(queries).to.deep.equal([
|
|
'CREATE INDEX "nameIdx" ON "user" ("name")',
|
|
'CREATE UNIQUE INDEX "emailIdx" ON "user" ("email")',
|
|
]);
|
|
});
|
|
|
|
it('drops indexes', async () => {
|
|
/** @type {import('../../dist/types.js').DBTable} */
|
|
const initial = {
|
|
...userInitial,
|
|
indexes: {
|
|
nameIdx: { on: ['name'], unique: false },
|
|
emailIdx: { on: ['email'], unique: true },
|
|
},
|
|
};
|
|
|
|
/** @type {import('../../dist/types.js').DBTable} */
|
|
const final = {
|
|
...userInitial,
|
|
indexes: {},
|
|
};
|
|
|
|
const { queries } = await getCollectionChangeQueries({
|
|
collectionName: 'user',
|
|
oldCollection: initial,
|
|
newCollection: final,
|
|
});
|
|
|
|
expect(queries).to.deep.equal(['DROP INDEX "nameIdx"', 'DROP INDEX "emailIdx"']);
|
|
});
|
|
|
|
it('drops and recreates modified indexes', async () => {
|
|
/** @type {import('../../dist/types.js').DBTable} */
|
|
const initial = {
|
|
...userInitial,
|
|
indexes: {
|
|
nameIdx: { on: ['name'], unique: false },
|
|
emailIdx: { on: ['email'], unique: true },
|
|
},
|
|
};
|
|
|
|
/** @type {import('../../dist/types.js').DBTable} */
|
|
const final = {
|
|
...userInitial,
|
|
indexes: {
|
|
nameIdx: { on: ['name'], unique: true },
|
|
emailIdx: { on: ['email'] },
|
|
},
|
|
};
|
|
|
|
const { queries } = await getCollectionChangeQueries({
|
|
collectionName: 'user',
|
|
oldCollection: initial,
|
|
newCollection: final,
|
|
});
|
|
|
|
expect(queries).to.deep.equal([
|
|
'DROP INDEX "nameIdx"',
|
|
'DROP INDEX "emailIdx"',
|
|
'CREATE UNIQUE INDEX "nameIdx" ON "user" ("name")',
|
|
'CREATE INDEX "emailIdx" ON "user" ("email")',
|
|
]);
|
|
});
|
|
});
|