public void ToPrettyString_Should_Represent_Range() { // Arrange var r0 = new ReleaseRange(); var r1 = new ReleaseRange("1.0"); var r2 = new ReleaseRange("[1.0,2.0]"); var r3 = new ReleaseRange("(1.0,2.0]"); var r4 = new ReleaseRange("[1.0,2.0)"); var r5 = new ReleaseRange("(1.0,2.0)"); // Act var s0 = r0.ToPrettyString(); var s1 = r1.ToPrettyString(); var s2 = r2.ToPrettyString(); var s3 = r3.ToPrettyString(); var s4 = r4.ToPrettyString(); var s5 = r5.ToPrettyString(); // Assert s0.Should().BeEmpty(); s1.Should().Be(">=1.0"); s2.Should().Be(">=1.0 and <=2.0"); s3.Should().Be(">1.0 and <=2.0"); s4.Should().Be(">=1.0 and <2.0"); s5.Should().Be(">1.0 and <2.0"); }
public void Range_Must_Follow_Format() { // Arrange // Act Action a1 = () => { var _ = new ReleaseRange("1.0,2.0"); }; Action a2 = () => { var _ = new ReleaseRange("[1.0,2.0"); }; Action a3 = () => { var _ = new ReleaseRange("myversion"); }; // Assert a1.Should().Throw <ArgumentException>() .WithMessage("Release range start version must begin with '[' or '(': '1.0'"); a2.Should().Throw <ArgumentException>() .WithMessage("Release range stop version must end with ']' or ')': '2.0'"); a3.Should().Throw <ArgumentException>() .WithMessage("Release range must contain 1 or 2 versions: 'myversion'"); }
public void Range_Should_Only_Accept_Versions_Within_Boundaries() { // Arrange var r1 = new ReleaseRange("prod9.5"); var r2 = new ReleaseRange("[prod9.0, prod10.0]"); var r3 = new ReleaseRange("(prod9.0, prod10.0]"); var r4 = new ReleaseRange("[prod9.0, prod10.0)"); var r5 = new ReleaseRange("(prod9.0, prod10.0)"); // Act // Assert r1.Accepts("prod9.0").Should().BeFalse(); r2.Accepts("prod9.0").Should().BeTrue(); r3.Accepts("prod9.0").Should().BeFalse(); r4.Accepts("prod9.0").Should().BeTrue(); r5.Accepts("prod9.0").Should().BeFalse(); r1.Accepts("prod9.5").Should().BeTrue(); r2.Accepts("prod9.5").Should().BeTrue(); r3.Accepts("prod9.5").Should().BeTrue(); r4.Accepts("prod9.5").Should().BeTrue(); r5.Accepts("prod9.5").Should().BeTrue(); r1.Accepts("prod10.0").Should().BeTrue(); r2.Accepts("prod10.0").Should().BeTrue(); r3.Accepts("prod10.0").Should().BeTrue(); r4.Accepts("prod10.0").Should().BeFalse(); r5.Accepts("prod10.0").Should().BeFalse(); }
public void Spaces_Should_Be_Ignored() { // Arrange var r = new ReleaseRange("[1.0, 2.0]"); // Act var s = r.ToString(); // Assert s.Should().Be("[1.0,2.0]"); }
public void Range_Cannot_Contain_More_Than_Two_Versions() { // Arrange // Act Action a = () => { var _ = new ReleaseRange("[1.0,2.0,3.0]"); }; // Assert a.Should().Throw <ArgumentException>() .WithMessage("Release range cannot contain more than 2 versions: '[1.0,2.0,3.0]'"); }
public void Empty_Or_Null_Range_Accepts_All_Versions() { // Arrange var rr1 = new ReleaseRange(null); var rr2 = new ReleaseRange(string.Empty); // Act var s1 = rr1.ToString(); var s2 = rr1.ToString(); // Assert s1.Should().BeEmpty(); s2.Should().BeEmpty(); rr1.Accepts("v1.2").Should().BeTrue(); rr2.Accepts("v1.2").Should().BeTrue(); }
public void ToString_Should_Be_Similar_To_Original_String() { // Arrange var r1 = new ReleaseRange("1.0"); var r2 = new ReleaseRange("[1.0,2.0]"); var r3 = new ReleaseRange("(1.0, 2.0]"); var r4 = new ReleaseRange("[1.0,2.0)"); var r5 = new ReleaseRange("(1.0, 2.0)"); // Act var s1 = r1.ToString(); var s2 = r2.ToString(); var s3 = r3.ToString(); var s4 = r4.ToString(); var s5 = r5.ToString(); // Assert s1.Should().Be("1.0"); s2.Should().Be("[1.0,2.0]"); s3.Should().Be("(1.0,2.0]"); s4.Should().Be("[1.0,2.0)"); s5.Should().Be("(1.0,2.0)"); }
public async Task <ActionResult> GetProjectArchive([FromQuery] ProjectSpec spec) { var defaults = _uiConfigService.UiConfig; var normalizedSpec = new ProjectSpec() { Name = spec.Name ?? defaults?.Name?.Default, Namespace = spec.Namespace ?? defaults?.Namespace?.Default, Description = spec.Description ?? defaults?.Description?.Default, SteeltoeVersion = spec.SteeltoeVersion ?? defaults?.SteeltoeVersion?.Default, DotNetFramework = spec.DotNetFramework ?? defaults?.DotNetFramework?.Default, Language = spec.Language ?? defaults?.Language?.Default, Packaging = spec.Packaging ?? defaults?.Packaging?.Default, Dependencies = spec.Dependencies ?? defaults?.Dependencies?.Default, }; if (new ReleaseRange("3.0.0").Accepts(normalizedSpec.SteeltoeVersion) && !new ReleaseRange("netcoreapp3.1").Accepts(normalizedSpec.DotNetFramework)) { return(NotFound( $".NET framework version {normalizedSpec.DotNetFramework} not found for Steeltoe version {normalizedSpec.SteeltoeVersion}")); } if (normalizedSpec.Dependencies != null) { var deps = normalizedSpec.Dependencies.Split(','); for (var i = 0; i < deps.Length; ++i) { var found = false; foreach (var group in defaults.Dependencies.Values) { foreach (var dep in group.Values) { if (!deps[i].Equals(dep.Id, StringComparison.OrdinalIgnoreCase)) { continue; } var steeltoeRange = new ReleaseRange(dep.SteeltoeVersionRange); if (!steeltoeRange.Accepts(normalizedSpec.SteeltoeVersion)) { return(NotFound( $"No dependency '{deps[i]}' found for Steeltoe version {normalizedSpec.SteeltoeVersion}.")); } var frameworkRange = new ReleaseRange(dep.DotNetFrameworkRange); if (!frameworkRange.Accepts(normalizedSpec.DotNetFramework)) { return(NotFound( $"No dependency '{deps[i]}' found for .NET framework {normalizedSpec.DotNetFramework}.")); } deps[i] = dep.Id; found = true; } } if (!found) { return(NotFound($"Dependency '{deps[i]}' not found.")); } } normalizedSpec.Dependencies = string.Join(',', deps); } if (normalizedSpec.Packaging is null) { return(StatusCode( StatusCodes.Status500InternalServerError, "Default packaging not configured.")); } Logger.LogInformation("Project specification: {ProjectSpec}", normalizedSpec); try { var projectPackage = await _projectGenerator.GenerateProjectArchive(normalizedSpec); return(File( projectPackage, $"application/zip", $"{normalizedSpec.Name}.zip")); } catch (NoProjectForSpecException e) { return(NotFound(e.Message)); } catch (InvalidSpecException e) { return(BadRequest(e.Message)); } }