feat(tests): Jest backend (38 tests), Jest RTL frontend (28 tests), Playwright E2E spec

This commit is contained in:
Experiments DB Dev
2026-04-15 13:23:48 -04:00
parent c359cb4bb9
commit 5874ed8374
25 changed files with 9620 additions and 3652 deletions
+2 -2
View File
@@ -5,7 +5,7 @@ const auditMiddleware = require('../middleware/auditMiddleware');
const { validateRequest } = require('../middleware/errorHandler');
const animalValidation = [
body('experiment_id').notEmpty().withMessage('experiment_id is required').isUUID().withMessage('experiment_id must be a valid UUID'),
body('experiment_id').notEmpty().withMessage('experiment_id is required').matches(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).withMessage('experiment_id must be a valid UUID'),
body('animal_id_string').trim().notEmpty().withMessage('animal_id_string is required'),
body('animal_name').trim().notEmpty().withMessage('animal_name is required'),
];
@@ -18,7 +18,7 @@ const animalUpdateValidation = [
// GET /api/animals?experimentId=<uuid> — list for experiment
router.get(
'/',
[query('experimentId').optional().isUUID().withMessage('experimentId must be a valid UUID')],
[query('experimentId').optional().matches(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).withMessage('experimentId must be a valid UUID')],
validateRequest,
async (req, res, next) => {
try {
+1 -1
View File
@@ -8,7 +8,7 @@ router.get(
'/',
[
query('tableName').optional().isString(),
query('recordId').optional().isUUID().withMessage('recordId must be a valid UUID'),
query('recordId').optional().matches(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).withMessage('recordId must be a valid UUID'),
query('limit').optional().isInt({ min: 1, max: 200 }).withMessage('limit must be 1200').toInt(),
query('offset').optional().isInt({ min: 0 }).withMessage('offset must be ≥0').toInt(),
],
+2 -2
View File
@@ -5,7 +5,7 @@ const auditMiddleware = require('../middleware/auditMiddleware');
const { validateRequest } = require('../middleware/errorHandler');
const statusValidation = [
body('animal_id').notEmpty().withMessage('animal_id is required').isUUID().withMessage('animal_id must be a valid UUID'),
body('animal_id').notEmpty().withMessage('animal_id is required').matches(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).withMessage('animal_id must be a valid UUID'),
body('date').notEmpty().withMessage('date is required').isISO8601().withMessage('date must be a valid ISO 8601 date (YYYY-MM-DD)'),
body('experiment_description').optional().isString(),
body('vitals').optional().isString(),
@@ -24,7 +24,7 @@ const statusUpdateValidation = [
// GET /api/daily-statuses?animalId=<uuid> — list for animal
router.get(
'/',
[query('animalId').optional().isUUID().withMessage('animalId must be a valid UUID')],
[query('animalId').optional().matches(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).withMessage('animalId must be a valid UUID')],
validateRequest,
async (req, res, next) => {
try {