chore: sync infra docs and coverage
This commit is contained in:
		
							
								
								
									
										79
									
								
								backend/src/tests/applications.test.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								backend/src/tests/applications.test.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| const request = require('supertest'); | ||||
| const app = require('../server'); | ||||
| const { registerUser, createEmployerProfile } = require('./utils'); | ||||
|  | ||||
| async function createJob(token) { | ||||
|   const response = await request(app) | ||||
|     .post('/api/jobs') | ||||
|     .set('Authorization', `Bearer ${token}`) | ||||
|     .send({ | ||||
|       title: 'QA Engineer', | ||||
|       description: 'Ensure software quality', | ||||
|       requirements: ['Attention to detail'], | ||||
|       responsibilities: ['Write test plans'], | ||||
|       location: 'Remote', | ||||
|       employmentType: 'full-time', | ||||
|       remoteAllowed: true | ||||
|     }) | ||||
|     .expect(201); | ||||
|  | ||||
|   return response.body.job; | ||||
| } | ||||
|  | ||||
| describe('Applications API', () => { | ||||
|   it('supports full application lifecycle', async () => { | ||||
|     const { token: employerToken } = await registerUser('employer'); | ||||
|     await createEmployerProfile(employerToken); | ||||
|     const job = await createJob(employerToken); | ||||
|  | ||||
|     const { token: candidateToken } = await registerUser('candidate'); | ||||
|  | ||||
|     await request(app) | ||||
|       .post('/api/candidates') | ||||
|       .set('Authorization', `Bearer ${candidateToken}`) | ||||
|       .send({ | ||||
|         location: 'Remote', | ||||
|         skills: ['Automation'], | ||||
|         experienceLevel: 'mid' | ||||
|       }) | ||||
|       .expect(201); | ||||
|  | ||||
|     const applicationResponse = await request(app) | ||||
|       .post('/api/applications') | ||||
|       .set('Authorization', `Bearer ${candidateToken}`) | ||||
|       .send({ | ||||
|         jobId: job.id, | ||||
|         coverLetter: 'Excited to apply' | ||||
|       }) | ||||
|       .expect(201); | ||||
|  | ||||
|     const applicationId = applicationResponse.body.application.id; | ||||
|  | ||||
|     const listForCandidate = await request(app) | ||||
|       .get('/api/applications') | ||||
|       .set('Authorization', `Bearer ${candidateToken}`) | ||||
|       .expect(200); | ||||
|  | ||||
|     expect(listForCandidate.body.applications).toHaveLength(1); | ||||
|  | ||||
|     await request(app) | ||||
|       .put(`/api/applications/${applicationId}/status`) | ||||
|       .set('Authorization', `Bearer ${employerToken}`) | ||||
|       .send({ status: 'reviewed' }) | ||||
|       .expect(200); | ||||
|  | ||||
|     await request(app) | ||||
|       .put(`/api/applications/${applicationId}/notes`) | ||||
|       .set('Authorization', `Bearer ${employerToken}`) | ||||
|       .send({ notes: 'Strong automation background' }) | ||||
|       .expect(200); | ||||
|  | ||||
|     const detailResponse = await request(app) | ||||
|       .get(`/api/applications/${applicationId}`) | ||||
|       .set('Authorization', `Bearer ${employerToken}`) | ||||
|       .expect(200); | ||||
|  | ||||
|     expect(detailResponse.body.status).toBe('reviewed'); | ||||
|     expect(detailResponse.body.notes).toBe('Strong automation background'); | ||||
|   }); | ||||
| }); | ||||
		Reference in New Issue
	
	Block a user