mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
deterministic lecture stringification
This commit is contained in:
@@ -7,7 +7,7 @@ describe("can parse holiday string", () => {
|
|||||||
springBreak:
|
springBreak:
|
||||||
`;
|
`;
|
||||||
const output = parseHolidays(testString);
|
const output = parseHolidays(testString);
|
||||||
expect(output).toEqual({ springBreak: [] });
|
expect(output).toEqual([{ name: "springBreak", days: [] }]);
|
||||||
});
|
});
|
||||||
it("can parse list with date", () => {
|
it("can parse list with date", () => {
|
||||||
const testString = `
|
const testString = `
|
||||||
@@ -15,7 +15,7 @@ springBreak:
|
|||||||
- 10/12/2024
|
- 10/12/2024
|
||||||
`;
|
`;
|
||||||
const output = parseHolidays(testString);
|
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", () => {
|
it("can parse list with two dates", () => {
|
||||||
const testString = `
|
const testString = `
|
||||||
@@ -24,6 +24,8 @@ springBreak:
|
|||||||
- 10/13/2024
|
- 10/13/2024
|
||||||
`;
|
`;
|
||||||
const output = parseHolidays(testString);
|
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 fs from "fs/promises";
|
||||||
import { Lecture } from "@/models/local/lecture";
|
import { Lecture } from "@/models/local/lecture";
|
||||||
import { extractLabelValue } from "@/models/local/assignment/utils/markdownUtils";
|
import { extractLabelValue } from "@/models/local/assignment/utils/markdownUtils";
|
||||||
|
import { getDateOnlyMarkdownString } from "@/models/local/timeUtils";
|
||||||
|
|
||||||
export async function getLectures(courseName: string) {
|
export async function getLectures(courseName: string) {
|
||||||
const courseLectureRoot = path.join(basePath, courseName, "lectures");
|
const courseLectureRoot = path.join(basePath, courseName, "lectures");
|
||||||
@@ -38,18 +39,30 @@ export async function getLectures(courseName: string) {
|
|||||||
return lecturesByWeek;
|
return lecturesByWeek;
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseLecture(fileContent: string): Lecture {
|
export function parseLecture(fileContent: string): Lecture {
|
||||||
const settings = fileContent.split("---\n")[0];
|
try {
|
||||||
const name = extractLabelValue(settings, "Name");
|
const settings = fileContent.split("---\n")[0];
|
||||||
const date = extractLabelValue(settings, "Date");
|
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 {
|
return {
|
||||||
name,
|
name,
|
||||||
date,
|
date,
|
||||||
content,
|
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> => {
|
const directoryExists = async (path: string): Promise<boolean> => {
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
import { describe, it, expect, beforeEach } from "vitest";
|
import { describe, it, expect, beforeEach } from "vitest";
|
||||||
import { promises as fs } from "fs";
|
import { promises as fs } from "fs";
|
||||||
import {
|
import { DayOfWeek, LocalCourseSettings } from "@/models/local/localCourse";
|
||||||
DayOfWeek,
|
|
||||||
LocalCourseSettings,
|
|
||||||
} from "@/models/local/localCourse";
|
|
||||||
import { fileStorageService } from "../fileStorage/fileStorageService";
|
import { fileStorageService } from "../fileStorage/fileStorageService";
|
||||||
|
|
||||||
describe("FileStorageTests", () => {
|
describe("FileStorageTests", () => {
|
||||||
@@ -30,7 +27,7 @@ describe("FileStorageTests", () => {
|
|||||||
canvasId: 0,
|
canvasId: 0,
|
||||||
defaultAssignmentSubmissionTypes: [],
|
defaultAssignmentSubmissionTypes: [],
|
||||||
defaultFileUploadTypes: [],
|
defaultFileUploadTypes: [],
|
||||||
holidays: {}
|
holidays: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
await fileStorageService.settings.updateCourseSettings(name, settings);
|
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