added initial roadmap and implementation

This commit is contained in:
2026-03-11 22:23:16 +02:00
parent 39b97a6db5
commit c0792f2e1d
62 changed files with 12410 additions and 1 deletions

View 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);
});
});