Skip to content

Commit fb5220e

Browse files
committed
Add in Tests for VersionSimpleExtension
1 parent 1782be2 commit fb5220e

File tree

6 files changed

+268
-35
lines changed

6 files changed

+268
-35
lines changed

src/versioning_manager.api/Services/VersionDetailExtensions.cs src/versioning_manager.api/Extensions/VersionDetailExtensions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Linq;
33
using versioning_manager.data.Models;
44

5-
namespace versioning_manager.api.Services
5+
namespace versioning_manager.api.Extensions
66
{
77
public static class VersionDetailExtensions
88
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using System;
2+
using versioning_manager.api.Controllers;
3+
using versioning_manager.contracts.Services;
4+
using versioning_manager.data.Models;
5+
6+
namespace versioning_manager.api.Extensions
7+
{
8+
public static class VersionSimpleExtension
9+
{
10+
public static VersionSimple CalculateIncrement(this VersionSimple version, IVersionRequest request)
11+
{
12+
VersionSimple incrementedVersion = version;
13+
14+
if (!request.Major.HasValue && request.Minor.HasValue)
15+
throw new ArgumentException("Cannot pass a Minor version without Major version");
16+
17+
if (request.Major.HasValue && request.Minor.HasValue)
18+
{
19+
incrementedVersion = incrementedVersion.IncrementBuild();
20+
}
21+
else if (request.Major.HasValue && !request.Minor.HasValue)
22+
{
23+
incrementedVersion = incrementedVersion.IncrementMinor();
24+
}
25+
else
26+
{
27+
incrementedVersion = incrementedVersion.IncrementMajor();
28+
}
29+
30+
return incrementedVersion;
31+
}
32+
33+
public static VersionSimple CreateIncrement(this VersionSimple version, IVersionRequest request)
34+
{
35+
VersionSimple incrementedVersion = version;
36+
37+
if (!request.Major.HasValue && request.Minor.HasValue)
38+
throw new ArgumentException("Cannot pass a Minor version without Major version");
39+
40+
if (request.Major.HasValue && !request.Minor.HasValue)
41+
{
42+
incrementedVersion = new VersionSimple(request.Major.Value, 0, 0, 0);
43+
}
44+
else if (request.Major.HasValue && request.Minor.HasValue)
45+
{
46+
incrementedVersion = new VersionSimple(request.Major.Value, request.Minor.Value, 0, 0);
47+
}
48+
else
49+
{
50+
incrementedVersion = new VersionSimple(1, 0, 0, 0);
51+
}
52+
53+
return incrementedVersion;
54+
}
55+
}
56+
}

src/versioning_manager.api/Services/VersionService.cs

+3-28
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using versioning_manager.api.Controllers;
5+
using versioning_manager.api.Extensions;
56
using versioning_manager.contracts.Data;
67
using versioning_manager.contracts.Services;
78
using versioning_manager.data.Models;
@@ -33,38 +34,12 @@ public VersionDetail IncrementVersion(IVersionRequest request)
3334
VersionSimple version = null;
3435
if (versionList.Count() == 0)
3536
{
36-
if (!request.Major.HasValue && request.Minor.HasValue)
37-
throw new ArgumentException("Cannot pass a Minor version without Major version");
38-
39-
if (request.Major.HasValue && !request.Minor.HasValue)
40-
{
41-
version = new VersionSimple(request.Major.Value, 0, 0, 0);
42-
}
43-
else if (request.Major.HasValue && request.Minor.HasValue)
44-
{
45-
version = new VersionSimple(request.Major.Value, request.Minor.Value, 0, 0);
46-
}
47-
else
48-
{
49-
version = new VersionSimple(1, 0, 0, 0);
50-
}
37+
version.CreateIncrement(request);
5138
}
5239
else
5340
{
5441
version = versionList.First().Version;
55-
56-
if (request.Major.HasValue && request.Minor.HasValue)
57-
{
58-
version = version.IncrementBuild();
59-
}
60-
else if (request.Major.HasValue && !request.Minor.HasValue)
61-
{
62-
version = version.IncrementMinor();
63-
}
64-
else
65-
{
66-
version = version.IncrementMajor();
67-
}
42+
version.CalculateIncrement(request);
6843
}
6944

7045
var versionDetail = new VersionDetail
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
using System;
2+
using versioning_manager.data.Models;
3+
using Xunit;
4+
using versioning_manager.api.Extensions;
5+
using versioning_manager.api.Controllers;
6+
using FluentAssertions;
7+
8+
namespace versioning_manager.api.tests.Extensions
9+
{
10+
public class CalculateIncremnet
11+
{
12+
public class VersionSimpleExtensionTest
13+
{
14+
[Fact]
15+
public void JustProductId()
16+
{
17+
var version = new VersionSimple(8, 3, 0, 0);
18+
19+
var calculatedVersion = version.CalculateIncrement(new VersionRequest
20+
{
21+
ProductId = 1
22+
});
23+
24+
calculatedVersion.Major.Should().Be(9);
25+
calculatedVersion.Minor.Should().Be(0);
26+
calculatedVersion.Build.Should().Be(0);
27+
calculatedVersion.Revision.Should().Be(0);
28+
}
29+
30+
[Fact]
31+
public void WithMajor()
32+
{
33+
var version = new VersionSimple(8, 2, 0, 0);
34+
35+
var calculatedVersion = version.CalculateIncrement(new VersionRequest
36+
{
37+
ProductId = 1,
38+
Major = 8
39+
});
40+
41+
calculatedVersion.Major.Should().Be(8);
42+
calculatedVersion.Minor.Should().Be(3);
43+
calculatedVersion.Build.Should().Be(0);
44+
calculatedVersion.Revision.Should().Be(0);
45+
}
46+
47+
[Fact]
48+
public void WithMajorMinor_VersionExists()
49+
{
50+
var version = new VersionSimple(8, 3, 0, 0);
51+
52+
var calculatedVersion = version.CalculateIncrement(new VersionRequest
53+
{
54+
ProductId = 1,
55+
Major = 8,
56+
Minor = 3
57+
});
58+
59+
calculatedVersion.Major.Should().Be(8);
60+
calculatedVersion.Minor.Should().Be(3);
61+
calculatedVersion.Build.Should().Be(1);
62+
calculatedVersion.Revision.Should().Be(0);
63+
}
64+
[Fact]
65+
public void WithMajorMinor_DifferentVersion()
66+
{
67+
var version = new VersionSimple(8, 3, 0, 0);
68+
69+
var calculatedVersion = version.CalculateIncrement(new VersionRequest
70+
{
71+
ProductId = 1,
72+
Major = 8,
73+
Minor = 3
74+
});
75+
76+
calculatedVersion.Major.Should().Be(8);
77+
calculatedVersion.Minor.Should().Be(3);
78+
calculatedVersion.Build.Should().Be(1);
79+
calculatedVersion.Revision.Should().Be(0);
80+
}
81+
82+
[Fact]
83+
public void WithMinorArgumentException()
84+
{
85+
var version = new VersionSimple(8, 3, 0, 0);
86+
87+
Action result = () => version.CalculateIncrement(new VersionRequest
88+
{
89+
ProductId = 1,
90+
Minor = 3
91+
});
92+
93+
result.Should().Throw<ArgumentException>();
94+
}
95+
}
96+
}
97+
98+
public class CreateIncrement
99+
{
100+
[Fact]
101+
public void WithProductId()
102+
{
103+
var version = new VersionSimple(8, 3, 0, 0);
104+
105+
var calculatedVersion = version.CreateIncrement(new VersionRequest
106+
{
107+
ProductId = 1
108+
});
109+
110+
calculatedVersion.Major.Should().Be(1);
111+
calculatedVersion.Minor.Should().Be(0);
112+
calculatedVersion.Build.Should().Be(0);
113+
calculatedVersion.Revision.Should().Be(0);
114+
}
115+
116+
[Fact]
117+
public void WithMajor()
118+
{
119+
var version = new VersionSimple(8, 3, 0, 0);
120+
121+
var calculatedVersion = version.CreateIncrement(new VersionRequest
122+
{
123+
ProductId = 1,
124+
Major = 8
125+
});
126+
127+
calculatedVersion.Major.Should().Be(8);
128+
calculatedVersion.Minor.Should().Be(0);
129+
calculatedVersion.Build.Should().Be(0);
130+
calculatedVersion.Revision.Should().Be(0);
131+
}
132+
133+
[Fact]
134+
public void WithMajorMinor()
135+
{
136+
var version = new VersionSimple(8, 3, 0, 0);
137+
138+
var calculatedVersion = version.CreateIncrement(new VersionRequest
139+
{
140+
ProductId = 1,
141+
Major = 8,
142+
Minor = 1
143+
});
144+
145+
calculatedVersion.Major.Should().Be(8);
146+
calculatedVersion.Minor.Should().Be(1);
147+
calculatedVersion.Build.Should().Be(0);
148+
calculatedVersion.Revision.Should().Be(0);
149+
}
150+
151+
[Fact]
152+
public void WithMinorArgumentException()
153+
{
154+
var version = new VersionSimple(8, 3, 0, 0);
155+
156+
Action calculatedVersion = () => version.CreateIncrement(new VersionRequest
157+
{
158+
ProductId = 1,
159+
Minor = 3
160+
});
161+
162+
calculatedVersion.Should().Throw<ArgumentException>();
163+
}
164+
}
165+
}

test/versioning_manager.api.tests/VersionServiceTest.cs

+43
Original file line numberDiff line numberDiff line change
@@ -146,5 +146,48 @@ public void GetVersionMajorMinor()
146146
version.First().Version.Build.Should().Be(expectedVersion.Build);
147147
version.First().Version.Revision.Should().Be(expectedVersion.Revision);
148148
}
149+
150+
[Fact]
151+
public void AddItemToVersion()
152+
{
153+
var versionDetail = new VersionRequest()
154+
{
155+
ProductId = 1,
156+
Major = 8,
157+
Minor = 2
158+
};
159+
160+
var addResult = new VersionDetail
161+
{
162+
Id = 1,
163+
Version = new VersionSimple
164+
{
165+
Major = 8,
166+
Minor = 2,
167+
Build = 101,
168+
Revision = 0
169+
},
170+
CreatedDate = DateTime.Now
171+
};
172+
173+
var repository = new Mock<IVersionDetailRepository>();
174+
repository.Setup(x => x.GetByProductId(versionDetail.ProductId))
175+
.Returns(VersionDetails
176+
.Where(x => x.Product.Id == versionDetail.ProductId &&
177+
x.Version.Major == versionDetail.Major));
178+
179+
repository.Setup(x => x.Add(It.IsAny<VersionDetail>()))
180+
.Returns(addResult);
181+
182+
var service = new VersionService(repository.Object);
183+
184+
var version = service.IncrementVersion(versionDetail);
185+
186+
var expectedVersion = new VersionSimple(8, 2, 101, 0);
187+
version.Version.Major.Should().Be(expectedVersion.Major);
188+
version.Version.Minor.Should().Be(expectedVersion.Minor);
189+
version.Version.Build.Should().Be(expectedVersion.Build);
190+
version.Version.Revision.Should().Be(expectedVersion.Revision);
191+
}
149192
}
150193
}

test/versioning_manager.api.tests/versioning_manager.api.tests.csproj

-6
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,6 @@
66
<IsPackable>false</IsPackable>
77
</PropertyGroup>
88

9-
<ItemGroup>
10-
<Compile Remove="NewFolder\**" />
11-
<EmbeddedResource Remove="NewFolder\**" />
12-
<None Remove="NewFolder\**" />
13-
</ItemGroup>
14-
159
<ItemGroup>
1610
<PackageReference Include="FluentAssertions" Version="5.4.1" />
1711
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.1.1" />

0 commit comments

Comments
 (0)