Skip to content

Commit 840ce60

Browse files
committed
Update testing and push to release
1 parent 3db8c3b commit 840ce60

File tree

4 files changed

+363
-59
lines changed

4 files changed

+363
-59
lines changed
Lines changed: 187 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,238 @@
11
using ConsoleHero.Interfaces;
2-
using static ConsoleHero.RequestBuilder;
2+
using Moq;
33

44
namespace ConsoleHero.Test.Builders;
55

66
[TestClass]
77
public class RequestBuilderTests
88
{
9-
// Test that Ask initializes the Request with the given message
9+
private Mock<IConsoleService> _mockConsoleService;
10+
11+
[TestInitialize]
12+
public void Setup()
13+
{
14+
_mockConsoleService = new Mock<IConsoleService>();
15+
GlobalSettings.Service = _mockConsoleService.Object;
16+
}
17+
18+
[TestMethod]
19+
public void YesNo_WithActionParameters_CreatesRequestCorrectly()
20+
{
21+
// Arrange
22+
var yesActionCalled = false;
23+
var noActionCalled = false;
24+
Action yesAction = () => yesActionCalled = true;
25+
Action noAction = () => noActionCalled = true;
26+
27+
// Act
28+
var request = RequestBuilder.YesNo(yesAction, noAction);
29+
30+
// Assert
31+
Assert.IsNotNull(request);
32+
Assert.AreEqual(RequestBuilder.DataType.YesNo, request.DataType);
33+
Assert.AreEqual("Yes or No?", request.StartingMessage);
34+
35+
// Test yes response
36+
request.Apply.Invoke(true);
37+
Assert.IsTrue(yesActionCalled);
38+
Assert.IsFalse(noActionCalled);
39+
40+
// Reset and test no response
41+
yesActionCalled = false;
42+
request.Apply.Invoke(false);
43+
Assert.IsFalse(yesActionCalled);
44+
Assert.IsTrue(noActionCalled);
45+
}
46+
1047
[TestMethod]
11-
public void Ask_ShouldSetStartingMessage()
48+
public void YesNo_WithINodeParameters_CreatesRequestCorrectly()
1249
{
13-
var request = Ask("Test Message").Use(_ => { });
50+
// Arrange
51+
var mockYesNode = new Mock<INode>();
52+
var mockNoNode = new Mock<INode>();
53+
54+
// Act
55+
var request = RequestBuilder.YesNo(mockYesNode.Object, mockNoNode.Object);
56+
57+
// Assert
58+
Assert.IsNotNull(request);
59+
Assert.AreEqual(RequestBuilder.DataType.YesNo, request.DataType);
60+
61+
// Test yes response
62+
request.Apply.Invoke(true);
63+
mockYesNode.Verify(x => x.Call(), Times.Once);
64+
mockNoNode.Verify(x => x.Call(), Times.Never);
65+
66+
// Test no response
67+
request.Apply.Invoke(false);
68+
mockYesNode.Verify(x => x.Call(), Times.Once);
69+
mockNoNode.Verify(x => x.Call(), Times.Once);
70+
}
1471

15-
Assert.AreEqual("Test Message", request.StartingMessage);
72+
[TestMethod]
73+
public void YesNo_WithActionAndINodeParameters_CreatesRequestCorrectly()
74+
{
75+
// Arrange
76+
var actionCalled = false;
77+
Action yesAction = () => actionCalled = true;
78+
var mockNoNode = new Mock<INode>();
79+
80+
// Act
81+
var request = RequestBuilder.YesNo(yesAction, mockNoNode.Object);
82+
83+
// Assert
84+
Assert.IsNotNull(request);
85+
86+
// Test yes response
87+
request.Apply.Invoke(true);
88+
Assert.IsTrue(actionCalled);
89+
mockNoNode.Verify(x => x.Call(), Times.Never);
90+
91+
// Test no response
92+
actionCalled = false;
93+
request.Apply.Invoke(false);
94+
Assert.IsFalse(actionCalled);
95+
mockNoNode.Verify(x => x.Call(), Times.Once);
1696
}
1797

18-
// Test that NoMessage does not set a message
1998
[TestMethod]
20-
public void NoMessage_ShouldNotSetStartingMessage()
99+
public void YesNo_WithINodeAndActionParameters_CreatesRequestCorrectly()
21100
{
22-
var request = NoMessage().Use(_ => { });
101+
// Arrange
102+
var actionCalled = false;
103+
Action noAction = () => actionCalled = true;
104+
var mockYesNode = new Mock<INode>();
105+
106+
// Act
107+
var request = RequestBuilder.YesNo(mockYesNode.Object, noAction);
108+
109+
// Assert
110+
Assert.IsNotNull(request);
111+
112+
// Test yes response
113+
request.Apply.Invoke(true);
114+
Assert.IsFalse(actionCalled);
115+
mockYesNode.Verify(x => x.Call(), Times.Once);
116+
117+
// Test no response
118+
request.Apply.Invoke(false);
119+
Assert.IsTrue(actionCalled);
120+
mockYesNode.Verify(x => x.Call(), Times.Once);
121+
}
23122

123+
[TestMethod]
124+
public void Ask_SetsStartingMessage()
125+
{
126+
// Arrange & Act
127+
var builder = RequestBuilder.Ask("Test message");
128+
var request = builder.Use(_ => { });
129+
130+
// Assert
131+
Assert.AreEqual("Test message", request.StartingMessage);
132+
}
133+
134+
[TestMethod]
135+
public void NoMessage_LeavesStartingMessageEmpty()
136+
{
137+
// Arrange & Act
138+
var builder = RequestBuilder.NoMessage();
139+
var request = builder.Use(_ => { });
140+
141+
// Assert
24142
Assert.AreEqual(string.Empty, request.StartingMessage);
25143
}
26144

27-
// Test that ClearOnCall sets the ClearOnCall flag on the Request
28145
[TestMethod]
29-
public void ClearOnCall_ShouldSetClearOnCallFlag()
146+
public void ClearOnCall_SetsFlagCorrectly()
30147
{
31-
var request = Ask("Test").ClearOnCall().Use(_ => { });
148+
// Arrange & Act
149+
var builder = RequestBuilder.Ask("Test").ClearOnCall();
150+
var request = builder.Use(_ => { });
32151

152+
// Assert
33153
Assert.IsTrue(request.ClearOnCall);
34154
}
35155

36-
// Test that FailMessage sets the FailMessage in the Request
37156
[TestMethod]
38-
public void FailMessage_ShouldSetFailMessage()
157+
public void FailMessage_SetsCustomMessage()
39158
{
40-
var request = Ask("Test").FailMessage("Failure message").Use(_ => { });
159+
// Arrange & Act
160+
var builder = RequestBuilder.Ask("Test").FailMessage("Custom fail message");
161+
var request = builder.Use(_ => { });
41162

42-
Assert.AreEqual("Failure message", request.FailMessage);
163+
// Assert
164+
Assert.AreEqual("Custom fail message", request.FailMessage);
43165
}
44166

45-
// Test that For sets the DataType correctly
46-
[DataTestMethod]
47-
[DataRow(DataType.String)]
48-
[DataRow(DataType.Int)]
49-
[DataRow(DataType.Double)]
50-
public void For_ShouldSetDataType(RequestBuilder.DataType dataType)
167+
[TestMethod]
168+
public void For_SetsDataType()
51169
{
52-
var request = Ask("Test").For(dataType).Use(_ => { });
170+
// Arrange & Act
171+
var builder = RequestBuilder.Ask("Test").For(RequestBuilder.DataType.YesNo);
172+
var request = builder.Use(_ => { });
53173

54-
Assert.AreEqual(dataType, request.DataType);
174+
// Assert
175+
Assert.AreEqual(RequestBuilder.DataType.YesNo, request.DataType);
55176
}
56177

57-
// Test that Goto(Action<string>) sets the Effect in the Request
58178
[TestMethod]
59-
public void Goto_Action_ShouldSetEffect()
179+
public void Goto_WithAction_SetsEffectCorrectly()
60180
{
61-
Action<string> effect = (x) => { /* Effect Logic */ };
62-
var request = Ask("Test").Goto(effect).Use(_ => { });
181+
// Arrange
182+
string receivedInput = null;
183+
Action<string> effect = input => receivedInput = input;
63184

64-
Assert.AreEqual(effect, request.Effect);
185+
// Act
186+
var builder = RequestBuilder.Ask("Test").Goto(effect);
187+
var request = builder.Use(_ => { });
188+
request.Effect.Invoke("test input");
189+
190+
// Assert
191+
Assert.AreEqual("test input", receivedInput);
65192
}
66193

67-
// Test that Use(Action<string>) sets the Apply function correctly
68194
[TestMethod]
69-
public void Use_Action_ShouldSetApply()
195+
public void Goto_WithINode_SetsEffectCorrectly()
70196
{
71-
Action<string> applyAction = _ => { /* Apply Logic */ };
72-
var request = Ask("Test").Use(applyAction);
197+
// Arrange
198+
var mockNode = new Mock<INode>();
199+
200+
// Act
201+
var builder = RequestBuilder.Ask("Test").Goto(mockNode.Object);
202+
var request = builder.Use(_ => { });
203+
request.Effect.Invoke("test input");
73204

74-
Assert.AreEqual(applyAction, request.Apply);
205+
// Assert
206+
mockNode.Verify(x => x.Call(), Times.Once);
75207
}
76208

77-
// Test that Use<T>(Action<T>) sets the Apply function with the correct type
78209
[TestMethod]
79-
public void Use_GenericAction_ShouldSetApplyWithCorrectType()
210+
public void Use_SetsApplyCorrectly()
80211
{
81-
var result = 0;
82-
Action<string> applyAction = i => result = int.Parse(i) * 2;
83-
var request = Ask("Test").Use(applyAction);
212+
// Arrange
213+
object receivedObject = null;
214+
Action<object> apply = obj => receivedObject = obj;
215+
216+
// Act
217+
var request = RequestBuilder.Ask("Test").Use(apply);
218+
request.Apply.Invoke("test object");
84219

85-
Assert.IsNotNull(request.Apply);
86-
request.Apply("123");
87-
Assert.AreEqual(246, result);
220+
// Assert
221+
Assert.AreEqual("test object", receivedObject);
88222
}
89223

90-
// Test class for Goto(INode)
91-
private class MockNode : INode
224+
[TestMethod]
225+
public void UseGeneric_SetsApplyCorrectly()
92226
{
93-
public void Call() { }
227+
// Arrange
228+
string receivedString = null;
229+
Action<string> apply = str => receivedString = str;
230+
231+
// Act
232+
var request = RequestBuilder.Ask("Test").Use(apply);
233+
request.Apply.Invoke("test string");
234+
235+
// Assert
236+
Assert.AreEqual("test string", receivedString);
94237
}
95238
}

0 commit comments

Comments
 (0)