Skip to content

Commit ee2d406

Browse files
jschick04NikTilton
authored andcommitted
Added event table effects tests
1 parent 8a98635 commit ee2d406

1 file changed

Lines changed: 272 additions & 0 deletions

File tree

Lines changed: 272 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,272 @@
1+
// // Copyright (c) Microsoft Corporation.
2+
// // Licensed under the MIT License.
3+
4+
using EventLogExpert.UI.Interfaces;
5+
using EventLogExpert.UI.Store.EventTable;
6+
using Fluxor;
7+
using NSubstitute;
8+
9+
namespace EventLogExpert.UI.Tests.Store;
10+
11+
public sealed class EventTableEffectsTests
12+
{
13+
[Fact]
14+
public async Task HandleLoadColumns_ShouldLoadAllColumnsFromPreferences()
15+
{
16+
// Arrange
17+
var enabledColumns = new List<ColumnName>
18+
{
19+
ColumnName.Level,
20+
ColumnName.DateAndTime,
21+
ColumnName.Source
22+
};
23+
24+
var (effects, mockDispatcher, mockPreferencesProvider) = CreateEffects(enabledColumns);
25+
26+
// Act
27+
await effects.HandleLoadColumns(mockDispatcher);
28+
29+
// Assert
30+
mockDispatcher.Received(1).Dispatch(Arg.Is<EventTableAction.LoadColumnsCompleted>(a =>
31+
a.LoadedColumns.Count == Enum.GetValues<ColumnName>().Length));
32+
}
33+
34+
[Fact]
35+
public async Task HandleLoadColumns_ShouldMarkDisabledColumnsAsFalse()
36+
{
37+
// Arrange
38+
var enabledColumns = new List<ColumnName>
39+
{
40+
ColumnName.Level
41+
};
42+
43+
var (effects, mockDispatcher, mockPreferencesProvider) = CreateEffects(enabledColumns);
44+
45+
// Act
46+
await effects.HandleLoadColumns(mockDispatcher);
47+
48+
// Assert
49+
mockDispatcher.Received(1).Dispatch(Arg.Is<EventTableAction.LoadColumnsCompleted>(a =>
50+
a.LoadedColumns[ColumnName.Source] == false &&
51+
a.LoadedColumns[ColumnName.EventId] == false));
52+
}
53+
54+
[Fact]
55+
public async Task HandleLoadColumns_ShouldMarkEnabledColumnsAsTrue()
56+
{
57+
// Arrange
58+
var enabledColumns = new List<ColumnName>
59+
{
60+
ColumnName.Level,
61+
ColumnName.DateAndTime
62+
};
63+
64+
var (effects, mockDispatcher, mockPreferencesProvider) = CreateEffects(enabledColumns);
65+
66+
// Act
67+
await effects.HandleLoadColumns(mockDispatcher);
68+
69+
// Assert
70+
mockDispatcher.Received(1).Dispatch(Arg.Is<EventTableAction.LoadColumnsCompleted>(a =>
71+
a.LoadedColumns[ColumnName.Level] == true &&
72+
a.LoadedColumns[ColumnName.DateAndTime] == true));
73+
}
74+
75+
[Fact]
76+
public async Task HandleLoadColumns_WhenNoColumnsEnabled_ShouldMarkAllAsFalse()
77+
{
78+
// Arrange
79+
var enabledColumns = new List<ColumnName>();
80+
81+
var (effects, mockDispatcher, mockPreferencesProvider) = CreateEffects(enabledColumns);
82+
83+
// Act
84+
await effects.HandleLoadColumns(mockDispatcher);
85+
86+
// Assert
87+
mockDispatcher.Received(1).Dispatch(Arg.Is<EventTableAction.LoadColumnsCompleted>(a =>
88+
a.LoadedColumns.All(kvp => kvp.Value == false)));
89+
}
90+
91+
[Fact]
92+
public async Task HandleToggleColumn_ShouldOnlyChangeToggledColumn()
93+
{
94+
// Arrange
95+
var enabledColumns = new List<ColumnName>
96+
{
97+
ColumnName.Level,
98+
ColumnName.DateAndTime,
99+
ColumnName.Source,
100+
ColumnName.EventId
101+
};
102+
103+
var (effects, mockDispatcher, mockPreferencesProvider) = CreateEffects(enabledColumns);
104+
var action = new EventTableAction.ToggleColumn(ColumnName.DateAndTime);
105+
106+
// Act
107+
await effects.HandleToggleColumn(action, mockDispatcher);
108+
109+
// Assert
110+
mockDispatcher.Received(1).Dispatch(Arg.Is<EventTableAction.LoadColumnsCompleted>(a =>
111+
a.LoadedColumns[ColumnName.Level] == true &&
112+
a.LoadedColumns[ColumnName.DateAndTime] == false &&
113+
a.LoadedColumns[ColumnName.Source] == true &&
114+
a.LoadedColumns[ColumnName.EventId] == true));
115+
}
116+
117+
[Fact]
118+
public async Task HandleToggleColumn_ShouldUpdatePreferences()
119+
{
120+
// Arrange
121+
var enabledColumns = new List<ColumnName>
122+
{
123+
ColumnName.Level,
124+
ColumnName.DateAndTime
125+
};
126+
127+
var (effects, mockDispatcher, mockPreferencesProvider) = CreateEffects(enabledColumns);
128+
var action = new EventTableAction.ToggleColumn(ColumnName.Source);
129+
130+
// Act
131+
await effects.HandleToggleColumn(action, mockDispatcher);
132+
133+
// Assert
134+
_ = mockPreferencesProvider.Received(1).EnabledEventTableColumnsPreference =
135+
Arg.Is<IEnumerable<ColumnName>>(cols =>
136+
cols.Contains(ColumnName.Source));
137+
}
138+
139+
[Fact]
140+
public async Task HandleToggleColumn_WhenColumnDisabled_ShouldEnableIt()
141+
{
142+
// Arrange
143+
var enabledColumns = new List<ColumnName>
144+
{
145+
ColumnName.DateAndTime,
146+
ColumnName.Source
147+
};
148+
149+
var (effects, mockDispatcher, mockPreferencesProvider) = CreateEffects(enabledColumns);
150+
var action = new EventTableAction.ToggleColumn(ColumnName.Level);
151+
152+
// Act
153+
await effects.HandleToggleColumn(action, mockDispatcher);
154+
155+
// Assert
156+
mockDispatcher.Received(1).Dispatch(Arg.Is<EventTableAction.LoadColumnsCompleted>(a =>
157+
a.LoadedColumns[ColumnName.Level] == true &&
158+
a.LoadedColumns[ColumnName.DateAndTime] == true &&
159+
a.LoadedColumns[ColumnName.Source] == true));
160+
}
161+
162+
[Fact]
163+
public async Task HandleToggleColumn_WhenColumnEnabled_ShouldDisableIt()
164+
{
165+
// Arrange
166+
var enabledColumns = new List<ColumnName>
167+
{
168+
ColumnName.Level,
169+
ColumnName.DateAndTime,
170+
ColumnName.Source
171+
};
172+
173+
var (effects, mockDispatcher, mockPreferencesProvider) = CreateEffects(enabledColumns);
174+
var action = new EventTableAction.ToggleColumn(ColumnName.Level);
175+
176+
// Act
177+
await effects.HandleToggleColumn(action, mockDispatcher);
178+
179+
// Assert
180+
mockDispatcher.Received(1).Dispatch(Arg.Is<EventTableAction.LoadColumnsCompleted>(a =>
181+
a.LoadedColumns[ColumnName.Level] == false &&
182+
a.LoadedColumns[ColumnName.DateAndTime] == true &&
183+
a.LoadedColumns[ColumnName.Source] == true));
184+
}
185+
186+
[Fact]
187+
public async Task HandleToggleColumn_WhenDisabling_ShouldRemoveFromPreferences()
188+
{
189+
// Arrange
190+
var enabledColumns = new List<ColumnName>
191+
{
192+
ColumnName.Level,
193+
ColumnName.Source,
194+
ColumnName.DateAndTime
195+
};
196+
197+
var (effects, mockDispatcher, mockPreferencesProvider) = CreateEffects(enabledColumns);
198+
var action = new EventTableAction.ToggleColumn(ColumnName.Source);
199+
200+
// Act
201+
await effects.HandleToggleColumn(action, mockDispatcher);
202+
203+
// Assert
204+
var _ = mockPreferencesProvider.Received(1).EnabledEventTableColumnsPreference =
205+
Arg.Is<IEnumerable<ColumnName>>(cols =>
206+
cols.Contains(ColumnName.Level) &&
207+
cols.Contains(ColumnName.DateAndTime) &&
208+
!cols.Contains(ColumnName.Source) &&
209+
cols.Count() == 2);
210+
}
211+
212+
[Fact]
213+
public async Task HandleToggleColumn_WhenEnabling_ShouldPersistToPreferences()
214+
{
215+
// Arrange
216+
var enabledColumns = new List<ColumnName>
217+
{
218+
ColumnName.Level
219+
};
220+
221+
var (effects, mockDispatcher, mockPreferencesProvider) = CreateEffects(enabledColumns);
222+
var action = new EventTableAction.ToggleColumn(ColumnName.Source);
223+
224+
// Act
225+
await effects.HandleToggleColumn(action, mockDispatcher);
226+
227+
// Assert
228+
_ = mockPreferencesProvider.Received(1).EnabledEventTableColumnsPreference =
229+
Arg.Is<IEnumerable<ColumnName>>(cols =>
230+
cols.Contains(ColumnName.Level) &&
231+
cols.Contains(ColumnName.Source) &&
232+
cols.Count() == 2);
233+
}
234+
235+
[Fact]
236+
public async Task HandleUpdateDisplayedEvents_ShouldDispatchUpdateCombinedEvents()
237+
{
238+
// Arrange
239+
var mockDispatcher = Substitute.For<IDispatcher>();
240+
241+
// Act
242+
await EventTableEffects.HandleUpdateDisplayedEvents(mockDispatcher);
243+
244+
// Assert
245+
mockDispatcher.Received(1).Dispatch(Arg.Any<EventTableAction.UpdateCombinedEvents>());
246+
}
247+
248+
[Fact]
249+
public async Task HandleUpdateTable_ShouldDispatchUpdateCombinedEvents()
250+
{
251+
// Arrange
252+
var mockDispatcher = Substitute.For<IDispatcher>();
253+
254+
// Act
255+
await EventTableEffects.HandleUpdateTable(mockDispatcher);
256+
257+
// Assert
258+
mockDispatcher.Received(1).Dispatch(Arg.Any<EventTableAction.UpdateCombinedEvents>());
259+
}
260+
261+
private static (EventTableEffects effects, IDispatcher mockDispatcher, IPreferencesProvider mockPreferencesProvider)
262+
CreateEffects(List<ColumnName>? enabledColumns = null)
263+
{
264+
var mockPreferencesProvider = Substitute.For<IPreferencesProvider>();
265+
mockPreferencesProvider.EnabledEventTableColumnsPreference.Returns(enabledColumns ?? []);
266+
267+
var effects = new EventTableEffects(mockPreferencesProvider);
268+
var mockDispatcher = Substitute.For<IDispatcher>();
269+
270+
return (effects, mockDispatcher, mockPreferencesProvider);
271+
}
272+
}

0 commit comments

Comments
 (0)