summaryrefslogtreecommitdiff
path: root/packages/db/test
diff options
context:
space:
mode:
Diffstat (limited to 'packages/db/test')
-rw-r--r--packages/db/test/fixtures/integrations/astro.config.mjs8
-rw-r--r--packages/db/test/fixtures/integrations/db/config.ts12
-rw-r--r--packages/db/test/fixtures/integrations/db/seed.ts13
-rw-r--r--packages/db/test/fixtures/integrations/integration/config.ts8
-rw-r--r--packages/db/test/fixtures/integrations/integration/index.ts15
-rw-r--r--packages/db/test/fixtures/integrations/integration/seed.ts14
-rw-r--r--packages/db/test/fixtures/integrations/integration/shared.ts9
-rw-r--r--packages/db/test/fixtures/integrations/package.json14
-rw-r--r--packages/db/test/fixtures/integrations/src/pages/index.astro17
-rw-r--r--packages/db/test/integrations.test.js48
10 files changed, 158 insertions, 0 deletions
diff --git a/packages/db/test/fixtures/integrations/astro.config.mjs b/packages/db/test/fixtures/integrations/astro.config.mjs
new file mode 100644
index 000000000..23f52739e
--- /dev/null
+++ b/packages/db/test/fixtures/integrations/astro.config.mjs
@@ -0,0 +1,8 @@
+import db from '@astrojs/db';
+import { defineConfig } from 'astro/config';
+import testIntegration from './integration';
+
+// https://astro.build/config
+export default defineConfig({
+ integrations: [db(), testIntegration()],
+});
diff --git a/packages/db/test/fixtures/integrations/db/config.ts b/packages/db/test/fixtures/integrations/db/config.ts
new file mode 100644
index 000000000..a581d1279
--- /dev/null
+++ b/packages/db/test/fixtures/integrations/db/config.ts
@@ -0,0 +1,12 @@
+import { column, defineDB, defineTable } from 'astro:db';
+
+const Author = defineTable({
+ columns: {
+ name: column.text(),
+ age2: column.number({ optional: true }),
+ },
+});
+
+export default defineDB({
+ tables: { Author },
+});
diff --git a/packages/db/test/fixtures/integrations/db/seed.ts b/packages/db/test/fixtures/integrations/db/seed.ts
new file mode 100644
index 000000000..56ffb5668
--- /dev/null
+++ b/packages/db/test/fixtures/integrations/db/seed.ts
@@ -0,0 +1,13 @@
+import { Author, db } from 'astro:db';
+
+export default async () => {
+ await db
+ .insert(Author)
+ .values([
+ { name: 'Ben' },
+ { name: 'Nate' },
+ { name: 'Erika' },
+ { name: 'Bjorn' },
+ { name: 'Sarah' },
+ ]);
+};
diff --git a/packages/db/test/fixtures/integrations/integration/config.ts b/packages/db/test/fixtures/integrations/integration/config.ts
new file mode 100644
index 000000000..00b8123c4
--- /dev/null
+++ b/packages/db/test/fixtures/integrations/integration/config.ts
@@ -0,0 +1,8 @@
+import { defineDB } from 'astro:db';
+import { menu } from './shared';
+
+export default defineDB({
+ tables: {
+ menu,
+ },
+});
diff --git a/packages/db/test/fixtures/integrations/integration/index.ts b/packages/db/test/fixtures/integrations/integration/index.ts
new file mode 100644
index 000000000..b249cc253
--- /dev/null
+++ b/packages/db/test/fixtures/integrations/integration/index.ts
@@ -0,0 +1,15 @@
+import { defineDbIntegration } from '@astrojs/db/utils';
+
+export default function testIntegration() {
+ return defineDbIntegration({
+ name: 'db-test-integration',
+ hooks: {
+ 'astro:db:setup'({ extendDb }) {
+ extendDb({
+ configEntrypoint: './integration/config.ts',
+ seedEntrypoint: './integration/seed.ts',
+ });
+ },
+ },
+ });
+}
diff --git a/packages/db/test/fixtures/integrations/integration/seed.ts b/packages/db/test/fixtures/integrations/integration/seed.ts
new file mode 100644
index 000000000..cf10d6657
--- /dev/null
+++ b/packages/db/test/fixtures/integrations/integration/seed.ts
@@ -0,0 +1,14 @@
+import { asDrizzleTable } from '@astrojs/db/utils';
+import { db } from 'astro:db';
+import { menu } from './shared';
+
+export default async function () {
+ const table = asDrizzleTable('menu', menu);
+
+ await db.insert(table).values([
+ { name: 'Pancakes', price: 9.5, type: 'Breakfast' },
+ { name: 'French Toast', price: 11.25, type: 'Breakfast' },
+ { name: 'Coffee', price: 3, type: 'Beverages' },
+ { name: 'Cappuccino', price: 4.5, type: 'Beverages' },
+ ]);
+}
diff --git a/packages/db/test/fixtures/integrations/integration/shared.ts b/packages/db/test/fixtures/integrations/integration/shared.ts
new file mode 100644
index 000000000..b4f5243de
--- /dev/null
+++ b/packages/db/test/fixtures/integrations/integration/shared.ts
@@ -0,0 +1,9 @@
+import { defineTable, column } from 'astro:db';
+
+export const menu = defineTable({
+ columns: {
+ name: column.text(),
+ type: column.text(),
+ price: column.number(),
+ },
+});
diff --git a/packages/db/test/fixtures/integrations/package.json b/packages/db/test/fixtures/integrations/package.json
new file mode 100644
index 000000000..1bb17a8c7
--- /dev/null
+++ b/packages/db/test/fixtures/integrations/package.json
@@ -0,0 +1,14 @@
+{
+ "name": "@test/db-integration",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "dev": "astro dev",
+ "build": "astro build",
+ "preview": "astro preview"
+ },
+ "dependencies": {
+ "@astrojs/db": "workspace:*",
+ "astro": "workspace:*"
+ }
+}
diff --git a/packages/db/test/fixtures/integrations/src/pages/index.astro b/packages/db/test/fixtures/integrations/src/pages/index.astro
new file mode 100644
index 000000000..3e9c30ef7
--- /dev/null
+++ b/packages/db/test/fixtures/integrations/src/pages/index.astro
@@ -0,0 +1,17 @@
+---
+/// <reference path="../../.astro/db-types.d.ts" />
+import { Author, db, menu } from 'astro:db';
+
+const authors = await db.select().from(Author);
+const menuItems = await db.select().from(menu);
+---
+
+<h2>Authors</h2>
+<ul class="authors-list">
+ {authors.map((author) => <li>{author.name}</li>)}
+</ul>
+
+<h2>Menu</h2>
+<ul class="menu">
+ {menuItems.map((item) => <li>{item.name}</li>)}
+</ul>
diff --git a/packages/db/test/integrations.test.js b/packages/db/test/integrations.test.js
new file mode 100644
index 000000000..c2f12109c
--- /dev/null
+++ b/packages/db/test/integrations.test.js
@@ -0,0 +1,48 @@
+import { expect } from 'chai';
+import { load as cheerioLoad } from 'cheerio';
+import { loadFixture } from '../../astro/test/test-utils.js';
+
+describe('astro:db with integrations', () => {
+ let fixture;
+ before(async () => {
+ fixture = await loadFixture({
+ root: new URL('./fixtures/integrations/', import.meta.url),
+ });
+ });
+
+ // 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 () => {
+ 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 from user-defined table', async () => {
+ const html = await fixture.fetch('/').then((res) => res.text());
+ const $ = cheerioLoad(html);
+
+ const ul = $('.authors-list');
+ expect(ul.children()).to.have.a.lengthOf(5);
+ expect(ul.children().eq(0).text()).to.equal('Ben');
+ });
+
+ it('Prints the list of menu items from integration-defined table', async () => {
+ const html = await fixture.fetch('/').then((res) => res.text());
+ const $ = cheerioLoad(html);
+
+ const ul = $('ul.menu');
+ expect(ul.children()).to.have.a.lengthOf(4);
+ expect(ul.children().eq(0).text()).to.equal('Pancakes');
+ });
+ });
+});