158 lines
3.4 KiB
C#
158 lines
3.4 KiB
C#
using System.Text;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Moq;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace AMWD.Common.AspNetCore.Tests.Extensions
|
|
{
|
|
[TestClass]
|
|
public class SessionExtensionsTest
|
|
{
|
|
private Mock<ISession> _sessionMock;
|
|
|
|
private string _sessionKey;
|
|
private byte[] _sessionValue;
|
|
|
|
private TestModel _model;
|
|
|
|
internal class TestModel
|
|
{
|
|
public string ValueA { get; set; }
|
|
|
|
public string ValueB { get; set; }
|
|
}
|
|
|
|
[TestInitialize]
|
|
public void InitializeTests()
|
|
{
|
|
_sessionKey = null;
|
|
_sessionValue = null;
|
|
|
|
_model = new TestModel
|
|
{
|
|
ValueA = "A",
|
|
ValueB = "B"
|
|
};
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldCheckKeyExists()
|
|
{
|
|
// arrange
|
|
_sessionKey = "exists";
|
|
var session = GetSession();
|
|
|
|
// act
|
|
bool result1 = session.HasKey("exists");
|
|
bool result2 = session.HasKey("somewhere");
|
|
|
|
// assert
|
|
Assert.IsTrue(result1);
|
|
Assert.IsFalse(result2);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldGetValue()
|
|
{
|
|
// arrange
|
|
_sessionKey = "test";
|
|
_sessionValue = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(_model));
|
|
var session = GetSession();
|
|
|
|
// act
|
|
var result = session.GetValue<TestModel>(_sessionKey);
|
|
|
|
// assert
|
|
Assert.IsNotNull(result);
|
|
Assert.AreEqual(_model.ValueA, result.ValueA);
|
|
Assert.AreEqual(_model.ValueB, result.ValueB);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldGetNull()
|
|
{
|
|
// arrange
|
|
_sessionKey = "foo";
|
|
_sessionValue = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(_model));
|
|
var session = GetSession();
|
|
|
|
// act
|
|
var result = session.GetValue<TestModel>("bar");
|
|
|
|
// assert
|
|
Assert.IsNull(result);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldGetValueWithFallback()
|
|
{
|
|
// arrange
|
|
_sessionKey = "test";
|
|
_sessionValue = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(_model));
|
|
var session = GetSession();
|
|
|
|
// act
|
|
var result = session.GetValue(_sessionKey, new TestModel());
|
|
|
|
// assert
|
|
Assert.IsNotNull(result);
|
|
Assert.AreEqual(_model.ValueA, result.ValueA);
|
|
Assert.AreEqual(_model.ValueB, result.ValueB);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldGetFallback()
|
|
{
|
|
// arrange
|
|
_sessionKey = "foo";
|
|
_sessionValue = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(_model));
|
|
var session = GetSession();
|
|
|
|
// act
|
|
var result = session.GetValue("bar", new TestModel());
|
|
|
|
// assert
|
|
Assert.IsNotNull(result);
|
|
Assert.AreEqual(null, result.ValueA);
|
|
Assert.AreEqual(null, result.ValueB);
|
|
}
|
|
|
|
[TestMethod]
|
|
public void ShouldSetValue()
|
|
{
|
|
// arrange
|
|
string key = "foobar";
|
|
var session = GetSession();
|
|
|
|
// act
|
|
session.SetValue(key, _model);
|
|
|
|
// arrange
|
|
Assert.AreEqual(key, _sessionKey);
|
|
Assert.AreEqual(JsonConvert.SerializeObject(_model), Encoding.UTF8.GetString(_sessionValue));
|
|
}
|
|
|
|
private ISession GetSession()
|
|
{
|
|
string[] keys = [_sessionKey];
|
|
|
|
_sessionMock = new Mock<ISession>();
|
|
_sessionMock
|
|
.Setup(s => s.TryGetValue(It.IsAny<string>(), out _sessionValue))
|
|
.Returns<string, byte[]>((key, value) => _sessionKey == key);
|
|
_sessionMock
|
|
.Setup(s => s.Set(It.IsAny<string>(), It.IsAny<byte[]>()))
|
|
.Callback<string, byte[]>((key, value) =>
|
|
{
|
|
_sessionKey = key;
|
|
_sessionValue = value;
|
|
});
|
|
_sessionMock
|
|
.Setup(s => s.Keys)
|
|
.Returns(keys);
|
|
|
|
return _sessionMock.Object;
|
|
}
|
|
}
|
|
}
|