public void Test_That_WasUnsuccessful_Returns_False()
        {
            // Arrange
            var response = ServiceResponseFactory.SuccessfulResponse();

            // Act
            var successful = response.WasUnsuccessful;

            // Assert
            Assert.AreEqual(false, successful);
        }
        public void Test_That_WasUnsuccessful_Returns_True()
        {
            // Arrange
            var response = ServiceResponseFactory.FailedResponse();

            // Act
            var successful = response.WasUnsuccessful;

            // Assert
            Assert.AreEqual(true, successful);
        }
        public void Test_That_Failed_Returns_Response()
        {
            // Arrange

            // Act
            var response = ServiceResponseFactory.FailedResponse();

            // Assert
            Assert.IsTrue(response.Result == ServiceResponseResult.Failed);
            Assert.IsTrue(response.ErrorCode == ServiceResponseErrorCode.SystemError);
            Assert.IsEmpty(response.Errors);
        }
        public void Test_That_Successful_Returns_Response()
        {
            // Arrange

            // Act
            var response = ServiceResponseFactory.SuccessfulResponse();

            // Assert
            Assert.IsTrue(response.Result == ServiceResponseResult.Successful);
            Assert.IsTrue(response.ErrorCode == ServiceResponseErrorCode.NoError);
            Assert.IsEmpty(response.Errors);
        }
        public void Test_That_WasSuccessful_Sets_Out_Param()
        {
            // Arrange
            var testResponseValue = "congrats";
            var response          = ServiceResponseFactory.SuccessfulResponse(testResponseValue);

            // Act
            response.WasSuccessful(out var responseOutValue);

            // Assert
            Assert.AreEqual(testResponseValue, responseOutValue);
        }
        public void Test_That_FailedAuthentication_Returns_Response()
        {
            // Arrange

            // Act
            var response = ServiceResponseFactory.FailedAuthenticationResponse <string>();

            // Assert
            Assert.IsTrue(response.Result == ServiceResponseResult.Failed);
            Assert.IsTrue(response.ErrorCode == ServiceResponseErrorCode.AuthenticationError);
            Assert.IsEmpty(response.Errors);
            Assert.IsNull(response.Content);
        }
        public void Test_That_Successful_Returns_Response()
        {
            // Arrange
            string testResponseText = "success test response";

            // Act
            var response = ServiceResponseFactory.SuccessfulResponse(testResponseText);

            // Assert
            Assert.IsTrue(response.Result == ServiceResponseResult.Successful);
            Assert.IsTrue(response.ErrorCode == ServiceResponseErrorCode.NoError);
            Assert.IsEmpty(response.Errors);
            Assert.AreEqual(testResponseText, response.Content);
        }
        public void Test_That_FailedValidation_Single_Returns_Response()
        {
            // Arrange
            var errorField = "username";
            var errorCode  = "Mandatory";

            // Act
            var response = ServiceResponseFactory.FailedValidationResponse(errorField, errorCode);

            // Assert
            Assert.IsTrue(response.Result == ServiceResponseResult.Failed);
            Assert.IsTrue(response.ErrorCode == ServiceResponseErrorCode.ValidationError);
            Assert.AreEqual(response.Errors.Count, 1);

            Assert.AreEqual(response.Errors.First().FieldName, errorField);
            Assert.AreEqual(response.Errors.First().ErrorCode, errorCode);
        }
        public void Test_That_FailedValidation_Returns_Response()
        {
            // Arrange
            var errorField = "username";
            var errorCode  = "Mandatory";

            var validationErrors = new List <ServiceResponseError> {
                new ServiceResponseError(errorField, errorCode)
            };

            // Act
            var response = ServiceResponseFactory.FailedValidationResponse <string>(validationErrors);

            // Assert
            Assert.IsTrue(response.Result == ServiceResponseResult.Failed);
            Assert.IsTrue(response.ErrorCode == ServiceResponseErrorCode.ValidationError);
            Assert.IsNull(response.Content);

            Assert.AreEqual(response.Errors.Count, 1);
            Assert.AreEqual(response.Errors.First().FieldName, errorField);
            Assert.AreEqual(response.Errors.First().ErrorCode, errorCode);
        }
        private async Task <ServiceResponse <T> > GetResponseAsync <T>(Uri requestUri, HttpClient httpClient)
        {
            HttpResponseMessage response = null;

            try
            {
                response = await httpClient.GetAsync(requestUri).ConfigureAwait(false);

                if (response.IsSuccessStatusCode)
                {
                    string content = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                    var hotContent = JsonSerializer.Deserialize <T>(content);
                    return(ServiceResponseFactory.Success(hotContent));
                }
                string errorMessage;
                if (response.StatusCode == HttpStatusCode.BadGateway)
                {
                    errorMessage = response.ReasonPhrase;
                }
                else if (response.StatusCode == HttpStatusCode.NotFound)
                {
                    errorMessage = response.ReasonPhrase;
                }
                else
                {
                    errorMessage = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
                }
                return(ServiceResponseFactory.Error <T>(errorMessage));
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"Response data: {JsonSerializer.Serialize(response)}");
                return(ServiceResponseFactory.Error <T>(SportsRuApiResources.Error_Unknown));
            }
        }