Skip to content

Commit b6749f9

Browse files
Add comprehensive tests for ProjectionNameResolver
Co-authored-by: JeanMarcMbouma <16613177+JeanMarcMbouma@users.noreply.github.com>
1 parent 7ecd316 commit b6749f9

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
using BbQ.Events.Engine;
2+
using NUnit.Framework;
3+
4+
namespace BbQ.Cqrs.Tests;
5+
6+
/// <summary>
7+
/// Tests for ProjectionNameResolver to ensure consistent projection name resolution.
8+
/// </summary>
9+
[TestFixture]
10+
public class ProjectionNameResolverTests
11+
{
12+
// Test projection class
13+
private class TestProjection { }
14+
15+
[Test]
16+
public void Resolve_WithNullProjectionType_ThrowsArgumentNullException()
17+
{
18+
// Act & Assert
19+
Assert.Throws<ArgumentNullException>(() =>
20+
ProjectionNameResolver.Resolve(null!, null));
21+
}
22+
23+
[Test]
24+
public void Resolve_WithNullOptions_ReturnsTypeName()
25+
{
26+
// Arrange
27+
var projectionType = typeof(TestProjection);
28+
29+
// Act
30+
var result = ProjectionNameResolver.Resolve(projectionType, null);
31+
32+
// Assert
33+
Assert.That(result, Is.EqualTo("TestProjection"));
34+
}
35+
36+
[Test]
37+
public void Resolve_WithOptionsButNullProjectionName_ReturnsTypeName()
38+
{
39+
// Arrange
40+
var projectionType = typeof(TestProjection);
41+
var options = new ProjectionOptions
42+
{
43+
ProjectionName = null!
44+
};
45+
46+
// Act
47+
var result = ProjectionNameResolver.Resolve(projectionType, options);
48+
49+
// Assert
50+
Assert.That(result, Is.EqualTo("TestProjection"));
51+
}
52+
53+
[Test]
54+
public void Resolve_WithOptionsAndEmptyProjectionName_ReturnsTypeName()
55+
{
56+
// Arrange
57+
var projectionType = typeof(TestProjection);
58+
var options = new ProjectionOptions
59+
{
60+
ProjectionName = string.Empty
61+
};
62+
63+
// Act
64+
var result = ProjectionNameResolver.Resolve(projectionType, options);
65+
66+
// Assert
67+
Assert.That(result, Is.EqualTo("TestProjection"));
68+
}
69+
70+
[Test]
71+
public void Resolve_WithOptionsAndWhitespaceProjectionName_ReturnsTypeName()
72+
{
73+
// Arrange
74+
var projectionType = typeof(TestProjection);
75+
var options = new ProjectionOptions
76+
{
77+
ProjectionName = " "
78+
};
79+
80+
// Act
81+
var result = ProjectionNameResolver.Resolve(projectionType, options);
82+
83+
// Assert
84+
Assert.That(result, Is.EqualTo("TestProjection"));
85+
}
86+
87+
[Test]
88+
public void Resolve_WithOptionsAndCustomProjectionName_ReturnsCustomName()
89+
{
90+
// Arrange
91+
var projectionType = typeof(TestProjection);
92+
var customName = "CustomProjectionName";
93+
var options = new ProjectionOptions
94+
{
95+
ProjectionName = customName
96+
};
97+
98+
// Act
99+
var result = ProjectionNameResolver.Resolve(projectionType, options);
100+
101+
// Assert
102+
Assert.That(result, Is.EqualTo(customName));
103+
}
104+
105+
[Test]
106+
public void Resolve_WithDifferentProjectionTypes_ReturnsCorrectTypeNames()
107+
{
108+
// Arrange & Act & Assert
109+
Assert.That(
110+
ProjectionNameResolver.Resolve(typeof(TestProjection), null),
111+
Is.EqualTo("TestProjection"));
112+
113+
Assert.That(
114+
ProjectionNameResolver.Resolve(typeof(ProjectionNameResolverTests), null),
115+
Is.EqualTo("ProjectionNameResolverTests"));
116+
117+
Assert.That(
118+
ProjectionNameResolver.Resolve(typeof(string), null),
119+
Is.EqualTo("String"));
120+
}
121+
122+
[Test]
123+
public void Resolve_ConsistencyBetweenCalls_ReturnsSameResult()
124+
{
125+
// Arrange
126+
var projectionType = typeof(TestProjection);
127+
var options = new ProjectionOptions
128+
{
129+
ProjectionName = "ConsistentName"
130+
};
131+
132+
// Act
133+
var result1 = ProjectionNameResolver.Resolve(projectionType, options);
134+
var result2 = ProjectionNameResolver.Resolve(projectionType, options);
135+
136+
// Assert
137+
Assert.That(result1, Is.EqualTo(result2));
138+
Assert.That(result1, Is.EqualTo("ConsistentName"));
139+
}
140+
}

0 commit comments

Comments
 (0)