From 368a438daaa4959f53523f62b9bbdf6762a4b59e Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Sat, 24 Aug 2024 15:46:21 -0600 Subject: [PATCH] consolodating date logic --- nextjs/.env.test | 2 +- .../src/models/local/page/localCoursePage.ts | 13 ++++------- nextjs/src/models/local/timeUtils.ts | 2 +- .../fileStorage/utils/couresMarkdownLoader.ts | 23 +++++++++++++++---- nextjs/src/services/tests/fileStorage.test.ts | 19 ++++++--------- nextjs/vitest.config.ts | 3 +++ 6 files changed, 34 insertions(+), 28 deletions(-) diff --git a/nextjs/.env.test b/nextjs/.env.test index ba9058c..72a67cb 100644 --- a/nextjs/.env.test +++ b/nextjs/.env.test @@ -1 +1 @@ -STORAGE_DIRECTORY="/tmp/canvasManagerStorage" \ No newline at end of file +STORAGE_DIRECTORY="./temp/canvasManagerStorage" \ No newline at end of file diff --git a/nextjs/src/models/local/page/localCoursePage.ts b/nextjs/src/models/local/page/localCoursePage.ts index 0fec520..4b59216 100644 --- a/nextjs/src/models/local/page/localCoursePage.ts +++ b/nextjs/src/models/local/page/localCoursePage.ts @@ -1,5 +1,6 @@ import { extractLabelValue } from "../assignmnet/utils/markdownUtils"; import { IModuleItem } from "../IModuleItem"; +import { verifyDateOrThrow } from "../timeUtils"; export interface LocalCoursePage extends IModuleItem { name: string; @@ -9,9 +10,7 @@ export interface LocalCoursePage extends IModuleItem { export const localPageMarkdownUtils = { toMarkdown: (page: LocalCoursePage) => { - const printableDueDate = new Date(page.dueAt) - .toISOString() - .replace("\u202F", " "); + const printableDueDate = verifyDateOrThrow(page.dueAt, "page DueDateForOrdering") const settingsMarkdown = `Name: ${page.name}\nDueDateForOrdering: ${printableDueDate}\n---\n`; return settingsMarkdown + page.text; }, @@ -20,17 +19,13 @@ export const localPageMarkdownUtils = { const rawSettings = pageMarkdown.split("---")[0]; const name = extractLabelValue(rawSettings, "Name"); const rawDate = extractLabelValue(rawSettings, "DueDateForOrdering"); - - const parsedDate = new Date(rawDate); - if (isNaN(parsedDate.getTime())) { - throw new Error(`could not parse due date: ${rawDate}`); - } + const dueAt = verifyDateOrThrow(rawDate, "page DueDateForOrdering"); const text = pageMarkdown.split("---\n")[1]; const page: LocalCoursePage = { name, - dueAt: parsedDate.toISOString(), + dueAt, text, }; return page; diff --git a/nextjs/src/models/local/timeUtils.ts b/nextjs/src/models/local/timeUtils.ts index 2e0fd6b..1e2a004 100644 --- a/nextjs/src/models/local/timeUtils.ts +++ b/nextjs/src/models/local/timeUtils.ts @@ -3,7 +3,7 @@ export const getDateFromString = (value: string) => { // may need to check for other formats const validDateRegex = - /\d{2}\/\d{2}\/\d{4} [0-2][0-9]|[0-5][0-9]|[0-2][0-9]:[0-5][0-9]:[0-5][0-9]/; + /\d{2}\/\d{2}\/\d{4} [0-2][0-9]:[0-5][0-9]:[0-5][0-9]/; if (!validDateRegex.test(value)) { return undefined; } diff --git a/nextjs/src/services/fileStorage/utils/couresMarkdownLoader.ts b/nextjs/src/services/fileStorage/utils/couresMarkdownLoader.ts index 2e1e6d3..40a83c5 100644 --- a/nextjs/src/services/fileStorage/utils/couresMarkdownLoader.ts +++ b/nextjs/src/services/fileStorage/utils/couresMarkdownLoader.ts @@ -1,8 +1,21 @@ -import { LocalAssignment, localAssignmentMarkdown } from "@/models/local/assignmnet/localAssignment"; -import { LocalCourse, LocalCourseSettings, localCourseYamlUtils } from "@/models/local/localCourse"; +import { + LocalAssignment, + localAssignmentMarkdown, +} from "@/models/local/assignmnet/localAssignment"; +import { + LocalCourse, + LocalCourseSettings, + localCourseYamlUtils, +} from "@/models/local/localCourse"; import { LocalModule } from "@/models/local/localModules"; -import { LocalCoursePage, localPageMarkdownUtils } from "@/models/local/page/localCoursePage"; -import { LocalQuiz, localQuizMarkdownUtils } from "@/models/local/quiz/localQuiz"; +import { + LocalCoursePage, + localPageMarkdownUtils, +} from "@/models/local/page/localCoursePage"; +import { + LocalQuiz, + localQuizMarkdownUtils, +} from "@/models/local/quiz/localQuiz"; import { promises as fs } from "fs"; import path from "path"; @@ -60,7 +73,7 @@ export const courseMarkdownLoader = { const settingsString = await fs.readFile(settingsPath, "utf-8"); const settings = localCourseYamlUtils.parseSettingYaml(settingsString); - + const folderName = path.basename(courseDirectory); return { ...settings, name: folderName }; }, diff --git a/nextjs/src/services/tests/fileStorage.test.ts b/nextjs/src/services/tests/fileStorage.test.ts index 353ffd9..2f73c8d 100644 --- a/nextjs/src/services/tests/fileStorage.test.ts +++ b/nextjs/src/services/tests/fileStorage.test.ts @@ -7,13 +7,8 @@ import { QuestionType } from "@/models/local/quiz/localQuizQuestion"; import { fileStorageService } from "../fileStorage/fileStorageService"; describe("FileStorageTests", () => { - let storageDirectory: string; - beforeEach(() => { - const tempDirectory = path.resolve("./temp"); - storageDirectory = path.join(tempDirectory, "fileStorageTests"); - console.log(storageDirectory); - + const storageDirectory = process.env.STORAGE_DIRECTORY ?? "/tmp/canvasManagerTests"; if (fs.existsSync(storageDirectory)) { fs.rmdirSync(storageDirectory, { recursive: true }); } @@ -121,7 +116,7 @@ describe("FileStorageTests", () => { { points: 4, label: "do task 1" }, { points: 2, label: "do task 2" }, ], - allowedFileUploadExtensions: [] + allowedFileUploadExtensions: [], }, ], quizzes: [], @@ -171,11 +166,11 @@ describe("FileStorageTests", () => { questionType: QuestionType.ESSAY, points: 1, answers: [], - matchDistractors: [] + matchDistractors: [], }, ], showCorrectAnswers: false, - allowedAttempts: 0 + allowedAttempts: 0, }, ], pages: [], @@ -220,7 +215,7 @@ describe("FileStorageTests", () => { { points: 4, label: "do task 1" }, { points: 2, label: "do task 2" }, ], - allowedFileUploadExtensions: [] + allowedFileUploadExtensions: [], }, ], quizzes: [ @@ -239,10 +234,10 @@ describe("FileStorageTests", () => { questionType: QuestionType.SHORT_ANSWER, points: 1, answers: [], - matchDistractors: [] + matchDistractors: [], }, ], - showCorrectAnswers: false + showCorrectAnswers: false, }, ], pages: [], diff --git a/nextjs/vitest.config.ts b/nextjs/vitest.config.ts index 9715301..860c858 100644 --- a/nextjs/vitest.config.ts +++ b/nextjs/vitest.config.ts @@ -1,6 +1,9 @@ +import { loadEnvConfig } from "@next/env"; import { defineConfig } from "vitest/config"; import react from "@vitejs/plugin-react"; +loadEnvConfig(process.cwd()); + export default defineConfig({ plugins: [react()], resolve: {