0

I'm trying to test my class (se below) in xunit that is supposed to connect to an API and get all customers , the response I paginated. I don't have access to the API how can I mock this in Xunit, I'm using moq and restsharp. What I'm having problems with is creating the mocked responses and setting up the mock. I just need to verify that I get an ok status and and id back

namespace test
{
    public partial class TopLevelCustomersClient : ITopLevelCustomersClient
    {
        private readonly ILogger _logger;
        private readonly IRestClientFactory _restClientFactory;
        private readonly string _baseUrl;

        public TopLevelCustomersClient(string baseUrl, ILogger logger, IRestClientFactory restClientFactory)
        {
            _baseUrl = baseUrl;
            _logger = logger;
            _restClientFactory = restClientFactory;
        }

        public async Task<List<string>> GetAllCustomers()
        {
            string url = _baseUrl + "customers";
            List<string> allCustomerIds = new List<string>();

            try
            {
                _logger.Information("Starting at URL: {Url}", url);

                while (!string.IsNullOrEmpty(url))
                {
                    var client = _restClientFactory.CreateClient(url);
                    var request = new RestRequest();

                    var response = await client.GetAsync(request);

                    if (!response.IsSuccessful)
                    {
                        throw new Exception($"Error getting customers: {response.StatusDescription}");
                    }

                    _logger.Information("Response status: {StatusDescription}", response.StatusDescription);

                    var content = response.Content;

                    _logger.Debug("Raw JSON response: {Content}", content);

                    var responseData = JsonConvert.DeserializeObject<CustomerResponse>(content);

                    _logger.Information("Deserialized response: {ResponseData}", responseData);

                    if (responseData?.TopLevelCustomerIds != null)
                    {
                        _logger.Information("Adding {Count} customer IDs:", responseData.TopLevelCustomerIds.Count);
                        allCustomerIds.AddRange(responseData.TopLevelCustomerIds);
                    }
                    else
                    {
                        _logger.Warning("Missing 'topLevelCustomerIds' property in response");
                    }

                    url = responseData?.Next;
                }

                return allCustomerIds;

        }
    }
}
1

1 Answer 1

0

Try WireMock

var server = WireMockServer.Start();

server
  .Given(
    Request.Create().WithPath("/some/thing").UsingGet()
  )
  .RespondWith(
    Response.Create()
      .WithStatusCode(200)
      .WithHeader("Content-Type", "text/plain")
      .WithBody("Hello world!")
  );
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.