feat: Add unit tests for backend validators and configure Jest.
This commit is contained in:
parent
ebcae0b3e7
commit
9bb941b45e
16 changed files with 2071 additions and 381 deletions
|
|
@ -0,0 +1,96 @@
|
|||
import {
|
||||
SaveVideoProgressValidator,
|
||||
SubmitQuizValidator,
|
||||
} from '@/validators/CoursesStudent.validator';
|
||||
|
||||
describe('SaveVideoProgressValidator', () => {
|
||||
it('should pass with required field only', () => {
|
||||
const { error } = SaveVideoProgressValidator.validate({
|
||||
video_progress_seconds: 60,
|
||||
});
|
||||
expect(error).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should pass with all fields', () => {
|
||||
const { error } = SaveVideoProgressValidator.validate({
|
||||
video_progress_seconds: 120,
|
||||
video_duration_seconds: 600,
|
||||
});
|
||||
expect(error).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should pass with progress = 0 (start of video)', () => {
|
||||
const { error } = SaveVideoProgressValidator.validate({
|
||||
video_progress_seconds: 0,
|
||||
});
|
||||
expect(error).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should fail without video_progress_seconds', () => {
|
||||
const { error } = SaveVideoProgressValidator.validate({});
|
||||
expect(error).toBeDefined();
|
||||
expect(error?.details[0].message).toMatch(/Video progress seconds is required/i);
|
||||
});
|
||||
|
||||
it('should fail with negative progress', () => {
|
||||
const { error } = SaveVideoProgressValidator.validate({
|
||||
video_progress_seconds: -1,
|
||||
});
|
||||
expect(error).toBeDefined();
|
||||
expect(error?.details[0].message).toMatch(/at least 0/i);
|
||||
});
|
||||
|
||||
it('should fail with negative video duration', () => {
|
||||
const { error } = SaveVideoProgressValidator.validate({
|
||||
video_progress_seconds: 10,
|
||||
video_duration_seconds: -1,
|
||||
});
|
||||
expect(error).toBeDefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe('SubmitQuizValidator', () => {
|
||||
const validAnswer = { question_id: 1, choice_id: 2 };
|
||||
|
||||
it('should pass with valid answers', () => {
|
||||
const { error } = SubmitQuizValidator.validate({
|
||||
answers: [validAnswer, { question_id: 2, choice_id: 5 }],
|
||||
});
|
||||
expect(error).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should fail without answers', () => {
|
||||
const { error } = SubmitQuizValidator.validate({});
|
||||
expect(error).toBeDefined();
|
||||
expect(error?.details[0].message).toMatch(/Answers are required/i);
|
||||
});
|
||||
|
||||
it('should fail with empty answers array', () => {
|
||||
const { error } = SubmitQuizValidator.validate({ answers: [] });
|
||||
expect(error).toBeDefined();
|
||||
expect(error?.details[0].message).toMatch(/At least one answer/i);
|
||||
});
|
||||
|
||||
it('should fail if question_id is missing in an answer', () => {
|
||||
const { error } = SubmitQuizValidator.validate({
|
||||
answers: [{ choice_id: 2 }],
|
||||
});
|
||||
expect(error).toBeDefined();
|
||||
expect(error?.details[0].message).toMatch(/Question ID is required/i);
|
||||
});
|
||||
|
||||
it('should fail if choice_id is missing in an answer', () => {
|
||||
const { error } = SubmitQuizValidator.validate({
|
||||
answers: [{ question_id: 1 }],
|
||||
});
|
||||
expect(error).toBeDefined();
|
||||
expect(error?.details[0].message).toMatch(/Choice ID is required/i);
|
||||
});
|
||||
|
||||
it('should fail if question_id is not a positive integer', () => {
|
||||
const { error } = SubmitQuizValidator.validate({
|
||||
answers: [{ question_id: -1, choice_id: 1 }],
|
||||
});
|
||||
expect(error).toBeDefined();
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue