mirror of
https://gitlab.com/MrFry/mrfrys-node-server
synced 2026-04-28 11:17:38 +02:00
205 lines
6.0 KiB
TypeScript
205 lines
6.0 KiB
TypeScript
import { getNewDataSince, mergeSubjects } from '../modules/api/submodules/p2p'
|
|
import {
|
|
countQuestionsInSubjects,
|
|
getSubjectDifference,
|
|
} from '../utils/qdbUtils'
|
|
// import { QuestionDb, Subject } from '../types/basicTypes'
|
|
|
|
import { questions, subjects } from './testData'
|
|
|
|
// ------------------------------------------------------------------------------------
|
|
// getSubjectDifference
|
|
// ------------------------------------------------------------------------------------
|
|
|
|
test('Merging two similar question dbs should result in the same', () => {
|
|
const { newData, newSubjects } = getSubjectDifference(subjects, subjects)
|
|
|
|
const newQuestionCount = countQuestionsInSubjects(newData)
|
|
|
|
expect(newSubjects.length).toBe(0)
|
|
expect(newQuestionCount).toBe(0)
|
|
})
|
|
|
|
test('Merging qdb with another that has one extra question should get added', () => {
|
|
const { newData, newSubjects } = getSubjectDifference(subjects, [
|
|
subjects[0],
|
|
{
|
|
...subjects[1],
|
|
Questions: [...subjects[1].Questions, questions[10]],
|
|
},
|
|
])
|
|
|
|
const newQuestionCount = countQuestionsInSubjects(newData)
|
|
|
|
expect(newSubjects.length).toBe(0)
|
|
expect(newQuestionCount).toBe(1)
|
|
})
|
|
|
|
test('Qdb merging adding new subject', () => {
|
|
const { newData, newSubjects } = getSubjectDifference(
|
|
[subjects[0]],
|
|
[subjects[0], subjects[1]]
|
|
)
|
|
|
|
const newQuestionCount = countQuestionsInSubjects(newData)
|
|
|
|
expect(newSubjects.length).toBe(1)
|
|
expect(newQuestionCount).toBe(0)
|
|
})
|
|
|
|
test('Qdb merging adding new subject and new questions', () => {
|
|
const { newData, newSubjects } = getSubjectDifference(
|
|
[subjects[0]],
|
|
[
|
|
{
|
|
...subjects[0],
|
|
Questions: [...subjects[0].Questions, questions[10]],
|
|
},
|
|
subjects[1],
|
|
subjects[2],
|
|
]
|
|
)
|
|
|
|
const newQuestionCount = countQuestionsInSubjects(newData)
|
|
|
|
expect(newSubjects.length).toBe(2)
|
|
expect(newQuestionCount).toBe(1)
|
|
})
|
|
|
|
// ------------------------------------------------------------------------------------
|
|
// getNewDataSince
|
|
// ------------------------------------------------------------------------------------
|
|
|
|
test('get new data since works', () => {
|
|
const [q1, q2, q3] = questions
|
|
.slice(0, 3)
|
|
.map((q) => ({ ...q, data: { ...q.data, date: 500 } }))
|
|
const [q4, q5, q6] = questions
|
|
.slice(3, 6)
|
|
.map((q) => ({ ...q, data: { ...q.data, date: 1000 } }))
|
|
|
|
const res = getNewDataSince(
|
|
[
|
|
{
|
|
Name: '1',
|
|
Questions: [q1, q2, q3, q4, q5, q6],
|
|
},
|
|
],
|
|
750
|
|
)
|
|
expect(res.length).toBe(1)
|
|
expect(res[0].Questions.length).toBe(3)
|
|
})
|
|
|
|
test('get new data since works, multiple subjects', () => {
|
|
const [q1, q2, q3] = questions
|
|
.slice(0, 3)
|
|
.map((q) => ({ ...q, data: { ...q.data, date: 500 } }))
|
|
const [q4, q5, q6] = questions
|
|
.slice(3, 6)
|
|
.map((q) => ({ ...q, data: { ...q.data, date: 1000 } }))
|
|
|
|
const res = getNewDataSince(
|
|
[
|
|
{
|
|
Name: '1',
|
|
Questions: [q1, q2, q3, q4, q5, q6],
|
|
},
|
|
{
|
|
Name: '2',
|
|
Questions: [q1, q2, q3, q4],
|
|
},
|
|
],
|
|
750
|
|
)
|
|
expect(res.length).toBe(2)
|
|
expect(res[0].Questions.length).toBe(3)
|
|
expect(res[1].Questions.length).toBe(1)
|
|
})
|
|
|
|
test('get new data since works, multiple subjects round 2', () => {
|
|
const [q1, q2, q3] = questions
|
|
.slice(0, 3)
|
|
.map((q) => ({ ...q, data: { ...q.data, date: 500 } }))
|
|
const [q4, q5, q6] = questions
|
|
.slice(3, 6)
|
|
.map((q) => ({ ...q, data: { ...q.data, date: 1000 } }))
|
|
const [q7, q8, q9] = questions
|
|
.slice(6, 9)
|
|
.map((q) => ({ ...q, data: { ...q.data, date: 500 } }))
|
|
|
|
const res = getNewDataSince(
|
|
[
|
|
{
|
|
Name: '1',
|
|
Questions: [q1, q2, q3, q4, q5, q6],
|
|
},
|
|
{
|
|
Name: '2',
|
|
Questions: [q7, q8, q9],
|
|
},
|
|
],
|
|
750
|
|
)
|
|
expect(res.length).toBe(1)
|
|
expect(res[0].Questions.length).toBe(3)
|
|
})
|
|
|
|
// ------------------------------------------------------------------------------------
|
|
// mergeQdbs
|
|
// ------------------------------------------------------------------------------------
|
|
test('merge subjects works', () => {
|
|
const [s1] = subjects
|
|
|
|
const res = mergeSubjects([s1], [s1], [s1])
|
|
expect(res.length).toBe(2)
|
|
expect(res[0].Questions.length).toBe(8)
|
|
})
|
|
|
|
test('merge subjects works, three new subjects', () => {
|
|
const [s1] = subjects
|
|
|
|
const res = mergeSubjects([s1], [s1], [s1, s1, s1])
|
|
expect(res.length).toBe(4)
|
|
expect(res[0].Questions.length).toBe(8)
|
|
expect(res[1].Questions.length).toBe(4)
|
|
expect(res[2].Questions.length).toBe(4)
|
|
expect(res[3].Questions.length).toBe(4)
|
|
})
|
|
|
|
test('merge subjects works, no new subjects, two subjects to merge', () => {
|
|
const [s1] = subjects
|
|
|
|
const res = mergeSubjects([s1], [s1, s1, s1, s1], [])
|
|
expect(res.length).toBe(1)
|
|
expect(res[0].Questions.length).toBe(20)
|
|
})
|
|
|
|
test('merge subjects works, merging a subject with different name gets ignored', () => {
|
|
const [s1, s2, s3] = subjects
|
|
|
|
const res = mergeSubjects([s1, s2], [s3], [])
|
|
expect(res.length).toBe(2)
|
|
expect(res[0].Questions.length).toBe(4)
|
|
expect(res[1].Questions.length).toBe(4)
|
|
})
|
|
|
|
test('merge subjects works, 2 subjects to 2, 1 new', () => {
|
|
const [s1, s2, s3] = subjects
|
|
|
|
const res = mergeSubjects([s1, s2], [s1, s2], [s3])
|
|
expect(res.length).toBe(3)
|
|
expect(res[0].Questions.length).toBe(8)
|
|
expect(res[1].Questions.length).toBe(8)
|
|
expect(res[2].Questions.length).toBe(4)
|
|
})
|
|
|
|
test('merge subjects works, no new data', () => {
|
|
const [s1, s2] = subjects
|
|
|
|
const res = mergeSubjects([s1, s2], [], [])
|
|
expect(res.length).toBe(2)
|
|
expect(res[0].Questions.length).toBe(4)
|
|
expect(res[1].Questions.length).toBe(4)
|
|
})
|