Files
gh-greyhaven-ai-claude-code…/skills/testing-strategy/templates/vitest-integration.test.ts
2025-11-29 18:29:30 +08:00

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