diff --git a/Backend.Tests/Controllers/AudioControllerTests.cs b/Backend.Tests/Controllers/AudioControllerTests.cs index a831e82ef1..e2bb8978b7 100644 --- a/Backend.Tests/Controllers/AudioControllerTests.cs +++ b/Backend.Tests/Controllers/AudioControllerTests.cs @@ -62,16 +62,16 @@ public void TestUploadAudioFileUnauthorized() public void TestUploadAudioFileInvalidArguments() { var result = _audioController.UploadAudioFile("invalid/projId", _wordId, _file).Result; - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); result = _audioController.UploadAudioFile(_projId, "invalid/wordId", _file).Result; - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); result = _audioController.UploadAudioFile("invalid/projId", _wordId, "speakerId", _file).Result; - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); result = _audioController.UploadAudioFile(_projId, "invalid/wordId", "speakerId", _file).Result; - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); } [Test] @@ -110,27 +110,33 @@ public void TestUploadAudioFileNoWord() [Test] public void TestUploadAudioFile() { - _ = _audioController.UploadAudioFile(_projId, _wordId, "speakerId", _file).Result; - - var foundWord = _wordRepo.GetWord(_projId, _wordId).Result; - Assert.That(foundWord?.Audio, Is.Not.Null); + var result = _audioController.UploadAudioFile(_projId, _wordId, "speakerId", _file).Result + as OkObjectResult; + Assert.That(result, Is.Not.Null); + var newId = result.Value as string; + Assert.That(newId, Is.Not.Null); + Assert.That(newId, Is.Not.EqualTo(_wordId)); + + var foundWord = _wordRepo.GetWord(_projId, newId).Result; + Assert.That(foundWord, Is.Not.Null); + Assert.That(foundWord.Audio, Is.Not.Empty); } [Test] public void TestDownloadAudioFileInvalidArguments() { var result = _audioController.DownloadAudioFile("invalid/projId", "fileName"); - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); result = _audioController.DownloadAudioFile("projId", "invalid/fileName"); - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); } [Test] public void TestDownloadAudioFileNoFile() { var result = _audioController.DownloadAudioFile("projId", "fileName"); - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); } [Test] @@ -138,63 +144,58 @@ public void TestDeleteAudioFileUnauthorized() { _audioController.ControllerContext.HttpContext = PermissionServiceMock.UnauthorizedHttpContext(); var result = _audioController.DeleteAudioFile(_projId, _wordId, _file.FileName).Result; - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); } [Test] public void TestDeleteAudioFileInvalidArguments() { var result = _audioController.DeleteAudioFile("in/va/lid", _wordId, _file.FileName).Result; - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); result = _audioController.DeleteAudioFile(_projId, "in/va/lid", _file.FileName).Result; - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); result = _audioController.DeleteAudioFile(_projId, _wordId, "in/va/lid").Result; - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); } [Test] public void TestDeleteAudioFileNoWordWithAudio() { var result = _audioController.DeleteAudioFile(_projId, "not-a-word", _file.FileName).Result; - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); var wordId = _wordRepo.Create(Util.RandomWord(_projId)).Result.Id; result = _audioController.DeleteAudioFile(_projId, wordId, _file.FileName).Result; - Assert.That(result, Is.TypeOf()); + Assert.That(result, Is.InstanceOf()); } [Test] public void TestDeleteAudioFile() { // Refill test database - _wordRepo.DeleteAllWords(_projId); + _wordRepo.DeleteAllWords(_projId).Wait(); + _wordRepo.DeleteAllFrontierWords(_projId).Wait(); var origWord = Util.RandomWord(_projId); const string fileName = "a.wav"; origWord.Audio.Add(new Pronunciation(fileName)); - var wordId = _wordRepo.Create(origWord).Result.Id; + var oldId = _wordRepo.Create(origWord).Result.Id; // Test delete function - _ = _audioController.DeleteAudioFile(_projId, wordId, fileName).Result; + var result = _audioController.DeleteAudioFile(_projId, oldId, fileName).Result as OkObjectResult; + Assert.That(result, Is.Not.Null); + var newId = result.Value as string; - // Original word persists - Assert.That(_wordRepo.GetAllWords(_projId).Result, Has.Count.EqualTo(2)); - - // Get the new word from the database - var frontier = _wordRepo.GetAllFrontier(_projId).Result; - - // Ensure the new word has no audio files - Assert.That(frontier[0].Audio, Has.Count.EqualTo(0)); - - // Test the frontier - Assert.That(_wordRepo.GetAllFrontier(_projId).Result, Has.Count.EqualTo(1)); + // Ensure returned id is different + Assert.That(newId, Is.Not.Null); + Assert.That(newId, Is.Not.EqualTo(oldId)); // Ensure the word with deleted audio is in the frontier + var frontier = _wordRepo.GetAllFrontier(_projId).Result; Assert.That(frontier, Has.Count.EqualTo(1)); - Assert.That(frontier[0].Id, Is.Not.EqualTo(wordId)); - Assert.That(frontier[0].Audio, Has.Count.EqualTo(0)); - Assert.That(frontier[0].History, Has.Count.EqualTo(1)); + Assert.That(frontier[0].Id, Is.EqualTo(newId)); + Assert.That(frontier[0].Audio, Is.Empty); } } } diff --git a/Backend.Tests/Services/WordServiceTests.cs b/Backend.Tests/Services/WordServiceTests.cs index c5f19d840c..2d5c9c9cd1 100644 --- a/Backend.Tests/Services/WordServiceTests.cs +++ b/Backend.Tests/Services/WordServiceTests.cs @@ -41,13 +41,13 @@ public void TestCreateDoesNotAddDuplicateUserId() [Test] public void TestCreateMultipleWords() { - _ = _wordService.Create(UserId, [new() { ProjectId = ProjId }, new() { ProjectId = ProjId }]).Result; + _wordService.Create(UserId, [new() { ProjectId = ProjId }, new() { ProjectId = ProjId }]).Wait(); Assert.That(_wordRepo.GetAllWords(ProjId).Result, Has.Count.EqualTo(2)); Assert.That(_wordRepo.GetAllFrontier(ProjId).Result, Has.Count.EqualTo(2)); } [Test] - public void TestDeleteAudioBadInputNull() + public void TestDeleteAudioBadInputReturnsNull() { var fileName = "audio.mp3"; var wordInFrontier = _wordRepo.Create( @@ -58,7 +58,7 @@ public void TestDeleteAudioBadInputNull() } [Test] - public void TestDeleteAudioNotInFrontierNull() + public void TestDeleteAudioNotInFrontierReturnsNull() { var fileName = "audio.mp3"; var wordNotInFrontier = _wordRepo.Add( @@ -72,15 +72,33 @@ public void TestDeleteAudio() var fileName = "audio.mp3"; var wordInFrontier = _wordRepo.Create( new Word() { Audio = [new() { FileName = fileName }], ProjectId = ProjId }).Result; - var result = _wordService.DeleteAudio(ProjId, UserId, wordInFrontier.Id, fileName).Result; - Assert.That(result!.EditedBy.Last(), Is.EqualTo(UserId)); - Assert.That(result!.History.Last(), Is.EqualTo(wordInFrontier.Id)); - Assert.That(_wordRepo.IsInFrontier(ProjId, result.Id).Result, Is.True); - Assert.That(_wordRepo.IsInFrontier(ProjId, wordInFrontier.Id).Result, Is.False); + var oldId = wordInFrontier.Id; + + var newWord = _wordService.DeleteAudio(ProjId, UserId, oldId, fileName).Result; + + // New word is correct + Assert.That(newWord, Is.Not.Null); + Assert.That(newWord.Id, Is.Not.EqualTo(oldId)); + Assert.That(newWord.Audio, Is.Empty); + Assert.That(newWord.EditedBy.Last(), Is.EqualTo(UserId)); + Assert.That(newWord.History.Last(), Is.EqualTo(oldId)); + + // New word is only one in frontier + Assert.That(_wordRepo.IsInFrontier(ProjId, newWord.Id).Result, Is.True); + Assert.That(_wordRepo.GetAllFrontier(ProjId).Result, Has.Count.EqualTo(1)); + + // Original word persists + var allWords = _wordRepo.GetAllWords(ProjId).Result; + Assert.That(allWords, Has.Count.EqualTo(2)); + Assert.That(allWords.Find(w => w.Id == newWord.Id), Is.Not.Null); + var oldWord = allWords.Find(w => w.Id == oldId); + Assert.That(oldWord, Is.Not.Null); + Assert.That(oldWord.Audio, Has.Count.EqualTo(1)); + Assert.That(oldWord.History, Is.Empty); } [Test] - public void TestUpdateNotInFrontierNull() + public void TestUpdateNotInFrontierReturnsNull() { Assert.That(_wordService.Update(UserId, new Word() { Id = WordId, ProjectId = ProjId }).Result, Is.Null); } @@ -92,7 +110,11 @@ public void TestUpdateReplacesFrontierWord() Assert.That(word, Is.Not.Null); var oldId = word.Id; word.Vernacular = "NewVern"; - Assert.That(_wordService.Update(UserId, word).Result!.Guid, Is.EqualTo(word.Guid)); + + var updatedWord = _wordService.Update(UserId, word).Result; + Assert.That(updatedWord, Is.Not.Null); + Assert.That(updatedWord.Guid, Is.EqualTo(word.Guid)); + var frontier = _wordRepo.GetAllFrontier(ProjId).Result; Assert.That(frontier, Has.Count.EqualTo(1)); var newWord = frontier.First(); @@ -111,19 +133,23 @@ public void TestUpdateUsingCitationForm() // Update something other than Vernacular and make sure UsingCitationForm is still true. word.Note = new() { Text = "change word's note" }; var nonVernUpdate = _wordService.Update(UserId, word).Result; - Assert.That(nonVernUpdate!.UsingCitationForm, Is.True); + Assert.That(nonVernUpdate, Is.Not.Null); + Assert.That(nonVernUpdate.UsingCitationForm, Is.True); // Update the Vernacular and make sure UsingCitationForm is false. nonVernUpdate.Vernacular = "change word's vernacular form"; var vernUpdate = _wordService.Update(UserId, nonVernUpdate).Result; - Assert.That(vernUpdate!.UsingCitationForm, Is.False); + Assert.That(vernUpdate, Is.Not.Null); + Assert.That(vernUpdate.UsingCitationForm, Is.False); } [Test] public void TestRestoreFrontierWordsMissingWordFalse() { var word = _wordRepo.Add(new Word { ProjectId = ProjId }).Result; - Assert.That(_wordService.RestoreFrontierWords(ProjId, ["NotAnId", word.Id]).Result, Is.False); + + var restored = _wordService.RestoreFrontierWords(ProjId, ["NotAnId", word.Id]).Result; + Assert.That(restored, Is.False); } [Test] @@ -132,8 +158,9 @@ public void TestRestoreFrontierWordsFrontierWordFalse() var wordNoFrontier = _wordRepo.Add(new Word { ProjectId = ProjId }).Result; var wordYesFrontier = _wordRepo.Create(new Word { ProjectId = ProjId }).Result; Assert.That(_wordRepo.GetAllFrontier(ProjId).Result, Has.Count.EqualTo(1)); - Assert.That( - _wordService.RestoreFrontierWords(ProjId, [wordNoFrontier.Id, wordYesFrontier.Id]).Result, Is.False); + + var restored = _wordService.RestoreFrontierWords(ProjId, [wordNoFrontier.Id, wordYesFrontier.Id]).Result; + Assert.That(restored, Is.False); } [Test] @@ -142,7 +169,9 @@ public void TestRestoreFrontierWordsTrue() var word1 = _wordRepo.Add(new Word { ProjectId = ProjId }).Result; var word2 = _wordRepo.Add(new Word { ProjectId = ProjId }).Result; Assert.That(_wordRepo.GetAllFrontier(ProjId).Result, Is.Empty); - Assert.That(_wordService.RestoreFrontierWords(ProjId, [word1.Id, word2.Id]).Result, Is.True); + + var restored = _wordService.RestoreFrontierWords(ProjId, [word1.Id, word2.Id]).Result; + Assert.That(restored, Is.True); Assert.That(_wordRepo.GetAllFrontier(ProjId).Result, Has.Count.EqualTo(2)); } @@ -161,9 +190,9 @@ public void TestFindContainingWordNoFrontier() public void TestFindContainingWordNewVern() { var oldWordSameProj = Util.RandomWord(ProjId); - _ = _wordRepo.Create(oldWordSameProj).Result; + _wordRepo.Create(oldWordSameProj).Wait(); var oldWordDiffProj = Util.RandomWord("different"); - _ = _wordRepo.Create(oldWordDiffProj).Result; + _wordRepo.Create(oldWordDiffProj).Wait(); var newWord = Util.RandomWord(ProjId); newWord.Vernacular = oldWordDiffProj.Vernacular; newWord.Senses = oldWordDiffProj.Senses.Select(s => s.Clone()).ToList();