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