Files
2026-03-11 11:18:25 -05:00

114 lines
4.6 KiB
C#

using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using Moq;
using Xunit;
using OnlineBankingAuth.Configuration;
using OnlineBankingAuth.Tokens;
using Landmark.OLA.Application.Common.Security;
using Landmark.OLA.Models.OnlineBanking;
namespace OnlineBankingAuth.Tests
{
public class TokenServiceTest
{
public static SecuritySettings _settings = new SecuritySettings
{
TokenSecret = "Some fake secret for crypt"
};
//public static IOptions<SecuritySettings> _options = IOptions<SecuritySettings>(_settings);
public static IOptions<SecuritySettings> _options = Options.Create<SecuritySettings>(_settings);
TokenService _tokenService = new TokenService(_options);
[Fact]
public void ShouldGenerateTokenAndRetrieveTokenFromCookie()
{
var assertion = new DISAMLAssertion
{
MemberID = "123456",
FI_ID = "7890"
};
var obToken = new OnlineBankingToken(assertion, null, false);
var token = _tokenService.CreateOnlineBankingJWT(obToken);
var cookies = new Dictionary<string, string>
{
{ Constants.TokenPayload, token },
{ Constants.TokenAuthorization, "Role=" + Constants.TokenAuthorizationString }
};
var cookieMock = new Mock<IRequestCookieCollection>();
cookieMock.Setup(c => c[It.IsAny<string>()])
.Returns((string key) => cookies.TryGetValue(key, out var v) ? v : null);
cookieMock.Setup(c => c.ContainsKey(It.IsAny<string>()))
.Returns((string key) => cookies.ContainsKey(key));
cookieMock.Setup(c => c.TryGetValue(It.IsAny<string>(), out It.Ref<string>.IsAny))
.Returns((string key, out string value) =>
{
var ok = cookies.TryGetValue(key, out var v);
value = v;
return ok;
});
var context = new DefaultHttpContext();
context.Request.Cookies = cookieMock.Object;
var retrievedAssertion = _tokenService.GetAuthenticatedDataFromCookie(context);
Assert.Equal(assertion.FI_ID, retrievedAssertion.FI_ID);
Assert.Equal(assertion.MemberID, retrievedAssertion.MemberID);
}
[Fact]
public void ShouldRenewCookie()
{
var assertion = new DISAMLAssertion
{
MemberID = "123456",
FI_ID = "7890"
};
var obToken = new OnlineBankingToken(assertion, null, false);
var token = _tokenService.CreateOnlineBankingJWT(obToken);
var cookies = new Dictionary<string, string>
{
{ Constants.TokenPayload, token },
{ Constants.TokenAuthorization, "Role=" + Constants.TokenAuthorizationString }
};
var cookieMock = new Mock<IRequestCookieCollection>();
cookieMock.Setup(c => c[It.IsAny<string>()])
.Returns((string key) => cookies.TryGetValue(key, out var v) ? v : null);
cookieMock.Setup(c => c.ContainsKey(It.IsAny<string>()))
.Returns((string key) => cookies.ContainsKey(key));
cookieMock.Setup(c => c.TryGetValue(It.IsAny<string>(), out It.Ref<string>.IsAny))
.Returns((string key, out string value) =>
{
var ok = cookies.TryGetValue(key, out var v);
value = v;
return ok;
});
var context = new DefaultHttpContext();
context.Request.Cookies = cookieMock.Object;
var renewedSession = _tokenService.RenewOnlineBankingJWT(context);
var tokenHandler = new JwtSecurityTokenHandler();
var firstEncryptedToken = CookieCryptor.DecryptJwt(token[Constants.TokenPrefix.Length..], _settings.TokenSecret);
var firstToken = tokenHandler.ReadJwtToken(firstEncryptedToken);
var secondEncryptedToken = CookieCryptor.DecryptJwt(renewedSession[Constants.TokenPrefix.Length..], _settings.TokenSecret);
var secondToken = tokenHandler.ReadJwtToken(secondEncryptedToken);
Assert.Equal(firstToken.Payload[Constants.MemberID], secondToken.Payload[Constants.MemberID]);
Assert.Equal(firstToken.Payload[Constants.FI_ID], secondToken.Payload[Constants.FI_ID]);
}
}
}