Add region code
This commit is contained in:
@@ -18,6 +18,7 @@ public class RegionServiceTests
|
||||
public RegionServiceTests()
|
||||
{
|
||||
_currentUser.Setup(u => u.RoleLevel).Returns(60);
|
||||
_repo.Setup(r => r.GetAllCodesAsync()).ReturnsAsync([]);
|
||||
_sut = new RegionService(_repo.Object, _uow.Object, _currentUser.Object, _scopeAccess.Object);
|
||||
}
|
||||
|
||||
@@ -148,6 +149,123 @@ public class RegionServiceTests
|
||||
_uow.Verify(u => u.CommitAsync(default), Times.Once);
|
||||
}
|
||||
|
||||
// Region code
|
||||
|
||||
[Fact]
|
||||
public async Task CreateAsync_GeneratesFirstCode_WhenNoRegionsExist()
|
||||
{
|
||||
_repo.Setup(r => r.GetAllCodesAsync()).ReturnsAsync([]);
|
||||
|
||||
var result = await _sut.CreateAsync(new CreateRegionRequest("North"));
|
||||
|
||||
Assert.Equal("REG-0001", result.Code);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CreateAsync_GeneratesNextCode_FromHighestExisting_IgnoringNonMatching()
|
||||
{
|
||||
_repo.Setup(r => r.GetAllCodesAsync()).ReturnsAsync(["REG-0002", "REG-0009", "CUSTOM", "REG-abc", ""]);
|
||||
|
||||
var result = await _sut.CreateAsync(new CreateRegionRequest("North"));
|
||||
|
||||
Assert.Equal("REG-0010", result.Code);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CreateAsync_StoresProvidedCode_AsEntered()
|
||||
{
|
||||
var result = await _sut.CreateAsync(new CreateRegionRequest("North", " nth-1 "));
|
||||
|
||||
Assert.Equal("nth-1", result.Code);
|
||||
_repo.Verify(r => r.GetAllCodesAsync(), Times.Never);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CreateAsync_Throws_WhenProvidedCodeInUse()
|
||||
{
|
||||
_repo.Setup(r => r.CodeExistsAsync("NTH-1", null)).ReturnsAsync(true);
|
||||
|
||||
await Assert.ThrowsAsync<InvalidOperationException>(() =>
|
||||
_sut.CreateAsync(new CreateRegionRequest("North", "NTH-1")));
|
||||
|
||||
_uow.Verify(u => u.CommitAsync(default), Times.Never);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetNextCodeAsync_ReturnsSuggestion()
|
||||
{
|
||||
_repo.Setup(r => r.GetAllCodesAsync()).ReturnsAsync(["REG-0003"]);
|
||||
|
||||
var result = await _sut.GetNextCodeAsync();
|
||||
|
||||
Assert.Equal("REG-0004", result.Code);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateAsync_ChangesCode_StoredAsEntered()
|
||||
{
|
||||
var region = ActiveRegion();
|
||||
region.Code = "REG-0001";
|
||||
_repo.Setup(r => r.GetByIdAsync(region.Id)).ReturnsAsync(region);
|
||||
_repo.Setup(r => r.CodeExistsAsync("north-1", region.Id)).ReturnsAsync(false);
|
||||
|
||||
var result = await _sut.UpdateAsync(region.Id, new UpdateRegionRequest("North", " north-1 "));
|
||||
|
||||
Assert.Equal("north-1", result!.Code);
|
||||
_uow.Verify(u => u.CommitAsync(default), Times.Once);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateAsync_KeepsCode_WhenCodeBlank()
|
||||
{
|
||||
var region = ActiveRegion();
|
||||
region.Code = "REG-0001";
|
||||
_repo.Setup(r => r.GetByIdAsync(region.Id)).ReturnsAsync(region);
|
||||
|
||||
var result = await _sut.UpdateAsync(region.Id, new UpdateRegionRequest("North", " "));
|
||||
|
||||
Assert.Equal("REG-0001", result!.Code);
|
||||
_repo.Verify(r => r.CodeExistsAsync(It.IsAny<string>(), It.IsAny<Guid?>()), Times.Never);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateAsync_Throws_WhenCodeUsedByAnotherRegion()
|
||||
{
|
||||
var region = ActiveRegion();
|
||||
region.Code = "REG-0001";
|
||||
_repo.Setup(r => r.GetByIdAsync(region.Id)).ReturnsAsync(region);
|
||||
_repo.Setup(r => r.CodeExistsAsync("REG-0002", region.Id)).ReturnsAsync(true);
|
||||
|
||||
await Assert.ThrowsAsync<InvalidOperationException>(() =>
|
||||
_sut.UpdateAsync(region.Id, new UpdateRegionRequest("North", "REG-0002")));
|
||||
|
||||
_uow.Verify(u => u.CommitAsync(default), Times.Never);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task UpdateAsync_AllowsResubmittingOwnCode()
|
||||
{
|
||||
var region = ActiveRegion();
|
||||
region.Code = "REG-0001";
|
||||
_repo.Setup(r => r.GetByIdAsync(region.Id)).ReturnsAsync(region);
|
||||
|
||||
var result = await _sut.UpdateAsync(region.Id, new UpdateRegionRequest("North", "REG-0001"));
|
||||
|
||||
Assert.Equal("REG-0001", result!.Code);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task GetByIdAsync_ReturnsCode()
|
||||
{
|
||||
var region = ActiveRegion();
|
||||
region.Code = "REG-0007";
|
||||
_repo.Setup(r => r.GetByIdAsync(region.Id)).ReturnsAsync(region);
|
||||
|
||||
var result = await _sut.GetByIdAsync(region.Id);
|
||||
|
||||
Assert.Equal("REG-0007", result!.Code);
|
||||
}
|
||||
|
||||
// DeleteAsync
|
||||
|
||||
[Fact]
|
||||
|
||||
Reference in New Issue
Block a user