public async Task GetCustomer_ShouldReturnCustomer_GivenCustomer(
                [Frozen] Mock <IMediator> mockMediator,
                Core.Handlers.GetCustomer.StoreCustomerDto customer,
                [Greedy] CustomerController sut,
                GetCustomerQuery query
                )
            {
                //Arrange
                mockMediator.Setup(x => x.Send(
                                       It.IsAny <GetCustomerQuery>(),
                                       It.IsAny <CancellationToken>()
                                       ))
                .ReturnsAsync(customer);

                //Act
                var actionResult = await sut.GetCustomer(query);

                //Assert
                var okObjectResult = actionResult as OkObjectResult;

                okObjectResult.Should().NotBeNull();

                var result = okObjectResult.Value as Core.Models.GetCustomer.Customer;

                result.Should().NotBeNull();
            }
            public void Serialize_WithGetCustomersStore_ReturnsStoreCustomer(
                Core.Handlers.GetCustomer.StoreCustomerDto storeCustomer
                )
            {
                //Arrange
                var serializeOptions = new JsonSerializerOptions
                {
                    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
                    WriteIndented = true,
                    Converters =
                    {
                        new JsonStringEnumConverter(),
                        new CustomerConverter<
                            Core.Models.GetCustomers.Customer,
                            Core.Models.GetCustomers.StoreCustomer,
                            Core.Models.GetCustomers.IndividualCustomer>()
                    }
                };

                //Act
                var jsonString = JsonSerializer.Serialize(storeCustomer, serializeOptions);
                var jsonDocument = JsonDocument.Parse(jsonString);
                var root = jsonDocument.RootElement;
                var contacts = root.GetProperty("contacts").EnumerateArray().ToList();
                var addresses = root.GetProperty("addresses").EnumerateArray().ToList();

                //Assert
                root.GetProperty("customerType").GetString().Should().Be(storeCustomer.CustomerType.ToString());
                root.GetProperty("name").GetString().Should().Be(storeCustomer.Name);
                root.GetProperty("salesPerson").GetString().Should().Be(storeCustomer.SalesPerson);
                root.GetProperty("accountNumber").GetString().Should().Be(storeCustomer.AccountNumber);
                root.GetProperty("territory").GetString().Should().Be(storeCustomer.Territory);

                for (int i = 0; i < contacts.Count; i++)
                {
                    var contact = contacts[i];
                    var contactPerson = contacts[i].GetProperty("contactPerson");
                    contact.GetProperty("contactType").GetString().Should().Be(
                        storeCustomer.Contacts[i].ContactType);
                    contactPerson.GetProperty("title").GetString().Should().Be(
                        storeCustomer.Contacts[i].ContactPerson.Title);
                    contactPerson.GetProperty("name").GetProperty("firstName").GetString().Should().Be(
                        storeCustomer.Contacts[i].ContactPerson.Name.FirstName);
                    contactPerson.GetProperty("name").GetProperty("middleName").GetString().Should().Be(
                        storeCustomer.Contacts[i].ContactPerson.Name.MiddleName);
                    contactPerson.GetProperty("name").GetProperty("lastName").GetString().Should().Be(
                        storeCustomer.Contacts[i].ContactPerson.Name.LastName);
                    contactPerson.GetProperty("suffix").GetString().Should().Be(
                        storeCustomer.Contacts[i].ContactPerson.Suffix);

                    var emailAddresses = contactPerson.GetProperty("emailAddresses").EnumerateArray().ToList();

                    for (int j = 0; j < emailAddresses.Count; j++)
                    {
                        var emailAddress = emailAddresses[j];
                        emailAddress.GetProperty("emailAddress").GetString().Should().Be(
                            storeCustomer.Contacts[i].ContactPerson.EmailAddresses[j].EmailAddress);
                    }

                    var phoneNumbers = contactPerson.GetProperty("phoneNumbers").EnumerateArray().ToList();

                    for (int j = 0; j < phoneNumbers.Count; j++)
                    {
                        var phoneNumber = phoneNumbers[j];
                        phoneNumber.GetProperty("phoneNumberType").GetString().Should().Be(
                            storeCustomer.Contacts[i].ContactPerson.PhoneNumbers[j].PhoneNumberType);
                        phoneNumber.GetProperty("phoneNumber").GetString().Should().Be(
                            storeCustomer.Contacts[i].ContactPerson.PhoneNumbers[j].PhoneNumber);
                    }
                }

                for (int i = 0; i < addresses.Count; i++)
                {
                    var addressItem = addresses[i];
                    var address = addressItem.GetProperty("address");
                    addressItem.GetProperty("addressType").GetString().Should().Be(
                        storeCustomer.Addresses[i].AddressType);
                    address.GetProperty("addressLine1").GetString().Should().Be(
                        storeCustomer.Addresses[i].Address.AddressLine1);
                    address.GetProperty("addressLine2").GetString().Should().Be(
                        storeCustomer.Addresses[i].Address.AddressLine2);
                    address.GetProperty("postalCode").GetString().Should().Be(
                        storeCustomer.Addresses[i].Address.PostalCode);
                    address.GetProperty("city").GetString().Should().Be(
                        storeCustomer.Addresses[i].Address.City);
                    address.GetProperty("stateProvinceCode").GetString().Should().Be(
                        storeCustomer.Addresses[i].Address.StateProvinceCode);
                    address.GetProperty("countryRegionCode").GetString().Should().Be(
                        storeCustomer.Addresses[i].Address.CountryRegionCode);
                }
            }