|
| 1 | +namespace MiniLcm.Tests; |
| 2 | + |
| 3 | +public abstract class MorphTypeTestsBase : MiniLcmTestBase |
| 4 | +{ |
| 5 | + [Fact] |
| 6 | + public async Task GetMorphTypes_ReturnsAllCanonicalMorphTypes() |
| 7 | + { |
| 8 | + var morphTypes = await Api.GetMorphTypes().ToArrayAsync(); |
| 9 | + morphTypes.Should().NotBeEmpty(); |
| 10 | + morphTypes.Should().AllSatisfy(mt => mt.Id.Should().NotBe(Guid.Empty)); |
| 11 | + // All canonical kinds (except Unknown) should be present |
| 12 | + var allKinds = Enum.GetValues<MorphTypeKind>().Where(k => k != MorphTypeKind.Unknown); |
| 13 | + morphTypes.Select(mt => mt.Kind).Should().BeEquivalentTo(allKinds); |
| 14 | + } |
| 15 | + |
| 16 | + [Fact] |
| 17 | + public async Task GetMorphType_ById_ReturnsExpected() |
| 18 | + { |
| 19 | + var morphTypes = await Api.GetMorphTypes().ToArrayAsync(); |
| 20 | + var stem = morphTypes.First(mt => mt.Kind == MorphTypeKind.Stem); |
| 21 | + |
| 22 | + var result = await Api.GetMorphType(stem.Id); |
| 23 | + |
| 24 | + result.Should().NotBeNull(); |
| 25 | + result!.Kind.Should().Be(MorphTypeKind.Stem); |
| 26 | + result.Id.Should().Be(stem.Id); |
| 27 | + } |
| 28 | + |
| 29 | + [Fact] |
| 30 | + public async Task GetMorphType_ByKind_ReturnsExpected() |
| 31 | + { |
| 32 | + var result = await Api.GetMorphType(MorphTypeKind.Prefix); |
| 33 | + |
| 34 | + result.Should().NotBeNull(); |
| 35 | + result!.Kind.Should().Be(MorphTypeKind.Prefix); |
| 36 | + } |
| 37 | + |
| 38 | + [Fact] |
| 39 | + public async Task GetMorphType_ByKind_Unknown_ReturnsNull() |
| 40 | + { |
| 41 | + var result = await Api.GetMorphType(MorphTypeKind.Unknown); |
| 42 | + result.Should().BeNull(); |
| 43 | + } |
| 44 | + |
| 45 | + [Fact] |
| 46 | + public async Task UpdateMorphType_UpdatesName() |
| 47 | + { |
| 48 | + var stem = await Api.GetMorphType(MorphTypeKind.Stem); |
| 49 | + stem.Should().NotBeNull(); |
| 50 | + |
| 51 | + var updatedStem = stem!.Copy(); |
| 52 | + updatedStem.Name["en"] = "Updated Stem Name"; |
| 53 | + await Api.UpdateMorphType(stem, updatedStem); |
| 54 | + |
| 55 | + var result = await Api.GetMorphType(MorphTypeKind.Stem); |
| 56 | + result.Should().NotBeNull(); |
| 57 | + result!.Name["en"].Should().Be("Updated Stem Name"); |
| 58 | + } |
| 59 | + |
| 60 | + [Fact] |
| 61 | + public async Task UpdateMorphType_UpdatesAbbreviation() |
| 62 | + { |
| 63 | + var prefix = await Api.GetMorphType(MorphTypeKind.Prefix); |
| 64 | + prefix.Should().NotBeNull(); |
| 65 | + |
| 66 | + var updated = prefix!.Copy(); |
| 67 | + updated.Abbreviation["en"] = "updated pfx"; |
| 68 | + await Api.UpdateMorphType(prefix, updated); |
| 69 | + |
| 70 | + var result = await Api.GetMorphType(MorphTypeKind.Prefix); |
| 71 | + result.Should().NotBeNull(); |
| 72 | + result!.Abbreviation["en"].Should().Be("updated pfx"); |
| 73 | + } |
| 74 | + |
| 75 | + [Fact] |
| 76 | + public async Task UpdateMorphType_NoChanges_DoesNotThrow() |
| 77 | + { |
| 78 | + var stem = await Api.GetMorphType(MorphTypeKind.Stem); |
| 79 | + stem.Should().NotBeNull(); |
| 80 | + |
| 81 | + var copy = stem!.Copy(); |
| 82 | + // No changes made - should be a no-op |
| 83 | + await Api.UpdateMorphType(stem, copy); |
| 84 | + |
| 85 | + var result = await Api.GetMorphType(MorphTypeKind.Stem); |
| 86 | + result.Should().NotBeNull(); |
| 87 | + result.Should().BeEquivalentTo(stem); |
| 88 | + } |
| 89 | +} |
0 commit comments