Skip to content

Commit aba190e

Browse files
test: update tests to use static helper
1 parent fe95226 commit aba190e

File tree

4 files changed

+81
-128
lines changed

4 files changed

+81
-128
lines changed

test/Identity.Test/IdentityServer/SendAccess/SendAccessGrantValidatorTests.cs

Lines changed: 16 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
1-
using System.Collections.Specialized;
2-
using Bit.Core;
1+
using Bit.Core;
32
using Bit.Core.Auth.Identity;
4-
using Bit.Core.Auth.IdentityServer;
5-
using Bit.Core.Enums;
63
using Bit.Core.Services;
74
using Bit.Core.Tools.Models.Data;
85
using Bit.Core.Tools.SendFeatures.Queries.Interfaces;
9-
using Bit.Core.Utilities;
106
using Bit.Identity.IdentityServer.Enums;
117
using Bit.Identity.IdentityServer.RequestValidators.SendAccess;
128
using Bit.Test.Common.AutoFixture;
@@ -81,7 +77,7 @@ public async Task ValidateAsync_InvalidSendId_ReturnsInvalidGrant(
8177
var context = new ExtensionGrantValidationContext();
8278

8379
tokenRequest.GrantType = CustomGrantTypes.SendAccess;
84-
tokenRequest.Raw = CreateTokenRequestBody(Guid.Empty);
80+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(Guid.Empty);
8581

8682
// To preserve the CreateTokenRequestBody method for more general usage we over write the sendId
8783
tokenRequest.Raw.Set(SendAccessConstants.TokenRequest.SendId, "invalid-guid-format");
@@ -118,7 +114,9 @@ public async Task ValidateAsync_EmptyGuidSendId_ReturnsInvalidGrant(
118114
public async Task ValidateAsync_NeverAuthenticateMethod_ReturnsInvalidGrant(
119115
[AutoFixture.ValidatedTokenRequest] ValidatedTokenRequest tokenRequest,
120116
SutProvider<SendAccessGrantValidator> sutProvider,
121-
Guid sendId)
117+
NeverAuthenticate neverAuthenticate,
118+
Guid sendId,
119+
GrantValidationResult expectedResult)
122120
{
123121
// Arrange
124122
var context = SetupTokenRequest(
@@ -128,14 +126,20 @@ public async Task ValidateAsync_NeverAuthenticateMethod_ReturnsInvalidGrant(
128126

129127
sutProvider.GetDependency<ISendAuthenticationQuery>()
130128
.GetAuthenticationMethod(sendId)
131-
.Returns(new NeverAuthenticate());
129+
.Returns(neverAuthenticate);
130+
131+
sutProvider.GetDependency<ISendAuthenticationMethodValidator<NeverAuthenticate>>()
132+
.ValidateRequestAsync(context, neverAuthenticate, sendId)
133+
.Returns(expectedResult);
132134

133135
// Act
134136
await sutProvider.Sut.ValidateAsync(context);
135137

136138
// Assert
137-
Assert.Equal(OidcConstants.TokenErrors.InvalidGrant, context.Result.Error);
138-
Assert.Equal($"{SendAccessConstants.TokenRequest.SendId} is invalid.", context.Result.ErrorDescription);
139+
Assert.Equal(expectedResult, context.Result);
140+
await sutProvider.GetDependency<ISendAuthenticationMethodValidator<NeverAuthenticate>>()
141+
.Received(1)
142+
.ValidateRequestAsync(context, neverAuthenticate, sendId);
139143
}
140144

141145
[Theory, BitAutoData]
@@ -264,7 +268,7 @@ public async Task ValidateAsync_UnknownAuthMethod_ThrowsInvalidOperationExceptio
264268
public void GrantType_ReturnsCorrectType()
265269
{
266270
// Arrange & Act
267-
var validator = new SendAccessGrantValidator(null!, null!, null!, null!);
271+
var validator = new SendAccessGrantValidator(null!, null!, null!, null!, null!);
268272

269273
// Assert
270274
Assert.Equal(CustomGrantTypes.SendAccess, ((IExtensionGrantValidator)validator).GrantType);
@@ -289,44 +293,9 @@ private static ExtensionGrantValidationContext SetupTokenRequest(
289293
var context = new ExtensionGrantValidationContext();
290294

291295
request.GrantType = CustomGrantTypes.SendAccess;
292-
request.Raw = CreateTokenRequestBody(sendId);
296+
request.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId);
293297
context.Request = request;
294298

295299
return context;
296300
}
297-
298-
private static NameValueCollection CreateTokenRequestBody(
299-
Guid sendId,
300-
string passwordHash = null,
301-
string sendEmail = null,
302-
string otpCode = null)
303-
{
304-
var sendIdBase64 = CoreHelpers.Base64UrlEncode(sendId.ToByteArray());
305-
306-
var rawRequestParameters = new NameValueCollection
307-
{
308-
{ OidcConstants.TokenRequest.GrantType, CustomGrantTypes.SendAccess },
309-
{ OidcConstants.TokenRequest.ClientId, BitwardenClient.Send },
310-
{ OidcConstants.TokenRequest.Scope, ApiScopes.ApiSendAccess },
311-
{ "deviceType", ((int)DeviceType.FirefoxBrowser).ToString() },
312-
{ SendAccessConstants.TokenRequest.SendId, sendIdBase64 }
313-
};
314-
315-
if (passwordHash != null)
316-
{
317-
rawRequestParameters.Add(SendAccessConstants.TokenRequest.ClientB64HashedPassword, passwordHash);
318-
}
319-
320-
if (sendEmail != null)
321-
{
322-
rawRequestParameters.Add(SendAccessConstants.TokenRequest.Email, sendEmail);
323-
}
324-
325-
if (otpCode != null && sendEmail != null)
326-
{
327-
rawRequestParameters.Add(SendAccessConstants.TokenRequest.Otp, otpCode);
328-
}
329-
330-
return rawRequestParameters;
331-
}
332301
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
using System.Collections.Specialized;
2+
using Bit.Core.Auth.IdentityServer;
3+
using Bit.Core.Enums;
4+
using Bit.Core.Utilities;
5+
using Bit.Identity.IdentityServer.Enums;
6+
using Bit.Identity.IdentityServer.RequestValidators.SendAccess;
7+
using Duende.IdentityModel;
8+
9+
namespace Bit.Identity.Test.IdentityServer.SendAccess;
10+
11+
public static class SendAccessTestUtilities
12+
{
13+
public static NameValueCollection CreateValidatedTokenRequest(
14+
Guid sendId,
15+
string sendEmail = null,
16+
string otpCode = null,
17+
params string[] passwordHash)
18+
{
19+
var sendIdBase64 = CoreHelpers.Base64UrlEncode(sendId.ToByteArray());
20+
21+
var rawRequestParameters = new NameValueCollection
22+
{
23+
{ OidcConstants.TokenRequest.GrantType, CustomGrantTypes.SendAccess },
24+
{ OidcConstants.TokenRequest.ClientId, BitwardenClient.Send },
25+
{ OidcConstants.TokenRequest.Scope, ApiScopes.ApiSendAccess },
26+
{ "device_type", ((int)DeviceType.FirefoxBrowser).ToString() },
27+
{ SendAccessConstants.TokenRequest.SendId, sendIdBase64 }
28+
};
29+
30+
if (sendEmail != null)
31+
{
32+
rawRequestParameters.Add(SendAccessConstants.TokenRequest.Email, sendEmail);
33+
}
34+
35+
if (otpCode != null && sendEmail != null)
36+
{
37+
rawRequestParameters.Add(SendAccessConstants.TokenRequest.Otp, otpCode);
38+
}
39+
40+
if (passwordHash != null && passwordHash.Length > 0)
41+
{
42+
foreach (var hash in passwordHash)
43+
{
44+
rawRequestParameters.Add(SendAccessConstants.TokenRequest.ClientB64HashedPassword, hash);
45+
}
46+
}
47+
48+
return rawRequestParameters;
49+
}
50+
}

test/Identity.Test/IdentityServer/SendAccess/SendEmailOtpRequestValidatorTests.cs

Lines changed: 7 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
1-
using System.Collections.Specialized;
2-
using Bit.Core.Auth.Identity;
1+
using Bit.Core.Auth.Identity;
32
using Bit.Core.Auth.Identity.TokenProviders;
4-
using Bit.Core.Auth.IdentityServer;
5-
using Bit.Core.Enums;
63
using Bit.Core.Services;
74
using Bit.Core.Tools.Models.Data;
8-
using Bit.Core.Utilities;
9-
using Bit.Identity.IdentityServer.Enums;
105
using Bit.Identity.IdentityServer.RequestValidators.SendAccess;
116
using Bit.Test.Common.AutoFixture;
127
using Bit.Test.Common.AutoFixture.Attributes;
@@ -28,7 +23,7 @@ public async Task ValidateRequestAsync_MissingEmail_ReturnsInvalidRequest(
2823
Guid sendId)
2924
{
3025
// Arrange
31-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId);
26+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId);
3227
var context = new ExtensionGrantValidationContext
3328
{
3429
Request = tokenRequest
@@ -61,8 +56,7 @@ public async Task ValidateRequestAsync_EmailNotInList_ReturnsInvalidRequest(
6156
Guid sendId)
6257
{
6358
// Arrange
64-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId, email);
65-
var emailOTP = new EmailOtp(["[email protected]"]);
59+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId, email);
6660
var context = new ExtensionGrantValidationContext
6761
{
6862
Request = tokenRequest
@@ -96,7 +90,7 @@ public async Task ValidateRequestAsync_EmailWithoutOtp_GeneratesAndSendsOtp(
9690
string generatedToken)
9791
{
9892
// Arrange
99-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId, email);
93+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId, email);
10094
var context = new ExtensionGrantValidationContext
10195
{
10296
Request = tokenRequest
@@ -144,7 +138,7 @@ public async Task ValidateRequestAsync_OtpGenerationFails_ReturnsGenerationFaile
144138
string email)
145139
{
146140
// Arrange
147-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId, email);
141+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId, email);
148142
var context = new ExtensionGrantValidationContext
149143
{
150144
Request = tokenRequest
@@ -179,7 +173,7 @@ public async Task ValidateRequestAsync_ValidOtp_ReturnsSuccess(
179173
string otp)
180174
{
181175
// Arrange
182-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId, email, otp);
176+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId, email, otp);
183177
var context = new ExtensionGrantValidationContext
184178
{
185179
Request = tokenRequest
@@ -231,7 +225,7 @@ public async Task ValidateRequestAsync_InvalidOtp_ReturnsInvalidGrant(
231225
string invalidOtp)
232226
{
233227
// Arrange
234-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId, email, invalidOtp);
228+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId, email, invalidOtp);
235229
var context = new ExtensionGrantValidationContext
236230
{
237231
Request = tokenRequest
@@ -278,33 +272,4 @@ public void Constructor_WithValidParameters_CreatesInstance()
278272
// Assert
279273
Assert.NotNull(validator);
280274
}
281-
282-
private static NameValueCollection CreateValidatedTokenRequest(
283-
Guid sendId,
284-
string sendEmail = null,
285-
string otpCode = null)
286-
{
287-
var sendIdBase64 = CoreHelpers.Base64UrlEncode(sendId.ToByteArray());
288-
289-
var rawRequestParameters = new NameValueCollection
290-
{
291-
{ OidcConstants.TokenRequest.GrantType, CustomGrantTypes.SendAccess },
292-
{ OidcConstants.TokenRequest.ClientId, BitwardenClient.Send },
293-
{ OidcConstants.TokenRequest.Scope, ApiScopes.ApiSendAccess },
294-
{ "device_type", ((int)DeviceType.FirefoxBrowser).ToString() },
295-
{ SendAccessConstants.TokenRequest.SendId, sendIdBase64 }
296-
};
297-
298-
if (sendEmail != null)
299-
{
300-
rawRequestParameters.Add(SendAccessConstants.TokenRequest.Email, sendEmail);
301-
}
302-
303-
if (otpCode != null && sendEmail != null)
304-
{
305-
rawRequestParameters.Add(SendAccessConstants.TokenRequest.Otp, otpCode);
306-
}
307-
308-
return rawRequestParameters;
309-
}
310275
}

test/Identity.Test/IdentityServer/SendAccess/SendPasswordRequestValidatorTests.cs

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
1-
using System.Collections.Specialized;
2-
using Bit.Core.Auth.Identity;
3-
using Bit.Core.Auth.IdentityServer;
1+
using Bit.Core.Auth.Identity;
42
using Bit.Core.Auth.UserFeatures.SendAccess;
5-
using Bit.Core.Enums;
63
using Bit.Core.KeyManagement.Sends;
74
using Bit.Core.Tools.Models.Data;
8-
using Bit.Core.Utilities;
9-
using Bit.Identity.IdentityServer.Enums;
105
using Bit.Identity.IdentityServer.RequestValidators.SendAccess;
116
using Bit.Test.Common.AutoFixture;
127
using Bit.Test.Common.AutoFixture.Attributes;
@@ -28,7 +23,7 @@ public async Task ValidateSendPassword_MissingPasswordHash_ReturnsInvalidRequest
2823
Guid sendId)
2924
{
3025
// Arrange
31-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId);
26+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId);
3227

3328
var context = new ExtensionGrantValidationContext
3429
{
@@ -58,7 +53,7 @@ public async Task ValidateSendPassword_PasswordHashMismatch_ReturnsInvalidGrant(
5853
string clientPasswordHash)
5954
{
6055
// Arrange
61-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId, clientPasswordHash);
56+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId, passwordHash: clientPasswordHash);
6257

6358
var context = new ExtensionGrantValidationContext
6459
{
@@ -92,7 +87,7 @@ public async Task ValidateSendPassword_PasswordHashMatches_ReturnsSuccess(
9287
string clientPasswordHash)
9388
{
9489
// Arrange
95-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId, clientPasswordHash);
90+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId, passwordHash: clientPasswordHash);
9691

9792
var context = new ExtensionGrantValidationContext
9893
{
@@ -130,7 +125,7 @@ public async Task ValidateSendPassword_EmptyPasswordHash_CallsPasswordHasher(
130125
Guid sendId)
131126
{
132127
// Arrange
133-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId, string.Empty);
128+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId, passwordHash: string.Empty);
134129

135130
var context = new ExtensionGrantValidationContext
136131
{
@@ -163,7 +158,7 @@ public async Task ValidateSendPassword_WhitespacePasswordHash_CallsPasswordHashe
163158
{
164159
// Arrange
165160
var whitespacePassword = " ";
166-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId, whitespacePassword);
161+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId, passwordHash: whitespacePassword);
167162

168163
var context = new ExtensionGrantValidationContext
169164
{
@@ -196,7 +191,7 @@ public async Task ValidateSendPassword_MultiplePasswordHashParameters_ReturnsInv
196191
// Arrange
197192
var firstPassword = "first-password";
198193
var secondPassword = "second-password";
199-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId, firstPassword, secondPassword);
194+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId, passwordHash: [firstPassword, secondPassword]);
200195

201196
var context = new ExtensionGrantValidationContext
202197
{
@@ -229,7 +224,7 @@ public async Task ValidateSendPassword_SuccessResult_ContainsCorrectClaims(
229224
string clientPasswordHash)
230225
{
231226
// Arrange
232-
tokenRequest.Raw = CreateValidatedTokenRequest(sendId, clientPasswordHash);
227+
tokenRequest.Raw = SendAccessTestUtilities.CreateValidatedTokenRequest(sendId, passwordHash: clientPasswordHash);
233228

234229
var context = new ExtensionGrantValidationContext
235230
{
@@ -268,30 +263,4 @@ public void Constructor_WithValidParameters_CreatesInstance()
268263
// Assert
269264
Assert.NotNull(validator);
270265
}
271-
272-
private static NameValueCollection CreateValidatedTokenRequest(
273-
Guid sendId,
274-
params string[] passwordHash)
275-
{
276-
var sendIdBase64 = CoreHelpers.Base64UrlEncode(sendId.ToByteArray());
277-
278-
var rawRequestParameters = new NameValueCollection
279-
{
280-
{ OidcConstants.TokenRequest.GrantType, CustomGrantTypes.SendAccess },
281-
{ OidcConstants.TokenRequest.ClientId, BitwardenClient.Send },
282-
{ OidcConstants.TokenRequest.Scope, ApiScopes.ApiSendAccess },
283-
{ "device_type", ((int)DeviceType.FirefoxBrowser).ToString() },
284-
{ SendAccessConstants.TokenRequest.SendId, sendIdBase64 }
285-
};
286-
287-
if (passwordHash != null && passwordHash.Length > 0)
288-
{
289-
foreach (var hash in passwordHash)
290-
{
291-
rawRequestParameters.Add(SendAccessConstants.TokenRequest.ClientB64HashedPassword, hash);
292-
}
293-
}
294-
295-
return rawRequestParameters;
296-
}
297266
}

0 commit comments

Comments
 (0)