added initial roadmap and implementation
This commit is contained in:
82
tests/integration/db.test.ts
Normal file
82
tests/integration/db.test.ts
Normal file
@@ -0,0 +1,82 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { createAnonClient, createServiceRoleClient } from './setup.ts';
|
||||
|
||||
const client = createAnonClient();
|
||||
const adminClient = createServiceRoleClient();
|
||||
|
||||
describe('Data API (PostgREST-lite)', () => {
|
||||
const todoTitle = `Task ${Date.now()}`;
|
||||
|
||||
it('should create a todo', async () => {
|
||||
const { data: rows, error } = await client
|
||||
.from('todos')
|
||||
.insert({ title: todoTitle, completed: false })
|
||||
.select();
|
||||
|
||||
expect(error).toBeNull();
|
||||
expect(rows).toBeDefined();
|
||||
expect(rows?.length).toBe(1);
|
||||
|
||||
const data = rows![0];
|
||||
expect(data.title).toBe(todoTitle);
|
||||
expect(data.completed).toBe(false);
|
||||
});
|
||||
|
||||
it('should list todos', async () => {
|
||||
const { data, error } = await client.from('todos').select('*');
|
||||
|
||||
expect(error).toBeNull();
|
||||
expect(data).toBeDefined();
|
||||
expect(Array.isArray(data)).toBe(true);
|
||||
expect(data?.length).toBeGreaterThan(0);
|
||||
expect(data?.some((t) => t.title === todoTitle)).toBe(true);
|
||||
});
|
||||
|
||||
it('should update a todo', async () => {
|
||||
// First get the todo
|
||||
const { data: todos } = await client
|
||||
.from('todos')
|
||||
.select('id')
|
||||
.eq('title', todoTitle)
|
||||
.limit(1);
|
||||
|
||||
expect(todos).toBeDefined();
|
||||
if (!todos || todos.length === 0) throw new Error('Todo not found');
|
||||
const id = todos[0].id;
|
||||
|
||||
const { error } = await client
|
||||
.from('todos')
|
||||
.update({ completed: true })
|
||||
.eq('id', id);
|
||||
|
||||
expect(error).toBeNull();
|
||||
|
||||
// Verify update
|
||||
const { data: rows } = await client.from('todos').select('*').eq('id', id);
|
||||
expect(rows).toBeDefined();
|
||||
expect(rows?.length).toBe(1);
|
||||
const updated = rows![0];
|
||||
expect(updated.completed).toBe(true);
|
||||
});
|
||||
|
||||
it('should delete a todo', async () => {
|
||||
// First get the todo
|
||||
const { data: todos } = await client
|
||||
.from('todos')
|
||||
.select('id')
|
||||
.eq('title', todoTitle)
|
||||
.limit(1);
|
||||
|
||||
expect(todos).toBeDefined();
|
||||
if (!todos || todos.length === 0) throw new Error('Todo not found');
|
||||
const id = todos[0].id;
|
||||
|
||||
const { error } = await client.from('todos').delete().eq('id', id);
|
||||
|
||||
expect(error).toBeNull();
|
||||
|
||||
// Verify deletion
|
||||
const { data } = await client.from('todos').select('*').eq('id', id);
|
||||
expect(data?.length).toBe(0);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user