public async Task CreateLastFmSession_HandlesKnownErrorsCorrectly()
        {
            // Arrange
            var deserializerMock = MakeFakeErrorLastFmDeserializer();
            var handlerMock      = MakeFakeForbiddenHttpMessageHandler();
            var factoryMock      = MakeFakeHttpClientFactory(handlerMock.Object);

            var service = new HttpLastFmService(
                factoryMock.Object,
                deserializerMock.Object,
                new HttpLastFmService.Settings("key", "secret")
                );

            // Act
            var result = await service.CreateLastFmSession("token");

            // Assert
            result.IsFailed.Should().BeTrue();
            result.Errors.Should().ContainEquivalentOf(
                new LastFmResultError(
                    (int)HttpStatusCode.Forbidden,
                    new LastFmError()
            {
                ErrorCode = 1, Message = "Message"
            }
                    )
                );
        }
        private (HttpLastFmService, Mock <HttpMessageHandler>) MakeOkService()
        {
            var deserializerMock = new Mock <ILastFmDeserializer>();
            var handlerMock      = MakeFakeOkHttpMessageHandler();
            var factoryMock      = MakeFakeHttpClientFactory(handlerMock.Object);

            var service = new HttpLastFmService(
                factoryMock.Object,
                deserializerMock.Object,
                new HttpLastFmService.Settings("key", "secret")
                );

            return(service, handlerMock);
        }
        public async Task CreateLastFmSession_HandlesUnknownErrorsCorrectly()
        {
            // Arrange
            var exception        = new JsonException();
            var deserializerMock = MakeFakeExceptionLastFmDeserializer(exception);
            var handlerMock      = MakeFakeForbiddenHttpMessageHandler();
            var factoryMock      = MakeFakeHttpClientFactory(handlerMock.Object);

            var service = new HttpLastFmService(
                factoryMock.Object,
                deserializerMock.Object,
                new HttpLastFmService.Settings("key", "secret")
                );

            // Act
            var result = await service.CreateLastFmSession("token");

            // Assert
            result.IsFailed.Should().BeTrue();
            result.Errors.Should().ContainEquivalentOf(
                new LastFmResultError((int)HttpStatusCode.ServiceUnavailable, null)
                .CausedBy(exception)
                );
        }