Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        public void GetContents_LocalCloneOfRepositoryNotAvailable_ReturnsNull()
        {
            // Arrange
            RepositorySI sut = GetServiceForTest("testUser");

            // Act
            List <FileSystemObject> actual = sut.GetContents("ttd", "test-apps");

            // Assert
            Assert.Null(actual);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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();
        }
Пример #9
0
        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);
            }
        }
Пример #10
0
        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);
        }