public async Task Delete_StarredRepos(bool expectedResult, HttpStatusCode httpStatusCode) { var handlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict); HttpResponseMessage httpResponseMessage = new HttpResponseMessage() { StatusCode = httpStatusCode, }; handlerMock .Protected() .Setup <Task <HttpResponseMessage> >( "SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .ReturnsAsync(httpResponseMessage) .Verifiable(); // use real http client with mocked handler here var httpClient = new HttpClient(handlerMock.Object) { BaseAddress = new Uri("http://altinn3.no/designer/api/v1/user/starred") }; GiteaAPIWrapper giteaApi = GetServiceForTest("testUser", httpClient); bool result = await giteaApi.DeleteStarred("org", "repository"); Assert.Equal(expectedResult, result); }
public async Task CreateBranch_ConflictFromGitea_NullReturned() { // Arrange var handlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict); handlerMock .Protected() .Setup <Task <HttpResponseMessage> >( "SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .ReturnsAsync(new HttpResponseMessage() { StatusCode = HttpStatusCode.Conflict }) .Verifiable(); // use real http client with mocked handler here var httpClient = new HttpClient(handlerMock.Object) { BaseAddress = new Uri("http://altinn3.no/repos/api/v1") }; GiteaAPIWrapper sut = GetServiceForTest("testUser", httpClient); // Act Branch actual = await sut.CreateBranch("ttd", "apps-test-2021", "master"); // Assert Assert.Null(actual); }
public async Task Get_StarredRepos_Ok() { IList <Repository> repositories = GetRepositories(); var handlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict); HttpResponseMessage httpResponseMessage = new HttpResponseMessage() { StatusCode = HttpStatusCode.OK, Content = new StringContent(JsonSerializer.Serialize(repositories), Encoding.UTF8, "application/json"), }; handlerMock .Protected() .Setup <Task <HttpResponseMessage> >( "SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .ReturnsAsync(httpResponseMessage) .Verifiable(); // use real http client with mocked handler here var httpClient = new HttpClient(handlerMock.Object) { BaseAddress = new Uri("http://altinn3.no/designer/api/v1/user/starred") }; GiteaAPIWrapper giteaApi = GetServiceForTest("testUser", httpClient); IList <Repository> result = await giteaApi.GetStarred(); Assert.Equal(10, repositories.Count); }
public async Task Search_Failed() { // Arrange var handlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict); HttpResponseMessage httpResponseMessage = new HttpResponseMessage() { StatusCode = HttpStatusCode.BadRequest }; handlerMock .Protected() .Setup <Task <HttpResponseMessage> >( "SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .ReturnsAsync(httpResponseMessage) .Verifiable(); // use real http client with mocked handler here var httpClient = new HttpClient(handlerMock.Object) { BaseAddress = new Uri("http://altinn3.no/repos/api/v1") }; GiteaAPIWrapper giteaApi = GetServiceForTest("testUser", httpClient); SearchResults result = await giteaApi.SearchRepo(GetSearchOptions()); Assert.Null(result); }
public async Task Get_Repository() { // Setting up the response message to get from Gitea for a repository request Repository repository = GetRepositories().First(); HttpResponseMessage httpRepositoryResponseMessage = new HttpResponseMessage() { StatusCode = HttpStatusCode.OK, Content = new StringContent(JsonSerializer.Serialize(repository), Encoding.UTF8, "application/json"), }; // Configuring the mock handler to return the response message for repository requests var handlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict); handlerMock .Protected() .Setup <Task <HttpResponseMessage> >( "SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .ReturnsAsync(httpRepositoryResponseMessage) .Verifiable(); // Setting up the response message to get from Gitea for a organization request (which is done as part of getting the repository) Organization organization = new Organization() { Username = "******", FullName = "Testdepartementet", Id = 658 }; HttpResponseMessage httpOrganizationResponseMessage = new HttpResponseMessage() { StatusCode = HttpStatusCode.OK, Content = new StringContent(JsonSerializer.Serialize(organization), Encoding.UTF8, "application/json"), }; // Configuring the mock handler to return the response message for organization requests. // Note the org_ prefix added to the org code, this is how it needs to be when requesting a org from Gitea. handlerMock .Protected() .Setup <Task <HttpResponseMessage> >( "SendAsync", ItExpr.Is <HttpRequestMessage>(request => request.Method == HttpMethod.Get && request.RequestUri.AbsolutePath.Contains("/orgs/org_ttd")), ItExpr.IsAny <CancellationToken>()) .ReturnsAsync(httpOrganizationResponseMessage) .Verifiable(); // Injecting the mock handler into a real http client var httpClient = new HttpClient(handlerMock.Object) { BaseAddress = new Uri("http://altinn3.no/designer/api/v1/") }; // Passing the test specific mock setup in, sprinkles a bit more mock setup and returns a valid GiteaAPIWrapper GiteaAPIWrapper giteaApi = GetServiceForTest("testUser", httpClient); // Act Repository result = await giteaApi.GetRepository("ttd", "repo"); // Assert Assert.Equal(1769, result.Id); }
public async Task Search_Successfull_Repo_Returned_Multiple_Pages() { // Arrange SearchResults searchResult = new SearchResults(); searchResult.Ok = true; searchResult.Data = GetRepositories(); var handlerMock = new Mock <HttpMessageHandler>(MockBehavior.Strict); HttpResponseMessage httpResponseMessage = new HttpResponseMessage() { StatusCode = HttpStatusCode.OK, Content = new StringContent(JsonSerializer.Serialize(searchResult), Encoding.UTF8, "application/json"), }; httpResponseMessage.Headers.Add("X-Total-Count", $"{searchResult.Data.Count}"); string link = "<https://dev.altinn.studio/repos/api/v1/repos/search?limit=10&order=desc&page=2&sort=created&uid=658>; rel=\"next\"," + "<https://dev.altinn.studio/repos/api/v1/repos/search?limit=10&order=desc&page=27&sort=created&uid=658>; rel=\"last\""; httpResponseMessage.Headers.Add("Link", link); handlerMock .Protected() .Setup <Task <HttpResponseMessage> >( "SendAsync", ItExpr.IsAny <HttpRequestMessage>(), ItExpr.IsAny <CancellationToken>()) .ReturnsAsync(httpResponseMessage) .Verifiable(); // use real http client with mocked handler here var httpClient = new HttpClient(handlerMock.Object) { BaseAddress = new Uri("http://altinn3.no/repos/api/v1") }; GiteaAPIWrapper giteaApi = GetServiceForTest("testUser", httpClient); SearchOptions searchOptions = GetSearchOptions(); searchOptions.Limit = 10; SearchResults result = await giteaApi.SearchRepo(searchOptions); Assert.Equal(searchResult.Data.Count, result.TotalCount); Assert.Equal(27, result.TotalPages); }
private static GiteaAPIWrapper GetServiceForTest(string developer, HttpClient c) { HttpContext ctx = GetHttpContextForTestUser(developer); Mock <IHttpContextAccessor> httpContextAccessorMock = new Mock <IHttpContextAccessor>(); httpContextAccessorMock.Setup(s => s.HttpContext).Returns(ctx); IOptions <ServiceRepositorySettings> repoSettings = Options.Create(new ServiceRepositorySettings()); string unitTestFolder = Path.GetDirectoryName(new Uri(typeof(RepositorySITests).Assembly.Location).LocalPath); repoSettings.Value.RepositoryLocation = Path.Combine(unitTestFolder, "..", "..", "..", "_TestData", "Repositories"); GiteaAPIWrapper service = new GiteaAPIWrapper( repoSettings, httpContextAccessorMock.Object, new MemoryCache(new MemoryCacheOptions()), new Mock <ILogger <GiteaAPIWrapper> >().Object, c); return(service); }