Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | 7x 7x 7x 7x 7x 7x 7x 7x 16x 7x 15x 15x 15x 11x 11x 11x 1x 1x 1x 1x 1x 1x 24x 24x 24x 23x 23x 23x 23x 7x | const { randomUUID } = require('crypto');
const path = require('path');
const fs = require('fs');
const bcrypt = require('bcryptjs');
const request = require('supertest');
const app = require('../server');
const config = require('../config');
const pool = require('../database/connection');
const uniqueEmail = (prefix = 'user') => `${prefix}-${randomUUID()}@example.com`;
const defaultPassword = 'Password123!';
async function registerUser(role = 'candidate', overrides = {}) {
const userData = {
firstName: overrides.firstName || 'Test',
lastName: overrides.lastName || 'User',
email: overrides.email || uniqueEmail(role),
password: overrides.password || defaultPassword,
role,
...overrides
};
const response = await request(app)
.post('/api/auth/register')
.send(userData);
return {
token: response.body.token,
user: response.body.user,
credentials: {
email: userData.email,
password: userData.password
}
};
}
async function createEmployerProfile(token, overrides = {}) {
const employerData = {
companyName: overrides.companyName || `Company ${randomUUID().slice(0, 8)}`,
industry: overrides.industry || 'Technology',
companySize: overrides.companySize || '11-50',
website: overrides.website || 'https://example.com',
description: overrides.description || 'Test company description',
address: overrides.address || '123 Test St',
phone: overrides.phone || '+1-555-0000',
...overrides
};
const response = await request(app)
.post('/api/employers')
.set('Authorization', `Bearer ${token}`)
.send(employerData);
return response.body.employer;
}
async function createAdminUser() {
const email = uniqueEmail('admin');
const password = defaultPassword;
const passwordHash = await bcrypt.hash(password, 10);
const result = await pool.query(
'INSERT INTO users (email, password_hash, first_name, last_name, role) VALUES ($1, $2, $3, $4, $5) RETURNING id',
[email, passwordHash, 'Admin', 'User', 'admin']
);
const loginResponse = await request(app)
.post('/api/auth/login')
.send({ email, password });
return {
token: loginResponse.body.token,
user: loginResponse.body.user,
userId: result.rows[0].id,
credentials: { email, password }
};
}
async function ensureUploadDir() {
const uploadDir = path.join(__dirname, '..', '..', config.uploadDir);
Iif (!fs.existsSync(uploadDir)) {
fs.mkdirSync(uploadDir, { recursive: true });
}
return uploadDir;
}
async function cleanupUploads() {
const uploadDir = await ensureUploadDir();
Iif (!fs.existsSync(uploadDir)) {
return;
}
const entries = fs.readdirSync(uploadDir);
for (const entry of entries) {
const filePath = path.join(uploadDir, entry);
try {
fs.unlinkSync(filePath);
} catch (error) {
// Ignore deletion errors in tests
}
}
}
module.exports = {
registerUser,
createEmployerProfile,
createAdminUser,
uniqueEmail,
defaultPassword,
ensureUploadDir,
cleanupUploads
};
|