Skip to content

Commit fdc8c9e

Browse files
committed
Add some entity tests
1 parent 04560c7 commit fdc8c9e

File tree

7 files changed

+219
-6
lines changed

7 files changed

+219
-6
lines changed

AzureDevopsTracker.sln

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ VisualStudioVersion = 17.2.32616.157
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AzureDevopsTracker", "src\AzureDevopsTracker.csproj", "{36601E24-C989-4E11-BD8F-572F2F181ED1}"
77
EndProject
8+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{816B80C1-D0DA-4925-817C-692A5995BCB2}"
9+
EndProject
10+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{035AD571-2D23-4A55-9FBB-1E99758306C8}"
11+
EndProject
12+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureDevopsTracker.Tests", "tests\AzureDevopsTracker.Tests\AzureDevopsTracker.Tests.csproj", "{BA1D5DF9-E25A-4984-8072-8CA3C5FC638D}"
13+
EndProject
814
Global
915
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1016
Debug|Any CPU = Debug|Any CPU
@@ -15,10 +21,18 @@ Global
1521
{36601E24-C989-4E11-BD8F-572F2F181ED1}.Debug|Any CPU.Build.0 = Debug|Any CPU
1622
{36601E24-C989-4E11-BD8F-572F2F181ED1}.Release|Any CPU.ActiveCfg = Release|Any CPU
1723
{36601E24-C989-4E11-BD8F-572F2F181ED1}.Release|Any CPU.Build.0 = Release|Any CPU
24+
{BA1D5DF9-E25A-4984-8072-8CA3C5FC638D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
25+
{BA1D5DF9-E25A-4984-8072-8CA3C5FC638D}.Debug|Any CPU.Build.0 = Debug|Any CPU
26+
{BA1D5DF9-E25A-4984-8072-8CA3C5FC638D}.Release|Any CPU.ActiveCfg = Release|Any CPU
27+
{BA1D5DF9-E25A-4984-8072-8CA3C5FC638D}.Release|Any CPU.Build.0 = Release|Any CPU
1828
EndGlobalSection
1929
GlobalSection(SolutionProperties) = preSolution
2030
HideSolutionNode = FALSE
2131
EndGlobalSection
32+
GlobalSection(NestedProjects) = preSolution
33+
{36601E24-C989-4E11-BD8F-572F2F181ED1} = {035AD571-2D23-4A55-9FBB-1E99758306C8}
34+
{BA1D5DF9-E25A-4984-8072-8CA3C5FC638D} = {816B80C1-D0DA-4925-817C-692A5995BCB2}
35+
EndGlobalSection
2236
GlobalSection(ExtensibilityGlobals) = postSolution
2337
SolutionGuid = {53133A2B-5357-47B5-A1C4-30953F789623}
2438
EndGlobalSection

src/Entities/ChangeLog.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,15 @@ public class ChangeLog : Entity
1313
public IReadOnlyCollection<ChangeLogItem> ChangeLogItems => _changeLogItems;
1414

1515
private ChangeLog() { }
16+
public ChangeLog(string number) => Number = number;
1617
public ChangeLog(int newRevision)
1718
{
1819
Revision = newRevision;
1920
Number = $"{CreatedAt:yyyyMMdd}.{Revision}";
2021
}
2122

22-
public ChangeLog(string number) => Number = number;
23-
2423
public void SetResponse(string response) => Response = response;
25-
2624
public void ClearResponse() => Response = string.Empty;
27-
2825
private bool CheckChangeLogItem(ChangeLogItem changeLogItem) => _changeLogItems.Any(x => x.WorkItemId == changeLogItem.WorkItemId);
2926

3027
public void AddChangeLogItem(ChangeLogItem changeLogItem)
@@ -45,9 +42,7 @@ public void AddChangeLogItems(IEnumerable<ChangeLogItem> changeLogItems)
4542
throw new Exception("ChangeLogItems is required");
4643

4744
foreach (var changeLogItem in changeLogItems)
48-
{
4945
AddChangeLogItem(changeLogItem);
50-
}
5146
}
5247
}
5348
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net6.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
8+
<IsPackable>false</IsPackable>
9+
</PropertyGroup>
10+
11+
<ItemGroup>
12+
<PackageReference Include="FluentAssertions" Version="6.7.0" />
13+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
14+
<PackageReference Include="xunit" Version="2.4.1" />
15+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
16+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
17+
<PrivateAssets>all</PrivateAssets>
18+
</PackageReference>
19+
<PackageReference Include="coverlet.collector" Version="3.1.2">
20+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
21+
<PrivateAssets>all</PrivateAssets>
22+
</PackageReference>
23+
</ItemGroup>
24+
25+
<ItemGroup>
26+
<ProjectReference Include="..\..\src\AzureDevopsTracker.csproj" />
27+
</ItemGroup>
28+
29+
</Project>
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
namespace AzureDevopsTracker.Tests.Entities
2+
{
3+
public class ChangeLogTests
4+
{
5+
[Theory(DisplayName = "ChangeLog - New with NewRevision")]
6+
[InlineData(12345)]
7+
[InlineData(65489)]
8+
public void ChangeLog_NewWithRevision(int newRevision)
9+
{
10+
var changeLog = new ChangeLog(newRevision);
11+
12+
changeLog.Id.Should().NotBeNullOrEmpty();
13+
changeLog.Revision.Should().Be(newRevision);
14+
changeLog.Number.Should().Be($"{changeLog.CreatedAt:yyyyMMdd}.{newRevision}");
15+
changeLog.ChangeLogItems.Should().BeEmpty();
16+
}
17+
18+
[Theory(DisplayName = "ChangeLog - New with Number")]
19+
[InlineData("12345")]
20+
[InlineData("abcde")]
21+
public void ChangeLog_NewWithNumber(string number)
22+
{
23+
var changeLog = new ChangeLog(number);
24+
25+
changeLog.Id.Should().NotBeNullOrEmpty();
26+
changeLog.Number.Should().Be(number);
27+
changeLog.Revision.Should().Be(0);
28+
changeLog.ChangeLogItems.Should().BeEmpty();
29+
}
30+
31+
[Fact(DisplayName = "ChangeLog - SetResponse")]
32+
public void ChangeLog_SetResponse()
33+
{
34+
var newResponse = "new response";
35+
var changeLog = new ChangeLog("abc");
36+
37+
changeLog.SetResponse(newResponse);
38+
39+
changeLog.Response.Should().Be(newResponse);
40+
}
41+
42+
[Fact(DisplayName = "ChangeLog - ClearResponse")]
43+
public void ChangeLog_ClearResponse()
44+
{
45+
var newResponse = "new response";
46+
var changeLog = new ChangeLog("abc");
47+
changeLog.SetResponse(newResponse);
48+
49+
changeLog.ClearResponse();
50+
51+
changeLog.Response.Should().BeEmpty();
52+
}
53+
54+
[Theory(DisplayName = "ChangeLog - AddChangeLogItem")]
55+
[InlineData("123", "test", "just a test", "bug", true)]
56+
[InlineData("654", "test", "just a test", "feature", false)]
57+
public void ChangeLog_CheckChangeLogItem(string workItemId, string title, string description, string type, bool exist)
58+
{
59+
var changeLog = new ChangeLog("abc");
60+
changeLog.AddChangeLogItem(new ChangeLogItem("123", title, description, type));
61+
62+
var changeLogItem = new ChangeLogItem(workItemId, title, description, type);
63+
changeLog.AddChangeLogItem(changeLogItem);
64+
65+
if (exist)
66+
changeLog.ChangeLogItems.Should().NotContain(changeLogItem);
67+
else
68+
changeLog.ChangeLogItems.Should().Contain(changeLogItem);
69+
}
70+
71+
[Fact(DisplayName = "ChangeLog - AddChangeLogItem should throw exception")]
72+
public void ChangeLog_AddChangeLogItem_ThrowException()
73+
{
74+
var changeLog = new ChangeLog("abc");
75+
var mensagemEsperada = Assert.Throws<Exception>(() => changeLog.AddChangeLogItem(null)).Message;
76+
77+
mensagemEsperada.Should().Be("ChangeLogItem is required");
78+
}
79+
80+
[Fact(DisplayName = "ChangeLog - AddChangeLogItems")]
81+
public void ChangeLog_AddChangeLogItems()
82+
{
83+
var changeLog = new ChangeLog("abc");
84+
var changeLogItems = new List<ChangeLogItem>
85+
{
86+
new ChangeLogItem("123", "test", "just a test", "bug"),
87+
new ChangeLogItem("654", "test", "just a test", "feature")
88+
};
89+
90+
changeLog.AddChangeLogItems(changeLogItems);
91+
92+
changeLog.ChangeLogItems.Should().Contain(changeLogItems);
93+
}
94+
95+
[Fact(DisplayName = "ChangeLog - AddChangeLogItems should throw exception")]
96+
public void ChangeLog_AddChangeLogItems_ThrowException()
97+
{
98+
var changeLog = new ChangeLog("abc");
99+
100+
var mensagemEsperada = Assert.Throws<Exception>(() => changeLog.AddChangeLogItems(null)).Message;
101+
102+
mensagemEsperada.Should().Be("ChangeLogItems is required");
103+
}
104+
}
105+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
namespace AzureDevopsTracker.Tests.Entities
2+
{
3+
public class TimeByStateTests
4+
{
5+
[Fact(DisplayName = "TimeByState - New")]
6+
public void TimeByState_New()
7+
{
8+
var workItemId = "123";
9+
var state = "new";
10+
var totalTime = new TimeSpan(1, 0, 3);
11+
var totalWorkedTime = new TimeSpan(2, 3, 40);
12+
var timeByState = new TimeByState(workItemId, state, totalTime, totalWorkedTime);
13+
14+
timeByState.Id.Should().NotBeNullOrEmpty();
15+
timeByState.WorkItemId.Should().Be(workItemId);
16+
timeByState.State.Should().Be(state);
17+
timeByState.TotalTime.Should().Be(totalTime.TotalSeconds);
18+
timeByState.TotalWorkedTime.Should().Be(totalWorkedTime.TotalSeconds);
19+
}
20+
21+
[Theory(DisplayName = "TimeByState - Validate")]
22+
[InlineData("", "new", "WorkItemId is required")]
23+
[InlineData(null, "", "WorkItemId is required")]
24+
[InlineData("123", "", "State is required")]
25+
[InlineData("123", null, "State is required")]
26+
public void TimeByState_Update(string workItemId, string state, string throwMessage)
27+
{
28+
var totalTime = new TimeSpan(1, 0, 3);
29+
var totalWorkedTime = new TimeSpan(2, 3, 40);
30+
31+
var mensagemEsperada = Assert.Throws<Exception>(() => new TimeByState(workItemId, state, totalTime, totalWorkedTime)).Message;
32+
33+
mensagemEsperada.Should().Be(throwMessage);
34+
}
35+
}
36+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
namespace AzureDevopsTracker.Tests.Entities
2+
{
3+
public class WorkItemCustomFieldTests
4+
{
5+
[Theory(DisplayName = "CustomField - New")]
6+
[InlineData("12345", "key", "value")]
7+
[InlineData("65489", "key1", "value")]
8+
[InlineData("test", "key", "value1")]
9+
public void CustomField_New(string workItemId, string key, string value)
10+
{
11+
var customField = new WorkItemCustomField(workItemId, key, value);
12+
13+
customField.WorkItemId.Should().Be(workItemId);
14+
customField.Key.Should().Be(key);
15+
customField.Value.Should().Be(value);
16+
}
17+
18+
[Theory(DisplayName = "CustomField - Update")]
19+
[InlineData("value")]
20+
[InlineData("new_value")]
21+
[InlineData("value1")]
22+
public void CustomField_Update(string value)
23+
{
24+
var customField = new WorkItemCustomField(Guid.NewGuid().ToString(), "key", "");
25+
26+
customField.Update(value);
27+
28+
customField.Value.Should().Be(value);
29+
}
30+
}
31+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
global using Xunit;
2+
global using AzureDevopsTracker.Entities;
3+
global using FluentAssertions;

0 commit comments

Comments
 (0)