public async Task <WebConnectionInfo> CreateWebConnectionInfoAsync(string token, string instanceId) { IServiceInstanceProvider serviceInstanceProvider = _serviceLocator.GetInstance <IServiceInstanceProvider>(); HealthServiceInstance serviceInstance = await serviceInstanceProvider.GetHealthServiceInstanceAsync(instanceId); IWebHealthVaultConnection connection = Ioc.Container.Locate <IWebHealthVaultConnection>( extraData: new { serviceLocator = _serviceLocator }); WebHealthVaultConnection webHealthVaultConnection = connection as WebHealthVaultConnection; webHealthVaultConnection.ServiceInstance = serviceInstance; webHealthVaultConnection.UserAuthToken = token; IPersonClient personClient = webHealthVaultConnection.CreatePersonClient(); var personInfo = await personClient.GetPersonInfoAsync(); WebConnectionInfo webConnectionInfo = new WebConnectionInfo { PersonInfo = personInfo, ServiceInstanceId = instanceId, SessionCredential = webHealthVaultConnection.SessionCredential, UserAuthToken = token }; return(webConnectionInfo); }
/// <summary> /// Creates an authenticated web connection when the reuest /// has been authenticated using [RequireSignIn] attribute. /// In case the request has not been authenticated, an anonymous /// connection is created. /// </summary> /// <returns>IWebHealthVaultConnection</returns> /// <exception cref="NotSupportedException"> /// WebConnectionInfo is expected for authenticated connections /// </exception> public static async Task <IWebHealthVaultConnection> CreateWebConnectionAsync() { WebHealthVaultFactory factory = new WebHealthVaultFactory(); IWebHealthVaultConnection webHealthVaultConnection = await factory.CreateWebConnectionInternalAsync(); return(webHealthVaultConnection); }
public async Task WhenUserIdentityHasWebConnectionInfo() { // Arrange var webConnectionInfo = new WebConnectionInfo { ServiceInstanceId = "1", PersonInfo = new PersonInfo(), SessionCredential = new SessionCredential(), UserAuthToken = "some" }; // Mock HealthVaultIdentityProvider IHealthVaultIdentityProvider healthVaultIdentityProvider = Substitute.For <IHealthVaultIdentityProvider>(); healthVaultIdentityProvider.TryGetIdentity().Returns(new HealthVaultIdentity { WebConnectionInfo = webConnectionInfo }); Ioc.Container.Configure(c => c.ExportInstance(healthVaultIdentityProvider).As <IHealthVaultIdentityProvider>()); // Mock HealthVaultConnection WebHealthVaultConfiguration webHealthVaultConfiguration = new WebHealthVaultConfiguration(); webHealthVaultConfiguration.DefaultHealthVaultUrl = new Uri("http://www.bing.com"); webHealthVaultConfiguration.DefaultHealthVaultShellUrl = new Uri("http://www.bing.com"); IServiceLocator serviceLocator = Substitute.For <IServiceLocator>(); serviceLocator.GetInstance <WebHealthVaultConfiguration>().Returns(webHealthVaultConfiguration); serviceLocator.GetInstance <IHealthWebRequestClient>().Returns(Substitute.For <IHealthWebRequestClient>()); serviceLocator .GetInstance <IHealthServiceResponseParser>() .Returns(Substitute.For <IHealthServiceResponseParser>()); WebHealthVaultConnection webHealthVaultConnection = Substitute.For <WebHealthVaultConnection>(serviceLocator); Ioc.Container.Configure(c => c.ExportInstance(webHealthVaultConnection).As <IWebHealthVaultConnection>()); // Mock ServiceInstanceProvider IServiceInstanceProvider serviceInstanceProvider = Substitute.For <IServiceInstanceProvider>(); serviceInstanceProvider .GetHealthServiceInstanceAsync(Arg.Any <string>()) .Returns(Task.FromResult(new HealthServiceInstance())); Ioc.Container.Configure(c => c.ExportInstance(serviceInstanceProvider).As <IServiceInstanceProvider>()); WebHealthVaultFactory factory = new WebHealthVaultFactory(); // Act IWebHealthVaultConnection resultWebHealthVaultConnection = await factory.CreateWebConnectionInternalAsync(); // Assert Assert.AreEqual(webConnectionInfo.UserAuthToken, resultWebHealthVaultConnection.UserAuthToken); }
// GET: HealthVault public async Task <ActionResult> Index() { IWebHealthVaultConnection webHealthVaultConnection = await WebHealthVaultFactory.CreateWebConnectionAsync(); PersonInfo personInfo = await webHealthVaultConnection.GetPersonInfoAsync(); IThingClient thingClient = webHealthVaultConnection.CreateThingClient(); IReadOnlyCollection <Weight> weights = await thingClient.GetThingsAsync <Weight>(personInfo.GetSelfRecord().Id); return(View(weights)); }
private async Task <ServiceInfo> GetFromServiceAsync() { IWebHealthVaultConnection webHealthVaultConnection = Ioc.Container.Locate <IWebHealthVaultConnection>( extraData: new { serviceLocator = _serviceLocator }); IPlatformClient platformClient = webHealthVaultConnection.CreatePlatformClient(); ServiceInfo serviceInfo = await platformClient.GetServiceDefinitionAsync(ServiceInfoSections.Topology).ConfigureAwait(false); return(serviceInfo); }
public async Task <ActionResult> CreateWeight() { IWebHealthVaultConnection webHealthVaultConnection = await WebHealthVaultFactory.CreateWebConnectionAsync(); PersonInfo personInfo = await webHealthVaultConnection.GetPersonInfoAsync(); IThingClient thingClient = webHealthVaultConnection.CreateThingClient(); LocalDateTime nowLocal = SystemClock.Instance.GetCurrentInstant().InZone(DateTimeZoneProviders.Tzdb.GetSystemDefault()).LocalDateTime; await thingClient.CreateNewThingsAsync(personInfo.GetSelfRecord().Id, new List <Weight> { new Weight(new HealthServiceDateTime(nowLocal), new WeightValue(10)) }); return(RedirectToAction("Index", new RouteValueDictionary())); }
public async Task WhenUserIdentityHasNoWebConnectionInfo_ThenExceptionRaised() { // Arrange IHealthVaultIdentityProvider healthVaultIdentityProvider = Substitute.For <IHealthVaultIdentityProvider>(); healthVaultIdentityProvider.TryGetIdentity().Returns(new HealthVaultIdentity()); Ioc.Container.Configure(c => c.ExportInstance(healthVaultIdentityProvider).As <IHealthVaultIdentityProvider>()); IWebHealthVaultConnection webHealthVaultConnection = Substitute.For <IWebHealthVaultConnection>(); Ioc.Container.Configure(c => c.ExportInstance(webHealthVaultConnection).As <IWebHealthVaultConnection>()); WebHealthVaultFactory factory = new WebHealthVaultFactory(); // Act await factory.CreateWebConnectionInternalAsync(); }
public async Task WhenUserPrincipalDoesntExist_ThenAnonymousConnectionCreated() { // Arrange // Mocked identity provider would return a null value for "TryGetIdentity", in which case // an anonymous web connection is created IHealthVaultIdentityProvider healthVaultIdentityProvider = Substitute.For <IHealthVaultIdentityProvider>(); Ioc.Container.Configure(c => c.ExportInstance(healthVaultIdentityProvider).As <IHealthVaultIdentityProvider>()); IWebHealthVaultConnection webHealthVaultConnection = Substitute.For <IWebHealthVaultConnection>(); Ioc.Container.Configure(c => c.ExportInstance(webHealthVaultConnection).As <IWebHealthVaultConnection>()); WebHealthVaultFactory factory = new WebHealthVaultFactory(); // Act IWebHealthVaultConnection resultWebHealthVaultConnection = await factory.CreateWebConnectionInternalAsync(); // Assert Assert.IsNotNull(resultWebHealthVaultConnection); }
// Enables unit test internal async Task <IWebHealthVaultConnection> CreateWebConnectionInternalAsync() { IHealthVaultIdentityProvider healthVaultIdentityProvider = Ioc.Container.Locate <IHealthVaultIdentityProvider>(); HealthVaultIdentity identity = healthVaultIdentityProvider.TryGetIdentity(); IServiceLocator serviceLocator = new ServiceLocator(); if (identity == null) { IWebHealthVaultConnection anonymousWebConnection = serviceLocator.GetInstance <IWebHealthVaultConnection>(); return(anonymousWebConnection); } var webConnectionInfo = identity.WebConnectionInfo; if (webConnectionInfo == null) { throw new NotSupportedException("WebConnectionInfo is expected for authenticated connections"); } // Get ServiceInstance IServiceInstanceProvider serviceInstanceProvider = Ioc.Container.Locate <IServiceInstanceProvider>(); HealthServiceInstance serviceInstance = await serviceInstanceProvider.GetHealthServiceInstanceAsync(webConnectionInfo.ServiceInstanceId); // Get AuthInformation SessionCredential sessionCredentialToken = webConnectionInfo.SessionCredential; string token = webConnectionInfo.UserAuthToken; IWebHealthVaultConnection webConnection = Ioc.Container.Locate <IWebHealthVaultConnection>(extraData: new { serviceLocator = serviceLocator }); WebHealthVaultConnection connection = webConnection as WebHealthVaultConnection; connection.UserAuthToken = token; connection.ServiceInstance = serviceInstance; connection.SessionCredential = sessionCredentialToken; return(webConnection); }
/// <summary> /// We will mock webhealthvaultconnection and substitute CreatePlatformClient call /// on the mock to return a mock platform client. Platform client will substitute /// call to platform "getservicedefintion" by returning a dummy serviceinstance with /// id set to "US instance". /// </summary> private async Task <HealthServiceInstance> GetHealthServiceInstanceAsync() { _webHealthVaultConnection = Substitute.For <IWebHealthVaultConnection>(); Ioc.Container.Configure(c => { c.ExportInstance(_webHealthVaultConnection).As <IWebHealthVaultConnection>(); }); IPlatformClient platformClient = Substitute.For <IPlatformClient>(); _webHealthVaultConnection.CreatePlatformClient().Returns(platformClient); ServiceInfo serviceInfo = Substitute.For <ServiceInfo>(); serviceInfo.ServiceInstances.Add(UsInstanceId, new HealthServiceInstance { Id = UsInstanceId }); platformClient .GetServiceDefinitionAsync(ServiceInfoSections.Topology) .Returns(serviceInfo); HealthServiceInstance serviceInstance = await _serviceInstanceProvider.GetHealthServiceInstanceAsync("1"); return(serviceInstance); }