Skip to content

Commit ea93cbd

Browse files
authored
Add missing Word Controller/Service tests (#4151)
1 parent a6ce7dd commit ea93cbd

File tree

2 files changed

+119
-40
lines changed

2 files changed

+119
-40
lines changed

Backend.Tests/Controllers/WordControllerTests.cs

Lines changed: 87 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,16 @@ public void Setup()
4141
public async Task TestAreInFrontier()
4242
{
4343
var wordNotInFrontier = await _wordRepo.Add(Util.RandomWord(ProjId));
44-
var emptyResult = await _wordController.AreInFrontier(ProjId, [wordNotInFrontier.Id, "non-id"]);
45-
Assert.That(((ObjectResult)emptyResult).Value, Is.Empty);
44+
var emptyResult = await _wordController.AreInFrontier(ProjId, [wordNotInFrontier.Id, "non-id"])
45+
as OkObjectResult;
46+
Assert.That(emptyResult, Is.Not.Null);
47+
Assert.That(emptyResult.Value, Is.Empty);
4648

4749
var wordInFrontier = await _wordRepo.AddFrontier(Util.RandomWord(ProjId));
48-
var nonemptyResult = await _wordController.AreInFrontier(ProjId, [wordInFrontier.Id, "non-id"]);
49-
Assert.That(((OkObjectResult)nonemptyResult).Value, Is.EqualTo(new List<string> { wordInFrontier.Id }));
50+
var nonemptyResult = await _wordController.AreInFrontier(ProjId, [wordInFrontier.Id, "non-id"])
51+
as OkObjectResult;
52+
Assert.That(nonemptyResult, Is.Not.Null);
53+
Assert.That(nonemptyResult.Value, Is.EqualTo(new List<string> { wordInFrontier.Id }));
5054
}
5155

5256
[Test]
@@ -93,15 +97,23 @@ public async Task TestDeleteFrontierWordMissingWord()
9397
}
9498

9599
[Test]
96-
public async Task TestHasFrontierWords()
100+
public async Task TestHasFrontierWordsReturnsFalse()
97101
{
98102
await _wordRepo.Create(Util.RandomWord("OTHER_PROJECT"));
99-
var falseResult = (ObjectResult)await _wordController.HasFrontierWords(ProjId);
100-
Assert.That(falseResult.Value, Is.False);
101103

104+
var result = await _wordController.HasFrontierWords(ProjId) as OkObjectResult;
105+
Assert.That(result, Is.Not.Null);
106+
Assert.That(result.Value, Is.False);
107+
}
108+
109+
[Test]
110+
public async Task TestHasFrontierWordsReturnsTrue()
111+
{
102112
await _wordRepo.Create(Util.RandomWord(ProjId));
103-
var trueResult = (ObjectResult)await _wordController.HasFrontierWords(ProjId);
104-
Assert.That(trueResult.Value, Is.True);
113+
114+
var result = await _wordController.HasFrontierWords(ProjId) as OkObjectResult;
115+
Assert.That(result, Is.Not.Null);
116+
Assert.That(result.Value, Is.True);
105117
}
106118

107119
[Test]
@@ -113,15 +125,21 @@ public async Task TestHasFrontierWordsNoPermission()
113125
}
114126

115127
[Test]
116-
public async Task TestIsInFrontier()
128+
public async Task TestIsInFrontierReturnsFalse()
117129
{
118130
var wordNotInFrontier = await _wordRepo.Add(Util.RandomWord(ProjId));
119-
var falseResult = (ObjectResult)await _wordController.IsInFrontier(ProjId, wordNotInFrontier.Id);
120-
Assert.That(falseResult.Value, Is.False);
131+
var result = await _wordController.IsInFrontier(ProjId, wordNotInFrontier.Id) as OkObjectResult;
132+
Assert.That(result, Is.Not.Null);
133+
Assert.That(result.Value, Is.False);
134+
}
121135

136+
[Test]
137+
public async Task TestIsInFrontierReturnsTrue()
138+
{
122139
var wordInFrontier = await _wordRepo.AddFrontier(Util.RandomWord(ProjId));
123-
var trueResult = (ObjectResult)await _wordController.IsInFrontier(ProjId, wordInFrontier.Id);
124-
Assert.That(trueResult.Value, Is.True);
140+
var result = await _wordController.IsInFrontier(ProjId, wordInFrontier.Id) as OkObjectResult;
141+
Assert.That(result, Is.Not.Null);
142+
Assert.That(result.Value, Is.True);
125143
}
126144

127145
[Test]
@@ -140,7 +158,9 @@ public async Task TestGetFrontierCount()
140158
await _wordRepo.Create(Util.RandomWord(ProjId));
141159
await _wordRepo.Create(Util.RandomWord("OTHER_PROJECT"));
142160

143-
var count = (int)((ObjectResult)await _wordController.GetFrontierCount(ProjId)).Value!;
161+
var countResult = await _wordController.GetFrontierCount(ProjId) as OkObjectResult;
162+
Assert.That(countResult, Is.Not.Null);
163+
var count = countResult.Value as int?;
144164
Assert.That(count, Is.EqualTo(2));
145165
}
146166

@@ -159,7 +179,10 @@ public async Task TestGetFrontier()
159179
var inWord2 = await _wordRepo.Create(Util.RandomWord(ProjId));
160180
await _wordRepo.Create(Util.RandomWord("OTHER_PROJECT"));
161181

162-
var frontier = (List<Word>)((ObjectResult)await _wordController.GetProjectFrontierWords(ProjId)).Value!;
182+
var result = await _wordController.GetProjectFrontierWords(ProjId) as OkObjectResult;
183+
Assert.That(result, Is.Not.Null);
184+
var frontier = result.Value as List<Word>;
185+
Assert.That(frontier, Is.Not.Null);
163186
Assert.That(frontier, Has.Count.EqualTo(2));
164187
Assert.That(frontier, Does.Contain(inWord1).UsingPropertiesComparer());
165188
Assert.That(frontier, Does.Contain(inWord2).UsingPropertiesComparer());
@@ -181,9 +204,9 @@ public async Task TestGetWord()
181204
await _wordRepo.Create(Util.RandomWord(ProjId));
182205
await _wordRepo.Create(Util.RandomWord(ProjId));
183206

184-
var result = await _wordController.GetWord(ProjId, word.Id);
185-
Assert.That(result, Is.InstanceOf<ObjectResult>());
186-
Assert.That(((ObjectResult)result).Value, Is.EqualTo(word).UsingPropertiesComparer());
207+
var result = await _wordController.GetWord(ProjId, word.Id) as OkObjectResult;
208+
Assert.That(result, Is.Not.Null);
209+
Assert.That(result.Value, Is.EqualTo(word).UsingPropertiesComparer());
187210
}
188211

189212
[Test]
@@ -207,18 +230,18 @@ public async Task TestGetWordNoPermission()
207230
public async Task TestGetDuplicateId()
208231
{
209232
var word = await _wordRepo.Create(Util.RandomWord(ProjId));
210-
var result = await _wordController.GetDuplicateId(ProjId, word);
211-
Assert.That(result, Is.InstanceOf<ObjectResult>());
212-
Assert.That(((ObjectResult)result).Value, Is.EqualTo(word.Id));
233+
var result = await _wordController.GetDuplicateId(ProjId, word) as OkObjectResult;
234+
Assert.That(result, Is.Not.Null);
235+
Assert.That(result.Value, Is.EqualTo(word.Id));
213236
}
214237

215238
[Test]
216239
public async Task TestGetDuplicateIdNoneFound()
217240
{
218241
var word = Util.RandomWord(ProjId);
219-
var result = await _wordController.GetDuplicateId(ProjId, word);
220-
Assert.That(result, Is.InstanceOf<ObjectResult>());
221-
Assert.That(((ObjectResult)result).Value, Is.EqualTo(""));
242+
var result = await _wordController.GetDuplicateId(ProjId, word) as OkObjectResult;
243+
Assert.That(result, Is.Not.Null);
244+
Assert.That(result.Value, Is.EqualTo(""));
222245
}
223246

224247
[Test]
@@ -245,8 +268,10 @@ public async Task TestRevertWords()
245268
["non-id"] = frontierWord1.Id, // Cannot revert with key not a word
246269
[nonFrontierWord1.Id] = nonFrontierWord2.Id, // Cannot revert with value not in frontier
247270
[nonFrontierWord0.Id] = frontierWord0.Id, // Can revert
248-
});
249-
var reverted = (Dictionary<string, string>)((OkObjectResult)result).Value!;
271+
}) as OkObjectResult;
272+
Assert.That(result, Is.Not.Null);
273+
var reverted = result.Value as Dictionary<string, string>;
274+
Assert.That(reverted, Is.Not.Null);
250275
Assert.That(reverted, Has.Count.EqualTo(1));
251276
var frontierIds = (await _wordRepo.GetAllFrontier(ProjId)).Select(w => w.Id).ToList();
252277
Assert.That(frontierIds, Has.Count.EqualTo(2));
@@ -272,10 +297,14 @@ public async Task TestUpdateDuplicate()
272297
var dupWord = origWord.Clone();
273298
dupWord.Flag = new Flag("New Flag");
274299
var expectedWord = dupWord.Clone();
275-
var result = (ObjectResult)await _wordController.UpdateDuplicate(ProjId, origWord.Id, dupWord);
276-
var id = (string)result.Value!;
300+
301+
var result = await _wordController.UpdateDuplicate(ProjId, origWord.Id, dupWord) as OkObjectResult;
302+
Assert.That(result, Is.Not.Null);
303+
var id = result.Value as string;
304+
Assert.That(id, Is.Not.Null);
277305
var updatedWord = await _wordRepo.GetWord(ProjId, id);
278-
Util.AssertEqualWordContent(updatedWord!, expectedWord, true);
306+
Assert.That(updatedWord, Is.Not.Null);
307+
Util.AssertEqualWordContent(updatedWord, expectedWord, true);
279308
}
280309

281310
[Test]
@@ -311,14 +340,17 @@ public async Task TestCreateWord()
311340
{
312341
var word = Util.RandomWord(ProjId);
313342

314-
var id = (string)((ObjectResult)await _wordController.CreateWord(ProjId, word)).Value!;
343+
var result = await _wordController.CreateWord(ProjId, word) as OkObjectResult;
344+
Assert.That(result, Is.Not.Null);
345+
var id = result.Value as string;
346+
Assert.That(id, Is.Not.Null);
315347
word.Id = id;
316348

317349
var allWords = await _wordRepo.GetAllWords(ProjId);
318-
Assert.That(allWords[0], Is.EqualTo(word).UsingPropertiesComparer());
350+
Assert.That(allWords.FirstOrDefault(), Is.EqualTo(word).UsingPropertiesComparer());
319351

320352
var frontier = await _wordRepo.GetAllFrontier(ProjId);
321-
Assert.That(frontier[0], Is.EqualTo(word).UsingPropertiesComparer());
353+
Assert.That(frontier.FirstOrDefault(), Is.EqualTo(word).UsingPropertiesComparer());
322354
}
323355

324356
[Test]
@@ -339,12 +371,14 @@ public async Task TestUpdateWord()
339371
var modWord = origWord.Clone();
340372
modWord.Vernacular = "NewVernacular";
341373

342-
var id = (string)((ObjectResult)await _wordController.UpdateWord(
343-
ProjId, modWord.Id, modWord)).Value!;
374+
var result = await _wordController.UpdateWord(ProjId, modWord.Id, modWord) as OkObjectResult;
375+
Assert.That(result, Is.Not.Null);
376+
var id = result.Value as string;
377+
Assert.That(id, Is.Not.Null);
344378

345379
var finalWord = modWord.Clone();
346380
finalWord.Id = id;
347-
finalWord.History = new List<string> { origWord.Id };
381+
finalWord.History = [origWord.Id];
348382

349383
var allWords = await _wordRepo.GetAllWords(ProjId);
350384
Assert.That(allWords, Does.Contain(origWord).UsingPropertiesComparer());
@@ -383,12 +417,26 @@ public async Task TestRestoreWord()
383417
Assert.That(await _wordRepo.GetAllWords(ProjId), Does.Contain(word).UsingPropertiesComparer());
384418
Assert.That(await _wordRepo.GetAllFrontier(ProjId), Is.Empty);
385419

386-
var result = await _wordController.RestoreWord(ProjId, word.Id);
420+
var result = await _wordController.RestoreWord(ProjId, word.Id) as OkObjectResult;
421+
Assert.That(result, Is.Not.Null);
422+
Assert.That(result.Value, Is.True);
423+
Assert.That(await _wordRepo.GetAllWords(ProjId), Does.Contain(word).UsingPropertiesComparer());
424+
Assert.That(await _wordRepo.GetAllFrontier(ProjId), Does.Contain(word).UsingPropertiesComparer());
425+
}
426+
427+
[Test]
428+
public async Task TestRestoreWordAlreadyInFrontier()
429+
{
430+
var word = await _wordRepo.Create(Util.RandomWord(ProjId));
387431

388-
Assert.That(result, Is.InstanceOf<OkObjectResult>());
389-
Assert.That(((OkObjectResult)result).Value, Is.True);
390432
Assert.That(await _wordRepo.GetAllWords(ProjId), Does.Contain(word).UsingPropertiesComparer());
391433
Assert.That(await _wordRepo.GetAllFrontier(ProjId), Does.Contain(word).UsingPropertiesComparer());
434+
var frontierCount = await _wordRepo.GetFrontierCount(ProjId);
435+
436+
var result = await _wordController.RestoreWord(ProjId, word.Id) as OkObjectResult;
437+
Assert.That(result, Is.Not.Null);
438+
Assert.That(result.Value, Is.False);
439+
Assert.That(await _wordRepo.GetFrontierCount(ProjId), Is.EqualTo(frontierCount));
392440
}
393441

394442
[Test]

Backend.Tests/Services/WordServiceTests.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,37 @@ public void TestDeleteAudio()
9797
Assert.That(oldWord.History, Is.Empty);
9898
}
9999

100+
[Test]
101+
public void TestDeleteFrontierWordNotInFrontierReturnsNull()
102+
{
103+
var wordNotInFrontier = _wordRepo.Add(new Word { ProjectId = ProjId }).Result;
104+
Assert.That(_wordService.DeleteFrontierWord(ProjId, UserId, wordNotInFrontier.Id).Result, Is.Null);
105+
Assert.That(_wordService.DeleteFrontierWord("wrong-proj", UserId, WordId).Result, Is.Null);
106+
}
107+
108+
[Test]
109+
public void TestDeleteFrontierWordCopiesToWordsAndRemovesFrontier()
110+
{
111+
var oldId = _wordRepo.Create(new Word { ProjectId = ProjId }).Result.Id;
112+
113+
var deletedId = _wordService.DeleteFrontierWord(ProjId, UserId, oldId).Result;
114+
115+
Assert.That(deletedId, Is.Not.Null);
116+
Assert.That(deletedId, Is.Not.EqualTo(oldId));
117+
var deletedWord = _wordRepo.GetWord(ProjId, deletedId).Result;
118+
Assert.That(deletedWord, Is.Not.Null);
119+
Assert.That(deletedWord.Accessibility, Is.EqualTo(Status.Deleted));
120+
Assert.That(deletedWord.History.Last(), Is.EqualTo(oldId));
121+
Assert.That(deletedWord.EditedBy.Last(), Is.EqualTo(UserId));
122+
123+
var allWordIds = _wordRepo.GetAllWords(ProjId).Result.Select(w => w.Id).ToList();
124+
Assert.That(allWordIds, Has.Count.EqualTo(2));
125+
Assert.That(allWordIds, Does.Contain(oldId));
126+
Assert.That(allWordIds, Does.Contain(deletedId));
127+
128+
Assert.That(_wordRepo.GetAllFrontier(ProjId).Result, Is.Empty);
129+
}
130+
100131
[Test]
101132
public void TestUpdateNotInFrontierReturnsNull()
102133
{
@@ -164,7 +195,7 @@ public void TestRestoreFrontierWordsFrontierWordFalse()
164195
}
165196

166197
[Test]
167-
public void TestRestoreFrontierWordsTrue()
198+
public void TestRestoreFrontierWordsReturnsTrue()
168199
{
169200
var word1 = _wordRepo.Add(new Word { ProjectId = ProjId }).Result;
170201
var word2 = _wordRepo.Add(new Word { ProjectId = ProjId }).Result;

0 commit comments

Comments
 (0)