Here is my controller test class method which will initialize fake class
public void InitializeFake()
{
fakeHttpSession = A.Fake<HttpSessionStateBase>();
fakeHttpContext = A.Fake<HttpContextBase>();
nmsFake = A.Fake<INMSPlatformClient>();
isFakeInitialized = true;
fakeHttpSession.Contents["NMCSession"] = new NMCSession()
{
DefaultOrganizationUID = 1,
FirstName = "system",
Login = "sys.admin",
LastName = "Admin",
IsMultiAccountViewable = true,
OrganizationUID = 1,
OrganizationName = "NMC",
};
var fake = (NMCSession)fakeHttpSession.Contents["NMCSession"];
A.CallTo(() => fakeHttpContext.Session).Returns(fakeHttpSession);
A.CallTo(() => fakeHttpSession["NMCSession"]).Returns(fake);
A.CallTo(() => fakeHttpContext.Session).Returns(fakeHttpSession);
ControllerContext = new ControllerContext(fakeHttpContext, new RouteData(), A.Fake<ControllerBase>());
myController = new PlatformOrganizationController(nmsFake);
myController.ControllerContext = ControllerContext;
}
here is my NMCSession class
public class NMCSession
{
private List<Product> m_products=null;
public string Login { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int OrganizationUID { get; set; }
public string OrganizationName { get; set; }
public string InstitutionCode { get; set; }
public int DefaultOrganizationUID { get; set; }
public string SessionToken { get; set; }
public int UserUID { get; set; }
public int NMCInactivityTimeOut { get; set; }
public bool IsMultiAccountViewable { get; set; }
public List<Product> GetProducts()
{
if(m_products!=null)
return m_products;
else
{
string NMSPlatformSvcUrl = System.Configuration.ConfigurationManager.AppSettings["NMSServerProtocol"] + "://" +
System.Configuration.ConfigurationManager.AppSettings["NMSServerName"] + ":" +
System.Configuration.ConfigurationManager.AppSettings["NMSServerPortNumber"];
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(NMSPlatformSvcUrl);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = httpClient.GetAsync("/NMS/Platform/ConfigurationSvc/v1/Status").Result;
if (response.IsSuccessStatusCode)
{
PlatformStatus status = response.Content.ReadAsAsync<PlatformStatus>().Result;
m_products=status.Products;
}
else
{
throw new Exception(response.StatusCode.ToString());
}
rn m_products;
}
}
public bool IsDevelopmentPartner { get; set; }
}
Now the issue is at controller the user is to trying use the NMCSession.GetProducts()
which is giving me exception.
Now how can I fake the above GetProducts()
method call in NMCSession
?