diff --git a/Core/Models/TagDatabase/TagDatabase.DeleteMethods.cs b/Core/Models/TagDatabase/TagDatabase.DeleteMethods.cs index d517dcc..d8c9fbb 100644 --- a/Core/Models/TagDatabase/TagDatabase.DeleteMethods.cs +++ b/Core/Models/TagDatabase/TagDatabase.DeleteMethods.cs @@ -92,7 +92,9 @@ partial class TagDatabase int count = Convert.ToInt32(await command.ExecuteNonQueryAsync().ConfigureAwait(false)); if (count > 0) await transaction.CommitAsync().ConfigureAwait(false); this.DeleteFromCache(targetTag); - TagDeleted?.Invoke(this, (targetTag.Id, targetTag.Name)); + TagsWritten?.Invoke( + this, new DatabaseEditResult([], [], [(targetTag.Id, targetTag.Name)]) + ); } catch (SqliteException) { diff --git a/Core/Models/TagDatabase/TagDatabase.Events.cs b/Core/Models/TagDatabase/TagDatabase.Events.cs index 0facf7f..588c93f 100644 --- a/Core/Models/TagDatabase/TagDatabase.Events.cs +++ b/Core/Models/TagDatabase/TagDatabase.Events.cs @@ -7,14 +7,10 @@ public partial class TagDatabase /// public event EventHandler InitialisationComplete = delegate { }; - public sealed record DatabaseEditResult(List Added, List Updated, List<(int id, string name)> Deleted); + public sealed record DatabaseEditResult(IReadOnlyList Added, IReadOnlyList Updated, IReadOnlyList<(int id, string name)> Deleted); public event EventHandler? TagsWritten; - public event EventHandler<(int id, string name)> TagDeleted = delegate { }; - - public event EventHandler> TagsAdded = delegate { }; - private void OnInitialisationComplete(EventArgs e) { this.Logger.Debug("OnInitialised invoked!"); diff --git a/Tests/TagDatabaseSaveTests.cs b/Tests/TagDatabaseSaveTests.cs index 4b8745f..2b317aa 100644 --- a/Tests/TagDatabaseSaveTests.cs +++ b/Tests/TagDatabaseSaveTests.cs @@ -1,8 +1,11 @@ +using System.Xml.XPath; using NUnit.Framework; using TagHierarchyManager.Models; namespace TagHierarchyManager.Tests; +// todo catch events here. + /// /// Tests relating to saving of objects to a . /// @@ -188,17 +191,50 @@ public class TagDatabaseWriteTests : TestBase public async Task TagDatabase_WriteTagsToDatabase_TagAdded() { // Arrange - HashSet eventExpectedTags = []; List testTags = [TestSampleTags.Ambient, TestSampleTags.Electronic, TestSampleTags.SpaceAmbient]; - this.Database.TagsWritten += (_, tags) => eventExpectedTags.UnionWith(tags.Added); this.Database.ClearTags(); - + // Act await this.Database.WriteTagsToDatabase(testTags); - + // Assert var retrievedTags = await this.Database.GetAllTagsFromDatabase(); Assert.That(retrievedTags.Count, Is.EqualTo(testTags.Count)); - Assert.That(eventExpectedTags.Count, Is.EqualTo(testTags.Count)); } -} \ No newline at end of file + + [Test] + public async Task TagDatabase_WriteTagsToDatabase_TagWrittenEvent() + { + // Arrange + TagDatabase.DatabaseEditResult? test = null; + TagDatabase db = new(); + await db.CreateAsync(":memory:"); + db.InitialisationComplete += (_, _) => Assert.Pass(); + + EventHandler handler = (_, result) => test = result; + db.TagsWritten += handler; + + List testTags = [TestSampleTags.Ambient, TestSampleTags.Electronic, TestSampleTags.SpaceAmbient]; + db.ClearTags(); + + // Act/Assert + await db.WriteTagsToDatabase(testTags); + Assert.That(test.Added.Count, Is.EqualTo(testTags.Count)); + Assert.That(test.Updated.Count, Is.EqualTo(0)); + Assert.That(test.Deleted.Count, Is.EqualTo(0)); + + Tag? retrievedTag = await db.SelectTagFromDatabase(testTags[0].Name); + Assert.That(retrievedTag, Is.Not.Null); + retrievedTag.Notes = "test edit"; + await db.WriteTagsToDatabase([retrievedTag]); + Assert.That(test.Updated.Count, Is.EqualTo(1)); + + Tag? deletedTag = await db.SelectTagFromDatabase(testTags[2].Name); + await db.DeleteTag(deletedTag.Id); + Assert.That(test.Deleted.Count, Is.EqualTo(1)); + Assert.That(await db.SelectTagFromDatabase(deletedTag.Name), Is.Null); + + db.TagsWritten -= handler; + } +} + \ No newline at end of file diff --git a/UI/TagDatabaseService.cs b/UI/TagDatabaseService.cs index a1ea3d2..895ca2d 100644 --- a/UI/TagDatabaseService.cs +++ b/UI/TagDatabaseService.cs @@ -192,7 +192,6 @@ public class TagDatabaseService : ObservableObject { if (this.Database is null) return; this.Database.TagsWritten += this.TagDatabase_OnTagsWritten; - this.Database.TagDeleted += this.TagDatabase_OnTagDeleted; } private void TagDatabase_OnInitialisationComplete(object? sender, EventArgs e) @@ -206,20 +205,13 @@ public class TagDatabaseService : ObservableObject private void TagDatabase_OnTagsWritten(object? sender, TagDatabase.DatabaseEditResult editResult) { - var resultConverted = new TagWriteResult(editResult.Added, editResult.Updated, []); + var resultConverted = new TagWriteResult(editResult.Added, editResult.Updated, editResult.Deleted); this.TagsWritten?.Invoke(this, resultConverted); } - private void TagDatabase_OnTagDeleted(object? sender, (int id, string name) deletedTag) - { - this.TagsWritten?.Invoke(this, new TagWriteResult([], [], [deletedTag])); - this.NotifyDatabasePropertiesChanged(); - } - private void UnsubscribeFromEvents() { if (this.Database is null) return; this.Database.TagsWritten -= this.TagDatabase_OnTagsWritten; - this.Database.TagDeleted -= this.TagDatabase_OnTagDeleted; } } \ No newline at end of file