示例#1
0
        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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        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);
        }
示例#4
0
        // 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);
        }
示例#6
0
        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()));
        }
示例#7
0
        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();
        }
示例#8
0
        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);
        }
示例#9
0
        // 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);
        }