diff --git a/NGitLab.Mock.Tests/ProjectsMockTests.cs b/NGitLab.Mock.Tests/ProjectsMockTests.cs index 404e8f66..ca142791 100644 --- a/NGitLab.Mock.Tests/ProjectsMockTests.cs +++ b/NGitLab.Mock.Tests/ProjectsMockTests.cs @@ -47,6 +47,45 @@ public void Test_projects_created_can_be_found() Assert.That(project.Namespace.FullPath, Is.EqualTo("testgroup")); } + [Test] + public void GetProjectAsync_WhenProjectDoesNotExist_ShouldThrowNotFound() + { + // Arrange + using var server = new GitLabConfig() + .WithUser("TestUser", isDefault: true) + .BuildServer(); + var gitLabClient = server.CreateClient(); + var projectClient = gitLabClient.Projects; + + // Act/Assert + var ex = Assert.ThrowsAsync(() => projectClient.GetAsync("baz1234")); + + Assert.That(ex.StatusCode, Is.EqualTo(HttpStatusCode.NotFound)); + } + + [Test] + public void GetProjectAsync_WhenProjectInaccessible_ShouldThrowNotFound() + { + // Arrange + using var server = new GitLabConfig() + .WithUser("TestUser1", isDefault: true) + .WithUser("TestUser2") + .BuildServer(); + var testUser1ProjectClient = server.CreateClient("TestUser1").Projects; + var testUser2ProjectClient = server.CreateClient("TestUser2").Projects; + + var testUser2Project = testUser2ProjectClient.Create(new ProjectCreate + { + Name = $"Project_Test_{Guid.NewGuid()}", + VisibilityLevel = VisibilityLevel.Private, + }); + + // Act/Assert + var ex = Assert.ThrowsAsync(() => testUser1ProjectClient.GetAsync(testUser2Project.Id)); + + Assert.That(ex.StatusCode, Is.EqualTo(HttpStatusCode.NotFound)); + } + [Test] public void Test_project_can_be_cloned_by_default() { diff --git a/NGitLab.Mock/Clients/ClientBase.cs b/NGitLab.Mock/Clients/ClientBase.cs index 4ed64347..ab562f0c 100644 --- a/NGitLab.Mock/Clients/ClientBase.cs +++ b/NGitLab.Mock/Clients/ClientBase.cs @@ -85,8 +85,15 @@ protected Project GetProject(object id, ProjectPermission permissions) _ => throw new ArgumentException($"Id of type '{id.GetType()}' is not supported"), }; - if (project == null || !project.CanUserViewProject(Context.User)) - throw new GitLabNotFoundException("Project does not exist or User doesn't have permission to view it"); + if (project is null || !project.CanUserViewProject(Context.User)) + { + throw new GitLabException("GitLab server returned an error (NotFound): 404 Project Not Found.") + { + MethodType = Impl.MethodType.Get, + StatusCode = HttpStatusCode.NotFound, + ErrorMessage = "404 Project Not Found", + }; + } switch (permissions) { diff --git a/NGitLab.Tests/ProjectsTests.cs b/NGitLab.Tests/ProjectsTests.cs index fcfda9ad..a28c798c 100644 --- a/NGitLab.Tests/ProjectsTests.cs +++ b/NGitLab.Tests/ProjectsTests.cs @@ -87,6 +87,27 @@ public async Task GetProjectAsync_WhenProjectDoesNotExist_ShouldThrowNotFound() Assert.That(ex.StatusCode, Is.EqualTo(HttpStatusCode.NotFound)); } + [Test] + [NGitLabRetry] + public async Task GetProjectAsync_WhenProjectInaccessible_ShouldThrowNotFound() + { + // Arrange + using var context = await GitLabTestContext.CreateAsync(); + var adminProjectClient = context.AdminClient.Projects; + var userProjectClient = context.Client.Projects; + + var adminProject = adminProjectClient.Create(new ProjectCreate + { + Name = "Project_Test_" + context.GetRandomNumber().ToStringInvariant(), + VisibilityLevel = VisibilityLevel.Private, + }); + + // Act/Assert + var ex = Assert.ThrowsAsync(() => userProjectClient.GetAsync(adminProject.Id)); + + Assert.That(ex.StatusCode, Is.EqualTo(HttpStatusCode.NotFound)); + } + [Test] [NGitLabRetry] public async Task GetProjectsAsync()