Skip to content

Commit 38767ad

Browse files
committed
#105 Added tests
1 parent f5a58b2 commit 38767ad

File tree

4 files changed

+293
-1
lines changed

4 files changed

+293
-1
lines changed

tests/VerticalSliceArchitectureTemplate.Unit.Tests/Features/Heroes/HeroTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using VerticalSliceArchitectureTemplate.Common.Domain.Heroes;
22

3-
namespace VerticalSliceArchitectureTemplate.Unit.Tests.Features.Heroes.Models;
3+
namespace VerticalSliceArchitectureTemplate.Unit.Tests.Features.Heroes;
44

55
public class HeroTests
66
{
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
using VerticalSliceArchitectureTemplate.Common.Domain.Heroes;
2+
3+
namespace VerticalSliceArchitectureTemplate.Unit.Tests.Features.Heroes;
4+
5+
public class PowerTests
6+
{
7+
[Fact]
8+
public void Power_ShouldBeCreatable()
9+
{
10+
// Arrange
11+
var name = "PowerName";
12+
var powerLevel = 5;
13+
14+
// Act
15+
var power = new Power(name, powerLevel);
16+
17+
// Assert
18+
power.Should().NotBeNull();
19+
power.Name.Should().Be(name);
20+
power.PowerLevel.Should().Be(powerLevel);
21+
}
22+
23+
[Fact]
24+
public void Power_ShouldBeComparable()
25+
{
26+
// Arrange
27+
var name = "PowerName";
28+
var powerLevel = 5;
29+
var power1 = new Power(name, powerLevel);
30+
var power2 = new Power(name, powerLevel);
31+
32+
// Act
33+
var areEqual = power1 == power2;
34+
35+
// Assert
36+
areEqual.Should().BeTrue();
37+
}
38+
39+
[Theory]
40+
[InlineData(-1, true)]
41+
[InlineData(0, true)]
42+
[InlineData(1, false)]
43+
[InlineData(9, false)]
44+
[InlineData(10, false)]
45+
[InlineData(11, true)]
46+
public void Power_WithInvalidPowerLevel_ShouldThrow(int powerLevel, bool shouldThrow)
47+
{
48+
// Arrange
49+
var name = "PowerName";
50+
51+
// Act
52+
var act = () => new Power(name, powerLevel);
53+
54+
// Assert
55+
if (shouldThrow)
56+
{
57+
act.Should().ThrowExactly<ArgumentOutOfRangeException>();
58+
}
59+
else
60+
{
61+
act.Should().NotThrow();
62+
}
63+
}
64+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using VerticalSliceArchitectureTemplate.Common.Domain.Teams;
2+
3+
namespace VerticalSliceArchitectureTemplate.Unit.Tests.Features.Teams;
4+
5+
public class MissionTests
6+
{
7+
[Theory]
8+
[InlineData("c8ad9974-ca93-44a5-9215-2f4d9e866c7a", "cc3431a8-4a31-4f76-af64-e8198279d7a4", false)]
9+
[InlineData("c8ad9974-ca93-44a5-9215-2f4d9e866c7a", "c8ad9974-ca93-44a5-9215-2f4d9e866c7a", true)]
10+
public void MissionId_ShouldBeComparable(string stringGuid1, string stringGuid2, bool isEqual)
11+
{
12+
// Arrange
13+
Guid guid1 = Guid.Parse(stringGuid1);
14+
Guid guid2 = Guid.Parse(stringGuid2);
15+
MissionId id1 = MissionId.From(guid1);
16+
MissionId id2 = MissionId.From(guid2);
17+
18+
// Act
19+
var areEqual = id1 == id2;
20+
21+
// Assert
22+
areEqual.Should().Be(isEqual);
23+
id1.Value.Should().Be(guid1);
24+
id2.Value.Should().Be(guid2);
25+
}
26+
}
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
using VerticalSliceArchitectureTemplate.Common.Domain.Heroes;
2+
using VerticalSliceArchitectureTemplate.Common.Domain.Teams;
3+
4+
namespace VerticalSliceArchitectureTemplate.Unit.Tests.Features.Teams;
5+
6+
public class TeamTests
7+
{
8+
[Theory]
9+
[InlineData("c8ad9974-ca93-44a5-9215-2f4d9e866c7a", "cc3431a8-4a31-4f76-af64-e8198279d7a4", false)]
10+
[InlineData("c8ad9974-ca93-44a5-9215-2f4d9e866c7a", "c8ad9974-ca93-44a5-9215-2f4d9e866c7a", true)]
11+
public void TeamId_ShouldBeComparable(string stringGuid1, string stringGuid2, bool isEqual)
12+
{
13+
// Arrange
14+
Guid guid1 = Guid.Parse(stringGuid1);
15+
Guid guid2 = Guid.Parse(stringGuid2);
16+
TeamId id1 = TeamId.From(guid1);
17+
TeamId id2 = TeamId.From(guid2);
18+
19+
// Act
20+
var areEqual = id1 == id2;
21+
22+
// Assert
23+
areEqual.Should().Be(isEqual);
24+
id1.Value.Should().Be(guid1);
25+
id2.Value.Should().Be(guid2);
26+
}
27+
28+
[Fact]
29+
public void Create_WithValidNameAndAlias_ShouldSucceed()
30+
{
31+
// Arrange
32+
var name = "name";
33+
34+
// Act
35+
var team = Team.Create(name);
36+
37+
// Assert
38+
team.Should().NotBeNull();
39+
team.Name.Should().Be(name);
40+
}
41+
42+
[Fact]
43+
public void Create_WithNullNameAndAlias_ShouldThrow()
44+
{
45+
// Arrange
46+
string? name = null;
47+
48+
// Act
49+
Action act = () => Team.Create(name!);
50+
51+
// Assert
52+
act.Should().Throw<ArgumentException>().WithMessage("Value cannot be null. (Parameter 'name')");
53+
}
54+
55+
[Fact]
56+
public void AddHero_ShouldUpdateTeamPowerLevel()
57+
{
58+
// Arrange
59+
var hero1 = Hero.Create("hero1", "alias1");
60+
var hero2 = Hero.Create("hero2", "alias2");
61+
var power1 = new Power("Foo", 10);
62+
var power2 = new Power("Bar", 4);
63+
hero1.UpdatePowers([power1]);
64+
hero2.UpdatePowers([power2]);
65+
var team = Team.Create("name");
66+
67+
// Act
68+
team.AddHero(hero1);
69+
team.AddHero(hero2);
70+
71+
// Assert
72+
team.TotalPowerLevel.Should().Be(14);
73+
}
74+
75+
[Fact]
76+
public void RemoveHero_ShouldUpdateTeamPowerLevel()
77+
{
78+
// Arrange
79+
var hero1 = Hero.Create("hero1", "alias1");
80+
var hero2 = Hero.Create("hero2", "alias2");
81+
var power1 = new Power("Foo", 10);
82+
var power2 = new Power("Bar", 4);
83+
hero1.UpdatePowers([power1]);
84+
hero2.UpdatePowers([power2]);
85+
var team = Team.Create("name");
86+
team.AddHero(hero1);
87+
team.AddHero(hero2);
88+
89+
// Act
90+
team.RemoveHero(hero1);
91+
92+
// Assert
93+
team.TotalPowerLevel.Should().Be(4);
94+
}
95+
96+
[Fact]
97+
public void ExecuteMission_ShouldUpdateTeamStatus()
98+
{
99+
// Arrange
100+
var team = Team.Create("name");
101+
team.AddHero(Hero.Create("hero1", "alias1"));
102+
103+
// Act
104+
team.ExecuteMission("Mission");
105+
106+
// Assert
107+
team.Status.Should().Be(TeamStatus.OnMission);
108+
team.Missions.Should().HaveCount(1);
109+
team.Missions.Should().ContainSingle(x => x.Description == "Mission");
110+
}
111+
112+
[Fact]
113+
public void ExecuteMission_WhenTeamNotAvailable_ShouldError()
114+
{
115+
// Arrange
116+
var team = Team.Create("name");
117+
team.AddHero(Hero.Create("hero1", "alias1"));
118+
team.ExecuteMission("Mission1");
119+
120+
// Act
121+
var result = team.ExecuteMission("Mission2");
122+
123+
// Assert
124+
result.IsError.Should().BeTrue();
125+
result.FirstError.Should().Be(TeamErrors.NotAvailable);
126+
}
127+
128+
[Fact]
129+
public void CompleteCurrentMission_ShouldUpdateTeamStatus()
130+
{
131+
// Arrange
132+
var team = Team.Create("name");
133+
team.ExecuteMission("Mission");
134+
135+
// Act
136+
team.CompleteCurrentMission();
137+
138+
// Assert
139+
team.Status.Should().Be(TeamStatus.Available);
140+
}
141+
142+
[Fact]
143+
public void CompleteCurrentMission_WhenNoMissionHasBeenExecuted_ShouldThrow()
144+
{
145+
// Arrange
146+
var team = Team.Create("name");
147+
148+
// Act
149+
var result = team.CompleteCurrentMission();
150+
151+
// Assert
152+
result.IsError.Should().BeTrue();
153+
result.FirstError.Should().Be(TeamErrors.NotOnMission);
154+
}
155+
156+
[Fact]
157+
public void CompleteCurrentMission_WhenNotOnMission_ShouldError()
158+
{
159+
// Arrange
160+
var team = Team.Create("name");
161+
team.ExecuteMission("Mission1");
162+
team.CompleteCurrentMission();
163+
164+
// Act
165+
var result = team.CompleteCurrentMission();
166+
167+
// Assert
168+
result.IsError.Should().BeTrue();
169+
result.FirstError.Should().Be(TeamErrors.NotOnMission);
170+
}
171+
172+
[Fact]
173+
public void ExecuteMission_WhenNoHeroes_ShouldError()
174+
{
175+
// Arrange
176+
var team = Team.Create("name");
177+
178+
// Act
179+
var result = team.ExecuteMission("Mission");
180+
181+
// Assert
182+
result.IsError.Should().BeTrue();
183+
result.FirstError.Should().Be(TeamErrors.NoHeroes);
184+
}
185+
186+
[Fact]
187+
public void ExecuteMission_AfterAddingHero_ShouldSucceed()
188+
{
189+
// Arrange
190+
var team = Team.Create("name");
191+
var hero = Hero.Create("hero1", "alias1");
192+
var power1 = new Power("Foo", 10);
193+
hero.UpdatePowers([power1]);
194+
team.AddHero(hero);
195+
196+
// Act
197+
var result = team.ExecuteMission("Mission");
198+
199+
// Assert
200+
result.IsError.Should().BeFalse();
201+
}
202+
}

0 commit comments

Comments
 (0)