88 lines
2.3 KiB
TypeScript
88 lines
2.3 KiB
TypeScript
// tests/integration/FEATURE-flow.test.ts
|
|
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
import { db } from "~/lib/server/db";
|
|
import { users } from "~/lib/server/db/schema";
|
|
import { eq } from "drizzle-orm";
|
|
|
|
describe("Feature Integration Tests", () => {
|
|
const testTenantId = "550e8400-e29b-41d4-a716-446655440000";
|
|
|
|
beforeEach(async () => {
|
|
// Setup test data
|
|
await db.delete(users).where(eq(users.tenant_id, testTenantId));
|
|
});
|
|
|
|
afterEach(async () => {
|
|
// Cleanup test data
|
|
await db.delete(users).where(eq(users.tenant_id, testTenantId));
|
|
});
|
|
|
|
it("completes full workflow successfully", async () => {
|
|
// 1. Create resource
|
|
const [created] = await db
|
|
.insert(users)
|
|
.values({
|
|
tenant_id: testTenantId,
|
|
email_address: "test@example.com",
|
|
name: "Test User",
|
|
})
|
|
.returning();
|
|
|
|
expect(created).toBeDefined();
|
|
expect(created.email_address).toBe("test@example.com");
|
|
|
|
// 2. Retrieve resource
|
|
const [retrieved] = await db
|
|
.select()
|
|
.from(users)
|
|
.where(eq(users.id, created.id))
|
|
.where(eq(users.tenant_id, testTenantId));
|
|
|
|
expect(retrieved).toBeDefined();
|
|
expect(retrieved.id).toBe(created.id);
|
|
|
|
// 3. Update resource
|
|
const [updated] = await db
|
|
.update(users)
|
|
.set({ name: "Updated Name" })
|
|
.where(eq(users.id, created.id))
|
|
.returning();
|
|
|
|
expect(updated.name).toBe("Updated Name");
|
|
|
|
// 4. Delete resource
|
|
await db.delete(users).where(eq(users.id, created.id));
|
|
|
|
// 5. Verify deletion
|
|
const [deleted] = await db
|
|
.select()
|
|
.from(users)
|
|
.where(eq(users.id, created.id));
|
|
|
|
expect(deleted).toBeUndefined();
|
|
});
|
|
|
|
it("enforces tenant isolation", async () => {
|
|
const differentTenantId = "00000000-0000-0000-0000-000000000000";
|
|
|
|
// Create user in tenant 1
|
|
const [user] = await db
|
|
.insert(users)
|
|
.values({
|
|
tenant_id: testTenantId,
|
|
email_address: "tenant1@example.com",
|
|
name: "Tenant 1 User",
|
|
})
|
|
.returning();
|
|
|
|
// Attempt to access with different tenant_id
|
|
const [result] = await db
|
|
.select()
|
|
.from(users)
|
|
.where(eq(users.id, user.id))
|
|
.where(eq(users.tenant_id, differentTenantId));
|
|
|
|
expect(result).toBeUndefined();
|
|
});
|
|
});
|