mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 15:18:32 -06:00
deterministic lecture stringification
This commit is contained in:
@@ -7,7 +7,7 @@ describe("can parse holiday string", () => {
|
||||
springBreak:
|
||||
`;
|
||||
const output = parseHolidays(testString);
|
||||
expect(output).toEqual({ springBreak: [] });
|
||||
expect(output).toEqual([{ name: "springBreak", days: [] }]);
|
||||
});
|
||||
it("can parse list with date", () => {
|
||||
const testString = `
|
||||
@@ -15,7 +15,7 @@ springBreak:
|
||||
- 10/12/2024
|
||||
`;
|
||||
const output = parseHolidays(testString);
|
||||
expect(output).toEqual({ springBreak: ["10/12/2024"] });
|
||||
expect(output).toEqual([{ name: "springBreak", days: ["10/12/2024"] }]);
|
||||
});
|
||||
it("can parse list with two dates", () => {
|
||||
const testString = `
|
||||
@@ -24,6 +24,8 @@ springBreak:
|
||||
- 10/13/2024
|
||||
`;
|
||||
const output = parseHolidays(testString);
|
||||
expect(output).toEqual({ springBreak: ["10/12/2024", "10/13/2024"] });
|
||||
expect(output).toEqual([
|
||||
{ name: "springBreak", days: ["10/12/2024", "10/13/2024"] },
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -4,6 +4,7 @@ import { basePath } from "./utils/fileSystemUtils";
|
||||
import fs from "fs/promises";
|
||||
import { Lecture } from "@/models/local/lecture";
|
||||
import { extractLabelValue } from "@/models/local/assignment/utils/markdownUtils";
|
||||
import { getDateOnlyMarkdownString } from "@/models/local/timeUtils";
|
||||
|
||||
export async function getLectures(courseName: string) {
|
||||
const courseLectureRoot = path.join(basePath, courseName, "lectures");
|
||||
@@ -38,18 +39,30 @@ export async function getLectures(courseName: string) {
|
||||
return lecturesByWeek;
|
||||
}
|
||||
|
||||
function parseLecture(fileContent: string): Lecture {
|
||||
const settings = fileContent.split("---\n")[0];
|
||||
const name = extractLabelValue(settings, "Name");
|
||||
const date = extractLabelValue(settings, "Date");
|
||||
export function parseLecture(fileContent: string): Lecture {
|
||||
try {
|
||||
const settings = fileContent.split("---\n")[0];
|
||||
const name = extractLabelValue(settings, "Name");
|
||||
const date = extractLabelValue(settings, "Date");
|
||||
|
||||
const content = fileContent.split("---\n")[1].trim();
|
||||
const content = fileContent.split("---\n")[1].trim();
|
||||
|
||||
return {
|
||||
name,
|
||||
date,
|
||||
content,
|
||||
};
|
||||
return {
|
||||
name,
|
||||
date,
|
||||
content,
|
||||
};
|
||||
} catch (error) {
|
||||
console.error("Error parsing lecture", fileContent);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
export function lectureToString(lecture: Lecture) {
|
||||
return `Name: ${lecture.name}
|
||||
Date: ${lecture.date}
|
||||
---
|
||||
${lecture.content}`;
|
||||
}
|
||||
|
||||
const directoryExists = async (path: string): Promise<boolean> => {
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
import { describe, it, expect, beforeEach } from "vitest";
|
||||
import { promises as fs } from "fs";
|
||||
import {
|
||||
DayOfWeek,
|
||||
LocalCourseSettings,
|
||||
} from "@/models/local/localCourse";
|
||||
import { DayOfWeek, LocalCourseSettings } from "@/models/local/localCourse";
|
||||
import { fileStorageService } from "../fileStorage/fileStorageService";
|
||||
|
||||
describe("FileStorageTests", () => {
|
||||
@@ -30,7 +27,7 @@ describe("FileStorageTests", () => {
|
||||
canvasId: 0,
|
||||
defaultAssignmentSubmissionTypes: [],
|
||||
defaultFileUploadTypes: [],
|
||||
holidays: {}
|
||||
holidays: [],
|
||||
};
|
||||
|
||||
await fileStorageService.settings.updateCourseSettings(name, settings);
|
||||
|
||||
40
nextjs/src/services/tests/lectureStorage.test.ts
Normal file
40
nextjs/src/services/tests/lectureStorage.test.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
lectureToString,
|
||||
parseLecture,
|
||||
} from "../fileStorage/lectureFileStorageService";
|
||||
import { Lecture } from "@/models/local/lecture";
|
||||
|
||||
describe("can parse and stringify lectures", () => {
|
||||
it("can parse lecture", () => {
|
||||
const rawLecture = `
|
||||
Name: some name
|
||||
Date: 6/22/2024
|
||||
---
|
||||
this is the lecture
|
||||
|
||||
|
||||
content`;
|
||||
const parsed = parseLecture(rawLecture);
|
||||
expect(parsed.name).toBe("some name");
|
||||
expect(parsed.date).toBe("6/22/2024");
|
||||
expect(parsed.content).toBe(`this is the lecture
|
||||
|
||||
|
||||
content`);
|
||||
});
|
||||
|
||||
it("parsing and stringification is deterministic", () => {
|
||||
const lecture: Lecture = {
|
||||
name: "test lecture",
|
||||
date: "06/*22/2024",
|
||||
content: `some content
|
||||
- with
|
||||
- a
|
||||
- list`,
|
||||
};
|
||||
const rawLecture = lectureToString(lecture);
|
||||
const parsedLecture = parseLecture(rawLecture);
|
||||
expect(parsedLecture).toStrictEqual(lecture);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user