diff --git a/backend/src/__tests__/matches.test.js b/backend/src/__tests__/matches.test.js index fe2785a..416ad0e 100644 --- a/backend/src/__tests__/matches.test.js +++ b/backend/src/__tests__/matches.test.js @@ -4,7 +4,7 @@ const { prisma } = require('../utils/db'); const { hashPassword, generateToken } = require('../utils/auth'); // Test data -let testUser1, testUser2, testEvent, testToken1, testToken2; +let testUser1, testUser2, testUser3, testEvent, testToken1, testToken2, testToken3; let testMatch; // Setup test data @@ -41,9 +41,21 @@ beforeAll(async () => { }, }); + testUser3 = await prisma.user.create({ + data: { + username: 'mike_moves', + email: 'mike@example.com', + passwordHash: await hashPassword('password123'), + emailVerified: true, + firstName: 'Mike', + lastName: 'Johnson', + }, + }); + // Generate tokens testToken1 = generateToken({ userId: testUser1.id }); testToken2 = generateToken({ userId: testUser2.id }); + testToken3 = generateToken({ userId: testUser3.id }); // Create test event testEvent = await prisma.event.create({ @@ -63,6 +75,7 @@ beforeAll(async () => { data: [ { userId: testUser1.id, eventId: testEvent.id }, { userId: testUser2.id, eventId: testEvent.id }, + { userId: testUser3.id, eventId: testEvent.id }, ], }); }); @@ -227,7 +240,7 @@ describe('Matches API Tests', () => { .get(`/api/matches/${testMatch.slug}`) .set('Authorization', `Bearer ${testToken3}`) .expect('Content-Type', /json/) - .expect(404); + .expect(403); expect(response.body).toHaveProperty('success', false); @@ -271,16 +284,18 @@ describe('Matches API Tests', () => { }); it('should reject accepting match by initiator', async () => { - // Create new match for this test + // Create new match for this test (with testUser3) const newMatchRes = await request(app) .post('/api/matches') .set('Authorization', `Bearer ${testToken1}`) .send({ - targetUserId: testUser2.id, + targetUserId: testUser3.id, eventSlug: testEvent.slug, - }); + }) + .expect(201); const newMatch = newMatchRes.body.data; + expect(newMatch).toHaveProperty('slug'); const response = await request(app) .put(`/api/matches/${newMatch.slug}/accept`) @@ -310,20 +325,22 @@ describe('Matches API Tests', () => { describe('DELETE /api/matches/:slug', () => { it('should delete/reject a match request', async () => { - // Create new match for deletion test + // Create new match for deletion test (with a different user) const newMatchRes = await request(app) .post('/api/matches') - .set('Authorization', `Bearer ${testToken1}`) + .set('Authorization', `Bearer ${testToken2}`) .send({ - targetUserId: testUser2.id, + targetUserId: testUser3.id, eventSlug: testEvent.slug, - }); + }) + .expect(201); const newMatch = newMatchRes.body.data; + expect(newMatch).toHaveProperty('slug'); const response = await request(app) .delete(`/api/matches/${newMatch.slug}`) - .set('Authorization', `Bearer ${testToken1}`) + .set('Authorization', `Bearer ${testToken2}`) .expect('Content-Type', /json/) .expect(200); @@ -354,10 +371,9 @@ describe('Ratings API Tests', () => { .expect(201); expect(response.body).toHaveProperty('success', true); - expect(response.body).toHaveProperty('message'); - expect(response.body.data.rating).toHaveProperty('score', 5); - expect(response.body.data.rating).toHaveProperty('comment', 'Great partner!'); - expect(response.body.data.rating).toHaveProperty('wouldCollaborateAgain', true); + expect(response.body.data).toHaveProperty('score', 5); + expect(response.body.data).toHaveProperty('comment', 'Great partner!'); + expect(response.body.data).toHaveProperty('wouldCollaborateAgain', true); }); it('should reject duplicate rating from same user', async () => { @@ -403,8 +419,8 @@ describe('Ratings API Tests', () => { .expect(201); expect(response.body).toHaveProperty('success', true); - expect(response.body.data.rating).toHaveProperty('score', 4); - expect(response.body.data.rating).toHaveProperty('comment', null); + expect(response.body.data).toHaveProperty('score', 4); + expect(response.body.data).toHaveProperty('comment', null); }); it('should auto-complete match when both users rate', async () => {