mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 15:18:32 -06:00
adding github classroom links to settings
This commit is contained in:
@@ -17,6 +17,8 @@ export interface LocalAssignment extends IModuleItem {
|
||||
submissionTypes: AssignmentSubmissionType[];
|
||||
allowedFileUploadExtensions: string[];
|
||||
rubric: RubricItem[];
|
||||
githubClassroomAssignmentShareLink?: string;
|
||||
githubClassroomAssignmentLink?: string;
|
||||
}
|
||||
|
||||
export const zodLocalAssignment = z.object({
|
||||
@@ -28,6 +30,8 @@ export const zodLocalAssignment = z.object({
|
||||
submissionTypes: zodAssignmentSubmissionType.array(),
|
||||
allowedFileUploadExtensions: z.string().array(),
|
||||
rubric: zodRubricItem.array(),
|
||||
githubClassroomAssignmentShareLink: z.string().optional(),
|
||||
githubClassroomAssignmentLink: z.string().optional(),
|
||||
});
|
||||
|
||||
export const localAssignmentMarkdown = {
|
||||
|
||||
@@ -52,6 +52,14 @@ const parseSettings = (input: string) => {
|
||||
const assignmentGroupName = extractLabelValue(input, "AssignmentGroupName");
|
||||
const submissionTypes = parseSubmissionTypes(input);
|
||||
const fileUploadExtensions = parseFileUploadExtensions(input);
|
||||
const githubClassroomAssignmentShareLink = extractLabelValue(
|
||||
input,
|
||||
"GithubClassroomAssignmentShareLink"
|
||||
);
|
||||
const githubClassroomAssignmentLink = extractLabelValue(
|
||||
input,
|
||||
"GithubClassroomAssignmentLink"
|
||||
);
|
||||
|
||||
const dueAt = verifyDateOrThrow(rawDueAt, "DueAt");
|
||||
const lockAt = verifyDateStringOrUndefined(rawLockAt);
|
||||
@@ -62,6 +70,8 @@ const parseSettings = (input: string) => {
|
||||
fileUploadExtensions,
|
||||
dueAt,
|
||||
lockAt,
|
||||
githubClassroomAssignmentShareLink,
|
||||
githubClassroomAssignmentLink,
|
||||
};
|
||||
};
|
||||
|
||||
@@ -111,12 +121,13 @@ export const assignmentMarkdownParser = {
|
||||
parseMarkdown(input: string, name: string): LocalAssignment {
|
||||
const settingsString = input.split("---")[0];
|
||||
const {
|
||||
// name,
|
||||
assignmentGroupName,
|
||||
submissionTypes,
|
||||
fileUploadExtensions,
|
||||
dueAt,
|
||||
lockAt,
|
||||
githubClassroomAssignmentShareLink,
|
||||
githubClassroomAssignmentLink,
|
||||
} = parseSettings(settingsString);
|
||||
|
||||
const description = input
|
||||
@@ -139,6 +150,13 @@ export const assignmentMarkdownParser = {
|
||||
rubric: rubric,
|
||||
description: description,
|
||||
};
|
||||
if (githubClassroomAssignmentShareLink) {
|
||||
assignment.githubClassroomAssignmentShareLink =
|
||||
githubClassroomAssignmentShareLink;
|
||||
}
|
||||
if (githubClassroomAssignmentLink) {
|
||||
assignment.githubClassroomAssignmentLink = githubClassroomAssignmentLink;
|
||||
}
|
||||
return assignment;
|
||||
},
|
||||
};
|
||||
|
||||
@@ -25,15 +25,16 @@ const settingsToMarkdown = (assignment: LocalAssignment) => {
|
||||
.map((fileExtension: string) => `- ${fileExtension}`)
|
||||
.join("\n");
|
||||
|
||||
const settingsMarkdown = [
|
||||
const settingsMarkdownArr = [
|
||||
`LockAt: ${printableLockAt}`,
|
||||
`DueAt: ${printableDueDate}`,
|
||||
`AssignmentGroupName: ${assignment.localAssignmentGroupName}`,
|
||||
`SubmissionTypes:\n${submissionTypesMarkdown}`,
|
||||
`AllowedFileUploadExtensions:\n${allowedFileUploadExtensionsMarkdown}`,
|
||||
].join("\n");
|
||||
|
||||
return settingsMarkdown;
|
||||
`GithubClassroomAssignmentShareLink: ${assignment.githubClassroomAssignmentShareLink ?? ""}`,
|
||||
`GithubClassroomAssignmentLink: ${assignment.githubClassroomAssignmentLink ?? ""}`,
|
||||
];
|
||||
return settingsMarkdownArr.join("\n");
|
||||
};
|
||||
|
||||
export const assignmentMarkdownSerializer = {
|
||||
|
||||
@@ -46,8 +46,10 @@ describe("AssignmentMarkdownTests", () => {
|
||||
|
||||
const assignmentMarkdown =
|
||||
assignmentMarkdownSerializer.toMarkdown(assignment);
|
||||
const parsedAssignment =
|
||||
assignmentMarkdownParser.parseMarkdown(assignmentMarkdown, name);
|
||||
const parsedAssignment = assignmentMarkdownParser.parseMarkdown(
|
||||
assignmentMarkdown,
|
||||
name
|
||||
);
|
||||
|
||||
expect(parsedAssignment).toEqual(assignment);
|
||||
});
|
||||
@@ -70,8 +72,10 @@ describe("AssignmentMarkdownTests", () => {
|
||||
|
||||
const assignmentMarkdown =
|
||||
assignmentMarkdownSerializer.toMarkdown(assignment);
|
||||
const parsedAssignment =
|
||||
assignmentMarkdownParser.parseMarkdown(assignmentMarkdown, name);
|
||||
const parsedAssignment = assignmentMarkdownParser.parseMarkdown(
|
||||
assignmentMarkdown,
|
||||
name
|
||||
);
|
||||
|
||||
expect(parsedAssignment).toEqual(assignment);
|
||||
});
|
||||
@@ -94,8 +98,10 @@ describe("AssignmentMarkdownTests", () => {
|
||||
|
||||
const assignmentMarkdown =
|
||||
assignmentMarkdownSerializer.toMarkdown(assignment);
|
||||
const parsedAssignment =
|
||||
assignmentMarkdownParser.parseMarkdown(assignmentMarkdown, name);
|
||||
const parsedAssignment = assignmentMarkdownParser.parseMarkdown(
|
||||
assignmentMarkdown,
|
||||
name
|
||||
);
|
||||
|
||||
expect(parsedAssignment).toEqual(assignment);
|
||||
});
|
||||
@@ -118,8 +124,10 @@ describe("AssignmentMarkdownTests", () => {
|
||||
|
||||
const assignmentMarkdown =
|
||||
assignmentMarkdownSerializer.toMarkdown(assignment);
|
||||
const parsedAssignment =
|
||||
assignmentMarkdownParser.parseMarkdown(assignmentMarkdown, name);
|
||||
const parsedAssignment = assignmentMarkdownParser.parseMarkdown(
|
||||
assignmentMarkdown,
|
||||
name
|
||||
);
|
||||
|
||||
expect(parsedAssignment).toEqual(assignment);
|
||||
});
|
||||
@@ -139,8 +147,10 @@ describe("AssignmentMarkdownTests", () => {
|
||||
|
||||
const assignmentMarkdown =
|
||||
assignmentMarkdownSerializer.toMarkdown(assignment);
|
||||
const parsedAssignment =
|
||||
assignmentMarkdownParser.parseMarkdown(assignmentMarkdown, name);
|
||||
const parsedAssignment = assignmentMarkdownParser.parseMarkdown(
|
||||
assignmentMarkdown,
|
||||
name
|
||||
);
|
||||
|
||||
expect(parsedAssignment).toEqual(assignment);
|
||||
});
|
||||
@@ -160,9 +170,67 @@ describe("AssignmentMarkdownTests", () => {
|
||||
|
||||
const assignmentMarkdown =
|
||||
assignmentMarkdownSerializer.toMarkdown(assignment);
|
||||
const parsedAssignment =
|
||||
assignmentMarkdownParser.parseMarkdown(assignmentMarkdown, name);
|
||||
const parsedAssignment = assignmentMarkdownParser.parseMarkdown(
|
||||
assignmentMarkdown,
|
||||
name
|
||||
);
|
||||
|
||||
expect(parsedAssignment).toEqual(assignment);
|
||||
});
|
||||
|
||||
it("assignment with githubClassroomAssignmentShareLink and githubClassroomAssignmentLink can be parsed", () => {
|
||||
const name = "test assignment";
|
||||
const assignment: LocalAssignment = {
|
||||
name,
|
||||
description: "here is the description",
|
||||
dueAt: "08/21/2023 23:59:00",
|
||||
lockAt: "08/21/2023 23:59:00",
|
||||
submissionTypes: [AssignmentSubmissionType.ONLINE_UPLOAD],
|
||||
localAssignmentGroupName: "Final Project",
|
||||
rubric: [],
|
||||
allowedFileUploadExtensions: [],
|
||||
githubClassroomAssignmentShareLink: "https://github.com/share-link",
|
||||
githubClassroomAssignmentLink: "https://github.com/assignment-link",
|
||||
};
|
||||
|
||||
const assignmentMarkdown =
|
||||
assignmentMarkdownSerializer.toMarkdown(assignment);
|
||||
const parsedAssignment = assignmentMarkdownParser.parseMarkdown(
|
||||
assignmentMarkdown,
|
||||
name
|
||||
);
|
||||
|
||||
expect(parsedAssignment.githubClassroomAssignmentShareLink).toEqual(
|
||||
"https://github.com/share-link"
|
||||
);
|
||||
expect(parsedAssignment.githubClassroomAssignmentLink).toEqual(
|
||||
"https://github.com/assignment-link"
|
||||
);
|
||||
expect(parsedAssignment).toEqual(assignment);
|
||||
});
|
||||
|
||||
it("assignment without githubClassroomAssignmentShareLink and githubClassroomAssignmentLink can be parsed", () => {
|
||||
const name = "test assignment";
|
||||
const assignment: LocalAssignment = {
|
||||
name,
|
||||
description: "here is the description",
|
||||
dueAt: "08/21/2023 23:59:00",
|
||||
lockAt: "08/21/2023 23:59:00",
|
||||
submissionTypes: [AssignmentSubmissionType.ONLINE_UPLOAD],
|
||||
localAssignmentGroupName: "Final Project",
|
||||
rubric: [],
|
||||
allowedFileUploadExtensions: [],
|
||||
};
|
||||
|
||||
const assignmentMarkdown =
|
||||
assignmentMarkdownSerializer.toMarkdown(assignment);
|
||||
const parsedAssignment = assignmentMarkdownParser.parseMarkdown(
|
||||
assignmentMarkdown,
|
||||
name
|
||||
);
|
||||
|
||||
expect(parsedAssignment.githubClassroomAssignmentShareLink).toBeUndefined();
|
||||
expect(parsedAssignment.githubClassroomAssignmentLink).toBeUndefined();
|
||||
expect(parsedAssignment).toEqual(assignment);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user