using System.Collections.Generic;
public static void Main()
new UnitTests().PerformUnitTest();
public void PerformUnitTest()
var moqHttpClient = new Mock<HttpClient>();
var moqCustomerRepo = new Mock<CustomerRepository>();
var moqHttpContext = new Mock<HttpContext>();
var zipCodes = new List<string>();
moqHttpContext.Setup(x => x.Profile.GetPropertyValue("CustomerId")).Returns(10);
moqHttpClient.Setup(x => x.Get<List<string>>("http://somezipcodeapi.com/GetAll")).Returns(zipCodes);
moqCustomerRepo.Setup(x => x.GetCustomer(10)).Returns(new Customer() {ID = 10, ZipCode = "22202"});
var sut = new CustomerValidator(moqHttpContext.Object, moqHttpClient.Object, moqCustomerRepo.Object);
var actual = sut.GetCustomerAndValidateZip();
var result = expected == actual ? "PASS" : "FAIL";
Console.WriteLine(result);
moqHttpContext.Setup(x => x.Profile.GetPropertyValue("CustomerId")).Returns(11);
moqCustomerRepo.Setup(x => x.GetCustomer(10)).Returns(new Customer() {ID = 10, ZipCode = "2220134"});
sut = new CustomerValidator(moqHttpContext.Object, moqHttpClient.Object, moqCustomerRepo.Object);
actual = sut.GetCustomerAndValidateZip();
result = expected == actual ? "PASS" : "FAIL";
Console.WriteLine(result);
public class CustomerValidator
private HttpContext _httpContext;
private HttpClient _httpClient;
private CustomerRepository _repository;
public CustomerValidator(HttpContext httpContext, HttpClient httpClient, CustomerRepository repository)
_httpContext = httpContext;
_httpClient = httpClient;
_repository = repository;
public bool GetCustomerAndValidateZip()
int customerId = (int)_httpContext.Profile.GetPropertyValue("CustomerId");
var customer = _repository.GetCustomer(customerId);
var allZipCodes = GetAllValidZipCodes();
return allZipCodes.Contains(customer.ZipCode);
private List<string> GetAllValidZipCodes()
return _httpClient.Get<List<string>>("http://somezipcodeapi.com/GetAll");
public int ID { get; set; }
public string ZipCode { get; set; }
interface ICustomerRepository
Customer GetCustomer(int customerId);
public class CustomerRepository: ICustomerRepository
public Customer GetCustomer(int customerId)
var db = new DbContext();
return db.Customers.SingleOrDefault(i => i.ID == customerId);
public List<Customer> Customers { get; set; }
public T Get<T>(string url)