diff --git a/GitFyle.Core.Api.Tests.Unit/Controllers/Repositories/RepositoriesControllerTests.Exceptions.Post.cs b/GitFyle.Core.Api.Tests.Unit/Controllers/Repositories/RepositoriesControllerTests.Exceptions.Post.cs index 8e4e50ae..081ff731 100644 --- a/GitFyle.Core.Api.Tests.Unit/Controllers/Repositories/RepositoriesControllerTests.Exceptions.Post.cs +++ b/GitFyle.Core.Api.Tests.Unit/Controllers/Repositories/RepositoriesControllerTests.Exceptions.Post.cs @@ -123,5 +123,49 @@ public async Task ShouldReturnConflictOnPostIfAlreadyExistsRepositoryErrorOccurr this.repositoryServiceMock.VerifyNoOtherCalls(); } + + [Fact] + public async Task ShouldReturnFailedDependencyOnPostIfRepositoryReferenceIsInvalidAsync() + { + // given + Repository someRepository = CreateRandomRepository(); + var someInnerException = new Exception(); + string someMessage = GetRandomString(); + + var invalidReferenceRepositoryException = + new InvalidRepositoryReferenceException( + message: someMessage, + innerException: someInnerException, + data: someInnerException.Data); + + var repositoryDependencyValidationException = + new RepositoryDependencyValidationException( + message: someMessage, + innerException: invalidReferenceRepositoryException, + data: invalidReferenceRepositoryException.Data); + + FailedDependencyObjectResult expectedFailedDependencyObjectResult = + FailedDependency(invalidReferenceRepositoryException); + + var expectedActionResult = + new ActionResult(expectedFailedDependencyObjectResult); + + this.repositoryServiceMock.Setup(service => + service.AddRepositoryAsync(It.IsAny())) + .ThrowsAsync(repositoryDependencyValidationException); + + // when + ActionResult actualActionResult = + await this.repositoriesController.PostRepositoryAsync(someRepository); + + // then + actualActionResult.ShouldBeEquivalentTo(expectedActionResult); + + this.repositoryServiceMock.Verify(service => + service.AddRepositoryAsync(It.IsAny()), + Times.Once); + + this.repositoryServiceMock.VerifyNoOtherCalls(); + } } -} +} \ No newline at end of file diff --git a/GitFyle.Core.Api.Tests.Unit/Controllers/Repositories/RepositoriesControllerTests.Exceptions.Put.cs b/GitFyle.Core.Api.Tests.Unit/Controllers/Repositories/RepositoriesControllerTests.Exceptions.Put.cs index ad8b28b0..cd9a4309 100644 --- a/GitFyle.Core.Api.Tests.Unit/Controllers/Repositories/RepositoriesControllerTests.Exceptions.Put.cs +++ b/GitFyle.Core.Api.Tests.Unit/Controllers/Repositories/RepositoriesControllerTests.Exceptions.Put.cs @@ -163,5 +163,49 @@ public async Task ShouldReturnConflictOnPutIfAlreadyExistsRepositoryErrorOccursA this.repositoryServiceMock.VerifyNoOtherCalls(); } + + [Fact] + public async Task ShouldReturnFailedDependencyOnPutIfRepositoryReferenceIsInvalidAsync() + { + // given + Repository someRepository = CreateRandomRepository(); + var someInnerException = new Exception(); + string someMessage = GetRandomString(); + + var invalidReferenceRepositoryException = + new InvalidRepositoryReferenceException( + message: someMessage, + innerException: someInnerException, + data: someInnerException.Data); + + var repositoryDependencyValidationException = + new RepositoryDependencyValidationException( + message: someMessage, + innerException: invalidReferenceRepositoryException, + data: invalidReferenceRepositoryException.Data); + + FailedDependencyObjectResult expectedFailedDependencyObjectResult = + FailedDependency(invalidReferenceRepositoryException); + + var expectedActionResult = + new ActionResult(expectedFailedDependencyObjectResult); + + this.repositoryServiceMock.Setup(service => + service.AddRepositoryAsync(It.IsAny())) + .ThrowsAsync(repositoryDependencyValidationException); + + // when + ActionResult actualActionResult = + await this.repositoriesController.PostRepositoryAsync(someRepository); + + // then + actualActionResult.ShouldBeEquivalentTo(expectedActionResult); + + this.repositoryServiceMock.Verify(service => + service.AddRepositoryAsync(It.IsAny()), + Times.Once); + + this.repositoryServiceMock.VerifyNoOtherCalls(); + } } -} +} \ No newline at end of file diff --git a/GitFyle.Core.Api/Controllers/RepositoriesController.cs b/GitFyle.Core.Api/Controllers/RepositoriesController.cs index 022d654e..c67f9b80 100644 --- a/GitFyle.Core.Api/Controllers/RepositoriesController.cs +++ b/GitFyle.Core.Api/Controllers/RepositoriesController.cs @@ -36,6 +36,11 @@ public async ValueTask> PostRepositoryAsync(Repository { return BadRequest(repositoryValidationException.InnerException); } + catch (RepositoryDependencyValidationException repositoryDependencyValidationException) + when (repositoryDependencyValidationException.InnerException is InvalidRepositoryReferenceException) + { + return FailedDependency(repositoryDependencyValidationException.InnerException); + } catch (RepositoryDependencyValidationException repositoryDependencyValidationException) when (repositoryDependencyValidationException.InnerException is AlreadyExistsRepositoryException) { @@ -127,6 +132,11 @@ public async ValueTask> PutRepositoryAsync(Repository r { return BadRequest(repositoryValidationException.InnerException); } + catch (RepositoryDependencyValidationException repositoryDependencyValidationException) + when (repositoryDependencyValidationException.InnerException is InvalidRepositoryReferenceException) + { + return FailedDependency(repositoryDependencyValidationException.InnerException); + } catch (RepositoryDependencyValidationException repositoryDependencyValidationException) when (repositoryDependencyValidationException.InnerException is AlreadyExistsRepositoryException) {