From 693128172c2605c0b56a9de6a29cf9e45303a276 Mon Sep 17 00:00:00 2001 From: Greg Hays Date: Sat, 14 Jun 2025 15:44:34 -0700 Subject: [PATCH 1/3] Controllers -> InvalidReference Post-Put * Closes: #311 --- GitFyle.Core.Api/Controllers/RepositoriesController.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) 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) { From 058c6a1b35957bd98ae112a0f5baed13c23a2107 Mon Sep 17 00:00:00 2001 From: Greg Hays Date: Sat, 14 Jun 2025 15:46:47 -0700 Subject: [PATCH 2/3] Controllers Post-Put Tests --- ...sitoriesControllerTests.Exceptions.Post.cs | 46 ++++++++++++++++++- ...ositoriesControllerTests.Exceptions.Put.cs | 46 ++++++++++++++++++- 2 files changed, 90 insertions(+), 2 deletions(-) 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..6427f917 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..b29a23ed 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 From 3a3da8ed78509a62ff71ce4e5ff1770b23cdba11 Mon Sep 17 00:00:00 2001 From: Greg Hays Date: Mon, 23 Jun 2025 12:13:47 -0700 Subject: [PATCH 3/3] CODE RUB: Formatting Comment Resolution --- .../Repositories/RepositoriesControllerTests.Exceptions.Post.cs | 2 +- .../Repositories/RepositoriesControllerTests.Exceptions.Put.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 6427f917..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 @@ -145,7 +145,7 @@ public async Task ShouldReturnFailedDependencyOnPostIfRepositoryReferenceIsInval data: invalidReferenceRepositoryException.Data); FailedDependencyObjectResult expectedFailedDependencyObjectResult = - FailedDependency(invalidReferenceRepositoryException); + FailedDependency(invalidReferenceRepositoryException); var expectedActionResult = new ActionResult(expectedFailedDependencyObjectResult); 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 b29a23ed..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 @@ -185,7 +185,7 @@ public async Task ShouldReturnFailedDependencyOnPutIfRepositoryReferenceIsInvali data: invalidReferenceRepositoryException.Data); FailedDependencyObjectResult expectedFailedDependencyObjectResult = - FailedDependency(invalidReferenceRepositoryException); + FailedDependency(invalidReferenceRepositoryException); var expectedActionResult = new ActionResult(expectedFailedDependencyObjectResult);