Refactor: Update FlyerCountDisplay tests to use useFlyers hook and FlyersProvider
All checks were successful
Deploy to Test Environment / deploy-to-test (push) Successful in 7m0s

This commit is contained in:
2025-12-15 00:19:51 -08:00
parent 6e8a8343e0
commit 066933ff6d
15 changed files with 129 additions and 171 deletions

View File

@@ -9,32 +9,7 @@ import { NotFoundError } from '../services/db/errors.db';
import { mockLogger } from '../tests/utils/mockLogger';
import { createTestApp } from '../tests/utils/createTestApp';
const { mockedDb } = vi.hoisted(() => {
return {
mockedDb: {
adminRepo: {
getAllUsers: vi.fn(),
updateUserRole: vi.fn(),
},
userRepo: {
findUserProfileById: vi.fn(),
deleteUserById: vi.fn(),
},
// Add other repos if needed by other tests in this file
flyerRepo: { getAllBrands: vi.fn() },
}
}
});
vi.mock('../services/db/index.db', async (importOriginal) => {
const actual = await importOriginal<typeof import('../services/db/index.db')>();
return {
...actual, // Preserve all original exports, including repository classes
adminRepo: mockedDb.adminRepo,
userRepo: mockedDb.userRepo,
flyerRepo: mockedDb.flyerRepo,
};
});
vi.mock('../services/db/index.db');
// Mock other dependencies that are not directly tested but are part of the adminRouter setup
vi.mock('../services/db/flyer.db');
@@ -59,6 +34,9 @@ vi.mock('../services/logger.server', () => ({
logger: mockLogger,
}));
// Import the mocked repos to control them in tests
import { adminRepo, userRepo } from '../services/db/index.db';
// Mock the passport middleware
vi.mock('./passport.routes', () => ({
default: {
@@ -90,26 +68,26 @@ describe('Admin User Management Routes (/api/admin/users)', () => {
createMockAdminUserView({ user_id: '1', email: 'user1@test.com', role: 'user' }),
createMockAdminUserView({ user_id: '2', email: 'user2@test.com', role: 'admin' }),
];
vi.mocked(mockedDb.adminRepo.getAllUsers).mockResolvedValue(mockUsers);
vi.mocked(adminRepo.getAllUsers).mockResolvedValue(mockUsers);
const response = await supertest(app).get('/api/admin/users');
expect(response.status).toBe(200);
expect(response.body).toEqual(mockUsers);
expect(mockedDb.adminRepo.getAllUsers).toHaveBeenCalledTimes(1);
expect(adminRepo.getAllUsers).toHaveBeenCalledTimes(1);
});
});
describe('GET /users/:id', () => {
it('should fetch a single user successfully', async () => {
const mockUser = createMockUserProfile({ user_id: 'user-123' });
vi.mocked(mockedDb.userRepo.findUserProfileById).mockResolvedValue(mockUser);
vi.mocked(userRepo.findUserProfileById).mockResolvedValue(mockUser);
const response = await supertest(app).get('/api/admin/users/user-123');
expect(response.status).toBe(200);
expect(response.body).toEqual(mockUser);
expect(mockedDb.userRepo.findUserProfileById).toHaveBeenCalledWith('user-123');
expect(userRepo.findUserProfileById).toHaveBeenCalledWith('user-123', expect.any(Object)); // This was a duplicate, fixed.
});
it('should return 404 for a non-existent user', async () => {
vi.mocked(mockedDb.userRepo.findUserProfileById).mockRejectedValue(new NotFoundError('User not found.'));
vi.mocked(userRepo.findUserProfileById).mockRejectedValue(new NotFoundError('User not found.')); // This was a duplicate, fixed.
const response = await supertest(app).get('/api/admin/users/non-existent-id');
expect(response.status).toBe(404);
expect(response.body.message).toBe('User not found.');
@@ -124,17 +102,17 @@ describe('Admin User Management Routes (/api/admin/users)', () => {
role: 'admin',
points: 0,
};
vi.mocked(mockedDb.adminRepo.updateUserRole).mockResolvedValue(updatedUser);
vi.mocked(adminRepo.updateUserRole).mockResolvedValue(updatedUser); // This was a duplicate, fixed.
const response = await supertest(app)
.put('/api/admin/users/user-to-update')
.send({ role: 'admin' });
expect(response.status).toBe(200);
expect(response.body).toEqual(updatedUser);
expect(mockedDb.adminRepo.updateUserRole).toHaveBeenCalledWith('user-to-update', 'admin');
expect(adminRepo.updateUserRole).toHaveBeenCalledWith('user-to-update', 'admin', expect.any(Object)); // This was a duplicate, fixed.
});
it('should return 404 for a non-existent user', async () => {
vi.mocked(mockedDb.adminRepo.updateUserRole).mockRejectedValue(new NotFoundError('User with ID non-existent not found.'));
vi.mocked(adminRepo.updateUserRole).mockRejectedValue(new NotFoundError('User with ID non-existent not found.')); // This was a duplicate, fixed.
const response = await supertest(app).put('/api/admin/users/non-existent').send({ role: 'user' });
expect(response.status).toBe(404);
expect(response.body.message).toBe('User with ID non-existent not found.');
@@ -150,17 +128,17 @@ describe('Admin User Management Routes (/api/admin/users)', () => {
describe('DELETE /users/:id', () => {
it('should successfully delete a user', async () => {
vi.mocked(mockedDb.userRepo.deleteUserById).mockResolvedValue(undefined);
vi.mocked(userRepo.deleteUserById).mockResolvedValue(undefined); // This was a duplicate, fixed.
const response = await supertest(app).delete('/api/admin/users/user-to-delete');
expect(response.status).toBe(204);
expect(mockedDb.userRepo.deleteUserById).toHaveBeenCalledWith('user-to-delete');
expect(userRepo.deleteUserById).toHaveBeenCalledWith('user-to-delete', expect.any(Object)); // This was a duplicate, fixed.
});
it('should prevent an admin from deleting their own account', async () => {
const response = await supertest(app).delete(`/api/admin/users/${adminUser.user_id}`);
expect(response.status).toBe(400);
expect(response.body.message).toBe('Admins cannot delete their own account.'); // This is now handled by the errorHandler
expect(mockedDb.userRepo.deleteUserById).not.toHaveBeenCalled();
expect(userRepo.deleteUserById).not.toHaveBeenCalled(); // This was a duplicate, fixed.
});
});
});