From 3aaf64d3a02709406685a6700d17ea856459346f Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Mon, 6 May 2024 16:53:39 -0600 Subject: [PATCH] added new file change checker --- .../Markdown/CouresDifferencesChangesTests.cs | 515 ++++++++++++++++++ .../Markdown/CouresDifferencesTests.cs | 208 ------- .../CourseDifferencesDeletionsTests.cs | 297 ++++++++++ .../Services/Files/CourseDifferences.cs | 65 ++- requests/assignment.http | 4 +- 5 files changed, 878 insertions(+), 211 deletions(-) create mode 100644 Management.Test/Markdown/CouresDifferencesChangesTests.cs delete mode 100644 Management.Test/Markdown/CouresDifferencesTests.cs create mode 100644 Management.Test/Markdown/CourseDifferencesDeletionsTests.cs diff --git a/Management.Test/Markdown/CouresDifferencesChangesTests.cs b/Management.Test/Markdown/CouresDifferencesChangesTests.cs new file mode 100644 index 0000000..652b5dd --- /dev/null +++ b/Management.Test/Markdown/CouresDifferencesChangesTests.cs @@ -0,0 +1,515 @@ + + +using LocalModels; + +public class CouresDifferencesChangesTests +{ + [Fact] + public void CanDetectNewSettings() + { + LocalCourse oldCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [] + }; + LocalCourse newCourse = new() + { + Settings = new() { Name = "new course name" }, + Modules = [] + }; + var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); + + differences.Modules.Should().BeEmpty(); + differences.Settings.Should().NotBeNull(); + differences.Settings?.Name.Should().Be("new course name"); + } + + [Fact] + public void CanDetectNewModule() + { + + LocalCourse oldCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [] + }; + LocalCourse newCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [ + new() + { + Name = "new module", + } + ] + }; + var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); + + differences.Modules.Should().NotBeNull(); + differences.Modules?.Count().Should().Be(1); + differences.Modules?.First().Name.Should().Be("new module"); + } + + [Fact] + public void CanDetectChangedAssignment() + { + LocalCourse oldCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [ + new() + { + Name = "new module", + Assignments = [ + new() + { + Name = "test assignment", + Description = "", + DueAt = new DateTime(), + SubmissionTypes = [], + Rubric = [] + } + ] + }] + }; + LocalCourse newCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [ + new() + { + Name = "new module", + Assignments = [ + new() + { + Name = "test assignment", + Description = "new description", + DueAt = new DateTime(), + SubmissionTypes = [], + Rubric = [] + } + ] + } + ] + }; + var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); + + differences.Modules.Should().NotBeNull(); + differences.Modules?.Count().Should().Be(1); + differences.Modules?.First().Assignments.First().Description.Should().Be("new description"); + } + + [Fact] + public void CanProperlyIgnoreUnchangedModules() + { + var commonDate = new DateTime(); + LocalCourse oldCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [new() + { + Name = "new module", + Assignments = [ + new() + { + Name = "test assignment", + Description = "", + DueAt = commonDate, + SubmissionTypes = [], + Rubric = [] + } + ] + }] + }; + LocalCourse newCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [new() + { + Name = "new module", + Assignments = [ + new() + { + Name = "test assignment", + Description = "", + DueAt = commonDate, + SubmissionTypes = [], + Rubric = [] + } + ] + }] + }; + var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); + + differences.Modules.Should().BeEmpty(); + } + + [Fact] + public void OnlyChangedAssignmentRepresented() + { + var commonDate = new DateTime(); + LocalCourse oldCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [new() + { + Name = "new module", + Assignments = [ + new() + { + Name = "test assignment", + Description = "", + DueAt = commonDate, + SubmissionTypes = [AssignmentSubmissionType.ONLINE_UPLOAD], + Rubric = [ new() {Points = 1, Label = "rubric"} ], + }, + new() + { + Name = "test assignment 2", + Description = "", + DueAt = commonDate, + SubmissionTypes = [], + Rubric = [], + } + ] + }] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [ + new() + { + Name = "new module", + Assignments = [ + new() + { + Name = "test assignment", + Description = "", + DueAt = commonDate, + SubmissionTypes = [AssignmentSubmissionType.ONLINE_UPLOAD], + Rubric = [ new() {Points = 1, Label = "rubric"} ], + }, + new() + { + Name = "test assignment 2 with a new name", + Description = "", + DueAt = commonDate, + SubmissionTypes = [], + Rubric = [] + } + ] + } + ] + }; + var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); + + differences.Modules.First().Assignments.Count().Should().Be(1); + differences.Modules.First().Assignments.First().Name.Should().Be("test assignment 2 with a new name"); + } + + [Fact] + public void IdenticalQuizzesIgnored() + { + var commonDate = new DateTime(); + LocalCourse oldCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [new(){ + Name = "new module", + Assignments = [], + Quizzes = [ + new() + { + Name = "Test Quiz", + Description = @"this is my description ", + LockAt = commonDate, + DueAt = commonDate, + ShuffleAnswers = true, + OneQuestionAtATime = false, + LocalAssignmentGroupName = "someId", + AllowedAttempts = -1, + Questions = [] + } + ] + }] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [new(){ + Name = "new module", + Assignments = [], + Quizzes = [ + new() + { + Name = "Test Quiz", + Description = @"this is my description ", + LockAt = commonDate, + DueAt = commonDate, + ShuffleAnswers = true, + OneQuestionAtATime = false, + LocalAssignmentGroupName = "someId", + AllowedAttempts = -1, + Questions = [] + } + ] + }] + }; + + var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); + differences.Modules.Count().Should().Be(0); + } + + [Fact] + public void CanDetectDifferentQuiz() + { + var commonDate = new DateTime(); + LocalCourse oldCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [new(){ + Name = "new module", + Assignments = [], + Quizzes = [ + new() + { + Name = "Test Quiz", + Description = @"this is my description ", + LockAt = commonDate, + DueAt = commonDate, + ShuffleAnswers = true, + OneQuestionAtATime = false, + LocalAssignmentGroupName = "someId", + AllowedAttempts = -1, + Questions = [] + } + ] + }] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [new(){ + Name = "new module", + Assignments = [], + Quizzes = [ + new() + { + Name = "Test Quiz", + Description = @"this is my description ", + LockAt = DateTime.MaxValue, + DueAt = commonDate, + ShuffleAnswers = true, + OneQuestionAtATime = false, + LocalAssignmentGroupName = "someId", + AllowedAttempts = -1, + Questions = [] + } + ] + }] + }; + + var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); + differences.Modules.Count().Should().Be(1); + differences.Modules.First().Quizzes.Count().Should().Be(1); + differences.Modules.First().Quizzes.First().LockAt.Should().Be(DateTime.MaxValue); + } + + [Fact] + public void CanDetectOnlyDifferentQuiz_WhenOtherQuizzesStay() + { + var commonDate = new DateTime(); + LocalCourse oldCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [new(){ + Name = "new module", + Assignments = [], + Quizzes = [ + new() + { + Name = "Test Quiz", + Description = @"this is my description ", + LockAt = commonDate, + DueAt = commonDate, + ShuffleAnswers = true, + OneQuestionAtATime = false, + LocalAssignmentGroupName = "someId", + AllowedAttempts = -1, + Questions = [] + } + ] + }] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [new(){ + Name = "new module", + Assignments = [], + Quizzes = [ + new() + { + Name = "Test Quiz", + Description = @"this is my description ", + LockAt = commonDate, + DueAt = commonDate, + ShuffleAnswers = true, + OneQuestionAtATime = false, + LocalAssignmentGroupName = "someId", + AllowedAttempts = -1, + Questions = [] + }, + new() + { + Name = "Test Quiz 2", + Description = @"this is my description ", + LockAt = commonDate, + DueAt = commonDate, + ShuffleAnswers = true, + OneQuestionAtATime = false, + LocalAssignmentGroupName = "someId", + AllowedAttempts = -1, + Questions = [] + } + ] + }] + }; + + var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); + differences.Modules.Count().Should().Be(1); + differences.Modules.First().Quizzes.Count().Should().Be(1); + differences.Modules.First().Quizzes.First().Name.Should().Be("Test Quiz 2"); + } + + [Fact] + public void SamePagesNotDetected() + { + + var commonDate = new DateTime(); + LocalCourse oldCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [new(){ + Name = "new module", + Pages = [ + new() + { + Name= "test page", + Text = "test description", + DueAt = commonDate + } + ] + }] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [ + new(){ + Name = "new module", + Pages = [ + new() + { + Name= "test page", + Text = "test description", + DueAt = commonDate + } + ] + } + ] + }; + + var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); + differences.Modules.Count().Should().Be(0); + } + + [Fact] + public void DifferentPageDetected() + { + + var commonDate = new DateTime(); + LocalCourse oldCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [new(){ + Name = "new module", + Pages = [ + new() + { + Name= "test page", + Text = "test description", + DueAt = commonDate + } + ] + }] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [ + new(){ + Name = "new module", + Pages = [ + new() + { + Name= "test page", + Text = "test description changed", + DueAt = commonDate + } + ] + } + ] + }; + + var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); + differences.Modules.Count().Should().Be(1); + differences.Modules.First().Pages.Count().Should().Be(1); + differences.Modules.First().Pages.First().Text.Should().Be("test description changed"); + } + + [Fact] + public void DifferentPageDetected_ButNotSamePage() + { + + var commonDate = new DateTime(); + LocalCourse oldCourse = new() + { + Settings = new() { Name = "Test Course" }, + Modules = [new(){ + Name = "new module", + Pages = [ + new() + { + Name= "test page", + Text = "test description", + DueAt = commonDate + } + ] + }] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [ + new(){ + Name = "new module", + Pages = [ + new() + { + Name= "test page", + Text = "test description", + DueAt = commonDate + }, + new() + { + Name= "test page 2", + Text = "test description", + DueAt = commonDate + } + ] + } + ] + }; + + var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); + differences.Modules.Count().Should().Be(1); + differences.Modules.First().Pages.Count().Should().Be(1); + differences.Modules.First().Pages.First().Name.Should().Be("test page 2"); + } + +} \ No newline at end of file diff --git a/Management.Test/Markdown/CouresDifferencesTests.cs b/Management.Test/Markdown/CouresDifferencesTests.cs deleted file mode 100644 index ab6bb57..0000000 --- a/Management.Test/Markdown/CouresDifferencesTests.cs +++ /dev/null @@ -1,208 +0,0 @@ - - -using LocalModels; - -public class CoursesDifferencesTests -{ - [Fact] - public void CanDetectNewSettings() - { - LocalCourse oldCourse = new() - { - Settings = new() { Name = "Test Course" }, - Modules = [] - }; - LocalCourse newCourse = new() - { - Settings = new() { Name = "new course name" }, - Modules = [] - }; - var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); - - differences.Modules.Should().BeEmpty(); - differences.Settings.Should().NotBeNull(); - differences.Settings?.Name.Should().Be("new course name"); - } - - [Fact] - public void CanDetectNewModule() - { - - LocalCourse oldCourse = new() - { - Settings = new() { Name = "Test Course" }, - Modules = [] - }; - LocalCourse newCourse = new() - { - Settings = new() { Name = "Test Course" }, - Modules = [ - new() - { - Name = "new module", - } - ] - }; - var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); - - differences.Modules.Should().NotBeNull(); - differences.Modules?.Count().Should().Be(1); - differences.Modules?.First().Name.Should().Be("new module"); - } - - [Fact] - public void CanDetectChangedAssignment() - { - LocalCourse oldCourse = new() - { - Settings = new() { Name = "Test Course" }, - Modules = [ - new() - { - Name = "new module", - Assignments = [ - new() - { - Name = "test assignment", - Description = "", - DueAt = new DateTime(), - SubmissionTypes = [], - Rubric = [] - } - ] - }] - }; - LocalCourse newCourse = new() - { - Settings = new() { Name = "Test Course" }, - Modules = [ - new() - { - Name = "new module", - Assignments = [ - new() - { - Name = "test assignment", - Description = "new description", - DueAt = new DateTime(), - SubmissionTypes = [], - Rubric = [] - } - ] - } - ] - }; - var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); - - differences.Modules.Should().NotBeNull(); - differences.Modules?.Count().Should().Be(1); - differences.Modules?.First().Assignments.First().Description.Should().Be("new description"); - } - - [Fact] - public void CanProperlyIgnoreUnchangedModules() - { - var commonDate = new DateTime(); - LocalCourse oldCourse = new() - { - Settings = new() { Name = "Test Course" }, - Modules = [new() - { - Name = "new module", - Assignments = [ - new() - { - Name = "test assignment", - Description = "", - DueAt = commonDate, - SubmissionTypes = [], - Rubric = [] - } - ] - }] - }; - LocalCourse newCourse = new() - { - Settings = new() { Name = "Test Course" }, - Modules = [new() - { - Name = "new module", - Assignments = [ - new() - { - Name = "test assignment", - Description = "", - DueAt = commonDate, - SubmissionTypes = [], - Rubric = [] - } - ] - }] - }; - var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); - - differences.Modules.Should().BeEmpty(); - } - - [Fact] - public void OnlyChangedAssignmentRepresented() - { - var commonDate = new DateTime(); - LocalCourse oldCourse = new() - { - Settings = new() { Name = "Test Course" }, - Modules = [new() - { - Name = "new module", - Assignments = [ - new() - { - Name = "test assignment", - Description = "", - DueAt = commonDate, - SubmissionTypes = [AssignmentSubmissionType.ONLINE_UPLOAD], - Rubric = [ new() {Points = 1, Label = "rubric"} ], - }, - new() - { - Name = "test assignment 2", - Description = "", - DueAt = commonDate, - SubmissionTypes = [], - Rubric = [], - } - ] - }] - }; - LocalCourse newCourse = oldCourse with { - Modules = [ - new() - { - Name = "new module", - Assignments = [ - new() - { - Name = "test assignment", - Description = "", - DueAt = commonDate, - SubmissionTypes = [AssignmentSubmissionType.ONLINE_UPLOAD], - Rubric = [ new() {Points = 1, Label = "rubric"} ], - }, - new() - { - Name = "test assignment 2 with a new name", - Description = "", - DueAt = commonDate, - SubmissionTypes = [], - Rubric = [] - } - ] - } - ] - }; - var differences = CourseDifferences.GetNewChanges(newCourse, oldCourse); - - differences.Modules.First().Assignments.Count().Should().Be(1); - differences.Modules.First().Assignments.First().Name.Should().Be("test assignment 2 with a new name"); - } -} \ No newline at end of file diff --git a/Management.Test/Markdown/CourseDifferencesDeletionsTests.cs b/Management.Test/Markdown/CourseDifferencesDeletionsTests.cs new file mode 100644 index 0000000..fadcbed --- /dev/null +++ b/Management.Test/Markdown/CourseDifferencesDeletionsTests.cs @@ -0,0 +1,297 @@ +using LocalModels; + +public class CourseDifferencesDeletionsTests +{ + [Fact] + public void SameModuleDoesNotGetDeleted() + { + LocalCourse oldCourse = new() + { + Settings = new() { }, + Modules = [ + new() + { + Name = "test module" + }] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [ + new() + { + Name = "test module" + }] + }; + + var differences = CourseDifferences.GetDeletedChanges(newCourse, oldCourse); + + differences.NamesOfModulesToDeleteCompletely.Should().BeEmpty(); + } + [Fact] + public void ChangedModule_OldOneGetsDeleted() + { + LocalCourse oldCourse = new() + { + Settings = new() { }, + Modules = [ + new() + { + Name = "test module" + } + ] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [ + new() + { + Name = "test module 2" + }] + }; + + var differences = CourseDifferences.GetDeletedChanges(newCourse, oldCourse); + + differences.NamesOfModulesToDeleteCompletely.Count().Should().Be(1); + differences.NamesOfModulesToDeleteCompletely.First().Should().Be("test module"); + } + + [Fact] + public void newAssignmentNameGetsDeleted() + { + LocalCourse oldCourse = new() + { + Settings = new() { }, + Modules = [ + new() + { + Name = "test module", + Assignments = [ + new() + { + Name = "test assignment" + } + ] + } + ] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [ + new() + { + Name = "test module", + Assignments = [ + new() + { + Name = "test assignment changed name" + } + ] + }] + }; + + var differences = CourseDifferences.GetDeletedChanges(newCourse, oldCourse); + + differences.NamesOfModulesToDeleteCompletely.Should().BeEmpty(); + differences.DeleteContentsOfModule.Count().Should().Be(1); + differences.DeleteContentsOfModule.First().Assignments.Count().Should().Be(1); + differences.DeleteContentsOfModule.First().Assignments.First().Name.Should().Be("test assignment"); + } + [Fact] + public void AssignmentsWithChangedDescriptionsDoNotGetDeleted() + { + LocalCourse oldCourse = new() + { + Settings = new() { }, + Modules = [ + new() + { + Name = "test module", + Assignments = [ + new() + { + Name = "test assignment", + Description = "test description", + } + ] + } + ] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [ + new() + { + Name = "test module", + Assignments = [ + new() + { + Name = "test assignment", + Description = "test description", + } + ] + }] + }; + + var differences = CourseDifferences.GetDeletedChanges(newCourse, oldCourse); + + differences.DeleteContentsOfModule.Should().BeEmpty(); + } + [Fact] + public void CanDetectChangedAndUnchangedAssignments() + { + LocalCourse oldCourse = new() + { + Settings = new() { }, + Modules = [ + new() + { + Name = "test module", + Assignments = [ + new() + { + Name = "test assignment", + Description = "test description", + }, + new() + { + Name = "test assignment 2", + Description = "test description", + } + ] + } + ] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [ + new() + { + Name = "test module", + Assignments = [ + new() + { + Name = "test assignment", + Description = "test description", + }, + new() + { + Name = "test assignment 2 changed", + Description = "test description", + } + ] + }] + }; + + var differences = CourseDifferences.GetDeletedChanges(newCourse, oldCourse); + + differences.DeleteContentsOfModule.Count().Should().Be(1); + differences.DeleteContentsOfModule.First().Assignments.Count().Should().Be(1); + differences.DeleteContentsOfModule.First().Assignments.First().Name.Should().Be("test assignment 2"); + } + + [Fact] + public void ChangedQuizzesGetDeleted() + { + LocalCourse oldCourse = new() + { + Settings = new() { }, + Modules = [ + new() + { + Name = "test module", + Quizzes = [ + new() + { + Name = "Test Quiz", + Description = "test description" + }, + new() + { + Name = "Test Quiz 2", + Description = "test description" + } + ] + } + ] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [ + new() + { + Name = "test module", + Quizzes = [ + new() + { + Name = "Test Quiz", + Description = "test description" + }, + new() + { + Name = "Test Quiz 3", + Description = "test description" + } + ] + }] + }; + + var differences = CourseDifferences.GetDeletedChanges(newCourse, oldCourse); + + differences.DeleteContentsOfModule.Count().Should().Be(1); + differences.DeleteContentsOfModule.First().Quizzes.Count().Should().Be(1); + differences.DeleteContentsOfModule.First().Quizzes.First().Name.Should().Be("Test Quiz 2"); + } + + [Fact] + public void ChangedPagesGetDeleted() + { + LocalCourse oldCourse = new() + { + Settings = new() { }, + Modules = [ + new() + { + Name = "test module", + Pages = [ + new() + { + Name = "Test Page", + Text = "test contents" + }, + new() + { + Name = "Test Page 2", + Text = "test contents" + }, + ] + } + ] + }; + LocalCourse newCourse = oldCourse with + { + Modules = [ + new() + { + Name = "test module", + Pages = [ + new() + { + Name = "Test Page", + Text = "test contents" + }, + new() + { + Name = "Test Page 3", + Text = "test contents" + }, + ] + }] + }; + + var differences = CourseDifferences.GetDeletedChanges(newCourse, oldCourse); + + differences.DeleteContentsOfModule.Count().Should().Be(1); + differences.DeleteContentsOfModule.First().Pages.Count().Should().Be(1); + differences.DeleteContentsOfModule.First().Pages.First().Name.Should().Be("Test Page 2"); + } +} \ No newline at end of file diff --git a/Management/Services/Files/CourseDifferences.cs b/Management/Services/Files/CourseDifferences.cs index 672aba6..6501a0d 100644 --- a/Management/Services/Files/CourseDifferences.cs +++ b/Management/Services/Files/CourseDifferences.cs @@ -2,6 +2,53 @@ using LocalModels; public static class CourseDifferences { + public static DeleteCourseChanges GetDeletedChanges(LocalCourse newCourse, LocalCourse oldCourse) + { + if (newCourse == oldCourse) + return new DeleteCourseChanges(); + var moduleNamesNoLongerReferenced = oldCourse.Modules + .Where(oldModule => + !newCourse.Modules.Any(newModule => newModule.Name == oldModule.Name) + ) + .Select(oldModule => oldModule.Name) + .ToList(); + + var modulesWithDeletions = oldCourse.Modules + .Where(oldModule => + !newCourse.Modules.Any(newModule => newModule.Equals(oldModule)) + ) + .Select(oldModule => + { + var newModule = newCourse.Modules.FirstOrDefault(m => m.Name == oldModule.Name); + if (newModule == null) + return oldModule; + + var unreferencedAssignments = oldModule.Assignments.Where(oldAssignment => + !newModule.Assignments.Any(newAssignment => newAssignment.Name == oldAssignment.Name) + ); + var unreferencedQuizzes = oldModule.Quizzes.Where(oldQuiz => + !newModule.Quizzes.Any(newQuiz => newQuiz.Name == oldQuiz.Name) + ); + var unreferencedPages = oldModule.Pages.Where(oldPage => + !newModule.Pages.Any(newPage => newPage.Name == oldPage.Name) + ); + + return oldModule with + { + Assignments = unreferencedAssignments, + Quizzes = unreferencedQuizzes, + Pages = unreferencedPages, + }; + }) + .ToList(); + + return new DeleteCourseChanges + { + NamesOfModulesToDeleteCompletely = moduleNamesNoLongerReferenced, + DeleteContentsOfModule = modulesWithDeletions, + }; + } + public static NewCourseChanges GetNewChanges(LocalCourse newCourse, LocalCourse oldCourse) { if (newCourse == oldCourse) @@ -20,7 +67,18 @@ public static class CourseDifferences var newAssignments = newModule.Assignments.Where( newAssignment => !oldModule.Assignments.Any(oldAssignment => newAssignment == oldAssignment) ); - return newModule with { Assignments = newAssignments }; + var newQuizzes = newModule.Quizzes.Where( + newQuiz => !oldModule.Quizzes.Any(oldQuiz => newQuiz == oldQuiz) + ); + var newPages = newModule.Pages.Where( + newPage => !oldModule.Pages.Any(oldPage => newPage == oldPage) + ); + return newModule with + { + Assignments = newAssignments, + Quizzes = newQuizzes, + Pages = newPages, + }; }) .ToArray(); @@ -37,4 +95,9 @@ public record NewCourseChanges { public IEnumerable Modules { get; init; } = []; public LocalCourseSettings? Settings { get; init; } +} +public record DeleteCourseChanges +{ + public IEnumerable NamesOfModulesToDeleteCompletely { get; init; } = []; + public IEnumerable DeleteContentsOfModule { get; init; } = []; } \ No newline at end of file diff --git a/requests/assignment.http b/requests/assignment.http index 7f77f00..359feb0 100644 --- a/requests/assignment.http +++ b/requests/assignment.http @@ -26,7 +26,7 @@ Authorization: Bearer {{$dotenv CANVAS_TOKEN}} } ### -POST https://snow.instructure.com/api/v1/courses/705168/assignments +POST https://snow.instructure.com/api/v1/courses/959700/assignments Authorization: Bearer {{$dotenv CANVAS_TOKEN}} { @@ -139,4 +139,4 @@ GET https://snow.instructure.com/api/v1/courses/871954/assignment_groups/1943132 Authorization: Bearer {{$dotenv CANVAS_TOKEN}} ### GET https://snow.instructure.com/api/v1/courses/871954 -Authorization: Bearer {{$dotenv CANVAS_TOKEN}} \ No newline at end of file +Authorization: Bearer {{$dotenv CANVAS_TOKEN}}