index.tests.js
unknown
javascript
4 years ago
5.2 kB
13
Indexable
const dayjs = require('dayjs');
const Person = require('./models/Person');
const Teacher = require('./models/Teacher');
const Student = require('./models/Student');
describe('Person', () => {
test('should create a new Person object', () => {
const person = new Person();
expect(person).toBeTruthy();
});
describe('isAdult()', () => {
const today = dayjs('2021-12-15').toISOString();
test('should return true for 21-years-old', () => {
const adultPerson = new Person({ dateOfBirth: dayjs('2000-11-12').toISOString() });
expect(adultPerson.isAdult(today)).toEqual(true);
});
// edge case
test('should return true for 18-years-old', () => {
const adultPerson = new Person({ dateOfBirth: dayjs('2003-11-12').toISOString() });
expect(adultPerson.isAdult(today)).toEqual(true);
});
// edge case
test('should return false for 17-years-old, a week away from being an adult', () => {
const teenPerson = new Person({ dateOfBirth: dayjs('2003-12-21').toISOString() });
expect(teenPerson.isAdult(today)).toEqual(false);
});
test('should return false for 16-years-old', () => {
const teenPerson = new Person({ dateOfBirth: dayjs('2005-11-12').toISOString() });
expect(teenPerson.isAdult(today)).toEqual(false);
});
});
describe('isFrom()', () => {
const countryCode = 'BG';
test(`should return true if from ${countryCode}`, () => {
const localPerson = new Person({ birthplace: { city: 'Sofia', countryCode } })
expect(localPerson.isFrom(countryCode)).toEqual(true);
});
test(`should return false if NOT from ${countryCode}`, () => {
const southernPerson = new Person({ birthplace: { city: 'Sofia', countryCode: 'GR' } })
expect(southernPerson.isFrom(countryCode)).toEqual(false);
});
});
});
describe('Teacher', () => {
test('should create a new Teacher object', () => {
const teacher = new Teacher();
expect(teacher).toBeTruthy();
});
describe('isExpert()', () => {
test('should return true for teacher with 7 years of XP', () => {
const xpTeacher = new Teacher({ yearsOfExperience: 7 });
expect(xpTeacher.isExpert()).toEqual(true);
});
// edge case
test('should return true for teacher with 6 years of XP', () => {
const xpTeacher = new Teacher({ yearsOfExperience: 6 });
expect(xpTeacher.isExpert()).toEqual(true);
});
// edge case
test('should return false for teacher with 5 years of XP', () => {
const noobTeacher = new Teacher({ yearsOfExperience: 5 });
expect(noobTeacher.isExpert()).toEqual(false);
});
test('should return false for teacher with 4 years of XP', () => {
const noobTeacher = new Teacher({ yearsOfExperience: 4 });
expect(noobTeacher.isExpert()).toEqual(false);
});
});
});
describe('Student', () => {
test('should create a new Student object', () => {
const student = new Student();
expect(student).toBeTruthy();
});
describe('isHighSchooler()', () => {
test('should return true for 9-th grader', () => {
const student = new Student({ grade: 9 });
expect(student.isHighSchooler()).toEqual(true);
});
// edge case
test('should return true for 8-th grader', () => {
const student = new Student({ grade: 8 });
expect(student.isHighSchooler()).toEqual(true);
});
// edge case
test('should return true for 7-th grader', () => {
const student = new Student({ grade: 7 });
expect(student.isHighSchooler()).toEqual(false);
});
test('should return true for 6-th grader', () => {
const student = new Student({ grade: 6 });
expect(student.isHighSchooler()).toEqual(false);
});
});
describe('demonstratesExcellence()', () => {
test('should return true for student with only excellent marks', () => {
const superExcellentStudent = new Student({
grades: {
math: [6, 6, 6],
chemistry: [6, 6, 6]
}
});
expect(superExcellentStudent.demonstratesExcellence()).toEqual(true);
});
// edge case
test('should return true for student with 4 out of 5 excellent marks', () => {
const excellentStudent = new Student({
grades: {
math: [6, 6],
chemistry: [6, 5, 6]
}
});
expect(excellentStudent.demonstratesExcellence()).toEqual(true);
});
test('should return false for student with 3 out of 5 excellent marks', () => {
const almostExcellentStudent = new Student({
grades: {
math: [4, 6],
chemistry: [6, 5, 6]
}
});
expect(almostExcellentStudent.demonstratesExcellence()).toEqual(false);
});
test('should return false for student with no excellent marks', () => {
const notExcellentStudent = new Student({
grades: {
math: [4, 3, 4],
chemistry: [2, 3, 2]
}
});
expect(notExcellentStudent.demonstratesExcellence()).toEqual(false);
});
});
});
Editor is loading...