test: improve test cleanup with selective deletion
- Replace deleteMany({}) with selective deletion by username/email/slug in:
- events.test.js (target specific test users/events only)
- matches.test.js (target specific test users/events only)
- csrf.test.js (target csrftest user only)
- Replace delete() with deleteMany() for resilient cleanup:
- matches.test.js (2 inline cleanups)
- socket-webrtc.test.js (1 inline cleanup)
- Update TODO.md with test status and future UX/UI improvements
Test improvement: 189/223 passing (84.8%), up from 145/223 (65%)
This commit is contained in:
@@ -6,11 +6,27 @@ const securityConfig = require('../config/security');
|
||||
|
||||
// Clean up database before and after tests
|
||||
beforeAll(async () => {
|
||||
await prisma.user.deleteMany({});
|
||||
// Only delete test user, not all users
|
||||
await prisma.user.deleteMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ username: 'csrftest' },
|
||||
{ email: 'csrf@example.com' }
|
||||
]
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await prisma.user.deleteMany({});
|
||||
// Only delete test user, not all users
|
||||
await prisma.user.deleteMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ username: 'csrftest' },
|
||||
{ email: 'csrf@example.com' }
|
||||
]
|
||||
}
|
||||
});
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
|
||||
|
||||
@@ -182,16 +182,62 @@ beforeAll(async () => {
|
||||
}, 30000);
|
||||
|
||||
afterAll(async () => {
|
||||
// Clean up
|
||||
await prisma.eventUserHeat.deleteMany({});
|
||||
await prisma.rating.deleteMany({});
|
||||
await prisma.message.deleteMany({});
|
||||
await prisma.match.deleteMany({});
|
||||
await prisma.chatRoom.deleteMany({});
|
||||
await prisma.eventCheckinToken.deleteMany({});
|
||||
await prisma.eventParticipant.deleteMany({});
|
||||
await prisma.event.deleteMany({});
|
||||
await prisma.user.deleteMany({});
|
||||
// Clean up - only delete test data, not all data
|
||||
const testUsernames = ['john_dancer', 'sarah_swings', 'mike_blues'];
|
||||
const testEmails = ['john@example.com', 'sarah@example.com', 'mike@example.com'];
|
||||
const testEventSlugs = ['test-dance-festival-2025', 'test-another-event-2025'];
|
||||
|
||||
// Find test events
|
||||
const testEvents = await prisma.event.findMany({
|
||||
where: { slug: { in: testEventSlugs } },
|
||||
select: { id: true }
|
||||
});
|
||||
const testEventIds = testEvents.map(e => e.id);
|
||||
|
||||
// Find test users
|
||||
const testUsers = await prisma.user.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ username: { in: testUsernames } },
|
||||
{ email: { in: testEmails } }
|
||||
]
|
||||
},
|
||||
select: { id: true }
|
||||
});
|
||||
const testUserIds = testUsers.map(u => u.id);
|
||||
|
||||
// Delete related data for test users and events only
|
||||
if (testUserIds.length > 0) {
|
||||
await prisma.eventUserHeat.deleteMany({ where: { userId: { in: testUserIds } } });
|
||||
await prisma.rating.deleteMany({ where: { raterId: { in: testUserIds } } });
|
||||
await prisma.message.deleteMany({ where: { userId: { in: testUserIds } } });
|
||||
await prisma.match.deleteMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ user1Id: { in: testUserIds } },
|
||||
{ user2Id: { in: testUserIds } }
|
||||
]
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (testEventIds.length > 0) {
|
||||
await prisma.chatRoom.deleteMany({ where: { eventId: { in: testEventIds } } });
|
||||
await prisma.eventCheckinToken.deleteMany({ where: { eventId: { in: testEventIds } } });
|
||||
await prisma.eventParticipant.deleteMany({ where: { eventId: { in: testEventIds } } });
|
||||
await prisma.event.deleteMany({ where: { id: { in: testEventIds } } });
|
||||
}
|
||||
|
||||
// Delete test users
|
||||
await prisma.user.deleteMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ username: { in: testUsernames } },
|
||||
{ email: { in: testEmails } }
|
||||
]
|
||||
}
|
||||
});
|
||||
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
|
||||
|
||||
@@ -126,14 +126,60 @@ beforeAll(async () => {
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
// Clean up
|
||||
await prisma.rating.deleteMany({});
|
||||
await prisma.message.deleteMany({});
|
||||
await prisma.match.deleteMany({});
|
||||
await prisma.chatRoom.deleteMany({});
|
||||
await prisma.eventParticipant.deleteMany({});
|
||||
await prisma.event.deleteMany({});
|
||||
await prisma.user.deleteMany({});
|
||||
// Clean up - only delete test data, not all data
|
||||
const testUsernames = ['john_dancer', 'sarah_swings', 'mike_moves', 'outsider'];
|
||||
const testEmails = ['john@example.com', 'sarah@example.com', 'mike@example.com', 'outsider@example.com'];
|
||||
const testEventSlugs = ['test-dance-festival'];
|
||||
|
||||
// Find test users
|
||||
const testUsers = await prisma.user.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ username: { in: testUsernames } },
|
||||
{ email: { in: testEmails } }
|
||||
]
|
||||
},
|
||||
select: { id: true }
|
||||
});
|
||||
const testUserIds = testUsers.map(u => u.id);
|
||||
|
||||
// Find test events
|
||||
const testEvents = await prisma.event.findMany({
|
||||
where: { slug: { in: testEventSlugs } },
|
||||
select: { id: true }
|
||||
});
|
||||
const testEventIds = testEvents.map(e => e.id);
|
||||
|
||||
// Delete related data for test users and events only
|
||||
if (testUserIds.length > 0) {
|
||||
await prisma.rating.deleteMany({ where: { raterId: { in: testUserIds } } });
|
||||
await prisma.message.deleteMany({ where: { userId: { in: testUserIds } } });
|
||||
await prisma.match.deleteMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ user1Id: { in: testUserIds } },
|
||||
{ user2Id: { in: testUserIds } }
|
||||
]
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (testEventIds.length > 0) {
|
||||
await prisma.chatRoom.deleteMany({ where: { eventId: { in: testEventIds } } });
|
||||
await prisma.eventParticipant.deleteMany({ where: { eventId: { in: testEventIds } } });
|
||||
await prisma.event.deleteMany({ where: { id: { in: testEventIds } } });
|
||||
}
|
||||
|
||||
// Delete test users
|
||||
await prisma.user.deleteMany({
|
||||
where: {
|
||||
OR: [
|
||||
{ username: { in: testUsernames } },
|
||||
{ email: { in: testEmails } }
|
||||
]
|
||||
}
|
||||
});
|
||||
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
|
||||
@@ -290,7 +336,7 @@ describe('Matches API Tests', () => {
|
||||
expect(response.body).toHaveProperty('success', false);
|
||||
|
||||
// Clean up
|
||||
await prisma.user.delete({ where: { id: testUser3.id } });
|
||||
await prisma.user.deleteMany({ where: { id: testUser3.id } });
|
||||
});
|
||||
|
||||
it('should return 404 for non-existent match slug', async () => {
|
||||
@@ -351,7 +397,7 @@ describe('Matches API Tests', () => {
|
||||
expect(response.body).toHaveProperty('success', false);
|
||||
|
||||
// Clean up
|
||||
await prisma.match.delete({ where: { slug: newMatch.slug } });
|
||||
await prisma.match.deleteMany({ where: { slug: newMatch.slug } });
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -229,7 +229,7 @@ describe('Socket.IO WebRTC Signaling', () => {
|
||||
expect(error.message).toContain('authorized');
|
||||
|
||||
// Cleanup
|
||||
await prisma.match.delete({ where: { id: unauthorizedMatch.id } });
|
||||
await prisma.match.deleteMany({ where: { id: unauthorizedMatch.id } });
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user