Skip to content
Merged
69 changes: 35 additions & 34 deletions Backend.Tests/Controllers/AudioControllerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,16 +62,16 @@ public void TestUploadAudioFileUnauthorized()
public void TestUploadAudioFileInvalidArguments()
{
var result = _audioController.UploadAudioFile("invalid/projId", _wordId, _file).Result;
Assert.That(result, Is.TypeOf<UnsupportedMediaTypeResult>());
Assert.That(result, Is.InstanceOf<UnsupportedMediaTypeResult>());

result = _audioController.UploadAudioFile(_projId, "invalid/wordId", _file).Result;
Assert.That(result, Is.TypeOf<UnsupportedMediaTypeResult>());
Assert.That(result, Is.InstanceOf<UnsupportedMediaTypeResult>());

result = _audioController.UploadAudioFile("invalid/projId", _wordId, "speakerId", _file).Result;
Assert.That(result, Is.TypeOf<UnsupportedMediaTypeResult>());
Assert.That(result, Is.InstanceOf<UnsupportedMediaTypeResult>());

result = _audioController.UploadAudioFile(_projId, "invalid/wordId", "speakerId", _file).Result;
Assert.That(result, Is.TypeOf<UnsupportedMediaTypeResult>());
Assert.That(result, Is.InstanceOf<UnsupportedMediaTypeResult>());
}

[Test]
Expand Down Expand Up @@ -110,91 +110,92 @@ 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;
Comment thread
imnasnainaec marked this conversation as resolved.
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<UnsupportedMediaTypeResult>());
Assert.That(result, Is.InstanceOf<UnsupportedMediaTypeResult>());

result = _audioController.DownloadAudioFile("projId", "invalid/fileName");
Assert.That(result, Is.TypeOf<UnsupportedMediaTypeResult>());
Assert.That(result, Is.InstanceOf<UnsupportedMediaTypeResult>());
}

[Test]
public void TestDownloadAudioFileNoFile()
{
var result = _audioController.DownloadAudioFile("projId", "fileName");
Assert.That(result, Is.TypeOf<BadRequestObjectResult>());
Assert.That(result, Is.InstanceOf<BadRequestObjectResult>());
}

[Test]
public void TestDeleteAudioFileUnauthorized()
{
_audioController.ControllerContext.HttpContext = PermissionServiceMock.UnauthorizedHttpContext();
var result = _audioController.DeleteAudioFile(_projId, _wordId, _file.FileName).Result;
Assert.That(result, Is.TypeOf<ForbidResult>());
Assert.That(result, Is.InstanceOf<ForbidResult>());
}

[Test]
public void TestDeleteAudioFileInvalidArguments()
{
var result = _audioController.DeleteAudioFile("in/va/lid", _wordId, _file.FileName).Result;
Assert.That(result, Is.TypeOf<UnsupportedMediaTypeResult>());
Assert.That(result, Is.InstanceOf<UnsupportedMediaTypeResult>());

result = _audioController.DeleteAudioFile(_projId, "in/va/lid", _file.FileName).Result;
Assert.That(result, Is.TypeOf<UnsupportedMediaTypeResult>());
Assert.That(result, Is.InstanceOf<UnsupportedMediaTypeResult>());

result = _audioController.DeleteAudioFile(_projId, _wordId, "in/va/lid").Result;
Assert.That(result, Is.TypeOf<UnsupportedMediaTypeResult>());
Assert.That(result, Is.InstanceOf<UnsupportedMediaTypeResult>());
}

[Test]
public void TestDeleteAudioFileNoWordWithAudio()
{
var result = _audioController.DeleteAudioFile(_projId, "not-a-word", _file.FileName).Result;
Assert.That(result, Is.TypeOf<NotFoundObjectResult>());
Assert.That(result, Is.InstanceOf<NotFoundObjectResult>());

var wordId = _wordRepo.Create(Util.RandomWord(_projId)).Result.Id;
result = _audioController.DeleteAudioFile(_projId, wordId, _file.FileName).Result;
Assert.That(result, Is.TypeOf<NotFoundObjectResult>());
Assert.That(result, Is.InstanceOf<NotFoundObjectResult>());
}

[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);
}
}
}
65 changes: 47 additions & 18 deletions Backend.Tests/Services/WordServiceTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -58,7 +58,7 @@ public void TestDeleteAudioBadInputNull()
}

[Test]
public void TestDeleteAudioNotInFrontierNull()
public void TestDeleteAudioNotInFrontierReturnsNull()
{
var fileName = "audio.mp3";
var wordNotInFrontier = _wordRepo.Add(
Expand All @@ -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);
}
Expand All @@ -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();
Expand All @@ -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]
Expand All @@ -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]
Expand All @@ -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));
}

Expand All @@ -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();
Expand Down
Loading