Example #1
0
 /// <summary>
 /// Initializes <see cref="GraphSession"/>. with Output via Cmdlet methods
 /// </summary>
 /// <param name="outputWriter"></param>
 internal static void InitializeOutput(IPSGraphOutputWriter outputWriter)
 {
     GraphSession.Modify(session =>
     {
         session.OutputWriter = outputWriter;
     });
 }
        public void objects_with_inheritance_chain_are_proxied_correctly()
        {
            var metadataFactory      = new AttributeMetadataFactory(new NullLogger());
            var proxyFactory         = new DynamicProxyFactory(metadataFactory, new NullLogger());
            var queryExecutorFactory = new Mock <IQueryExecutorFactory>();
            var repositoryFactory    = new RepositoryFactory(proxyFactory);
            var parentMapper         = new Mock <IMapper <Parent> >();

            repositoryFactory.Register <Parent>(x => parentMapper.Object);
            var childMapper = new Mock <IMapper <Child> >();

            repositoryFactory.Register <Child>(x => childMapper.Object);

            var stateTracker = new EntityStateCache();

            using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory, stateTracker, proxyFactory))
            {
                var entity = new ParentWithInheritedChild
                {
                    Id   = "1",
                    Type = new SuperTypeA {
                        Id = "1"
                    }
                };
                var proxy = proxyFactory.Create(entity, session);
                Assert.True(proxy.Type is SuperTypeA);
            }
        }
        public void all_objects_in_the_object_graph_are_proxied()
        {
            var metadataFactory      = new AttributeMetadataFactory(new NullLogger());
            var queryExecutorFactory = new Mock <IQueryExecutorFactory>();
            var repositoryFactory    = new Mock <IRepositoryFactory>();
            var stateTracker         = new EntityStateCache();
            var proxyFactory         = new DynamicProxyFactory(metadataFactory, new NullLogger());

            using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory))
            {
                var factory = new DynamicProxyFactory(metadataFactory, new NullLogger());
                var item    = new Person
                {
                    Id       = "1",
                    Contacts = new List <Contact>
                    {
                        new Contact {
                            Id = "1"
                        }
                    }
                };
                var proxy = factory.Create(item, session);
                Assert.True(ProxyUtils.IsProxy(proxy));
                Assert.True(proxy.Contacts is ITrackableCollection <Contact>);
                Assert.True(ProxyUtils.IsProxy(proxy.Contacts[0]));
            }
        }
        public async Task ShouldUseGermanyCloudWhenEnvironmentIsSetToGermany()
        {
            GraphSession.Initialize(() => new GraphSession());

            // Arrange
            GraphEnvironment germanyEnvironment = GraphEnvironment.BuiltInEnvironments[GraphEnvironmentConstants.EnvironmentName.Germany];

            GraphSession.Instance.Environment = germanyEnvironment;
            Uri requestUrl         = new Uri($"https://graph.microsoft.com/beta/users?{topParam}&{selectParam}");
            var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, requestUrl);

            // Act
            var response = await this._invoker.SendAsync(httpRequestMessage, new CancellationToken());

            var sentRequestQuery = response.RequestMessage.RequestUri.Query;

            // Assert
            Assert.Equal(requestUrl.Scheme, response.RequestMessage.RequestUri.Scheme);
            Assert.Equal("graph.microsoft.de", response.RequestMessage.RequestUri.Host);
            Assert.Contains(topParam, sentRequestQuery);
            Assert.Contains(selectParam, sentRequestQuery);
            Assert.Equal(2, sentRequestQuery.Split('&').Length);

            GraphSession.Reset();
        }
        public async Task ShouldUseUserDefinedCloudWhenEnvironmentIsSetToAUserDefinedCloud()
        {
            GraphSession.Initialize(() => new GraphSession());

            // Arrange
            GraphEnvironment userDefinedEnvironment = new GraphEnvironment
            {
                Name            = "Canary",
                AzureADEndpoint = "https://login.microsoftonline.com",
                GraphEndpoint   = "https://canary.graph.microsoft.com"
            };

            GraphSession.Instance.Environment = userDefinedEnvironment;
            Uri requestUrl         = new Uri($"https://graph.microsoft.com/v1.0/users?{topParam}&{selectParam}");
            var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, requestUrl);

            // Act
            var response = await this._invoker.SendAsync(httpRequestMessage, new CancellationToken());

            var sentRequestQuery = response.RequestMessage.RequestUri.Query;

            // Assert
            Assert.Equal(requestUrl.Scheme, response.RequestMessage.RequestUri.Scheme);
            Assert.Equal("canary.graph.microsoft.com", response.RequestMessage.RequestUri.Host);
            Assert.Contains(topParam, sentRequestQuery);
            Assert.Contains($"${selectParam}", sentRequestQuery);
            Assert.Equal(2, sentRequestQuery.Split('&').Length);

            GraphSession.Reset();
        }
        public void properties_which_are_marked_as_ignored_are_not_proxied()
        {
            var metadataFactory      = new AttributeMetadataFactory(new NullLogger());
            var queryExecutorFactory = new Mock <IQueryExecutorFactory>();
            var repositoryFactory    = new Mock <IRepositoryFactory>();
            var stateTracker         = new EntityStateCache();
            var proxyFactory         = new DynamicProxyFactory(metadataFactory, new NullLogger());

            using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory))
            {
                var factory = new DynamicProxyFactory(metadataFactory, new NullLogger());
                var item    = new EntityWithIgnoredProperty
                {
                    Id      = "1",
                    Ignored = new AnotherEntity {
                        Id = "2"
                    },
                    Proxied = new AnotherEntity {
                        Id = "3"
                    }
                };
                var proxy = factory.Create(item, session);
                Assert.True(ProxyUtils.IsProxy(proxy));
                Assert.True(ProxyUtils.IsProxy(proxy.Proxied));
                Assert.False(ProxyUtils.IsProxy(proxy.Ignored));
            }
        }
Example #7
0
        public void factory_creates_meta_data_correctly_from_a_proxy_object()
        {
            var metadataFactory      = new AttributeMetadataFactory(new NullLogger());
            var queryExecutorFactory = new Mock <IQueryExecutorFactory>();
            var repositoryFactory    = new Mock <IRepositoryFactory>();
            var stateTracker         = new EntityStateCache();
            var proxyFactory         = new DynamicProxyFactory(metadataFactory, new NullLogger());

            using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory))
            {
                var factory = new DynamicProxyFactory(metadataFactory, new NullLogger());
                var item    = new Parent
                {
                    Id    = "1",
                    Child = new Child {
                        Id = "2"
                    },
                    Children = new List <Child> {
                        new Child {
                            Id = "3"
                        }
                    }
                };
                var proxy          = factory.Create(item, session);
                var parentMetadata = metadataFactory.Create(proxy);
                Assert.Equal("Parent", parentMetadata.Name);

                var childMetadta = metadataFactory.Create(proxy.Child);
                Assert.Equal("Child", childMetadta.Name);
            }
        }
        public void nullable_types_are_ignored()
        {
            var metadataFactory      = new AttributeMetadataFactory(new NullLogger());
            var proxyFactory         = new DynamicProxyFactory(metadataFactory, new NullLogger());
            var queryExecutorFactory = new Mock <IQueryExecutorFactory>();
            var repositoryFactory    = new RepositoryFactory(proxyFactory);
            var parentMapper         = new Mock <IMapper <Parent> >();

            repositoryFactory.Register <Parent>(x => parentMapper.Object);
            var childMapper = new Mock <IMapper <Child> >();

            repositoryFactory.Register <Child>(x => childMapper.Object);

            var stateTracker = new EntityStateCache();

            using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory, stateTracker, proxyFactory))
            {
                var entity = new EntityWithNullableType
                {
                    Id   = "1",
                    Date = DateTime.Now
                };
                var proxy = proxyFactory.Create(entity, session);
                Assert.NotNull(proxy.Date);
            }
        }
        public void circular_dependencies_are_proxied_correctly()
        {
            var metadataFactory      = new AttributeMetadataFactory(new NullLogger());
            var proxyFactory         = new DynamicProxyFactory(metadataFactory, new NullLogger());
            var queryExecutorFactory = new Mock <IQueryExecutorFactory>();
            var repositoryFactory    = new RepositoryFactory(proxyFactory);
            var parentMapper         = new Mock <IMapper <Parent> >();

            repositoryFactory.Register <Parent>(x => parentMapper.Object);
            var childMapper = new Mock <IMapper <Child> >();

            repositoryFactory.Register <Child>(x => childMapper.Object);

            var stateTracker = new EntityStateCache();

            using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory, stateTracker, proxyFactory))
            {
                var a = new EntityA
                {
                    Id = "a"
                };
                var b = new EntityB
                {
                    Id = "b"
                };
                a.EntityB = b;
                b.EntityA = a;
                var proxy = proxyFactory.Create(a, session);
                Assert.NotNull(proxy);
                Assert.NotNull(proxy.EntityB);
                Assert.NotNull(proxy.EntityB.EntityA);
                Assert.Same(proxy, proxy.EntityB.EntityA);
            }
        }
        public void ShouldSerializeAndDeserializeSettings()
        {
            GraphSession.Initialize(() => new GraphSession());

            // Arrange
            GraphSession.Instance.DataStore = new MockDataStore();
            GraphSettings settings = new GraphSettings(ProtectedFileProvider.CreateFileProvider(Constants.SettingFilePath, FileProtection.SharedRead));

            GraphEnvironment userDefinedEnv = new GraphEnvironment
            {
                Name            = "TestCloud",
                Type            = GraphEnvironmentConstants.EnvironmentType.UserDefined,
                AzureADEndpoint = "https://tester.com",
                GraphEndpoint   = "https://tester.com"
            };

            settings.EnvironmentTable[userDefinedEnv.Name] = userDefinedEnv;

            // Act
            string serializedSettings = settings.ToString();

            settings.TryDeserializeObject(serializedSettings, out GraphSettings deserializedSettings, new GraphSettingsConverter());
            deserializedSettings.TryGetEnvironment(userDefinedEnv.Name, out IGraphEnvironment deserializedEnv);

            // Assert
            Assert.NotNull(deserializedSettings);
            Assert.NotNull(deserializedEnv);
            Assert.Equal(serializedSettings, deserializedSettings.ToString());
            Assert.Equal(userDefinedEnv.GraphEndpoint, deserializedEnv.GraphEndpoint);

            GraphSession.Reset();
        }
        public void ShouldUseCertThumbPrintInsteadOfPassedInCertificateWhenBothAreSpecified()
        {
            // Arrange
            var         dummyCertName          = "CN=dummycert";
            var         inMemoryCertName       = "CN=inmemorycert";
            var         storedDummyCertificate = CreateAndStoreSelfSignedCert(dummyCertName);
            var         inMemoryCertificate    = CreateSelfSignedCert(inMemoryCertName);
            AuthContext appOnlyAuthContext     = new AuthContext
            {
                AuthType = AuthenticationType.AppOnly,
                ClientId = Guid.NewGuid().ToString(),
                CertificateThumbprint = storedDummyCertificate.Thumbprint,
                Certificate           = inMemoryCertificate,
                ContextScope          = ContextScope.Process
            };
            // Act
            IAuthenticationProvider authProvider = AuthenticationHelpers.GetAuthProvider(appOnlyAuthContext);

            // Assert
            Assert.IsType <ClientCredentialProvider>(authProvider);
            var clientCredentialProvider = (ClientCredentialProvider)authProvider;

            // Assert: That the certificate used is dummycert (Thumbprint), that is in the store
            Assert.NotEqual(inMemoryCertName, clientCredentialProvider.ClientApplication.AppConfig.ClientCredentialCertificate.SubjectName.Name);
            Assert.Equal(appOnlyAuthContext.CertificateThumbprint, clientCredentialProvider.ClientApplication.AppConfig.ClientCredentialCertificate.Thumbprint);

            //CleanUp
            DeleteSelfSignedCertByThumbprint(appOnlyAuthContext.CertificateThumbprint);
            GraphSession.Reset();
        }
        public async Task ShouldUseDelegateAuthProviderWhenUserAccessTokenIsProvidedAsync()
        {
            // Arrange
            string accessToken = "ACCESS_TOKEN_VIA_DELEGATE_PROVIDER";

            GraphSession.Instance.UserProvidedToken = new NetworkCredential(string.Empty, accessToken).SecurePassword;
            AuthContext userProvidedAuthContext = new AuthContext
            {
                AuthType     = AuthenticationType.UserProvidedAccessToken,
                ContextScope = ContextScope.Process
            };

            IAuthenticationProvider authProvider   = AuthenticationHelpers.GetAuthProvider(userProvidedAuthContext);
            HttpRequestMessage      requestMessage = new HttpRequestMessage();

            // Act
            await authProvider.AuthenticateRequestAsync(requestMessage);

            // Assert
            Assert.IsType <DelegateAuthenticationProvider>(authProvider);
            Assert.Equal("Bearer", requestMessage.Headers.Authorization.Scheme);
            Assert.Equal(accessToken, requestMessage.Headers.Authorization.Parameter);

            // reset static instance.
            GraphSession.Reset();
        }
        public void change_tracking_is_applied_when_entity_set_in_constructor()
        {
            var metadataFactory      = new AttributeMetadataFactory(new NullLogger());
            var queryExecutorFactory = new Mock <IQueryExecutorFactory>();

            var mapper            = new Mock <IMapper <Parent> >();
            var repositoryFactory = new Mock <IRepositoryFactory>();

            repositoryFactory.Setup(x => x.Create(It.IsAny <IGraphSession>(), It.IsAny <Type>())).Returns <IGraphSession, Type>((s, t) => new GenericAbstractRepository <Parent>(mapper.Object, s, new DynamicProxyFactory(metadataFactory, new NullLogger())));
            var stateTracker = new EntityStateCache();
            var proxyFactory = new DynamicProxyFactory(metadataFactory, new NullLogger());

            using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory))
            {
                var proxy = session.Create(new Parent
                {
                    Id    = "1",
                    Child = new Child {
                        Id = "2"
                    }
                });
                var state = stateTracker.Get(proxy.Child);
                Assert.Equal(EntityStatus.New, state.Status);
            }
        }
        public void depdendencies_are_incremented_when_property_set()
        {
            var metadataFactory      = new AttributeMetadataFactory(new NullLogger());
            var queryExecutorFactory = new Mock <IQueryExecutorFactory>();
            var repositoryFactory    = new Mock <IRepositoryFactory>();
            var stateTracker         = new EntityStateCache();
            var proxyFactory         = new DynamicProxyFactory(metadataFactory, new NullLogger());

            using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory))
            {
                var factory = new DynamicProxyFactory(metadataFactory, new NullLogger());
                var parent  = factory.Create(new Parent {
                    Id = "parent"
                }, session);
                var child = factory.Create(new Child {
                    Id = "child"
                }, session);
                parent.Child = child;

                var parentState = stateTracker.Get(parent);
                Assert.Equal(2, parentState.Dependencies.Sequence);

                var childState = stateTracker.Get(child);
                Assert.Equal(1, childState.Dependencies.Sequence);
            }
        }
        public void ShouldThrowExceptionWhenSessionIsNotInitialized()
        {
            InvalidOperationException exception = Assert.Throws <InvalidOperationException>(() => GraphSession.Instance);

            Assert.Equal(ErrorConstants.Codes.SessionNotInitialized, exception.Message);

            // reset static instance.
            GraphSession.Reset();
        }
        public void GraphSessionShouldBeInitilizedAfterInitializerIsCalled()
        {
            GraphSession.Initialize(() => new GraphSession());

            Assert.NotNull(GraphSession.Instance);
            Assert.Null(GraphSession.Instance.AuthContext);

            // reset static instance.
            GraphSession.Reset();
        }
Example #17
0
        public void ShouldThrowExceptionWhenOutputIsNotInitialized()
        {
            GraphSession.Initialize(() => new GraphSession());
            InvalidOperationException exception = Assert.Throws <InvalidOperationException>(() => GraphSession.Instance.OutputWriter.WriteObject("Output"));

            Assert.NotNull(GraphSession.Instance);
            Assert.Null(GraphSession.Instance.AuthContext);

            // reset static instance.
            GraphSession.Reset();
        }
        public void ShouldNotOverwriteExistingGraphSession()
        {
            GraphSession.Initialize(() => new GraphSession());
            Guid originalSessionId = GraphSession.Instance._graphSessionId;

            GraphSession.Initialize(() => new GraphSession());

            Assert.NotNull(GraphSession.Instance);
            Assert.Equal(originalSessionId, GraphSession.Instance._graphSessionId);

            // reset static instance.
            GraphSession.Reset();
        }
Example #19
0
        public void ShouldNotOverwriteExistingGraphSession()
        {
            GraphSession.Initialize(() => new GraphSession());
            Guid originalSessionId = GraphSession.Instance._graphSessionId;

            InvalidOperationException exception = Assert.Throws <InvalidOperationException>(() => GraphSession.Initialize(() => new GraphSession()));

            Assert.Equal("An instance of GraphSession already exists. Call Initialize(Func<GraphSession>, bool) to overwrite it.", exception.Message);
            Assert.NotNull(GraphSession.Instance);
            Assert.Equal(originalSessionId, GraphSession.Instance._graphSessionId);

            // reset static instance.
            GraphSession.Reset();
        }
        public void interceptors_are_not_created_for_re_entrant_proxies()
        {
            var metadataFactory      = new AttributeMetadataFactory(new NullLogger());
            var proxyFactory         = new DynamicProxyFactory(metadataFactory, new NullLogger());
            var queryExecutorFactory = new Mock <IQueryExecutorFactory>();
            var repositoryFactory    = new RepositoryFactory(proxyFactory);
            var parentMapper         = new Mock <IMapper <Parent> >();

            repositoryFactory.Register <Parent>(x => parentMapper.Object);
            var childMapper = new Mock <IMapper <Child> >();

            repositoryFactory.Register <Child>(x => childMapper.Object);

            var stateTracker = new EntityStateCache();

            using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory, stateTracker, proxyFactory))
            {
                var proxy = session.Create(new Parent
                {
                    Id = "1"
                });
                proxy.Child = session.Create(new Child
                {
                    Id = "1"
                });

                var metadata = metadataFactory.Create(proxy);
                var deleted  = ProxyUtils.Flush(proxy, metadata["Child"].Relationship);

                Assert.Equal(0, deleted.SelectMany(x => x.Flush().Cast <object>()).Count());

                var reentrant = session.Create(proxy);
                Assert.Equal(proxy, reentrant);

                metadata = metadataFactory.Create(reentrant);
                deleted  = ProxyUtils.Flush(reentrant, metadata["Child"].Relationship);
                Assert.Equal(0, deleted.SelectMany(x => x.Flush().Cast <object>()).Count());

                proxy.Child = session.Create(new Child
                {
                    Id = "2"
                });
                metadata = metadataFactory.Create(reentrant);
                deleted  = ProxyUtils.Flush(reentrant, metadata["Child"].Relationship);
                Assert.Equal(1, deleted.SelectMany(x => x.Flush().Cast <object>()).Count());
            }
        }
Example #21
0
        public void GetGraphHttpClientWithDefaultParametersShouldReturnHttpClientWithDefaultTimeout()
        {
            GraphSession.Initialize(() => new GraphSession());
            GraphSession.Instance.AuthContext = new AuthContext
            {
                AuthType     = AuthenticationType.UserProvidedAccessToken,
                ContextScope = ContextScope.Process
            };

            HttpClient httpClient = HttpHelpers.GetGraphHttpClient();

            Assert.Equal(GraphSession.Instance.AuthContext.ClientTimeout, TimeSpan.FromSeconds(Constants.ClientTimeout));
            Assert.Equal(httpClient.Timeout, GraphSession.Instance.AuthContext.ClientTimeout);

            // reset static instance.
            GraphSession.Reset();
        }
        public void properties_set_during_construction_are_restored_after_proxy_created()
        {
            var metadataFactory      = new AttributeMetadataFactory(new NullLogger());
            var queryExecutorFactory = new Mock <IQueryExecutorFactory>();
            var repositoryFactory    = new Mock <IRepositoryFactory>();
            var stateTracker         = new EntityStateCache();
            var proxyFactory         = new DynamicProxyFactory(metadataFactory, new NullLogger());

            using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory))
            {
                var factory = new DynamicProxyFactory(metadataFactory, new NullLogger());
                var item    = new EntityWithPropertiesSetInConstructor("1", "Test");
                var proxy   = factory.Create(item, session);
                Assert.Equal("1", proxy.Id);
                Assert.Equal("Test", proxy.Name);
            }
        }
        public void an_exception_is_thrown_if_id_null()
        {
            var metadataFactory      = new AttributeMetadataFactory(new NullLogger());
            var queryExecutorFactory = new Mock <IQueryExecutorFactory>();
            var repositoryFactory    = new Mock <IRepositoryFactory>();
            var stateTracker         = new EntityStateCache();
            var proxyFactory         = new DynamicProxyFactory(metadataFactory, new NullLogger());

            using (var session = new GraphSession(new UnitOfWork(stateTracker), new List <IListener>(), queryExecutorFactory.Object, repositoryFactory.Object, stateTracker, proxyFactory))
            {
                Assert.Throws <PropertyNotSetException>(() =>
                {
                    var factory = new DynamicProxyFactory(metadataFactory, new NullLogger());
                    var notSet  = new AnotherEntity();
                    factory.Create(notSet, session);
                });
            }
        }
Example #24
0
        public void ShouldInitializeOutputWriter()
        {
            GraphSessionInitializer.InitializeSession();
            GraphSessionInitializer.InitializeOutput(new PsGraphOutputWriter
            {
                WriteError       = (exception1, s, arg3, arg4) => _helper.WriteLine(exception1.Message),
                WriteObject      = _helper.WriteLine,
                WriteDebug       = _helper.WriteLine,
                WriteInformation = (o, s) => _helper.WriteLine(s),
                WriteVerbose     = _helper.WriteLine
            });
            GraphSession.Instance.OutputWriter.WriteObject("Output");

            Assert.NotNull(GraphSession.Instance.OutputWriter);
            Assert.NotNull(GraphSession.Instance.OutputWriter.WriteObject);

            // reset static instance.
            GraphSession.Reset();
        }
Example #25
0
        public void GetGraphHttpClientWithClientTimeoutParameterShouldReturnHttpClientWithSpecifiedTimeout()
        {
            GraphSession.Initialize(() => new GraphSession());
            TimeSpan timeSpan    = TimeSpan.FromSeconds(10);
            var      authContext = new AuthContext
            {
                AuthType     = AuthenticationType.UserProvidedAccessToken,
                ContextScope = ContextScope.Process
            };
            IAuthenticationProvider authProvider = AuthenticationHelpers.GetAuthProvider(authContext);

            HttpClient httpClient = HttpHelpers.GetGraphHttpClient(authProvider, timeSpan);

            Assert.Equal(authContext.ClientTimeout, TimeSpan.FromSeconds(Constants.ClientTimeout));
            Assert.Equal(httpClient.Timeout, timeSpan);

            // reset static instance.
            GraphSession.Reset();
        }
        public void ShouldUseInteractiveProviderWhenDelegated()
        {
            // Arrange
            AuthContext delegatedAuthContext = new AuthContext
            {
                AuthType     = AuthenticationType.Delegated,
                Scopes       = new[] { "User.Read" },
                ContextScope = ContextScope.Process
            };

            // Act
            IAuthenticationProvider authProvider = AuthenticationHelpers.GetAuthProvider(delegatedAuthContext);

            // Assert
            Assert.IsType <InteractiveAuthenticationProvider>(authProvider);

            // reset static instance.
            GraphSession.Reset();
        }
        public void ShouldUseDeviceCodeWhenFallback()
        {
            // Arrange
            AuthContext delegatedAuthContext = new AuthContext
            {
                AuthType         = AuthenticationType.Delegated,
                Scopes           = new[] { "User.Read" },
                ContextScope     = ContextScope.Process,
                AuthProviderType = AuthProviderType.DeviceCodeProviderFallBack
            };

            // Act
            IAuthenticationProvider authProvider = AuthenticationHelpers.GetAuthProvider(delegatedAuthContext);

            // Assert
            Assert.IsType <DeviceCodeProvider>(authProvider);

            // reset static instance.
            GraphSession.Reset();
        }
Example #28
0
        public void GetGraphHttpClientShouldReturnHttpClientWithCustomerProvidedTimeout()
        {
            GraphSession.Initialize(() => new GraphSession());
            TimeSpan timeSpan = TimeSpan.FromSeconds(10);

            GraphSession.Instance.AuthContext = new AuthContext
            {
                AuthType      = AuthenticationType.UserProvidedAccessToken,
                ContextScope  = ContextScope.Process,
                ClientTimeout = timeSpan
            };

            HttpClient httpClient = HttpHelpers.GetGraphHttpClient();

            Assert.Equal(GraphSession.Instance.AuthContext.ClientTimeout, timeSpan);
            Assert.Equal(httpClient.Timeout, timeSpan);

            // reset static instance.
            GraphSession.Reset();
        }
        public void ShouldLoadSettingsFromConfiguredDataStore()
        {
            GraphSession.Initialize(() => new GraphSession());

            // Arrange
            GraphSession.Instance.DataStore = new MockDataStore();
            string settingsContent = @"{
  ""EnvironmentTable"": {
    ""MyNewCloud"": {
      ""Name"": ""MyNewCloud"",
      ""AzureADEndpoint"": ""https://login.MyNewCloud.com"",
      ""GraphEndpoint"": ""https://graph.MyNewCloud.com"",
      ""Type"": ""User-defined""
    },
    ""TrialCloud"": {
      ""Name"": ""MyNewCloud"",
      ""AzureADEndpoint"": ""https://login.TrialCloud.com"",
      ""GraphEndpoint"": ""https://graph.TrialCloud.com"",
      ""Type"": ""User-defined""
    }
  }
}";

            GraphSession.Instance.DataStore.WriteFile(Constants.SettingFilePath, settingsContent);

            // Act
            // Loads settings from disk store.
            GraphSettings settings = new GraphSettings(ProtectedFileProvider.CreateFileProvider(Constants.SettingFilePath, FileProtection.SharedRead));

            settings.TryGetEnvironment("MyNewCloud", out IGraphEnvironment loadedEnvironment);

            // Assert
            Assert.NotNull(loadedEnvironment);
            // 5 built-in + 2 user-defined
            Assert.Equal(7, settings.Environments.Count());
            Assert.Equal("https://login.MyNewCloud.com", loadedEnvironment.AzureADEndpoint);
            Assert.Equal("https://graph.MyNewCloud.com", loadedEnvironment.GraphEndpoint);
            Assert.Equal(GraphEnvironmentConstants.EnvironmentType.UserDefined, loadedEnvironment.Type);

            GraphSession.Reset();
        }
        public void ShouldUseInMemoryCertificateWhenProvided()
        {
            // Arrange
            var         certificate        = CreateSelfSignedCert("cn=inmemorycert");
            AuthContext appOnlyAuthContext = new AuthContext
            {
                AuthType     = AuthenticationType.AppOnly,
                ClientId     = Guid.NewGuid().ToString(),
                Certificate  = certificate,
                ContextScope = ContextScope.Process
            };
            // Act
            IAuthenticationProvider authProvider = AuthenticationHelpers.GetAuthProvider(appOnlyAuthContext);

            // Assert
            Assert.IsType <ClientCredentialProvider>(authProvider);
            var clientCredentialProvider = (ClientCredentialProvider)authProvider;

            // Assert: That the certificate created and set above is the same as used here.
            Assert.Equal(clientCredentialProvider.ClientApplication.AppConfig.ClientCredentialCertificate, certificate);
            GraphSession.Reset();
        }
        /// <summary>
        /// Creates a new <see cref="Employment"/> from the specified JSON object and <see cref="GraphSession"/>.
        /// </summary>
        /// <param name="token">The source JSON object.</param>
        /// <param name="session">The session that is creating the object.</param>
        public Employment(JToken token, GraphSession session)
            : base(token, session)
        {

        }
Example #32
0
 /// <summary>
 /// Creates a new <see cref="Video"/> from the specified JSON object and <see cref="GraphSession"/>.
 /// </summary>
 /// <param name="source">The source JSON object.</param>
 /// <param name="session">The session that is creating the object.</param>
 public Video(JToken source, GraphSession session)
     : base(source, session)
 {
     
 }
Example #33
0
 /// <summary>
 /// Creates a new <see cref="Note"/> from the specified JSON object and <see cref="GraphSession"/>.
 /// </summary>
 /// <param name="source">The source JSON object.</param>
 /// <param name="session">The session that is creating the object.</param>
 public Note(JToken source, GraphSession session)
     : base(source, session)
 {
     
 }
Example #34
0
 /// <summary>
 /// Creates a new <see cref="Link"/> from the specified JSON object and <see cref="GraphSession"/>.
 /// </summary>
 /// <param name="source">The source JSON object.</param>
 /// <param name="session">The session that is creating the object.</param>
 public Link(JToken source, GraphSession session)
     : base(source, session)
 {
     
 }
 /// <summary>
 /// Creates a new <see cref="GraphEvent"/> from the specified JSON object and <see cref="GraphSession"/>.
 /// </summary>
 /// <param name="source">The source JSON object.</param>
 /// <param name="session">The session that is creating the object.</param>
 public GraphEvent(JToken source, GraphSession session)
     : base(source, session)
 {
     
 }
Example #36
0
 /// <summary>
 /// Creates a new <see cref="User"/> from the specified JSON object and <see cref="GraphSession"/>.
 /// </summary>
 /// <param name="obj">The source JSON object.</param>
 /// <param name="session">The session that is creating the object.</param>
 public User(JToken obj, GraphSession session)
     : base(obj, session)
 {
     
 }
Example #37
0
 /// <summary>
 /// Creates a new <see cref="Message"/> from the specified JSON object and <see cref="GraphSession"/>.
 /// </summary>
 /// <param name="source">The source JSON object.</param>
 /// <param name="session">The session that is creating the object.</param>
 public Message(JToken source, GraphSession session)
     : base(source, session)
 {
     
 }