using Core.Models; using Core.Notes; using Core.Services; using Tests.Builders; namespace Tests.Services; [TestFixture] public class StudentNotesImportPlan_Tests { [SetUp] public void SetUp() { BuilderExtensions.ResetAllBuilders(); } [Test] public void Create_SkipsUnchanged_CreatesAndUpdatesChanged() { var aria = StudentBuilder.Create("Aria", "Chittenden").Build(); var blake = StudentBuilder.Create("Blake", "Nguyen").Build(); var casey = StudentBuilder.Create("Casey", "Ortiz").Build(); var firstWrite = ImportedFieldsTable.Merge(null, [new ImportedField("Application", "Yes")]); var unchanged = ImportedFieldsTable.Merge(firstWrite.Markdown, [new ImportedField("Application", "Yes")]); var created = ImportedFieldsTable.Merge(null, [new ImportedField("Interview Time", "3:20-3:35")]); var updated = ImportedFieldsTable.Merge( ImportedFieldsTable.Merge(null, [new ImportedField("Application", "Yes")]).Markdown, [new ImportedField("Application", "")]); var parseResult = new StudentNotesImportResult { Matches = [ Match(aria, unchanged), Match(blake, created), Match(casey, updated) ] }; HashSet existingNoteIds = [casey.Id]; var actions = StudentNotesImportPlan.Create(parseResult, existingNoteIds); Assert.That(actions, Has.Count.EqualTo(2)); Assert.That(actions.Any(a => a.StudentId == aria.Id), Is.False); Assert.That(actions.Single(a => a.StudentId == blake.Id).Kind, Is.EqualTo(StudentNotePersistKind.Create)); Assert.That(actions.Single(a => a.StudentId == casey.Id).Kind, Is.EqualTo(StudentNotePersistKind.Update)); Assert.That(actions.Single(a => a.StudentId == casey.Id).Markdown, Is.EqualTo(updated.Markdown)); } [Test] public void Create_EmptyMatches_ReturnsNoActions() { var actions = StudentNotesImportPlan.Create(new StudentNotesImportResult(), new HashSet()); Assert.That(actions, Is.Empty); } private static StudentNotesImportMatch Match(Core.Entities.Student student, ImportedFieldsMergeResult merge) => new() { Student = student, Merge = merge }; }