Skip to content

Commit bcb25fc

Browse files
committed
Add tests to improve code coverage.
1 parent e90bd98 commit bcb25fc

File tree

4 files changed

+251
-0
lines changed

4 files changed

+251
-0
lines changed
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Threading.Tasks;
4+
using FluentAssertions;
5+
using Moq;
6+
using OctoConfig.Core.Octopus;
7+
using Octopus.Client;
8+
using Octopus.Client.Model;
9+
using Octopus.Client.Repositories.Async;
10+
using Xunit;
11+
using Xunit.Extensions;
12+
13+
namespace OctoConfig.Tests
14+
{
15+
public static class IOctopusAsyncRepositoryExtensionsTests
16+
{
17+
public class ValidateRolesTests
18+
{
19+
[Theory]
20+
[MemberData(nameof(FoundData))]
21+
public async Task FoundRoleShouldNotThrow(List<string> server, List<string> passedIn)
22+
{
23+
var machineMock = new Mock<IMachineRoleRepository>();
24+
machineMock.Setup(m => m.GetAllRoleNames()).Returns(Task.FromResult(server));
25+
var mock = new Mock<IOctopusAsyncRepository>();
26+
mock.Setup(or => or.MachineRoles).Returns(machineMock.Object);
27+
await mock.Object.ValidateRoles(passedIn).ConfigureAwait(false);
28+
}
29+
30+
[Theory]
31+
[MemberData(nameof(MissingData))]
32+
public void MissingRoleShouldNotThrow(List<string> server, List<string> passedIn, string missing)
33+
{
34+
var machineMock = new Mock<IMachineRoleRepository>();
35+
machineMock.Setup(m => m.GetAllRoleNames()).Returns(Task.FromResult(server));
36+
var mock = new Mock<IOctopusAsyncRepository>();
37+
mock.Setup(or => or.MachineRoles).Returns(machineMock.Object);
38+
Func<Task> test = () => mock.Object.ValidateRoles(passedIn);
39+
test.Should().Throw<ArgumentException>().WithMessage($"Unable to find a machine role with the name '{missing}'");
40+
}
41+
42+
public static IEnumerable<object[]> FoundData => new[]
43+
{
44+
new object[] { new List<string>() { "api" }, new List<string>() { "api" } },
45+
new object[] { new List<string>() { "api", "web" }, new List<string>() { "api", "web" } },
46+
new object[] { new List<string>() { "web", "redis", "api" }, new List<string>() { "redis" } }
47+
};
48+
49+
public static IEnumerable<object[]> MissingData => new[]
50+
{
51+
new object[] { new List<string>() { "web" }, new List<string>() { "api" }, "api" },
52+
new object[] { new List<string>(), new List<string>() { "api" }, "api" },
53+
new object[] { new List<string>() { "web", "api" }, new List<string>() { "redis" }, "redis" }
54+
};
55+
}
56+
57+
public class ValidateEnvironmentTests
58+
{
59+
[Theory]
60+
[InlineData("QA")]
61+
public async Task FoundEnvironmentShouldNotThrow(string environment)
62+
{
63+
var environmentMock = new Mock<IEnvironmentRepository>();
64+
environmentMock.Setup(e => e.FindByName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>())).Returns(Task.FromResult(new EnvironmentResource()));
65+
var mock = new Mock<IOctopusAsyncRepository>();
66+
mock.Setup(or => or.Environments).Returns(environmentMock.Object);
67+
await mock.Object.ValidateEnvironment(environment).ConfigureAwait(false);
68+
}
69+
70+
[Theory]
71+
[InlineData("QA")]
72+
public void MissingEnvironmentShouldNotThrow(string environment)
73+
{
74+
var environmentMock = new Mock<IEnvironmentRepository>();
75+
environmentMock.Setup(e => e.FindByName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>())).Returns(Task.FromResult<EnvironmentResource>(null));
76+
var mock = new Mock<IOctopusAsyncRepository>();
77+
mock.Setup(or => or.Environments).Returns(environmentMock.Object);
78+
Func<Task> test = () => mock.Object.ValidateEnvironment(environment);
79+
test.Should().Throw<ArgumentException>().WithMessage($"Unable to find an environment with the name '{environment}'");
80+
}
81+
}
82+
83+
public class ValidateLibraryTests
84+
{
85+
[Theory]
86+
[InlineData("Shared")]
87+
public async Task FoundLibraryShouldNotThrow(string library)
88+
{
89+
var libraryMock = new Mock<ILibraryVariableSetRepository>();
90+
libraryMock.Setup(e => e.FindByName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>())).Returns(Task.FromResult(new LibraryVariableSetResource()));
91+
var mock = new Mock<IOctopusAsyncRepository>();
92+
mock.Setup(or => or.LibraryVariableSets).Returns(libraryMock.Object);
93+
await mock.Object.ValidateLibrary(library).ConfigureAwait(false);
94+
}
95+
96+
[Theory]
97+
[InlineData("QA")]
98+
public void MissingLibraryShouldNotThrow(string library)
99+
{
100+
var libraryMock = new Mock<ILibraryVariableSetRepository>();
101+
libraryMock.Setup(e => e.FindByName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>())).Returns(Task.FromResult<LibraryVariableSetResource>(null));
102+
var mock = new Mock<IOctopusAsyncRepository>();
103+
mock.Setup(or => or.LibraryVariableSets).Returns(libraryMock.Object);
104+
Func<Task> test = () => mock.Object.ValidateLibrary(library);
105+
test.Should().Throw<ArgumentException>().WithMessage($"Unable to find a library with the name '{library}'");
106+
}
107+
}
108+
109+
public class ValidateProjectTests
110+
{
111+
[Theory]
112+
[InlineData("QA")]
113+
public async Task FoundProjectShouldNotThrow(string project)
114+
{
115+
var projectMock = new Mock<IProjectRepository>();
116+
projectMock.Setup(e => e.FindByName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>())).Returns(Task.FromResult(new ProjectResource()));
117+
var mock = new Mock<IOctopusAsyncRepository>();
118+
mock.Setup(or => or.Projects).Returns(projectMock.Object);
119+
await mock.Object.ValidateProject(project).ConfigureAwait(false);
120+
}
121+
122+
[Theory]
123+
[InlineData("QA")]
124+
public void MissingProjectShouldNotThrow(string project)
125+
{
126+
var projectMock = new Mock<IProjectRepository>();
127+
projectMock.Setup(e => e.FindByName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>())).Returns(Task.FromResult<ProjectResource>(null));
128+
var mock = new Mock<IOctopusAsyncRepository>();
129+
mock.Setup(or => or.Projects).Returns(projectMock.Object);
130+
Func<Task> test = () => mock.Object.ValidateProject(project);
131+
test.Should().Throw<ArgumentException>().WithMessage($"Unable to find a project with the name '{project}'");
132+
}
133+
}
134+
135+
public class ValidateTenantTests
136+
{
137+
[Theory]
138+
[InlineData("QA")]
139+
public async Task FoundRoleShouldNotThrow(string tenant)
140+
{
141+
var tenantMock = new Mock<ITenantRepository>();
142+
tenantMock.Setup(e => e.FindByName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>())).Returns(Task.FromResult(new TenantResource()));
143+
var mock = new Mock<IOctopusAsyncRepository>();
144+
mock.Setup(or => or.Tenants).Returns(tenantMock.Object);
145+
await mock.Object.ValidateTenant(tenant).ConfigureAwait(false);
146+
}
147+
148+
[Theory]
149+
[InlineData("QA")]
150+
public void MissingRoleShouldNotThrow(string tenant)
151+
{
152+
var tenantMock = new Mock<ITenantRepository>();
153+
tenantMock.Setup(e => e.FindByName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<object>())).Returns(Task.FromResult<TenantResource>(null));
154+
var mock = new Mock<IOctopusAsyncRepository>();
155+
mock.Setup(or => or.Tenants).Returns(tenantMock.Object);
156+
Func<Task> test = () => mock.Object.ValidateTenant(tenant);
157+
test.Should().Throw<ArgumentException>().WithMessage($"Unable to find a tenant with the name '{tenant}'");
158+
}
159+
}
160+
}
161+
}

test/OctoConfig.Tests/SecretsManagerTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public async Task SecretsAreReplaced()
7272
[InlineData("[ #{var1}, #{var2} ]", "[ AB, AB ]", "AB")]
7373
[InlineData("[ { #{var1}, #{var2} } ]", "[ { AB, AB } ]", "AB")]
7474
[InlineData("[ { #{var1}, #{var2} }, { #{var1}, #{var2} } ]", "[ { AB, AB }, { AB, AB } ]", "AB")]
75+
[InlineData("[ { BAD }, { #{var1}, #{var2} }, { #{var1}, #{var2} } ]", "[ { BAD }, { AB, AB }, { AB, AB } ]", "AB")]
7576
public async Task MultipleSecretsAreReplaced(string variableText, string expectedText, string replace)
7677
{
7778
var mockFact = new Mock<ISecretProviderFactory>();
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using System;
2+
using FluentAssertions;
3+
using OctoConfig.Core.Arguments;
4+
using OctoConfig.Core.Secrets;
5+
using Xunit;
6+
7+
8+
namespace OctoConfig.Tests
9+
{
10+
public static class VaultKV2ProviderTests
11+
{
12+
public class ConstructorTests
13+
{
14+
[Theory]
15+
[InlineData("")]
16+
[InlineData(null)]
17+
public void NullOrEmptyRoleIdThrows(string roleId)
18+
{
19+
var args = new FileArgsBase() { VaultRoleId = roleId };
20+
Action test = () => new VaultKVV2Provider(args);
21+
test.Should().Throw<ArgumentException>();
22+
}
23+
24+
[Theory]
25+
[InlineData("")]
26+
[InlineData(null)]
27+
public void NullOrEmptySecretIdThrows(string secretId)
28+
{
29+
var args = new FileArgsBase() { VaultSecretId = secretId, VaultRoleId = "a" };
30+
Action test = () => new VaultKVV2Provider(args);
31+
test.Should().Throw<ArgumentException>();
32+
}
33+
34+
[Theory]
35+
[InlineData("")]
36+
[InlineData(null)]
37+
public void NullOrEmptyUriThrows(string uri)
38+
{
39+
var args = new FileArgsBase() { VaultUri = uri, VaultRoleId = "a", VaultSecretId = "b" };
40+
Action test = () => new VaultKVV2Provider(args);
41+
test.Should().Throw<ArgumentException>();
42+
}
43+
}
44+
}
45+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using System;
2+
using FluentAssertions;
3+
using OctoConfig.Core.Arguments;
4+
using OctoConfig.Core.Secrets;
5+
using Xunit;
6+
7+
namespace OctoConfig.Tests
8+
{
9+
public static class VaultProviderTests
10+
{
11+
public class ConstructorTests
12+
{
13+
[Theory]
14+
[InlineData("")]
15+
[InlineData(null)]
16+
public void NullOrEmptyRoleIdThrows(string roleId)
17+
{
18+
var args = new FileArgsBase() { VaultRoleId = roleId };
19+
Action test = () => new VaultProvider(args);
20+
test.Should().Throw<ArgumentException>();
21+
}
22+
23+
[Theory]
24+
[InlineData("")]
25+
[InlineData(null)]
26+
public void NullOrEmptySecretIdThrows(string secretId)
27+
{
28+
var args = new FileArgsBase() { VaultSecretId = secretId, VaultRoleId = "a" };
29+
Action test = () => new VaultProvider(args);
30+
test.Should().Throw<ArgumentException>();
31+
}
32+
33+
[Theory]
34+
[InlineData("")]
35+
[InlineData(null)]
36+
public void NullOrEmptyUriThrows(string uri)
37+
{
38+
var args = new FileArgsBase() { VaultUri = uri, VaultRoleId = "a", VaultSecretId = "b" };
39+
Action test = () => new VaultProvider(args);
40+
test.Should().Throw<ArgumentException>();
41+
}
42+
}
43+
}
44+
}

0 commit comments

Comments
 (0)