public void GetContents_FindsFolder_ReturnsListOfFileSystemObjects() { // Arrange List <FileSystemObject> expected = new List <FileSystemObject> { new FileSystemObject { Name = "App", Type = FileSystemObjectType.Dir.ToString(), Path = "App" }, new FileSystemObject { Name = "App.sln", Type = FileSystemObjectType.File.ToString(), Path = "App.sln", Encoding = "Unicode (UTF-8)" }, }; int expectedCount = 2; RepositorySI sut = GetServiceForTest("testUser"); // Act List <FileSystemObject> actual = sut.GetContents("ttd", "apps-test"); // Assert Assert.Equal(expected.First().Type, actual.First().Type); Assert.Equal(expectedCount, actual.Count); }
public void GetContents_FindsFile_ReturnsOneFileSystemObject() { // Arrange List <FileSystemObject> expected = new List <FileSystemObject> { new FileSystemObject { Name = "appsettings.json", Type = FileSystemObjectType.File.ToString(), Path = "App/appsettings.json", Encoding = "Unicode (UTF-8)" }, }; int expectedCount = 1; HttpContext httpContext = GetHttpContextForTestUser("testUser"); Mock <IHttpContextAccessor> httpContextAccessorMock = new Mock <IHttpContextAccessor>(); httpContextAccessorMock.Setup(s => s.HttpContext).Returns(httpContext); RepositorySI sut = GetServiceForTest(httpContextAccessorMock); // Act List <FileSystemObject> actual = sut.GetContents("ttd", "apps-test", "App/appsettings.json"); // Assert Assert.Equal(expected.First().Type, actual.First().Type); Assert.Equal(expectedCount, actual.Count); }
public async Task CopyRepository_TargetExistsLocally_InitialCloneMoved() { // Arrange string developer = "testUser"; string org = "ttd"; string sourceRepository = "apps-test"; string targetRepository = "apps-test-2021"; try { PrepareRemoteTestData(org, sourceRepository); TestDataHelper.CleanUpRemoteRepository("ttd", "apps-test-2021"); await TestDataHelper.CleanUpReplacedRepositories(org, targetRepository, developer); RepositorySI sut = GetServiceForTest(developer); // Act await sut.CopyRepository(org, sourceRepository, targetRepository, developer); // Assert string developerClonePath = Path.Combine(TestDataHelper.GetTestDataRepositoriesRootDirectory(), developer, org); int actualCloneCount = Directory.GetDirectories(developerClonePath).Count(d => d.Contains("apps-test-2021")); Assert.Equal(2, actualCloneCount); } finally { TestDataHelper.CleanUpRemoteRepository("ttd", "apps-test-2021"); await TestDataHelper.CleanUpReplacedRepositories(org, targetRepository, developer); CleanUpRemoteTestData(org, sourceRepository); } }
public void GetContents_LocalCloneOfRepositoryNotAvailable_ReturnsNull() { // Arrange RepositorySI sut = GetServiceForTest("testUser"); // Act List <FileSystemObject> actual = sut.GetContents("ttd", "test-apps"); // Assert Assert.Null(actual); }
public void GetContents_LocalCloneOfRepositoryNotAvailable_ReturnsNull() { // Arrange HttpContext httpContext = GetHttpContextForTestUser("testUser"); Mock <IHttpContextAccessor> httpContextAccessorMock = new Mock <IHttpContextAccessor>(); httpContextAccessorMock.Setup(s => s.HttpContext).Returns(httpContext); RepositorySI sut = GetServiceForTest(httpContextAccessorMock); // Act List <FileSystemObject> actual = sut.GetContents("ttd", "test-apps"); // Assert Assert.Null(actual); }
public async Task CopyRepository_TargetExistsRemotely_Conflict() { // Arrange string developer = "testUser"; string org = "ttd"; string sourceRepository = "apps-test"; string targetRepository = "existing-repo"; RepositorySI sut = GetServiceForTest(developer); // Act Repository actual = await sut.CopyRepository(org, sourceRepository, targetRepository, developer); // Assert Assert.Equal(HttpStatusCode.Conflict, actual.RepositoryCreatedStatus); }
private RepositorySI GetServiceForTest(Mock <IHttpContextAccessor> httpContextAccsessorMock) { IOptions <ServiceRepositorySettings> repoSettings = Options.Create(new ServiceRepositorySettings()); string unitTestFolder = Path.GetDirectoryName(new Uri(typeof(RepositoryServiceTest).Assembly.CodeBase).LocalPath); repoSettings.Value.RepositoryLocation = Path.Combine(unitTestFolder, @"..\..\..\_TestData\Repositories\"); RepositorySI service = new RepositorySI( repoSettings, new Mock <IOptions <GeneralSettings> >().Object, new Mock <IDefaultFileFactory>().Object, httpContextAccsessorMock.Object, new Mock <IGitea>().Object, new Mock <ISourceControl>().Object, new Mock <ILoggerFactory>().Object, new Mock <ILogger <RepositorySI> >().Object); return(service); }
public async Task DeleteRepository_SourceControlServiceIsCalled() { // Arrange string developer = "testUser"; string org = "ttd"; string repository = "apps-test"; Mock <ISourceControl> mock = new Mock <ISourceControl>(); mock.Setup(m => m.DeleteRepository(It.IsAny <string>(), It.IsAny <string>())) .Returns(Task.CompletedTask); RepositorySI sut = GetServiceForTest(developer, mock.Object); // Act await sut.DeleteRepository(org, repository); // Assert mock.VerifyAll(); }
public async Task CopyRepository_TargetDoesNotExistsLocally() { // Arrange string developer = "testUser"; string org = "ttd"; string sourceRepository = "apps-test"; string targetRepository = "apps-test-clone"; string expectedRepoPath = TestDataHelper.GetTestDataRepositoryDirectory(org, targetRepository, developer); try { PrepareRemoteTestData(org, sourceRepository); RepositorySI sut = GetServiceForTest(developer); // Act await sut.CopyRepository(org, sourceRepository, targetRepository, developer); // Assert string appMetadataString = TestDataHelper.GetFileFromRepo(org, targetRepository, developer, "App/config/applicationmetadata.json"); string gitConfigString = TestDataHelper.GetFileFromRepo(org, targetRepository, developer, ".git/config"); string developerClonePath = Path.Combine(TestDataHelper.GetTestDataRepositoriesRootDirectory(), developer, org); Assert.True(Directory.Exists(expectedRepoPath)); Assert.Contains("\"id\": \"ttd/apps-test-clone\"", appMetadataString); Assert.Contains("https://dev.altinn.studio/repos/ttd/apps-test-clone.git", gitConfigString); Assert.DoesNotContain(Directory.GetDirectories(developerClonePath), a => a.Contains("_COPY_OF_ORIGIN_")); } finally { string path = TestDataHelper.GetTestDataRepositoryDirectory("ttd", "apps-test-clone", "testUser"); TestDataHelper.CleanUpRemoteRepository(org, targetRepository); if (Directory.Exists(path)) { Directory.Delete(path, true); } CleanUpRemoteTestData(org, sourceRepository); } }
private static RepositorySI GetServiceForTest(string developer, ISourceControl sourceControlMock = null) { HttpContext ctx = GetHttpContextForTestUser(developer); Mock <IHttpContextAccessor> httpContextAccessorMock = new Mock <IHttpContextAccessor>(); httpContextAccessorMock.Setup(s => s.HttpContext).Returns(ctx); sourceControlMock ??= new ISourceControlMock(); 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") + Path.DirectorySeparatorChar; var altinnGitRepositoryFactory = new AltinnGitRepositoryFactory(TestDataHelper.GetTestDataRepositoriesRootDirectory()); IOptions <GeneralSettings> generalSettings = Options.Create( new GeneralSettings() { TemplateLocation = @"../../../../../../AppTemplates/AspNet", DeploymentLocation = @"../../../../../../AppTemplates/AspNet/deployment", AppLocation = @"../../../../../../AppTemplates/AspNet/App" }); RepositorySI service = new RepositorySI( repoSettings, generalSettings, new Mock <IDefaultFileFactory>().Object, httpContextAccessorMock.Object, new IGiteaMock(), sourceControlMock, new Mock <ILoggerFactory>().Object, new Mock <ILogger <RepositorySI> >().Object, altinnGitRepositoryFactory); return(service); }