| File: AsyncContextHttpContextOfTTests.cs | Web Access |
| Project: src\test\Libraries\Microsoft.AspNetCore.AsyncState.Tests\Microsoft.AspNetCore.AsyncState.Tests.csproj (Microsoft.AspNetCore.AsyncState.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.AsyncState; using Microsoft.Extensions.DependencyInjection; using Xunit; namespace Microsoft.AspNetCore.AsyncState.Test; public class AsyncContextHttpContextOfTTests { private readonly IHttpContextAccessor _accessorMock; private readonly IAsyncState _asyncState; private readonly IAsyncContext<Thing> _context; public AsyncContextHttpContextOfTTests() { var serviceCollection = new ServiceCollection() .AddHttpContextAccessor() .AddAsyncStateHttpContext(); var serviceProvider = serviceCollection.BuildServiceProvider(); _accessorMock = serviceProvider.GetRequiredService<IHttpContextAccessor>(); _accessorMock.HttpContext = new DefaultHttpContext(); _context = serviceProvider.GetRequiredService<IAsyncContext<Thing>>(); _asyncState = serviceProvider.GetRequiredService<IAsyncState>(); _asyncState.Reset(); } [Fact] public void TryGetReturnsTrueWhenHttpContextPresent() { var value = new Thing(); _context.Set(value); Assert.True(_context.TryGet(out Thing? stored)); Assert.Same(value, stored); } [Fact] public void TryGetReturnsTrueWhenHttpContextPresentAndValueNotSet() { Assert.True(_context.TryGet(out Thing? stored)); Assert.Null(stored); } [Fact] public void GetReturnsNullWhenHttpContextPresentAndValueNotSet() { Assert.Null(_context.Get()); } [Fact] public void TryGetReturnsFalseWhenHttpContextNotPresent() { _accessorMock.HttpContext = null; Assert.False(_context.TryGet(out Thing? stored)); Assert.Null(stored); } [Fact] public void SetThrowsWhenHttpContextNotPresent() { _accessorMock.HttpContext = null; var value = new Thing(); Assert.Throws<InvalidOperationException>(() => _context.Set(value)); } [Fact] public void GetThrowsWhenHttpContextNotPresent() { _accessorMock.HttpContext = null; Assert.Throws<InvalidOperationException>(() => _context.Get()); } [Fact] public void TryGet_WhenAsyncStateIsUsed_ReturnsTrue() { _accessorMock.HttpContext = null; _asyncState.Initialize(); var value = new Thing(); _context.Set(value); Assert.True(_context.TryGet(out Thing? stored)); Assert.Same(value, stored); } [Fact] public void TryGet_WhenAsyncStateIsUsedAndValueNotSet_ReturnsNull() { _accessorMock.HttpContext = null; _asyncState.Initialize(); Assert.Null(_context.Get()); } }