1
0

Solution restructured to use multiple test projects

This commit is contained in:
2024-07-04 18:22:26 +02:00
parent 508379d704
commit df6763b99b
144 changed files with 387 additions and 1693 deletions

View File

@@ -0,0 +1,157 @@
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;
}
}
}