diff --git a/nextjs/src/app/course/[courseName]/calendar/CalendarMonth.tsx b/nextjs/src/app/course/[courseName]/calendar/CalendarMonth.tsx index c612133..ae07bb7 100644 --- a/nextjs/src/app/course/[courseName]/calendar/CalendarMonth.tsx +++ b/nextjs/src/app/course/[courseName]/calendar/CalendarMonth.tsx @@ -62,7 +62,7 @@ function CalendarWeek({ monthNumber: number; }) { return ( -
+
{week.map((day, dayIndex) => ( ))} diff --git a/nextjs/src/app/course/[courseName]/calendar/CourseCalendar.tsx b/nextjs/src/app/course/[courseName]/calendar/CourseCalendar.tsx index 66e6c79..b927341 100644 --- a/nextjs/src/app/course/[courseName]/calendar/CourseCalendar.tsx +++ b/nextjs/src/app/course/[courseName]/calendar/CourseCalendar.tsx @@ -25,19 +25,21 @@ export default function CourseCalendar() { return (
- - {months.map((month) => ( - - ))} - +
+ + {months.map((month) => ( + + ))} + +
); } diff --git a/nextjs/src/app/course/[courseName]/modules/ExpandableModule.tsx b/nextjs/src/app/course/[courseName]/modules/ExpandableModule.tsx index c4f91eb..cd45a9d 100644 --- a/nextjs/src/app/course/[courseName]/modules/ExpandableModule.tsx +++ b/nextjs/src/app/course/[courseName]/modules/ExpandableModule.tsx @@ -12,14 +12,15 @@ import { useQuizzesQueries, } from "@/hooks/localCourse/quizHooks"; import { IModuleItem } from "@/models/local/IModuleItem"; -import { getDateFromStringOrThrow } from "@/models/local/timeUtils"; -import { Suspense, useEffect, useRef, useState } from "react"; +import { + dateToMarkdownString, + getDateFromString, + getDateFromStringOrThrow, + getDateOnlyMarkdownString, +} from "@/models/local/timeUtils"; +import { Fragment, useRef, useState } from "react"; import Modal from "../../../../components/Modal"; import NewItemForm from "./NewItemForm"; -import { useCanvasModulesQuery } from "@/hooks/canvas/canvasModuleHooks"; -import { Spinner } from "@/components/Spinner"; -import { SuspenseAndErrorHandling } from "@/components/SuspenseAndErrorHandling"; -import { isServer } from "@tanstack/react-query"; import { ModuleCanvasStatus } from "./ModuleCanvasStatus"; import ClientOnly from "@/components/ClientOnly"; import ExpandIcon from "../../../../components/icons/ExpandIcon"; @@ -107,9 +108,21 @@ export default function ExpandableModule({
)} - {moduleItems.map(({ type, item }) => ( -
{item.name}
- ))} +
+ + {moduleItems.map(({ type, item }) => { + const date = getDateFromString(item.dueAt); + + return ( + +
+ {date && getDateOnlyMarkdownString(date)} +
+
{item.name}
+
+ ); + })} +
); diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/EditAssignment.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/EditAssignment.tsx index 11f6604..e59f3cc 100644 --- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/EditAssignment.tsx +++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/EditAssignment.tsx @@ -90,8 +90,7 @@ export default function EditAssignment({
{error && error}
- - +
diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPage.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPage.tsx index 91ae978..4c0566f 100644 --- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPage.tsx +++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPage.tsx @@ -9,10 +9,6 @@ import { localPageMarkdownUtils } from "@/models/local/page/localCoursePage"; import { useEffect, useState } from "react"; import PagePreview from "./PagePreview"; import { useLocalCourseSettingsQuery } from "@/hooks/localCourse/localCoursesHooks"; -import { - useCanvasPagesQuery, - useCreateCanvasPageMutation, -} from "@/hooks/canvas/canvasPageHooks"; import EditPageButtons from "./EditPageButtons"; import ClientOnly from "@/components/ClientOnly"; @@ -29,7 +25,6 @@ export default function EditPage({ localPageMarkdownUtils.toMarkdown(page) ); const [error, setError] = useState(""); - const { data: settings } = useLocalCourseSettingsQuery(); useEffect(() => { @@ -78,7 +73,6 @@ export default function EditPage({ )} diff --git a/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPageButtons.tsx b/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPageButtons.tsx index 7e8d960..d0ac5eb 100644 --- a/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPageButtons.tsx +++ b/nextjs/src/app/course/[courseName]/modules/[moduleName]/page/[pageName]/EditPageButtons.tsx @@ -16,19 +16,17 @@ import React from "react"; export default function EditPageButtons({ moduleName, pageName, - courseCanvasId, }: { pageName: string; moduleName: string; - courseCanvasId: number; }) { const { courseName } = useCourseContext(); const { data: settings } = useLocalCourseSettingsQuery(); const { data: page } = usePageQuery(moduleName, pageName); - const { data: canvasPages } = useCanvasPagesQuery(courseCanvasId); - const createPageInCanvas = useCreateCanvasPageMutation(courseCanvasId); - const updatePageInCanvas = useUpdateCanvasPageMutation(courseCanvasId); - const deletePageInCanvas = useDeleteCanvasPageMutation(courseCanvasId); + const { data: canvasPages } = useCanvasPagesQuery(); + const createPageInCanvas = useCreateCanvasPageMutation(); + const updatePageInCanvas = useUpdateCanvasPageMutation(); + const deletePageInCanvas = useDeleteCanvasPageMutation(); const pageInCanvas = canvasPages?.find((p) => p.title === pageName); diff --git a/nextjs/src/hooks/canvas/canvasPageHooks.ts b/nextjs/src/hooks/canvas/canvasPageHooks.ts index df44e9b..ae9e39d 100644 --- a/nextjs/src/hooks/canvas/canvasPageHooks.ts +++ b/nextjs/src/hooks/canvas/canvasPageHooks.ts @@ -4,9 +4,9 @@ import { useMutation, useQuery, useQueryClient, useSuspenseQuery } from "@tansta import { useLocalCourseSettingsQuery } from "../localCourse/localCoursesHooks"; export const canvasPageKeys = { - pagesInCourse: (canvasCourseId: number) => [ + pagesInCourse: (courseCanvasId: number) => [ "canvas", - canvasCourseId, + courseCanvasId, "pages", ], }; @@ -19,20 +19,22 @@ export const useCanvasPagesQuery = () => { }); }; -export const useCreateCanvasPageMutation = (canvasCourseId: number) => { +export const useCreateCanvasPageMutation = () => { + const { data: settings } = useLocalCourseSettingsQuery(); const queryClient = useQueryClient(); return useMutation({ mutationFn: async (page: LocalCoursePage) => - canvasPageService.create(canvasCourseId, page), + canvasPageService.create(settings.canvasId, page), onSuccess: () => { queryClient.invalidateQueries({ - queryKey: canvasPageKeys.pagesInCourse(canvasCourseId), + queryKey: canvasPageKeys.pagesInCourse(settings.canvasId), }); }, }); }; -export const useUpdateCanvasPageMutation = (canvasCourseId: number) => { +export const useUpdateCanvasPageMutation = () => { + const { data: settings } = useLocalCourseSettingsQuery(); const queryClient = useQueryClient(); return useMutation({ mutationFn: async ({ @@ -41,23 +43,24 @@ export const useUpdateCanvasPageMutation = (canvasCourseId: number) => { }: { page: LocalCoursePage; canvasPageId: number; - }) => canvasPageService.update(canvasCourseId, canvasPageId, page), + }) => canvasPageService.update(settings.canvasId, canvasPageId, page), onSuccess: () => { queryClient.invalidateQueries({ - queryKey: canvasPageKeys.pagesInCourse(canvasCourseId), + queryKey: canvasPageKeys.pagesInCourse(settings.canvasId), }); }, }); }; -export const useDeleteCanvasPageMutation = (canvasCourseId: number) => { +export const useDeleteCanvasPageMutation = () => { + const { data: settings } = useLocalCourseSettingsQuery(); const queryClient = useQueryClient(); return useMutation({ mutationFn: async (canvasPageId: number) => - canvasPageService.delete(canvasCourseId, canvasPageId), + canvasPageService.delete(settings.canvasId, canvasPageId), onSuccess: () => { queryClient.invalidateQueries({ - queryKey: canvasPageKeys.pagesInCourse(canvasCourseId), + queryKey: canvasPageKeys.pagesInCourse(settings.canvasId), }); }, }); diff --git a/nextjs/src/services/canvas/canvasService.ts b/nextjs/src/services/canvas/canvasService.ts index 8c09540..7e2e99b 100644 --- a/nextjs/src/services/canvas/canvasService.ts +++ b/nextjs/src/services/canvas/canvasService.ts @@ -1,8 +1,6 @@ import { CanvasEnrollmentTermModel } from "@/models/canvas/enrollmentTerms/canvasEnrollmentTermModel"; -import { canvasApi, canvasServiceUtils } from "./canvasServiceUtils"; +import { canvasApi } from "./canvasServiceUtils"; import { CanvasCourseModel } from "@/models/canvas/courses/canvasCourseModel"; -import { CanvasModuleItem } from "@/models/canvas/modules/canvasModuleItems"; -import { CanvasPage } from "@/models/canvas/pages/canvasPageModel"; import { CanvasEnrollmentModel } from "@/models/canvas/enrollments/canvasEnrollmentModel"; import { axiosClient } from "../axiosUtils"; diff --git a/nextjs/src/services/fileStorage/utils/courseDifferences.ts b/nextjs/src/services/fileStorage/utils/courseDifferences.ts deleted file mode 100644 index b572975..0000000 --- a/nextjs/src/services/fileStorage/utils/courseDifferences.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { LocalCourse, LocalCourseSettings } from "@/models/local/localCourse"; -import { LocalModule } from "@/models/local/localModules"; - -export const CourseDifferences = { - getDeletedChanges( - newCourse: LocalCourse, - oldCourse: LocalCourse - ): DeleteCourseChanges { - if (newCourse === oldCourse) { - const emptyDeletes: DeleteCourseChanges = { - namesOfModulesToDeleteCompletely: [], - deleteContentsOfModule: [], - }; - return emptyDeletes; - } - - const moduleNamesNoLongerReferenced = oldCourse.modules - .filter( - (oldModule) => - !newCourse.modules.some( - (newModule) => newModule.name === oldModule.name - ) - ) - .map((oldModule) => oldModule.name); - - const modulesWithDeletions = oldCourse.modules - .filter( - (oldModule) => - !newCourse.modules.some( - (newModule) => - JSON.stringify(newModule) === JSON.stringify(oldModule) - ) - ) - .map((oldModule) => { - const newModule = newCourse.modules.find( - (m) => m.name === oldModule.name - ); - if (!newModule) return oldModule; - - const unreferencedAssignments = oldModule.assignments.filter( - (oldAssignment) => - !newModule.assignments.some( - (newAssignment) => newAssignment.name === oldAssignment.name - ) - ); - const unreferencedQuizzes = oldModule.quizzes.filter( - (oldQuiz) => - !newModule.quizzes.some((newQuiz) => newQuiz.name === oldQuiz.name) - ); - const unreferencedPages = oldModule.pages.filter( - (oldPage) => - !newModule.pages.some((newPage) => newPage.name === oldPage.name) - ); - - return { - ...oldModule, - assignments: unreferencedAssignments, - quizzes: unreferencedQuizzes, - pages: unreferencedPages, - }; - }); - - return { - namesOfModulesToDeleteCompletely: moduleNamesNoLongerReferenced, - deleteContentsOfModule: modulesWithDeletions, - }; - }, - - getNewChanges( - newCourse: LocalCourse, - oldCourse: LocalCourse - ): NewCourseChanges { - if (newCourse === oldCourse) { - const emptyChanges: NewCourseChanges = { - modules: [], - }; - return emptyChanges; - } - - const differentModules = newCourse.modules - .filter( - (newModule) => - !oldCourse.modules.some( - (oldModule) => - JSON.stringify(oldModule) === JSON.stringify(newModule) - ) - ) - .map((newModule) => { - const oldModule = oldCourse.modules.find( - (m) => m.name === newModule.name - ); - if (!oldModule) return newModule; - - const newAssignments = newModule.assignments.filter( - (newAssignment) => - !oldModule.assignments.some( - (oldAssignment) => - JSON.stringify(newAssignment) === JSON.stringify(oldAssignment) - ) - ); - const newQuizzes = newModule.quizzes.filter( - (newQuiz) => - !oldModule.quizzes.some( - (oldQuiz) => JSON.stringify(newQuiz) === JSON.stringify(oldQuiz) - ) - ); - const newPages = newModule.pages.filter( - (newPage) => - !oldModule.pages.some( - (oldPage) => JSON.stringify(newPage) === JSON.stringify(oldPage) - ) - ); - - return { - ...newModule, - assignments: newAssignments, - quizzes: newQuizzes, - pages: newPages, - }; - }); - - return { - settings: newCourse.settings, - modules: differentModules, - }; - }, -}; - -export interface DeleteCourseChanges { - namesOfModulesToDeleteCompletely: string[]; - deleteContentsOfModule: LocalModule[]; -} - -export interface NewCourseChanges { - modules: LocalModule[]; - settings?: LocalCourseSettings; -} - -// Default values for DeleteCourseChanges and NewCourseChanges -// export const createDeleteCourseChanges = ( -// init?: Partial -// ): DeleteCourseChanges => ({ -// namesOfModulesToDeleteCompletely: init?.namesOfModulesToDeleteCompletely ?? [], -// deleteContentsOfModule: init?.deleteContentsOfModule ?? [], -// }); - -// export const createNewCourseChanges = ( -// init?: Partial -// ): NewCourseChanges => ({ -// modules: init?.modules ?? [], -// settings: init?.settings, -// }); diff --git a/nextjs/src/services/tests/courseDifferenceChanges.test.ts b/nextjs/src/services/tests/courseDifferenceChanges.test.ts deleted file mode 100644 index 2f2bf30..0000000 --- a/nextjs/src/services/tests/courseDifferenceChanges.test.ts +++ /dev/null @@ -1,587 +0,0 @@ -import { describe, it, expect } from "vitest"; -import { LocalCourse } from "@/models/local/localCourse"; -import { CourseDifferences } from "../fileStorage/utils/courseDifferences"; -import { AssignmentSubmissionType } from "@/models/local/assignment/assignmentSubmissionType"; - -describe("CourseDifferencesChangesTests", () => { - // it("can detect new settings", () => { - // const oldCourse: LocalCourse = { - // settings: { - // name: "Test Course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: "07/09/2024 23:59:00", - // endDate: "07/09/2024 23:59:00", - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // settings: { - // ...oldCourse.settings, - // name: "new course name", - // }, - // }; - - // const differences = CourseDifferences.getNewChanges(newCourse, oldCourse); - - // expect(differences.modules).toHaveLength(0); - // expect(differences.settings).not.toBeNull(); - // expect(differences.settings?.name).toBe("new course name"); - // }); - - // it("can detect new module", () => { - // const oldCourse: LocalCourse = { - // settings: { - // name: "Test Course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: "07/09/2024 23:59:00", - // endDate: "07/09/2024 23:59:00", - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "new module", - // assignments: [], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - - // const differences = CourseDifferences.getNewChanges(newCourse, oldCourse); - - // expect(differences.modules).not.toBeNull(); - // expect(differences.modules).toHaveLength(1); - // expect(differences.modules?.[0].name).toBe("new module"); - // }); - - // it("can detect changed assignment", () => { - // const oldCourse: LocalCourse = { - // settings: { - // name: "Test Course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: "07/09/2024 23:59:00", - // endDate: "07/09/2024 23:59:00", - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "new module", - // assignments: [ - // { - // name: "test assignment", - // description: "", - // dueAt: "07/09/2024 23:59:00", - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // ], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "new module", - // assignments: [ - // { - // name: "test assignment", - // description: "new description", - // dueAt: "07/09/2024 23:59:00", - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // ], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - - // const differences = CourseDifferences.getNewChanges(newCourse, oldCourse); - - // expect(differences.modules).not.toBeNull(); - // expect(differences.modules).toHaveLength(1); - // expect(differences.modules?.[0].assignments?.[0].description).toBe( - // "new description" - // ); - // }); - - // it("can properly ignore unchanged modules", () => { - // const commonDate = "07/09/2024 23:59:00"; - // const oldCourse: LocalCourse = { - // settings: { - // name: "Test Course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: commonDate, - // endDate: commonDate, - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "new module", - // assignments: [ - // { - // name: "test assignment", - // description: "", - // dueAt: commonDate, - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // ], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // }; - - // const differences = CourseDifferences.getNewChanges(newCourse, oldCourse); - - // expect(differences.modules).toHaveLength(0); - // }); - - // it("only changed assignment represented", () => { - // const commonDate = "07/09/2024 23:59:00"; - // const oldCourse: LocalCourse = { - // settings: { - // name: "Test Course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: commonDate, - // endDate: commonDate, - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "new module", - // assignments: [ - // { - // name: "test assignment", - // description: "", - // dueAt: commonDate, - // submissionTypes: [AssignmentSubmissionType.ONLINE_UPLOAD], - // allowedFileUploadExtensions: [], - // rubric: [{ points: 1, label: "rubric" }], - // }, - // { - // name: "test assignment 2", - // description: "", - // dueAt: commonDate, - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // ], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "new module", - // assignments: [ - // { - // name: "test assignment", - // description: "", - // dueAt: commonDate, - // submissionTypes: [AssignmentSubmissionType.ONLINE_UPLOAD], - // allowedFileUploadExtensions: [], - // rubric: [{ points: 1, label: "rubric" }], - // }, - // { - // name: "test assignment 2 with a new name", - // description: "", - // dueAt: commonDate, - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // ], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - - // const differences = CourseDifferences.getNewChanges(newCourse, oldCourse); - - // expect(differences.modules).toHaveLength(1); - // expect(differences.modules?.[0].assignments).toHaveLength(1); - // expect(differences.modules?.[0].assignments?.[0].name).toBe( - // "test assignment 2 with a new name" - // ); - // }); - - // it("identical quizzes ignored", () => { - // const commonDate = "07/09/2024 23:59:00"; - // const oldCourse: LocalCourse = { - // settings: { - // name: "Test Course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: commonDate, - // endDate: commonDate, - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "new module", - // assignments: [], - // quizzes: [ - // { - // name: "Test Quiz", - // description: "this is my description", - // dueAt: commonDate, - // shuffleAnswers: true, - // showCorrectAnswers: false, - // oneQuestionAtATime: false, - // allowedAttempts: -1, - // questions: [], - // }, - // ], - // pages: [], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // }; - - // const differences = CourseDifferences.getNewChanges(newCourse, oldCourse); - - // expect(differences.modules).toHaveLength(0); - // }); - - // it("can detect different quiz", () => { - // const commonDate = "07/09/2024 23:59:00"; - // const oldCourse: LocalCourse = { - // settings: { - // name: "Test Course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: commonDate, - // endDate: commonDate, - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "new module", - // assignments: [], - // quizzes: [ - // { - // name: "Test Quiz", - // description: "this is my description", - // dueAt: commonDate, - // shuffleAnswers: true, - // showCorrectAnswers: false, - // oneQuestionAtATime: false, - // allowedAttempts: -1, - // questions: [], - // }, - // ], - // pages: [], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "new module", - // assignments: [], - // quizzes: [ - // { - // name: "Test Quiz", - // description: "this is my description", - // dueAt: commonDate, - // shuffleAnswers: true, - // showCorrectAnswers: false, - // oneQuestionAtATime: false, - // allowedAttempts: -1, - // questions: [], - // lockAt: "12/31/9999 23:59:59", - // }, - // ], - // pages: [], - // }, - // ], - // }; - - // const differences = CourseDifferences.getNewChanges(newCourse, oldCourse); - - // expect(differences.modules).toHaveLength(1); - // expect(differences.modules?.[0].quizzes).toHaveLength(1); - // expect(differences.modules?.[0].quizzes?.[0].lockAt).toBe( - // "12/31/9999 23:59:59" - // ); - // }); - - // it("can detect only different quiz when other quizzes stay", () => { - // const commonDate = "07/09/2024 23:59:00"; - // const oldCourse: LocalCourse = { - // settings: { - // name: "Test Course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: commonDate, - // endDate: commonDate, - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "new module", - // assignments: [], - // quizzes: [ - // { - // name: "Test Quiz", - // description: "this is my description", - // dueAt: commonDate, - // shuffleAnswers: true, - // showCorrectAnswers: false, - // oneQuestionAtATime: false, - // allowedAttempts: -1, - // questions: [], - // }, - // ], - // pages: [], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "new module", - // assignments: [], - // quizzes: [ - // { - // name: "Test Quiz", - // description: "this is my description", - // dueAt: commonDate, - // shuffleAnswers: true, - // showCorrectAnswers: false, - // oneQuestionAtATime: false, - // allowedAttempts: -1, - // questions: [], - // }, - // { - // name: "Test Quiz 2", - // description: "this is my description", - // dueAt: commonDate, - // shuffleAnswers: true, - // showCorrectAnswers: false, - // oneQuestionAtATime: false, - // allowedAttempts: -1, - // questions: [], - // }, - // ], - // pages: [], - // }, - // ], - // }; - - // const differences = CourseDifferences.getNewChanges(newCourse, oldCourse); - - // expect(differences.modules).toHaveLength(1); - // expect(differences.modules?.[0].quizzes).toHaveLength(1); - // expect(differences.modules?.[0].quizzes?.[0].name).toBe("Test Quiz 2"); - // }); - - // it("same pages not detected", () => { - // const commonDate = "07/09/2024 23:59:00"; - // const oldCourse: LocalCourse = { - // settings: { - // name: "Test Course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: commonDate, - // endDate: commonDate, - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "new module", - // assignments: [], - // quizzes: [], - // pages: [ - // { - // name: "test page", - // text: "test description", - // dueAt: commonDate, - // }, - // ], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // }; - - // const differences = CourseDifferences.getNewChanges(newCourse, oldCourse); - - // expect(differences.modules).toHaveLength(0); - // }); - - // it("different page detected", () => { - // const commonDate = "07/09/2024 23:59:00"; - // const oldCourse: LocalCourse = { - // settings: { - // name: "Test Course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: commonDate, - // endDate: commonDate, - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "new module", - // assignments: [], - // quizzes: [], - // pages: [ - // { - // name: "test page", - // text: "test description", - // dueAt: commonDate, - // }, - // ], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "new module", - // assignments: [], - // quizzes: [], - // pages: [ - // { - // name: "test page", - // text: "test description changed", - // dueAt: commonDate, - // }, - // ], - // }, - // ], - // }; - - // const differences = CourseDifferences.getNewChanges(newCourse, oldCourse); - - // expect(differences.modules).toHaveLength(1); - // expect(differences.modules?.[0].pages).toHaveLength(1); - // expect(differences.modules?.[0].pages?.[0].text).toBe( - // "test description changed" - // ); - // }); - - // it("different page detected but not same page", () => { - // const commonDate = "07/09/2024 23:59:00"; - // const oldCourse: LocalCourse = { - // settings: { - // name: "Test Course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: commonDate, - // endDate: commonDate, - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "new module", - // assignments: [], - // quizzes: [], - // pages: [ - // { - // name: "test page", - // text: "test description", - // dueAt: commonDate, - // }, - // ], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "new module", - // assignments: [], - // quizzes: [], - // pages: [ - // { - // name: "test page", - // text: "test description", - // dueAt: commonDate, - // }, - // { - // name: "test page 2", - // text: "test description", - // dueAt: commonDate, - // }, - // ], - // }, - // ], - // }; - - // const differences = CourseDifferences.getNewChanges(newCourse, oldCourse); - - // expect(differences.modules).toHaveLength(1); - // expect(differences.modules?.[0].pages).toHaveLength(1); - // expect(differences.modules?.[0].pages?.[0].name).toBe("test page 2"); - // }); -}); diff --git a/nextjs/src/services/tests/courseDifferencesDeletions.test.ts b/nextjs/src/services/tests/courseDifferencesDeletions.test.ts deleted file mode 100644 index 6db3062..0000000 --- a/nextjs/src/services/tests/courseDifferencesDeletions.test.ts +++ /dev/null @@ -1,451 +0,0 @@ -import { describe, it, expect } from "vitest"; -import { LocalCourse } from "@/models/local/localCourse"; -import { CourseDifferences } from "../fileStorage/utils/courseDifferences"; - -describe("CourseDifferencesDeletionsTests", () => { - // it("same module does not get deleted", () => { - // const oldCourse: LocalCourse = { - // settings: { - // name: "test course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: "07/09/2024 23:59:00", - // endDate: "07/09/2024 23:59:00", - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "test module", - // assignments: [], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "test module", - // assignments: [], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - - // const differences = CourseDifferences.getDeletedChanges( - // newCourse, - // oldCourse - // ); - - // expect(differences.namesOfModulesToDeleteCompletely).toHaveLength(0); - // }); - - // it("changed module - old one gets deleted", () => { - // const oldCourse: LocalCourse = { - // settings: { - // name: "test course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: "07/09/2024 23:59:00", - // endDate: "07/09/2024 23:59:00", - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "test module", - // assignments: [], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "test module 2", - // assignments: [], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - - // const differences = CourseDifferences.getDeletedChanges( - // newCourse, - // oldCourse - // ); - - // expect(differences.namesOfModulesToDeleteCompletely).toHaveLength(1); - // expect(differences.namesOfModulesToDeleteCompletely[0]).toBe("test module"); - // }); - - // it("new assignment name gets deleted", () => { - // const oldCourse: LocalCourse = { - // settings: { - // name: "test course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: "07/09/2024 23:59:00", - // endDate: "07/09/2024 23:59:00", - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "test module", - // assignments: [ - // { - // name: "test assignment", - // description: "test description", - // dueAt: "07/09/2024 23:59:00", - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // ], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "test module", - // assignments: [ - // { - // name: "test assignment changed name", - // description: "test description", - // dueAt: "07/09/2024 23:59:00", - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // ], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - - // const differences = CourseDifferences.getDeletedChanges( - // newCourse, - // oldCourse - // ); - - // expect(differences.namesOfModulesToDeleteCompletely).toHaveLength(0); - // expect(differences.deleteContentsOfModule).toHaveLength(1); - // expect(differences.deleteContentsOfModule[0].assignments).toHaveLength(1); - // expect(differences.deleteContentsOfModule[0].assignments[0].name).toBe( - // "test assignment" - // ); - // }); - - // it("assignments with changed descriptions do not get deleted", () => { - // const oldCourse: LocalCourse = { - // settings: { - // name: "test course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: "07/09/2024 23:59:00", - // endDate: "07/09/2024 23:59:00", - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "test module", - // assignments: [ - // { - // name: "test assignment", - // description: "test description", - // dueAt: "07/09/2024 23:59:00", - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // ], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "test module", - // assignments: [ - // { - // name: "test assignment", - // description: "test description", - // dueAt: "07/09/2024 23:59:00", - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // ], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - - // const differences = CourseDifferences.getDeletedChanges( - // newCourse, - // oldCourse - // ); - - // expect(differences.deleteContentsOfModule).toHaveLength(0); - // }); - - // it("can detect changed and unchanged assignments", () => { - // const oldCourse: LocalCourse = { - // settings: { - // name: "test course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: "07/09/2024 23:59:00", - // endDate: "07/09/2024 23:59:00", - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "test module", - // assignments: [ - // { - // name: "test assignment", - // description: "test description", - // dueAt: "07/09/2024 23:59:00", - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // { - // name: "test assignment 2", - // description: "test description", - // dueAt: "07/09/2024 23:59:00", - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // ], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "test module", - // assignments: [ - // { - // name: "test assignment", - // description: "test description", - // dueAt: "07/09/2024 23:59:00", - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // { - // name: "test assignment 2 changed", - // description: "test description", - // dueAt: "07/09/2024 23:59:00", - // submissionTypes: [], - // allowedFileUploadExtensions: [], - // rubric: [], - // }, - // ], - // quizzes: [], - // pages: [], - // }, - // ], - // }; - - // const differences = CourseDifferences.getDeletedChanges( - // newCourse, - // oldCourse - // ); - - // expect(differences.deleteContentsOfModule).toHaveLength(1); - // expect(differences.deleteContentsOfModule[0].assignments).toHaveLength(1); - // expect(differences.deleteContentsOfModule[0].assignments[0].name).toBe( - // "test assignment 2" - // ); - // }); - - // it("changed quizzes get deleted", () => { - // const oldCourse: LocalCourse = { - // settings: { - // name: "test course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: "07/09/2024 23:59:00", - // endDate: "07/09/2024 23:59:00", - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "test module", - // assignments: [], - // quizzes: [ - // { - // name: "Test Quiz", - // description: "test description", - // dueAt: "07/09/2024 23:59:00", - // shuffleAnswers: false, - // showCorrectAnswers: false, - // oneQuestionAtATime: false, - // allowedAttempts: 0, - // questions: [], - // }, - // { - // name: "Test Quiz 2", - // description: "test description", - // dueAt: "07/09/2024 23:59:00", - // shuffleAnswers: false, - // showCorrectAnswers: false, - // oneQuestionAtATime: false, - // allowedAttempts: 0, - // questions: [], - // }, - // ], - // pages: [], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "test module", - // assignments: [], - // quizzes: [ - // { - // name: "Test Quiz", - // description: "test description", - // dueAt: "07/09/2024 23:59:00", - // shuffleAnswers: false, - // showCorrectAnswers: false, - // oneQuestionAtATime: false, - // allowedAttempts: 0, - // questions: [], - // }, - // { - // name: "Test Quiz 3", - // description: "test description", - // dueAt: "07/09/2024 23:59:00", - // shuffleAnswers: false, - // showCorrectAnswers: false, - // oneQuestionAtATime: false, - // allowedAttempts: 0, - // questions: [], - // }, - // ], - // pages: [], - // }, - // ], - // }; - - // const differences = CourseDifferences.getDeletedChanges( - // newCourse, - // oldCourse - // ); - - // expect(differences.deleteContentsOfModule).toHaveLength(1); - // expect(differences.deleteContentsOfModule[0].quizzes).toHaveLength(1); - // expect(differences.deleteContentsOfModule[0].quizzes[0].name).toBe( - // "Test Quiz 2" - // ); - // }); - - // it("changed pages get deleted", () => { - // const oldCourse: LocalCourse = { - // settings: { - // name: "test course", - // assignmentGroups: [], - // daysOfWeek: [], - // startDate: "07/09/2024 23:59:00", - // endDate: "07/09/2024 23:59:00", - // defaultDueTime: { - // hour: 23, - // minute: 59, - // }, - // }, - // modules: [ - // { - // name: "test module", - // assignments: [], - // quizzes: [], - // pages: [ - // { - // name: "Test Page", - // text: "test contents", - // dueAt: "07/09/2024 23:59:00", - // }, - // { - // name: "Test Page 2", - // text: "test contents", - // dueAt: "07/09/2024 23:59:00", - // }, - // ], - // }, - // ], - // }; - // const newCourse: LocalCourse = { - // ...oldCourse, - // modules: [ - // { - // name: "test module", - // assignments: [], - // quizzes: [], - // pages: [ - // { - // name: "Test Page", - // text: "test contents", - // dueAt: "07/09/2024 23:59:00", - // }, - // { - // name: "Test Page 3", - // text: "test contents", - // dueAt: "07/09/2024 23:59:00", - // }, - // ], - // }, - // ], - // }; - - // const differences = CourseDifferences.getDeletedChanges( - // newCourse, - // oldCourse - // ); - - // expect(differences.deleteContentsOfModule).toHaveLength(1); - // expect(differences.deleteContentsOfModule[0].pages).toHaveLength(1); - // expect(differences.deleteContentsOfModule[0].pages[0].name).toBe( - // "Test Page 2" - // ); - // }); -});