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()); }