diff --git a/canvasapi/assignment.py b/canvasapi/assignment.py index c09a4208..0cf7b12d 100644 --- a/canvasapi/assignment.py +++ b/canvasapi/assignment.py @@ -57,6 +57,23 @@ def delete(self, **kwargs): ) return Assignment(self._requester, response.json()) + def duplicate(self, **kwargs): + """ + Duplicate this assignment. + + :calls: `POST /api/v1/courses/:course_id/assignments/:assignment_id/duplicate \ + `_ + + :rtype: :class:`canvasapi.assignment.Assignment` + """ + + response = self._requester.request( + "POST", + "courses/{}/assignments/{}/duplicate".format(self.course_id, self.id), + _kwargs=combine_kwargs(**kwargs), + ) + return Assignment(self._requester, response.json()) + def edit(self, **kwargs): """ Modify this assignment. diff --git a/tests/fixtures/assignment.json b/tests/fixtures/assignment.json index cfcbd2f9..30089c50 100644 --- a/tests/fixtures/assignment.json +++ b/tests/fixtures/assignment.json @@ -121,6 +121,17 @@ }, "status_code": 200 }, + "duplicate_assignment": { + "method": "POST", + "endpoint": "courses/1/assignments/1/duplicate", + "data": { + "id": 1, + "course_id": 1, + "name": "Assignment 1 Copy", + "description": "Duplicate assignment" + }, + "status_code": 200 + }, "edit_assignment": { "method": "PUT", "endpoint": "courses/1/assignments/1", diff --git a/tests/test_assignment.py b/tests/test_assignment.py index 8f59ac8d..c6146060 100644 --- a/tests/test_assignment.py +++ b/tests/test_assignment.py @@ -65,6 +65,15 @@ def test_delete_assignments(self, m): self.assertIsInstance(deleted_assignment, Assignment) + # duplicate() + def test_duplicate_assignments(self, m): + register_uris({"assignment": ["duplicate_assignment"]}, m) + + duplicated_assignment = self.assignment.duplicate() + + self.assertIsInstance(duplicated_assignment, Assignment) + self.assertTrue(duplicated_assignment.name == f"{self.assignment.name} Copy") + # edit() def test_edit_assignment(self, m): register_uris({"assignment": ["edit_assignment"]}, m)