diff --git a/nextjs/src/models/local/assignment/utils/assignmentPointsUtils.ts b/nextjs/src/models/local/assignment/utils/assignmentPointsUtils.ts index 17dd74c..0d10307 100644 --- a/nextjs/src/models/local/assignment/utils/assignmentPointsUtils.ts +++ b/nextjs/src/models/local/assignment/utils/assignmentPointsUtils.ts @@ -1,7 +1,7 @@ -import { LocalAssignment } from "../localAssignment"; +import { RubricItem } from "../rubricItem"; -export const assignmentPoints = (assignment: LocalAssignment) => { - const basePoints = assignment.rubric +export const assignmentPoints = (rubric: RubricItem[]) => { + const basePoints = rubric .map((r) => r.label.toLowerCase().includes("(extra credit)") ? 0 : r.points ) diff --git a/nextjs/src/services/canvas/canvasAssignmentService.ts b/nextjs/src/services/canvas/canvasAssignmentService.ts index 5c6c4f2..8370a20 100644 --- a/nextjs/src/services/canvas/canvasAssignmentService.ts +++ b/nextjs/src/services/canvas/canvasAssignmentService.ts @@ -43,7 +43,7 @@ export const canvasAssignmentService = { lock_at: localAssignment.lockAt && getDateFromString(localAssignment.lockAt)?.toISOString(), - points_possible: assignmentPoints(localAssignment), + points_possible: assignmentPoints(localAssignment.rubric), assignment_group_id: canvasAssignmentGroupId, }, }; @@ -78,7 +78,7 @@ export const canvasAssignmentService = { lock_at: localAssignment.lockAt && getDateFromString(localAssignment.lockAt)?.toISOString(), - points_possible: assignmentPoints(localAssignment), + points_possible: assignmentPoints(localAssignment.rubric), assignment_group_id: canvasAssignmentGroupId, }, }; @@ -109,7 +109,7 @@ const createRubric = async ( localAssignment: LocalAssignment ) => { const criterion = getRubricCriterion(localAssignment.rubric); - + const rubricBody = { rubric_association_id: assignmentCanvasId, rubric: { @@ -137,7 +137,7 @@ const createRubric = async ( const assignmentPointAdjustmentUrl = `${canvasApi}/courses/${courseId}/assignments/${assignmentCanvasId}`; const assignmentPointAdjustmentBody = { - assignment: { points_possible: assignmentPoints(localAssignment) }, + assignment: { points_possible: assignmentPoints(localAssignment.rubric) }, }; await axiosClient.put( diff --git a/nextjs/src/services/canvas/rubric.test.ts b/nextjs/src/services/canvas/rubric.test.ts index bb80e31..616518b 100644 --- a/nextjs/src/services/canvas/rubric.test.ts +++ b/nextjs/src/services/canvas/rubric.test.ts @@ -1,6 +1,7 @@ import { RubricItem } from "@/models/local/assignment/rubricItem"; import { describe, expect, it } from "vitest"; import { getRubricCriterion } from "./canvasRubricUtils"; +import { assignmentPoints } from "@/models/local/assignment/utils/assignmentPointsUtils"; describe("can prepare rubric for canvas", () =>{ it("can parse normal rubric into criterion", () =>{ @@ -69,4 +70,24 @@ describe("can prepare rubric for canvas", () =>{ } }) }) + + + it("negative rubric items do not contribute to the total", () =>{ + const rubric: RubricItem[] = [ + { + label: "first", + points: 1 + }, + { + label: "second", + points: -2 + }, + { + label: "second", + points: 3 + }, + ] + const points = assignmentPoints(rubric) + expect(points).toBe(4) + }) }) \ No newline at end of file