Skip to content

Commit 430c086

Browse files
committed
Fix SignInResultAssertions Tests. Extracted RoundToSeconds method and ContainsItem body.
1 parent 2400d9b commit 430c086

File tree

6 files changed

+170
-129
lines changed

6 files changed

+170
-129
lines changed

src/FluentAssertions.AspNetCore.Mvc/AssertionHelpers.cs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
using FluentAssertions.Common;
22
using FluentAssertions.Execution;
3+
using System;
34
using System.Collections.Generic;
5+
using System.Globalization;
46

57
namespace FluentAssertions.AspNetCore.Mvc
68
{
79
internal class AssertionHelpers
810
{
9-
internal static void AssertStringObjectDictionary(
10-
IDictionary<string, object> dictionary,
11+
internal static void AssertStringObjectDictionary<TKey, TValue>(
12+
IDictionary<TKey, TValue> dictionary,
1113
string context,
12-
string key,
13-
object expectedValue,
14+
TKey key,
15+
TValue expectedValue,
1416
string reason,
1517
object[] reasonArgs)
1618
{
@@ -24,7 +26,7 @@ internal static void AssertStringObjectDictionary(
2426
dictionary);
2527
}
2628

27-
if (dictionary.TryGetValue(key, out object actual))
29+
if (dictionary.TryGetValue(key, out TValue actual))
2830
{
2931
Execute.Assertion
3032
.BecauseOf(reason, reasonArgs)
@@ -40,5 +42,16 @@ internal static void AssertStringObjectDictionary(
4042
}
4143
}
4244
}
45+
46+
internal static DateTimeOffset? RoundToSeconds(DateTimeOffset? expectedIssuedUtc)
47+
{
48+
var expectedIssuedUtcAsString = expectedIssuedUtc?.ToString("r", CultureInfo.InvariantCulture);
49+
50+
var expectedResult = DateTimeOffset.TryParseExact(expectedIssuedUtcAsString, "r", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out var result)
51+
? new DateTimeOffset?(result)
52+
: new DateTimeOffset?();
53+
return expectedResult;
54+
}
55+
4356
}
4457
}

src/FluentAssertions.AspNetCore.Mvc/SignInResultAssertions.cs

Lines changed: 22 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ public SignInResultAssertions WithAuthenticationProperties(AuthenticationPropert
6767
Execute.Assertion
6868
.ForCondition(actualAuthenticationProperties == expectedAuthenticationProperties)
6969
.BecauseOf(reason, reasonArgs)
70-
.FailWith(string.Format(FailureMessages.CommonFailMessage, "SignInResult.AuthenticationProperties", expectedAuthenticationProperties, actualAuthenticationProperties));
70+
.WithDefaultIdentifier("SignInResult.AuthenticationProperties")
71+
.FailWith(FailureMessages.CommonFailMessage, expectedAuthenticationProperties, actualAuthenticationProperties);
7172

7273
return this;
7374
}
@@ -90,7 +91,8 @@ public SignInResultAssertions WithIsPersistent(bool expectedIsPersistent, string
9091
Execute.Assertion
9192
.ForCondition(actualIsPersistent == expectedIsPersistent)
9293
.BecauseOf(reason, reasonArgs)
93-
.FailWith(string.Format(FailureMessages.CommonFailMessage, "SignInResult.AuthenticationProperties.IsPersistent", expectedIsPersistent, actualIsPersistent));
94+
.WithDefaultIdentifier("SignInResult.AuthenticationProperties.IsPersistent")
95+
.FailWith(FailureMessages.CommonFailMessage, expectedIsPersistent, actualIsPersistent);
9496

9597
return this;
9698
}
@@ -113,7 +115,8 @@ public SignInResultAssertions WithRedirectUri(string expectedRedirectUri, string
113115
Execute.Assertion
114116
.ForCondition(string.Equals(actualRedirectUri, expectedRedirectUri))
115117
.BecauseOf(reason, reasonArgs)
116-
.FailWith(string.Format(FailureMessages.CommonFailMessage, "SignInResult.AuthenticationProperties.RedirectUri", expectedRedirectUri, actualRedirectUri));
118+
.WithDefaultIdentifier("SignInResult.AuthenticationProperties.RedirectUri")
119+
.FailWith(FailureMessages.CommonFailMessage, expectedRedirectUri, actualRedirectUri);
117120

118121
return this;
119122
}
@@ -133,41 +136,13 @@ public SignInResultAssertions WithIssuedUtc(DateTimeOffset? expectedIssuedUtc, s
133136
{
134137
var actualResult = IssuedUtc;
135138

136-
var expectedIssuedUtcAsString = expectedIssuedUtc?.ToString("r", (IFormatProvider) CultureInfo.InvariantCulture);
137-
138-
var expectedResult = DateTimeOffset.TryParseExact(expectedIssuedUtcAsString, "r", (IFormatProvider)CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out var result)
139-
? new DateTimeOffset?(result)
140-
: new DateTimeOffset?();
141-
142-
if (actualResult == null && expectedResult == null)
143-
{
144-
return this;
145-
}
146-
147-
if (actualResult == null)
148-
{
149-
Execute.Assertion
150-
.ForCondition(false)
151-
.BecauseOf(reason, reasonArgs)
152-
.FailWith(string.Format(FailureMessages.CommonFailMessage, "SignInResult.AuthenticationProperties.IssuedUtc", expectedResult, null));
153-
154-
return this;
155-
}
156-
157-
if (expectedResult == null)
158-
{
159-
Execute.Assertion
160-
.ForCondition(false)
161-
.BecauseOf(reason, reasonArgs)
162-
.FailWith(string.Format(FailureMessages.CommonFailMessage, "SignInResult.AuthenticationProperties.IssuedUtc", null, actualResult));
163-
164-
return this;
165-
}
139+
var expectedResult = AssertionHelpers.RoundToSeconds(expectedIssuedUtc);
166140

167141
Execute.Assertion
168-
.ForCondition(DateTimeOffset.Compare(expectedResult.Value, actualResult.Value) == 0)
142+
.ForCondition(EqualityComparer<DateTimeOffset?>.Default.Equals(expectedResult, actualResult))
169143
.BecauseOf(reason, reasonArgs)
170-
.FailWith(string.Format(FailureMessages.CommonFailMessage, "SignInResult.AuthenticationProperties.IssuedUtc", expectedResult.Value, actualResult.Value));
144+
.WithDefaultIdentifier("SignInResult.AuthenticationProperties.IssuedUtc")
145+
.FailWith(FailureMessages.CommonFailMessage, expectedResult, actualResult);
171146

172147
return this;
173148
}
@@ -187,41 +162,13 @@ public SignInResultAssertions WithExpiresUtc(DateTimeOffset? expectedExpiresUtc,
187162
{
188163
var actualResult = ExpiresUtc;
189164

190-
var expectedExpiresUtcAsString = expectedExpiresUtc?.ToString("r", (IFormatProvider)CultureInfo.InvariantCulture);
191-
192-
var expectedResult = DateTimeOffset.TryParseExact(expectedExpiresUtcAsString, "r", (IFormatProvider)CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out var result)
193-
? new DateTimeOffset?(result)
194-
: new DateTimeOffset?();
195-
196-
if (actualResult == null && expectedResult == null)
197-
{
198-
return this;
199-
}
200-
201-
if (actualResult == null)
202-
{
203-
Execute.Assertion
204-
.ForCondition(false)
205-
.BecauseOf(reason, reasonArgs)
206-
.FailWith(string.Format(FailureMessages.CommonFailMessage, "SignInResult.AuthenticationProperties.ExpiresUtc", expectedResult, null));
207-
208-
return this;
209-
}
210-
211-
if (expectedResult == null)
212-
{
213-
Execute.Assertion
214-
.ForCondition(false)
215-
.BecauseOf(reason, reasonArgs)
216-
.FailWith(string.Format(FailureMessages.CommonFailMessage, "SignInResult.AuthenticationProperties.ExpiresUtc", null, actualResult));
217-
218-
return this;
219-
}
165+
var expectedResult = AssertionHelpers.RoundToSeconds(expectedExpiresUtc);
220166

221167
Execute.Assertion
222-
.ForCondition(DateTimeOffset.Compare(expectedResult.Value, actualResult.Value) == 0)
168+
.ForCondition(EqualityComparer<DateTimeOffset?>.Default.Equals(expectedResult, actualResult))
223169
.BecauseOf(reason, reasonArgs)
224-
.FailWith(string.Format(FailureMessages.CommonFailMessage, "SignInResult.AuthenticationProperties.ExpiresUtc", expectedResult.Value, actualResult.Value));
170+
.WithDefaultIdentifier("SignInResult.AuthenticationProperties.ExpiresUtc")
171+
.FailWith(FailureMessages.CommonFailMessage, expectedResult, actualResult);
225172

226173
return this;
227174
}
@@ -244,7 +191,8 @@ public SignInResultAssertions WithAllowRefresh(bool? expectedAllowRefresh, strin
244191
Execute.Assertion
245192
.ForCondition(actualAllowRefresh == expectedAllowRefresh)
246193
.BecauseOf(reason, reasonArgs)
247-
.FailWith(string.Format(FailureMessages.CommonFailMessage, "SignInResult.AuthenticationProperties.AllowRefresh", expectedAllowRefresh, actualAllowRefresh));
194+
.WithDefaultIdentifier("SignInResult.AuthenticationProperties.AllowRefresh")
195+
.FailWith(FailureMessages.CommonFailMessage, expectedAllowRefresh, actualAllowRefresh);
248196

249197
return this;
250198
}
@@ -264,12 +212,8 @@ public SignInResultAssertions WithAllowRefresh(bool? expectedAllowRefresh, strin
264212
public SignInResultAssertions ContainsItem(string expectedKey, string expectedValue, string reason = "", params object[] reasonArgs)
265213
{
266214
var actualItems = Items;
267-
var keyValuePair = new KeyValuePair<string, string>(expectedKey, expectedValue);
268-
269-
Execute.Assertion
270-
.ForCondition(actualItems.Contains(keyValuePair))
271-
.BecauseOf(reason, reasonArgs)
272-
.FailWith(string.Format(FailureMessages.CommonItemsContain, expectedKey, expectedValue));
215+
216+
AssertionHelpers.AssertStringObjectDictionary(actualItems, "SignInResult.Items", expectedKey, expectedValue, reason, reasonArgs);
273217

274218
return this;
275219
}
@@ -292,7 +236,8 @@ public SignInResultAssertions WithAuthenticationScheme(string expectedAuthentica
292236
Execute.Assertion
293237
.ForCondition(string.Equals(actualAuthenticationScheme, expectedAuthenticationScheme))
294238
.BecauseOf(reason, reasonArgs)
295-
.FailWith(string.Format(FailureMessages.CommonFailMessage, "SignInResult.AuthenticationScheme", expectedAuthenticationScheme, actualAuthenticationScheme));
239+
.WithDefaultIdentifier("SignInResult.AuthenticationScheme")
240+
.FailWith(FailureMessages.CommonFailMessage, expectedAuthenticationScheme, actualAuthenticationScheme);
296241

297242
return this;
298243
}
@@ -315,7 +260,8 @@ public SignInResultAssertions WithPrincipal(ClaimsPrincipal expectedPrincipal, s
315260
Execute.Assertion
316261
.ForCondition(actualPrincipal == expectedPrincipal)
317262
.BecauseOf(reason, reasonArgs)
318-
.FailWith(string.Format(FailureMessages.CommonFailMessage, "SignInResult.Principal", expectedPrincipal, actualPrincipal));
263+
.WithDefaultIdentifier("SignInResult.Principal")
264+
.FailWith(FailureMessages.CommonFailMessage, expectedPrincipal, actualPrincipal);
319265

320266
return this;
321267

src/FluentAssertions.AspNetCore.Mvc/SignOutResultAssertions.cs

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ public SignOutResultAssertions WithRedirectUri(string expectedRedirectUri, strin
133133
public SignOutResultAssertions WithIssuedUtc(DateTimeOffset? expectedIssuedUtc, string reason = "", params object[] reasonArgs)
134134
{
135135
var actualResult = IssuedUtc;
136-
DateTimeOffset? expectedResult = RoundToSeconds(expectedIssuedUtc);
136+
DateTimeOffset? expectedResult = AssertionHelpers.RoundToSeconds(expectedIssuedUtc);
137137

138138
Execute.Assertion
139139
.ForCondition(EqualityComparer<DateTimeOffset?>.Default.Equals(expectedResult, actualResult))
@@ -159,7 +159,7 @@ public SignOutResultAssertions WithExpiresUtc(DateTimeOffset? expectedExpiresUtc
159159
{
160160
var actualResult = ExpiresUtc;
161161

162-
DateTimeOffset? expectedResult = RoundToSeconds(expectedExpiresUtc);
162+
DateTimeOffset? expectedResult = AssertionHelpers.RoundToSeconds(expectedExpiresUtc);
163163

164164
Execute.Assertion
165165
.ForCondition(EqualityComparer<DateTimeOffset?>.Default.Equals(expectedResult, actualResult))
@@ -270,19 +270,5 @@ public SignOutResultAssertions ContainsScheme(string expectedScheme, string reas
270270
}
271271

272272
#endregion
273-
274-
#region Private Methods
275-
276-
private static DateTimeOffset? RoundToSeconds(DateTimeOffset? expectedIssuedUtc)
277-
{
278-
var expectedIssuedUtcAsString = expectedIssuedUtc?.ToString("r", CultureInfo.InvariantCulture);
279-
280-
var expectedResult = DateTimeOffset.TryParseExact(expectedIssuedUtcAsString, "r", CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind, out var result)
281-
? new DateTimeOffset?(result)
282-
: new DateTimeOffset?();
283-
return expectedResult;
284-
}
285-
286-
#endregion
287273
}
288274
}

tests/FluentAssertions.AspNetCore.Mvc.Tests/Helpers/FailureMessageHelper.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,14 @@ private static object ToString(DateTimeOffset? expected)
6363
return "<null>";
6464
}
6565

66+
internal static string ExpectedContextContainValueAtKeyButFoundNull(string context, string value, string key)
67+
{
68+
return $"Expected {context} to contain value \"{value}\" at key \"{key}\" because it is 10, but it is <null>.";
69+
}
70+
71+
internal static string ExpectedContextContainValueAtKeyButKeyNotFound(string context, string value, string key)
72+
{
73+
return $"Expected {context} to contain value \"{value}\" at key \"{key}\" because it is 10, but the key was not found.";
74+
}
6675
}
6776
}

0 commit comments

Comments
 (0)