mirror of
https://github.com/withastro/astro.git
synced 2024-12-23 21:53:55 -05:00
3488be9b59
* feat: no more readable / writable * fix: table typegen * wip: move data seeding * chore: add scripts to basics * feat: data() -> seed file * refactor: ensure precedence of file name * feat: db execute command * fix: test imports * chore: remove old readable error tests * feat: support local db with `db execute` * refactor: remove integrations from test for now * chore: stray comment * chore: remove `table` config object * feat: `db.batch`! * refactor: move migrations/ inside db/ * fix: move ticketing-example to seed file * fix: disable foreign keys when recreating tables * refactor: standardize migrations dir * feat: move to db/config.ts * feat: file watching for db/config.ts dependencies * feat: remove unsafeDisableStudio * chroe: remove bad import * feat: parse config.ts from cli * chore: remove async from localDatabaseClient * fix: update recipes config and seed * chore: update unit tests * chore: update tests to dev server * refactor: collectionToTable -> asDrizzleTable * chore: tidy up collection -> table error states * refactor: regexp -> endsWith * feat: pretty error inserting into table * refactor: try/catch -> catch() * feat: expose utils for integration seed files * fix: add config import to db client modules * fix: just use generic "seeding database" error * chore: remove unused link args * fix: migration queries im,port * chore: remove irrelevant glob/ example * feat: format migration file path * feat: support all config file names * chore: remove db.batch() for now * chore: remove `db` object * core: remove unused integration file * chore: changeset * fix: foreign key empty error message * chore: remove old TODO * fix: bad context reference * refactor: seedDev -> seedLocal * wip: throw some console logs at github * wip: avoid seeding astro:db imported by seed file * wip: use anything in db/ * refactor: only seed when loaded within srcDir * refactor: avoid resolution when not seeding * chore: remove logs * refactor: seed within create local db client * refactor: use normalizePath * wip: logs * wip: logs * refactor: early return * chore: more logs * refactor: no batch * fix: use beforeAll * refactor: move all tests to base block * wip: log dev server starting * chore: remove logs * wip: demo ready * chore: remove duplicate recreateTables() call * Revert "wip: demo ready" This reverts commit37585ce5cb
. * refactor: beforeEach to isolate dev servers * chore: remove useBundledDbUrl * refactor: naming and seed scope * chore: remove stray console logs * wip: fix windows file import * wip: try fileURLToPath * Revert "wip: try fileURLToPath" This reverts commit46fd65d61a
. * Revert "wip: fix windows file import" This reverts commit1a669ea646
. * refactor: dir -> directory * refactor: move execute file to cli * refactor: remove seed.dev convention * wip: attempt fileURLToPath * wip: debug the file exists * fix: use mjs?? * chore: remove duplicate seedLocal * chore: remove log check * refactor: use in memory db for tests * chore: clean up test comment * fix: avoid file writes for db setup on in memory db * chore: bump db changeset to minor --------- Co-authored-by: Nate Moore <nate@astro.build>
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 { column } from '../../dist/runtime/config.js';
|
|
import { tableSchema } from '../../dist/core/types.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")',
|
|
]);
|
|
});
|
|
});
|