Esempio n. 1
0
        private static string ResolveId(VariableScopeType key, ElementReference reference, IOctopusRepository repository, DeploymentProcessResource deploymentProcess, ProjectResource project)
        {
            switch (key)
            {
            case VariableScopeType.Environment:
                return(repository.Environments.ResolveResourceId(reference));

            case VariableScopeType.Machine:
                return(repository.Machines.ResolveResourceId(reference));

            case VariableScopeType.Role:
                return(reference.Name);

            case VariableScopeType.Action:
                return(GetDeploymentAction(deploymentProcess, a => a.Name, reference.Name, nameof(DeploymentActionResource.Name)).Id);

            case VariableScopeType.Channel:
                return(repository.Channels.FindByName(project, reference.Name).Id);

            case VariableScopeType.TenantTag:
                return(reference.Name);

            default:
                throw new InvalidOperationException($"Unsupported ScopeField: {key}");
            }
        }
        public void Uploader_should_throw_meaningful_exception_if_cannot_find_references_from_variable_scope(VariableScopeType scopeType, string resourceTypeName)
        {
            var octopusRepository = new FakeOctopusRepository();
            var uploader          = new ModelUploader(octopusRepository);

            var referenceName = "ref1";

            var variable = new Variable("var1", true, false, "val1", new Dictionary <VariableScopeType, IEnumerable <ElementReference> > {
                { scopeType, new[] { new ElementReference(referenceName) } }
            }, null);

            var model = CreateProjectModel("lifecycle", "group", variable);

            octopusRepository.Lifecycles.Create(new LifecycleResource {
                Name = "lifecycle"
            });
            octopusRepository.ProjectGroups.Create(new ProjectGroupResource {
                Name = "group"
            });

            var ex = Assert.Throws <KeyNotFoundException>(() => uploader.UploadModel(model));

            Assert.That(ex.Message, Is.EqualTo($"{resourceTypeName} with name '{referenceName}' not found."));
        }
 private void Add(Dictionary <VariableScopeType, IEnumerable <ElementReference> > result, VariableScopeType type, string[] values)
 {
     if (values == null || values.Length == 0)
     {
         return;
     }
     result.Add(type, values.Select(name => new ElementReference(name)).ToArray());
 }
 private static string[] GetScopeRefs(IReadOnlyDictionary <VariableScopeType, IEnumerable <ElementReference> > model, VariableScopeType type)
 {
     return(model.Where(kv => kv.Key == type).SelectMany(kv => kv.Value).Select(r => r.Name).OrderBy(v => v).ToArray().NullIfEmpty());
 }