diff options
author | 2024-03-01 19:29:55 -0500 | |
---|---|---|
committer | 2024-03-01 19:29:55 -0500 | |
commit | 3488be9b59d1cb65325b0e087c33bcd74aaa4926 (patch) | |
tree | 6582db4f35eb2b92ee574a7a9c507c93a5d17452 /packages/db/test/basics.test.js | |
parent | 4b6e2fb69b241c982c82a2f13d603b2057c345af (diff) | |
download | astro-3488be9b59d1cb65325b0e087c33bcd74aaa4926.tar.gz astro-3488be9b59d1cb65325b0e087c33bcd74aaa4926.tar.zst astro-3488be9b59d1cb65325b0e087c33bcd74aaa4926.zip |
finalize WIP API (#10280)
* 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 commit 37585ce5cb4cce8dcc750d8752e0eb02418b5c87.
* 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 commit 46fd65d61a8a285c2d507d524734369a3b97a1a0.
* Revert "wip: fix windows file import"
This reverts commit 1a669ea646e2dc91ca120539431c10f0793a20f3.
* 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>
Diffstat (limited to 'packages/db/test/basics.test.js')
-rw-r--r-- | packages/db/test/basics.test.js | 98 |
1 files changed, 34 insertions, 64 deletions
diff --git a/packages/db/test/basics.test.js b/packages/db/test/basics.test.js index 8a8d9caea..19c105532 100644 --- a/packages/db/test/basics.test.js +++ b/packages/db/test/basics.test.js @@ -3,10 +3,6 @@ import { load as cheerioLoad } from 'cheerio'; import testAdapter from '../../astro/test/test-adapter.js'; import { loadFixture } from '../../astro/test/test-utils.js'; -// TODO(fks): Rename this to something more generic/generally useful -// like `ASTRO_MONOREPO_TEST_ENV` if @astrojs/db is merged into astro. -process.env.ASTRO_DB_TEST_ENV = '1'; - describe('astro:db', () => { let fixture; before(async () => { @@ -17,16 +13,25 @@ describe('astro:db', () => { }); }); - describe('production', () => { + // Note(bholmesdev): Use in-memory db to avoid + // Multiple dev servers trying to unlink and remount + // the same database file. + process.env.TEST_IN_MEMORY_DB = 'true'; + describe('development', () => { + let devServer; + before(async () => { - await fixture.build(); + console.log('starting dev server'); + devServer = await fixture.startDevServer(); + }); + + after(async () => { + await devServer.stop(); + process.env.TEST_IN_MEMORY_DB = undefined; }); it('Prints the list of authors', async () => { - const app = await fixture.loadTestAdapterApp(); - const request = new Request('http://example.com/'); - const res = await app.render(request); - const html = await res.text(); + const html = await fixture.fetch('/').then((res) => res.text()); const $ = cheerioLoad(html); const ul = $('.authors-list'); @@ -34,71 +39,36 @@ describe('astro:db', () => { expect(ul.children().eq(0).text()).to.equal('Ben'); }); - it('Errors when inserting to a readonly collection', async () => { - const app = await fixture.loadTestAdapterApp(); - const request = new Request('http://example.com/insert-into-readonly'); - const res = await app.render(request); - const html = await res.text(); + it('Allows expression defaults for date columns', async () => { + const html = await fixture.fetch('/').then((res) => res.text()); const $ = cheerioLoad(html); - expect($('#error').text()).to.equal('The [Author] collection is read-only.'); + const themeAdded = $($('.themes-list .theme-added')[0]).text(); + expect(new Date(themeAdded).getTime()).to.not.be.NaN; }); - it('Does not error when inserting into writable collection', async () => { - const app = await fixture.loadTestAdapterApp(); - const request = new Request('http://example.com/insert-into-writable'); - const res = await app.render(request); - const html = await res.text(); + it('Defaults can be overridden for dates', async () => { + const html = await fixture.fetch('/').then((res) => res.text()); const $ = cheerioLoad(html); - expect($('#error').text()).to.equal(''); + const themeAdded = $($('.themes-list .theme-added')[1]).text(); + expect(new Date(themeAdded).getTime()).to.not.be.NaN; }); - describe('Expression defaults', () => { - let app; - before(async () => { - app = await fixture.loadTestAdapterApp(); - }); - - it('Allows expression defaults for date columns', async () => { - const request = new Request('http://example.com/'); - const res = await app.render(request); - const html = await res.text(); - const $ = cheerioLoad(html); - - const themeAdded = $($('.themes-list .theme-added')[0]).text(); - expect(new Date(themeAdded).getTime()).to.not.be.NaN; - }); - - it('Defaults can be overridden for dates', async () => { - const request = new Request('http://example.com/'); - const res = await app.render(request); - const html = await res.text(); - const $ = cheerioLoad(html); - - const themeAdded = $($('.themes-list .theme-added')[1]).text(); - expect(new Date(themeAdded).getTime()).to.not.be.NaN; - }); - - it('Allows expression defaults for text columns', async () => { - const request = new Request('http://example.com/'); - const res = await app.render(request); - const html = await res.text(); - const $ = cheerioLoad(html); + it('Allows expression defaults for text columns', async () => { + const html = await fixture.fetch('/').then((res) => res.text()); + const $ = cheerioLoad(html); - const themeOwner = $($('.themes-list .theme-owner')[0]).text(); - expect(themeOwner).to.equal(''); - }); + const themeOwner = $($('.themes-list .theme-owner')[0]).text(); + expect(themeOwner).to.equal(''); + }); - it('Allows expression defaults for boolean columns', async () => { - const request = new Request('http://example.com/'); - const res = await app.render(request); - const html = await res.text(); - const $ = cheerioLoad(html); + it('Allows expression defaults for boolean columns', async () => { + const html = await fixture.fetch('/').then((res) => res.text()); + const $ = cheerioLoad(html); - const themeDark = $($('.themes-list .theme-dark')[0]).text(); - expect(themeDark).to.equal('dark mode'); - }); + const themeDark = $($('.themes-list .theme-dark')[0]).text(); + expect(themeDark).to.equal('dark mode'); }); }); }); |