Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,14 @@ namespace System.Web.SessionState;
[Diagnostics.CodeAnalysis.SuppressMessage("Naming", "CA1710:Identifiers should have correct suffix", Justification = Constants.ApiFromAspNet)]
public class HttpSessionState : ICollection
{
private readonly Func<ISessionState> _state;
private readonly ISessionStateFeature _feature;

internal HttpSessionState(ISessionStateFeature feature)
{
_state = () => feature.State ?? throw new InvalidOperationException("Session state is no longer available");
_feature = feature;
}

public HttpSessionState(ISessionState container)
{
_state = () => container;
}

internal ISessionState State => _state();
internal ISessionState State => _feature.State ?? throw new InvalidOperationException("Session state is no longer available");

public string SessionID => State.SessionID;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,6 @@ public void NonClaimsPrincipalIsCopied()
public void GetServiceReturnsExpected()
{
var coreContext = new DefaultHttpContext();
coreContext.Features.Set(new HttpSessionState(new Mock<ISessionState>().Object));

var context = new HttpContext(coreContext);
var provider = (IServiceProvider)context;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Linq;
using System.Web.SessionState;
using AutoFixture;
using Microsoft.AspNetCore.SystemWebAdapters.Features;
using Moq;
using Xunit;

Expand All @@ -27,7 +28,7 @@ public void SessionId()
var session = new Mock<ISessionState>();
session.Setup(s => s.SessionID).Returns(id);

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
var result = state.SessionID;
Expand All @@ -42,7 +43,7 @@ public void Mode()
// Arrange
var session = new Mock<ISessionState>();

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
var result = state.Mode;
Expand All @@ -60,7 +61,7 @@ public void Count()
var session = new Mock<ISessionState>();
session.Setup(s => s.Count).Returns(count);

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
var result = state.Count;
Expand All @@ -78,7 +79,7 @@ public void IsReadOnly(bool isReadOnly)
var session = new Mock<ISessionState>();
session.Setup(s => s.IsReadOnly).Returns(isReadOnly);

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
var result = state.IsReadOnly;
Expand All @@ -96,7 +97,7 @@ public void IsNewSession(bool isNewSession)
var session = new Mock<ISessionState>();
session.Setup(s => s.IsNewSession).Returns(isNewSession);

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
var result = state.IsNewSession;
Expand All @@ -116,7 +117,7 @@ public void TimeOut()
session.SetupProperty(s => s.Timeout);
session.Object.Timeout = timeout1;

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
var result = state.Timeout;
Expand All @@ -136,7 +137,7 @@ public void IsSynchronized(bool isSynchronized)
var session = new Mock<ISessionState>();
session.Setup(s => s.IsSynchronized).Returns(isSynchronized);

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
var result = state.IsSynchronized;
Expand All @@ -153,7 +154,7 @@ public void SyncRoot()
var session = new Mock<ISessionState>();
session.Setup(s => s.SyncRoot).Returns(sync);

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
var result = state.SyncRoot;
Expand All @@ -169,7 +170,7 @@ public void Abandon()
var session = new Mock<ISessionState>();
session.SetupProperty(s => s.IsAbandoned);

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
state.Abandon();
Expand All @@ -188,7 +189,7 @@ public void Get()
var session = new Mock<ISessionState>();
session.Setup(s => s[key]).Returns(value);

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
var result = state[key];
Expand All @@ -206,7 +207,7 @@ public void Set()

var session = new Mock<ISessionState>();

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
state[key] = value;
Expand All @@ -223,7 +224,7 @@ public void Add()
var value = new object();

var session = new Mock<ISessionState>();
var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
state.Add(key, value);
Expand All @@ -239,7 +240,7 @@ public void Remove()
var key = _fixture.Create<string>();

var session = new Mock<ISessionState>();
var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
state.Remove(key);
Expand All @@ -255,7 +256,7 @@ public void RemoveAll()
var key = _fixture.Create<string>();

var session = new Mock<ISessionState>();
var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
state.RemoveAll();
Expand All @@ -271,7 +272,7 @@ public void Clear()
var key = _fixture.Create<string>();

var session = new Mock<ISessionState>();
var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
state.Clear();
Expand All @@ -289,7 +290,7 @@ public void GetEnumerator()
var session = new Mock<ISessionState>();
session.Setup(s => s.Keys).Returns(keys);

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);

// Act
var result = state.GetEnumerator();
Expand Down Expand Up @@ -320,7 +321,7 @@ public void CopyTo()
session.Setup(s => s[key1]).Returns(item1);
session.Setup(s => s[key2]).Returns(item2);

var state = new HttpSessionState(session.Object);
var state = CreateSession(session.Object);
var array = new object[3];

// Act
Expand All @@ -332,4 +333,12 @@ public void CopyTo()
item => Assert.Equal(item1, item),
item => Assert.Equal(item2, item)); ;
}

private static HttpSessionState CreateSession(ISessionState session)
{
var feature = new Mock<ISessionStateFeature>();
feature.Setup(f => f.State).Returns(session);

return new(feature.Object);
}
}