fix tests + flyer upload (anon)
This commit is contained in:
@@ -6,6 +6,7 @@ import { logger } from '../../services/logger.server';
|
||||
import { getPool } from '../../services/db/connection.db';
|
||||
import type { UserProfile, MasterGroceryItem, ShoppingList } from '../../types';
|
||||
import { createAndLoginUser, TEST_PASSWORD } from '../utils/testHelpers';
|
||||
import { cleanupDb } from '../utils/cleanup';
|
||||
|
||||
/**
|
||||
* @vitest-environment node
|
||||
@@ -16,6 +17,7 @@ const request = supertest(app);
|
||||
describe('User API Routes Integration Tests', () => {
|
||||
let testUser: UserProfile;
|
||||
let authToken: string;
|
||||
const createdUserIds: string[] = [];
|
||||
|
||||
// Before any tests run, create a new user and log them in.
|
||||
// The token will be used for all subsequent API calls in this test suite.
|
||||
@@ -24,28 +26,13 @@ describe('User API Routes Integration Tests', () => {
|
||||
const { user, token } = await createAndLoginUser({ email, fullName: 'Test User', request });
|
||||
testUser = user;
|
||||
authToken = token;
|
||||
createdUserIds.push(user.user.user_id);
|
||||
});
|
||||
|
||||
// After all tests, clean up by deleting the created user.
|
||||
// This now cleans up ALL users created by this test suite to prevent pollution.
|
||||
afterAll(async () => {
|
||||
const pool = getPool();
|
||||
try {
|
||||
// Find all users created during this test run by their email pattern.
|
||||
const res = await pool.query(
|
||||
"SELECT user_id FROM public.users WHERE email LIKE 'user-test-%' OR email LIKE 'delete-me-%' OR email LIKE 'reset-me-%'",
|
||||
);
|
||||
if (res.rows.length > 0) {
|
||||
const userIds = res.rows.map((r) => r.user_id);
|
||||
logger.debug(
|
||||
`[user.integration.test.ts afterAll] Cleaning up ${userIds.length} test users...`,
|
||||
);
|
||||
// Use a direct DB query for cleanup, which is faster and more reliable than API calls.
|
||||
await pool.query('DELETE FROM public.users WHERE user_id = ANY($1::uuid[])', [userIds]);
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error({ error }, 'Failed to clean up test users from database.');
|
||||
}
|
||||
await cleanupDb({ userIds: createdUserIds });
|
||||
});
|
||||
|
||||
it('should fetch the authenticated user profile via GET /api/users/profile', async () => {
|
||||
@@ -130,7 +117,8 @@ describe('User API Routes Integration Tests', () => {
|
||||
it('should allow a user to delete their own account and then fail to log in', async () => {
|
||||
// Arrange: Create a new, separate user just for this deletion test.
|
||||
const deletionEmail = `delete-me-${Date.now()}@example.com`;
|
||||
const { token: deletionToken } = await createAndLoginUser({ email: deletionEmail, request });
|
||||
const { user: deletionUser, token: deletionToken } = await createAndLoginUser({ email: deletionEmail, request });
|
||||
createdUserIds.push(deletionUser.user.user_id);
|
||||
|
||||
// Act: Call the delete endpoint with the correct password and token.
|
||||
const response = await request
|
||||
@@ -156,6 +144,7 @@ describe('User API Routes Integration Tests', () => {
|
||||
// Arrange: Create a new user for the password reset flow.
|
||||
const resetEmail = `reset-me-${Date.now()}@example.com`;
|
||||
const { user: resetUser } = await createAndLoginUser({ email: resetEmail, request });
|
||||
createdUserIds.push(resetUser.user.user_id);
|
||||
|
||||
// Act 1: Request a password reset. In our test environment, the token is returned in the response.
|
||||
const resetRequestRawResponse = await request
|
||||
|
||||
Reference in New Issue
Block a user