Anapher/Strive

View on GitHub
src/Services/ConferenceManagement/Strive.Infrastructure.Tests/Auth/TokenFactoryTests.cs

Summary

Maintainability
A
0 mins
Test Coverage
using System.Collections.Concurrent;
using System.Linq;
using System.Threading.Tasks;
using Strive.Infrastructure.Auth;
using Xunit;

namespace Strive.Infrastructure.Tests.Auth
{
    public class TokenFactoryTests
    {
        private readonly TokenFactory _factory = new();

        [Fact]
        public void GenerateToken_DefaultSize_ReturnTokenWithCorrectSize()
        {
            // act
            var token = _factory.GenerateToken(20);

            // assert
            Assert.NotNull(token);
            Assert.Equal(20, token.Length);
        }

        [Fact]
        public async Task GenerateToken_ThreadSafe()
        {
            // arrange
            var existingTokens = new ConcurrentDictionary<string, bool>();

            void GenerateTokens()
            {
                for (var i = 0; i < 100000; i++)
                {
                    var token = _factory.GenerateToken();
                    var result = existingTokens.TryAdd(token, true);
                    Assert.True(result);
                }
            }

            // act
            var tasks = Enumerable.Range(0, 3).Select(_ => Task.Run(GenerateTokens)).ToList();
            await Task.WhenAll(tasks);
        }
    }
}