From e07a12f62203c1b3ef6affa2a0639710fd95e78d Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Thu, 21 Aug 2025 08:28:52 -0600 Subject: [PATCH] fix test --- globalSettings.yml | 2 ++ .../[courseName]/calendar/day/getStatus.tsx | 5 +++- .../[assignmentName]/AssignmentPreview.tsx | 6 ----- src/components/MarkdownDisplay.tsx | 2 +- .../canvas/hooks/canvasModuleHooks.ts | 1 - .../services/canvasAssignmentService.ts | 10 +++++-- .../canvas/services/canvasPageService.ts | 4 +-- .../canvas/services/canvasQuizService.ts | 12 ++++++--- .../local/utils/tests/fileStorage.test.ts | 2 ++ src/services/htmlMarkdownUtils.ts | 27 ++++++++++++++----- 10 files changed, 48 insertions(+), 23 deletions(-) diff --git a/globalSettings.yml b/globalSettings.yml index 8c44f50..831ebaf 100644 --- a/globalSettings.yml +++ b/globalSettings.yml @@ -15,3 +15,5 @@ courses: name: Telem and Ops - path: ./4850_AdvancedFE/2024-fall-alex/modules/ name: Old Adv Frontend + - path: ./1430/2025-spring-jonathan/Modules/ + name: Jonathan UX diff --git a/src/app/course/[courseName]/calendar/day/getStatus.tsx b/src/app/course/[courseName]/calendar/day/getStatus.tsx index 5ea6b6c..6caf87a 100644 --- a/src/app/course/[courseName]/calendar/day/getStatus.tsx +++ b/src/app/course/[courseName]/calendar/day/getStatus.tsx @@ -105,7 +105,10 @@ export const getStatus = ({ try { const htmlIsSame = htmlIsCloseEnough( - markdownToHTMLSafe(assignment.description, settings), + markdownToHTMLSafe({ + markdownString: assignment.description, + settings, + }), canvasAssignment.description ); if (!htmlIsSame) diff --git a/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/AssignmentPreview.tsx b/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/AssignmentPreview.tsx index 5852e45..03bbc88 100644 --- a/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/AssignmentPreview.tsx +++ b/src/app/course/[courseName]/modules/[moduleName]/assignment/[assignmentName]/AssignmentPreview.tsx @@ -60,12 +60,6 @@ export default function AssignmentPreview({
- {/*
*/}

diff --git a/src/components/MarkdownDisplay.tsx b/src/components/MarkdownDisplay.tsx index 069af69..c1c93cb 100644 --- a/src/components/MarkdownDisplay.tsx +++ b/src/components/MarkdownDisplay.tsx @@ -35,7 +35,7 @@ function DangerousInnerMarkdown({
); diff --git a/src/features/canvas/hooks/canvasModuleHooks.ts b/src/features/canvas/hooks/canvasModuleHooks.ts index 4665837..3e9799b 100644 --- a/src/features/canvas/hooks/canvasModuleHooks.ts +++ b/src/features/canvas/hooks/canvasModuleHooks.ts @@ -1,4 +1,3 @@ -import { CanvasModuleItem } from "@/features/canvas/models/modules/canvasModuleItems"; import { useLocalCourseSettingsQuery } from "@/features/local/course/localCoursesHooks"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { canvasModuleService } from "../services/canvasModuleService"; diff --git a/src/features/canvas/services/canvasAssignmentService.ts b/src/features/canvas/services/canvasAssignmentService.ts index 108daa6..43da076 100644 --- a/src/features/canvas/services/canvasAssignmentService.ts +++ b/src/features/canvas/services/canvasAssignmentService.ts @@ -29,7 +29,10 @@ export const canvasAssignmentService = { ) { console.log(`Creating assignment: ${localAssignment.name}`); const url = `${canvasApi}/courses/${canvasCourseId}/assignments`; - const content = markdownToHTMLSafe(localAssignment.description, settings); + const content = markdownToHTMLSafe({ + markdownString: localAssignment.description, + settings, + }); const contentWithClassroomLinks = localAssignment.githubClassroomAssignmentShareLink @@ -84,7 +87,10 @@ export const canvasAssignmentService = { allowed_extensions: localAssignment.allowedFileUploadExtensions.map( (e) => e.toString() ), - description: markdownToHTMLSafe(localAssignment.description, settings), + description: markdownToHTMLSafe({ + markdownString: localAssignment.description, + settings, + }), due_at: getDateFromString(localAssignment.dueAt)?.toISOString(), lock_at: localAssignment.lockAt && diff --git a/src/features/canvas/services/canvasPageService.ts b/src/features/canvas/services/canvasPageService.ts index 692a528..fd446b8 100644 --- a/src/features/canvas/services/canvasPageService.ts +++ b/src/features/canvas/services/canvasPageService.ts @@ -37,7 +37,7 @@ export const canvasPageService = { const body = { wiki_page: { title: page.name, - body: markdownToHTMLSafe(page.text, settings), + body: markdownToHTMLSafe({ markdownString: page.text, settings }), }, }; @@ -59,7 +59,7 @@ export const canvasPageService = { const body = { wiki_page: { title: page.name, - body: markdownToHTMLSafe(page.text, settings), + body: markdownToHTMLSafe({ markdownString: page.text, settings }), }, }; await axiosClient.put(url, body); diff --git a/src/features/canvas/services/canvasQuizService.ts b/src/features/canvas/services/canvasQuizService.ts index 81e4022..adbca00 100644 --- a/src/features/canvas/services/canvasQuizService.ts +++ b/src/features/canvas/services/canvasQuizService.ts @@ -30,7 +30,7 @@ export const getAnswers = ( }); return question.answers.map((answer) => ({ - answer_html: markdownToHTMLSafe(answer.text, settings), + answer_html: markdownToHTMLSafe({ markdownString: answer.text, settings }), answer_weight: answer.correct ? 100 : 0, answer_text: answer.text, })); @@ -53,7 +53,10 @@ const createQuestionOnly = async ( const body = { question: { - question_text: markdownToHTMLSafe(question.text, settings), + question_text: markdownToHTMLSafe({ + markdownString: question.text, + settings, + }), question_type: getQuestionType(question), points_possible: question.points, position, @@ -175,7 +178,10 @@ export const canvasQuizService = { const body = { quiz: { title: localQuiz.name, - description: markdownToHTMLSafe(localQuiz.description, settings), + description: markdownToHTMLSafe({ + markdownString: localQuiz.description, + settings, + }), shuffle_answers: localQuiz.shuffleAnswers, access_code: localQuiz.password, show_correct_answers: localQuiz.showCorrectAnswers, diff --git a/src/features/local/utils/tests/fileStorage.test.ts b/src/features/local/utils/tests/fileStorage.test.ts index 4b36b14..da3ce1c 100644 --- a/src/features/local/utils/tests/fileStorage.test.ts +++ b/src/features/local/utils/tests/fileStorage.test.ts @@ -9,6 +9,7 @@ import { createModuleFile, getModuleNamesFromFiles, } from "@/features/local/modules/moduleRouter"; +import { getCoursePathByName } from "../../globalSettings/globalSettingsFileStorageService"; describe("FileStorageTests", () => { beforeEach(async () => { @@ -41,6 +42,7 @@ describe("FileStorageTests", () => { assets: [], }; + await fileStorageService.settings.createCourseSettings(settings, await getCoursePathByName(name)); await fileStorageService.settings.updateCourseSettings(name, settings); const loadedSettings = await fileStorageService.settings.getCourseSettings({ diff --git a/src/services/htmlMarkdownUtils.ts b/src/services/htmlMarkdownUtils.ts index 00f98d8..7c61ee0 100644 --- a/src/services/htmlMarkdownUtils.ts +++ b/src/services/htmlMarkdownUtils.ts @@ -23,7 +23,7 @@ const mermaidExtension = { }, renderer(token: { text: string }) { const base64 = btoa(token.text); - const url = `https://mermaid.ink/img/${base64}?type=svg` + const url = `https://mermaid.ink/img/${base64}?type=svg`; console.log(token.text, url); return `Mermaid diagram`; }, @@ -78,14 +78,27 @@ export function convertImagesToCanvasImages( return mutableHtml; } -export function markdownToHTMLSafe( - markdownString: string, - settings: LocalCourseSettings, - convertImages: boolean = true -) { +export function markdownToHTMLSafe({ + markdownString, + settings, + convertImages = true, + replaceText = [], +}: { + markdownString: string; + settings: LocalCourseSettings; + convertImages?: boolean; + replaceText?: { source: string; destination: string }[]; +}) { const html = markdownToHtmlNoImages(markdownString); if (convertImages) return convertImagesToCanvasImages(html, settings); - else return html; + + + const replacedHtml = replaceText.reduce( + (acc, { source, destination }) => acc.replaceAll(source, destination), + html + ); + return html; + return replacedHtml; } export function markdownToHtmlNoImages(markdownString: string) {