Example #1
0
        public void UnexpectedTenantConfigThrows(string tenantName, string projectName, string environment, Mock <IOctopusAsyncRepository> octoMoq)
        {
            octoMoq.Setup(o => o.Projects).Returns(mockProj(projectName).Object);
            var tenProj = new TenantVariableResource.Project("");

            tenProj.Variables.Add(environment, new Dictionary <string, PropertyValueResource>());
            octoMoq.Setup(o => o.Tenants).Returns(mockedTen(tenantName, projectName, tenProj).Object);
            octoMoq.Setup(o => o.Environments).Returns(mockEnv(environment).Object);

            var args = new TenantTargetArgs()
            {
                TenantName = tenantName, ProjectName = projectName, Environments = new List <string>()
                {
                    environment
                }
            };
            var sut = new TenantManager(args, octoMoq.Object, Mock.Of <ILogger>());

            Func <Task> test = () => sut.CreateTenantVariables(new List <SecretVariable>()
            {
                new SecretVariable("aA", "g")
            });

            test.Should().Throw <ArgumentException>().WithMessage($"The loaded configuration for tenant '{tenantName}' has variable 'aA' not found in the project '{projectName}'");
        }
Example #2
0
        public void MissingProjectThrows(string projectName, Mock <IOctopusAsyncRepository> octoMoq)
        {
            octoMoq.Setup(o => o.Projects).Returns(Mock.Of <IProjectRepository>());
            var args = new TenantTargetArgs()
            {
                ProjectName = projectName
            };
            var sut = new TenantManager(args, octoMoq.Object, Mock.Of <ILogger>());

            Func <Task> test = () => sut.CreateTenantVariables(new List <SecretVariable>());

            test.Should().Throw <ArgumentException>().WithMessage($"Unable to find a project with the name '{projectName}'");
        }
Example #3
0
        public void MissingTenantThrows(string tenantName, Mock <IOctopusAsyncRepository> octoMoq, Mock <IProjectRepository> projMoq)
        {
            projMoq.Setup(p => p.FindByName(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <object>()))
            .Returns(Task.FromResult(new ProjectResource()));
            octoMoq.Setup(o => o.Projects).Returns(projMoq.Object);
            octoMoq.Setup(o => o.Tenants).Returns(Mock.Of <ITenantRepository>());
            var args = new TenantTargetArgs()
            {
                TenantName = tenantName
            };
            var sut = new TenantManager(args, octoMoq.Object, Mock.Of <ILogger>());

            Func <Task> test = () => sut.CreateTenantVariables(new List <SecretVariable>());

            test.Should().Throw <ArgumentException>().WithMessage($"Unable to find a tenant with the name '{tenantName}'");
        }
Example #4
0
        public void UnlinkedProjectThrows(string tenantName, string projectName, Mock <IOctopusAsyncRepository> octoMoq)
        {
            octoMoq.Setup(o => o.Projects).Returns(mockProj(projectName).Object);
            var tenMoq = mockedTen(tenantName, "", null);

            octoMoq.Setup(o => o.Tenants).Returns(tenMoq.Object);
            octoMoq.Setup(o => o.Environments).Returns(Mock.Of <IEnvironmentRepository>());

            var args = new TenantTargetArgs()
            {
                TenantName = tenantName, ProjectName = projectName
            };
            var sut = new TenantManager(args, octoMoq.Object, Mock.Of <ILogger>());

            Func <Task> test = () => sut.CreateTenantVariables(new List <SecretVariable>());

            test.Should().Throw <ArgumentException>().WithMessage($"Tenant {tenantName} is not linked with project {projectName}");
        }
Example #5
0
        public void TenantWithExistingVariableShouldNotThrow(string tenantName, string projectName, string environment, string variableName,
                                                             string variableValue, Mock <IOctopusAsyncRepository> octoMoq)
        {
            octoMoq.Setup(o => o.Projects).Returns(mockProj(projectName).Object);
            var tenProj = new TenantVariableResource.Project("");

            tenProj.Variables.Add(environment, new Dictionary <string, PropertyValueResource>()
            {
                { variableName, new PropertyValueResource(variableValue) }
            });
            tenProj.Templates.Add(new ActionTemplateParameterResource()
            {
                Name            = variableName,
                Id              = variableName,
                DefaultValue    = "",
                DisplaySettings = new Dictionary <string, string>()
                {
                    { "Octopus.ControlType", "Sensitive" }
                }
            });
            var mockTen = mockedTen(tenantName, projectName, tenProj);

            mockTen.Setup(t => t.ModifyVariables(It.IsAny <TenantResource>(), It.IsAny <TenantVariableResource>()))
            .Returns <TenantResource, TenantVariableResource>((_, tvr) => Task.FromResult(tvr));

            octoMoq.Setup(o => o.Tenants).Returns(mockTen.Object);
            octoMoq.Setup(o => o.Environments).Returns(mockEnv(environment).Object);

            var args = new TenantTargetArgs()
            {
                TenantName = tenantName, ProjectName = projectName, Environments = new List <string>()
                {
                    environment
                }
            };
            var sut = new TenantManager(args, octoMoq.Object, Mock.Of <ILogger>());

            Func <Task> act = () => sut.CreateTenantVariables(new List <SecretVariable>()
            {
                new SecretVariable(variableName, variableValue)
            });

            act.Should().NotThrow();
        }
Example #6
0
        public async Task SensitiveSecretShouldMakeTenantVariableSecret(string tenantName, string projectName, string environment, string variableName,
                                                                        string variableValue, Mock <IOctopusAsyncRepository> octoMoq)
        {
            octoMoq.Setup(o => o.Projects).Returns(mockProj(projectName).Object);
            var tenProj = new TenantVariableResource.Project("");

            tenProj.Variables.Add(environment, new Dictionary <string, PropertyValueResource>());
            tenProj.Templates.Add(new ActionTemplateParameterResource()
            {
                Name = variableName, Id = variableName
            });
            var mockTen = mockedTen(tenantName, projectName, tenProj);

            mockTen.Setup(t => t.ModifyVariables(It.IsAny <TenantResource>(), It.IsAny <TenantVariableResource>()))
            .Returns <TenantResource, TenantVariableResource>((tr, tvr) =>
            {
                tr.Name.Should().Be(tenantName);
                var prj = tvr.ProjectVariables[projectName];
                prj.Variables.Single().Key.Should().Be(environment);
                var env = prj.Variables.Single().Value;
                env.ContainsKey(variableName).Should().BeTrue($"Variable dictionary should contain variable with name {variableName}");
                env[variableName].IsSensitive.Should().BeTrue();
                env[variableName].SensitiveValue.HasValue.Should().BeTrue();
                env[variableName].SensitiveValue.NewValue.Should().Be(variableValue);
                return(Task.FromResult(tvr));
            });

            octoMoq.Setup(o => o.Tenants).Returns(mockTen.Object);
            octoMoq.Setup(o => o.Environments).Returns(mockEnv(environment).Object);

            var args = new TenantTargetArgs()
            {
                TenantName = tenantName, ProjectName = projectName, Environments = new List <string>()
                {
                    environment
                }
            };
            var sut = new TenantManager(args, octoMoq.Object, Mock.Of <ILogger>());

            await sut.CreateTenantVariables(new List <SecretVariable>() { new SecretVariable(variableName, variableValue)
                                                                          {
                                                                              IsSecret = true
                                                                          } }).ConfigureAwait(false);
        }
Example #7
0
        public async Task ApplyFalseDoesntPersistChangesToOctopus(string tenantName, string projectName, Mock <IOctopusAsyncRepository> octoMoq)
        {
            octoMoq.Setup(o => o.Projects).Returns(mockProj(projectName).Object);
            var mockTen = mockedTen(tenantName, projectName, new TenantVariableResource.Project(""));

            mockTen.Setup(t => t.ModifyVariables(It.IsAny <TenantResource>(), It.IsAny <TenantVariableResource>()))
            .Verifiable();
            octoMoq.Setup(o => o.Tenants).Returns(mockTen.Object);

            var args = new TenantTargetArgs()
            {
                TenantName = tenantName, ProjectName = projectName, Environments = new List <string>()
            };
            var sut = new TenantManager(args, octoMoq.Object, Mock.Of <ILogger>());

            await sut.CreateTenantVariables(new List <SecretVariable>(), apply : false).ConfigureAwait(false);

            mockTen.Verify(t => t.ModifyVariables(It.IsAny <TenantResource>(), It.IsAny <TenantVariableResource>()), Times.Never);
        }
Example #8
0
        public void MissingEnvironmentThrows(string enviroName, Mock <IOctopusAsyncRepository> octoMoq)
        {
            octoMoq.Setup(o => o.Projects).Returns(mockProj("h").Object);
            var tenMoq = mockedTen(null, "h", new TenantVariableResource.Project(""));

            octoMoq.Setup(o => o.Tenants).Returns(tenMoq.Object);
            octoMoq.Setup(o => o.Environments).Returns(Mock.Of <IEnvironmentRepository>());

            var args = new TenantTargetArgs()
            {
                Environments = new List <string>()
                {
                    enviroName
                }
            };
            var sut = new TenantManager(args, octoMoq.Object, Mock.Of <ILogger>());

            Func <Task> test = () => sut.CreateTenantVariables(new List <SecretVariable>());

            test.Should().Throw <ArgumentException>().WithMessage($"Unable to find an environment with the name '{enviroName}'");
        }