mrfrys-node-server/src/tests/addQuestion.test.ts

134 lines
3.5 KiB
TypeScript

import { Subject, Question } from '../types/basicTypes'
import fs from 'fs'
import { RecievedData } from '../utils/actions'
import {
addQuestion,
createQuestion,
getSubjNameWithoutYear,
} from '../utils/qdbUtils'
const question: Question = createQuestion('asd', 'asd', { type: 'simple' })
test('Adds questions to empty db', () => {
const emptyDb: Subject[] = []
addQuestion(emptyDb, 'test subject', question)
expect(emptyDb.length).toBe(1)
})
test('Adds questions next to existing', () => {
const db: Subject[] = [
{
Name: 'test subject',
Questions: [question],
},
]
addQuestion(db, 'another something', question)
expect(db.length).toBe(2)
})
test('Does not add new subject, multiple new questions', () => {
const db: Subject[] = [
{
Name: 'test subject',
Questions: [question],
},
]
addQuestion(db, 'test subject', question)
addQuestion(db, 'test subject', question)
addQuestion(db, 'test subject', question)
addQuestion(db, 'test subject', question)
expect(db.length).toBe(1)
})
test('Adds new subjects, multiple new questions', () => {
const db: Subject[] = [
{
Name: 'test subject',
Questions: [question],
},
]
addQuestion(db, 'gfjdkglfd', question)
addQuestion(db, ' somrthing test ', question)
addQuestion(db, 'aaaaaaaa', question)
expect(db.length).toBe(4)
})
test("New subject names shouldn't be empty", () => {
const data: RecievedData = JSON.parse(
fs.readFileSync(
__dirname + '/../../devel/tests/testData/ROS.json',
'utf8'
)
)
const db: Subject[] = [
{
Name: 'test subject',
Questions: [question],
},
]
data.quiz.forEach((question) => {
const subjName = getSubjNameWithoutYear(data.subj)
addQuestion(db, subjName, question)
})
db.forEach((subj) => {
expect(subj.Name).toBeTruthy()
})
})
test('New questions shouldnt be added to accidental empty named subjects', () => {
const data: RecievedData = JSON.parse(
fs.readFileSync(
__dirname + '/../../devel/tests/testData/ROS.json',
'utf8'
)
)
const db: Subject[] = [
{
Name: '',
Questions: [question],
},
]
data.quiz.forEach((question) => {
const subjName = getSubjNameWithoutYear(data.subj)
addQuestion(db, subjName, question)
})
expect(db[0].Questions.length).toBe(1)
expect(db.length).toBe(2)
})
test('Question gets added to the correct subject', () => {
const data: RecievedData = JSON.parse(
fs.readFileSync(
__dirname + '/../../devel/tests/testData/ROS.json',
'utf8'
)
)
const subjName = getSubjNameWithoutYear(data.subj)
const db: Subject[] = [
{
Name: subjName,
Questions: [question],
},
{
Name: data.subj, // subj name with course date in it (2022/23/2 -)
Questions: [question],
},
]
data.quiz.forEach((question) => {
addQuestion(db, subjName, question)
})
data.quiz.forEach((question) => {
addQuestion(db, 'some other subject name', question)
})
expect(db[0].Questions.length).toBe(9)
expect(db[1].Questions.length).toBe(1)
expect(db[2].Questions.length).toBe(8)
expect(db.length).toBe(3)
})