Skip to content

Commit b7b9c88

Browse files
committed
added a mongo memory server for testing
1 parent 24d22da commit b7b9c88

File tree

13 files changed

+652
-27
lines changed

13 files changed

+652
-27
lines changed

jest.config.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
const config = {
2-
transform: {
3-
},
2+
transform: {},
43
testTimeout: 15000,
5-
setupFiles: [
4+
globalSetup: "./test/config/globalSetup.js",
5+
globalTeardown: "./test/config/globalTeardown.js",
6+
setupFilesAfterEnv: [
7+
// "<rootDir>/test/setupFile.ts",
68
"./test/config/setup.js",
79
"./test/config/teardown.js",
810
],

misc/initDB.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ const createdDepts = await Department.createMultiple(DEPTS);
8484

8585
const createdTopics = await Topics.createMultiple(TOPICS);
8686

87-
const MODULES = await generateModules(
87+
const MODULES = generateModules(
8888
createdTopics.map((createdTopic) => createdTopic._id),
8989
);
9090

misc/mockDB/activityMock.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,12 @@ const generateRandomActivity = (
3939
};
4040
};
4141

42+
const checkIteration = (initial, testLength) => {
43+
if (testLength) {
44+
return testLength;
45+
}
46+
return initial;
47+
};
4248
const generateActivity = (
4349
activityBlueprintList,
4450
courseList,
@@ -48,9 +54,11 @@ const generateActivity = (
4854
practicalList,
4955
topicList,
5056
studentList,
57+
testLength,
5158
) => {
59+
const iterationLength = checkIteration(100000, testLength);
5260
const activities = [];
53-
for (let i = 0; i < 100000; i += 1) {
61+
for (let i = 0; i < iterationLength; i += 1) {
5462
const randomBlueprint = faker.helpers.arrayElement(activityBlueprintList);
5563
const randomCourse = faker.helpers.arrayElement(courseList);
5664
const randomFaculty = faker.helpers.arrayElement(facultyList);

misc/mockDB/attendanceMock.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,17 @@ const createRandomAttendance = (studentId, courseId) => {
1414
};
1515
};
1616

17-
const generateAttendance = (studentCourseList) => {
17+
const checkIteration = (initial, testLength) => {
18+
if (testLength) {
19+
return testLength;
20+
}
21+
return initial;
22+
};
23+
24+
const generateAttendance = (studentCourseList, testLength) => {
1825
const attendance = [];
19-
for (let i = 0, j = 0; i < studentCourseList.length; j += 1) {
26+
const iterationLength = checkIteration(studentCourseList.length, testLength);
27+
for (let i = 0, j = 0; i < iterationLength; j += 1) {
2028
attendance.push(
2129
createRandomAttendance(
2230
studentCourseList[i].studentId,

misc/mockDB/userMock.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,24 @@ const createRandomUser = (ID, type) => {
4848

4949
const generatedIDs = [];
5050

51-
const generateUsers = (studentIds, facultyIds) => {
51+
const checkIteration = (initial, testLength) => {
52+
if (testLength) {
53+
return testLength;
54+
}
55+
return initial;
56+
};
57+
58+
const generateUsers = (studentIds, facultyIds, testLength) => {
5259
const users = [];
53-
for (let i = 0; i < studentIds.length; i += 1) {
60+
let iterationLength = checkIteration(studentIds.length, testLength);
61+
for (let i = 0; i < iterationLength; i += 1) {
5462
users.push(createRandomUser(studentIds[i], "STUDENT"));
5563
}
56-
for (let i = 0; i < facultyIds.length; i += 1) {
64+
iterationLength = checkIteration(facultyIds.length, testLength);
65+
for (let i = 0; i < iterationLength; i += 1) {
5766
users.push(createRandomUser(facultyIds[i], "FACULTY"));
5867
}
59-
for (let i = 0; i < 300; i += 1) {
68+
for (let i = 0; i < iterationLength; i += 1) {
6069
let id;
6170
do {
6271
id = `E${getRandomLetter()}${getRandomLetter()}${getRandomNumber()}`;

misc/testMock.js

Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
import { faker } from "@faker-js/faker"; // eslint-disable-line import/no-extraneous-dependencies
2+
import Infrastructure from "#models/infrastructure";
3+
import Accreditation from "#models/accreditation";
4+
import Organization from "#models/organization";
5+
import Department from "#models/department";
6+
import Topics from "#models/topic";
7+
import Module from "#models/module";
8+
import Tutorial from "#models/tutorial";
9+
import Practical from "#models/practical";
10+
import Semester from "#models/semester";
11+
import Course from "#models/course";
12+
import Faculty from "#models/faculty";
13+
import Student from "#models/student";
14+
import Attendance from "#models/attendance";
15+
import Notification from "#models/notification";
16+
import User from "#models/user";
17+
import Group from "#models/group";
18+
import ActivityBlueprint from "#models/activityBlueprint";
19+
import Activity from "#models/activity";
20+
import Exam from "#models/exam";
21+
import Paper from "#models/paper";
22+
import Coursework from "#models/coursework";
23+
import Timetable from "#models/timetable";
24+
import generateOrganizations from "#mockDB/orgMock";
25+
import ACCREDS from "#mockDB/accredMock";
26+
import TOPICS from "#mockDB/topicMock";
27+
import generateDepartments from "#mockDB/deptMock";
28+
import generateModules from "#mockDB/moduleMock";
29+
import generateInfrastructures from "#mockDB/infraMock";
30+
import generatePracticals from "#mockDB/pracMock";
31+
import generateTutorials from "#mockDB/tutMock";
32+
import generateSemesters from "#mockDB/semMock";
33+
import generateCourses from "#mockDB/courseMock";
34+
import generateFaculty from "#mockDB/facultyMock";
35+
import generateStudents from "#mockDB/studentMock";
36+
import generateAttendance from "#mockDB/attendanceMock";
37+
import generateNotifications from "#mockDB/notificationMock";
38+
import generateUsers from "#mockDB/userMock"; // eslint-disable-line no-unused-vars
39+
import generateGroups from "#mockDB/groupMock";
40+
import generateActivityBP from "#mockDB/activityBPMock";
41+
import generateActivity from "#mockDB/activityMock";
42+
import generateExams from "#mockDB/examMock";
43+
import generatePaper from "#mockDB/paperMock";
44+
import generateCoursework from "#mockDB/courseworkMock";
45+
import generateTimetables from "#mockDB/timetableMock";
46+
/* eslint-disable no-underscore-dangle */
47+
const createdAccreds = await Accreditation.createMultiple(ACCREDS);
48+
49+
const parentOrg = await Organization.create({
50+
startDate: faker.date.past({ years: 10 }),
51+
name: "Thakur Education",
52+
accreditations: [
53+
createdAccreds[faker.number.int({ min: 0, max: createdAccreds.length - 1 })]
54+
._id,
55+
createdAccreds[faker.number.int({ min: 0, max: createdAccreds.length - 1 })]
56+
._id,
57+
],
58+
});
59+
60+
const ORGS = generateOrganizations(parentOrg._id, createdAccreds);
61+
62+
const createdOrgs = await Organization.createMultiple(ORGS);
63+
64+
const tcetObject = createdOrgs.filter(
65+
(obj) => obj.name === "Thakur College of Engineering & Technology",
66+
)[0];
67+
68+
const INFRA = generateInfrastructures(tcetObject._id);
69+
70+
const createdInfras = await Infrastructure.createMultiple(INFRA);
71+
72+
const filteredInfrastructures = createdInfras.filter((infrastructure) => {
73+
const allowedTypes = ["LAB", "CLASSROOM", "COMPUTER LAB"];
74+
return allowedTypes.includes(infrastructure.type);
75+
});
76+
77+
const DEPTS = generateDepartments(
78+
tcetObject._id,
79+
createdAccreds.map((createdAccred) => createdAccred._id),
80+
filteredInfrastructures.map((createdInfra) => createdInfra._id),
81+
);
82+
83+
const createdDepts = await Department.createMultiple(DEPTS);
84+
85+
const createdTopics = await Topics.createMultiple(TOPICS);
86+
87+
const MODULES = generateModules(
88+
createdTopics.map((createdTopic) => createdTopic._id),
89+
);
90+
91+
const createdModules = await Module.createMultiple(MODULES);
92+
93+
const PRACS = generatePracticals();
94+
95+
const createdPracs = await Practical.createMultiple(PRACS);
96+
97+
const TUTS = generateTutorials();
98+
99+
const createdTuts = await Tutorial.createMultiple(TUTS);
100+
101+
const SEMS = generateSemesters();
102+
103+
const createdSems = await Semester.createMultiple(SEMS);
104+
105+
const COURSES = generateCourses(
106+
createdSems.map((createdSem) => createdSem._id),
107+
createdModules.map((createdModule) => createdModule._id),
108+
createdPracs.map((createdPrac) => createdPrac._id),
109+
createdTuts.map((createdTut) => createdTut._id),
110+
createdDepts.map((createdDept) => createdDept._id),
111+
);
112+
113+
const createdCourses = await Course.createMultiple(COURSES);
114+
115+
const FACULTY = generateFaculty(
116+
createdDepts.map((createdDept) => createdDept._id),
117+
createdCourses.map((createdCourse) => createdCourse._id),
118+
);
119+
120+
const createdFaculty = await Faculty.createMultiple(FACULTY);
121+
122+
const STUDENTS = generateStudents(
123+
createdDepts.map((createdDept) => createdDept._id),
124+
createdCourses.map((createdCourse) => createdCourse._id),
125+
);
126+
127+
const createdStudents = await Student.createMultiple(STUDENTS);
128+
129+
const studentCourseList = createdStudents.map((student) => {
130+
const studentId = student._id.toString();
131+
const coursesOpted = student.coursesOpted.map((courseId) =>
132+
courseId.toString(),
133+
);
134+
return { studentId, coursesOpted };
135+
});
136+
137+
const ATTENDANCE = generateAttendance(studentCourseList, 100);
138+
139+
const createdAttendance = await Attendance.createMultiple(ATTENDANCE); // eslint-disable-line no-unused-vars
140+
141+
const USERS = generateUsers(
142+
// TODO this takes forever bruhh
143+
createdStudents.map((createdStudent) => createdStudent.ERPID),
144+
createdFaculty.map((createdFac) => createdFac.ERPID),
145+
10,
146+
);
147+
148+
const createdUsers = await User.createMultiple(USERS);
149+
150+
// const createdUsers = await User.read(); // use this after you initialized Users at least once, or wait for years every time
151+
152+
const NOTIFS = generateNotifications(
153+
createdUsers // remove data from each of these if you are initializing users for the first time
154+
.filter((user) => user.userType === "STUDENT")
155+
.map((student) => student._id),
156+
createdUsers
157+
.filter((user) => user.userType === "FACULTY")
158+
.map((faculty) => faculty._id),
159+
createdUsers
160+
.filter((user) => user.userType === "ADMIN")
161+
.map((admin) => admin._id),
162+
10,
163+
);
164+
165+
const createdNotifications = await Notification.createMultiple(NOTIFS); // eslint-disable-line no-unused-vars
166+
167+
const GROUPS = generateGroups(
168+
createdUsers
169+
.filter((user) => user.userType === "STUDENT")
170+
.map((student) => student._id),
171+
);
172+
173+
const createdGroups = await Group.createMultiple(GROUPS);
174+
175+
const ACTIVITYBP = generateActivityBP(
176+
createdInfras.map((createdInfra) => createdInfra._id),
177+
createdCourses.map((createdCourse) => createdCourse._id),
178+
createdFaculty.map((faculty) => faculty._id),
179+
createdGroups.map((createdGroup) => createdGroup._id),
180+
);
181+
182+
const createdActivityBP = await ActivityBlueprint.createMultiple(ACTIVITYBP);
183+
184+
const ACTIVITY = generateActivity(
185+
createdActivityBP.map((activityBP) => activityBP._id),
186+
createdCourses.map((createdCourse) => createdCourse._id),
187+
createdFaculty.map((faculty) => faculty._id),
188+
createdGroups.map((createdGroup) => createdGroup._id),
189+
createdTuts.map((createdTut) => createdTut._id),
190+
createdPracs.map((createdPrac) => createdPrac._id),
191+
createdTopics.map((createdTopic) => createdTopic._id),
192+
createdStudents.map((createdStudent) => createdStudent._id),
193+
1000,
194+
);
195+
196+
const createdActivity = await Activity.createMultiple(ACTIVITY);
197+
198+
const EXAMS = generateExams(
199+
createdInfras.map((createdInfra) => createdInfra._id),
200+
createdCourses.map((createdCourse) => createdCourse._id),
201+
createdFaculty.map((faculty) => faculty._id),
202+
);
203+
204+
const createdExams = await Exam.createMultiple(EXAMS);
205+
206+
const PAPERS = generatePaper(
207+
createdStudents.map((createdStudent) => createdStudent._id),
208+
createdExams.map((createdExam) => createdExam._id),
209+
createdFaculty.map((faculty) => faculty._id),
210+
);
211+
212+
const createdPapers = await Paper.createMultiple(PAPERS); // eslint-disable-line no-unused-vars
213+
214+
const COURSEWORK = generateCoursework(
215+
createdStudents.map((createdStudent) => createdStudent._id),
216+
createdCourses.map((createdCourse) => createdCourse._id),
217+
createdTuts.map((createdTut) => createdTut._id),
218+
createdPracs.map((createdPrac) => createdPrac._id),
219+
createdActivity.map((activity) => activity._id),
220+
);
221+
222+
const createdCoursework = await Coursework.createMultiple(COURSEWORK); // eslint-disable-line no-unused-vars
223+
224+
const TIMETABLE = generateTimetables(
225+
createdActivityBP.map((activityBP) => activityBP._id),
226+
createdGroups.map((createdGroup) => createdGroup._id),
227+
createdFaculty.map((faculty) => faculty._id),
228+
);
229+
230+
const createdTimetables = await Timetable.createMultiple(TIMETABLE); // eslint-disable-line no-unused-vars
231+
232+
process.exit(0);

0 commit comments

Comments
 (0)