Example #1
0
        /// <summary>
        /// Create a new instance of IProvider and check that it has the proper default state, then execute the provided action.
        /// </summary>
        private async void PrepareProvider(Action test)
        {
            await App.DispatcherQueue.EnqueueAsync(async() =>
            {
                var provider = new WindowsProvider(new string[] { "User.Read", "Files.ReadWrite" }, autoSignIn: false);

                ProviderManager.Instance.ProviderStateChanged += (s, e) =>
                {
                    var providerManager = s as ProviderManager;
                    if (providerManager.GlobalProvider.State == ProviderState.SignedIn)
                    {
                        test.Invoke();
                    }
                };

                ProviderManager.Instance.GlobalProvider = provider;

                await provider.SignInAsync();
            });
        }
        public async Task Test_WindowsProvider_SignInAsync()
        {
            await App.DispatcherQueue.EnqueueAsync(async() =>
            {
                // Create the new provider.
                WindowsProvider provider = new WindowsProvider();

                // Run logout to ensure that no cached users affect the test.
                await provider.SignOutAsync();

                // The newly created provider should be in a logged out state.
                Assert.AreEqual(ProviderState.SignedOut, provider.State);

                // Listen for changes in the provider state and count them.
                int eventCount         = 0;
                provider.StateChanged += (s, e) =>
                {
                    eventCount += 1;

                    // Ensure that the states are properly reported through the StateChanged event.
                    switch (e.OldState)
                    {
                    case ProviderState.SignedOut:
                        // Login has been initiated, the provider should now be loading.
                        Assert.AreEqual(ProviderState.Loading, e.NewState);

                        // Loading should be the first event fired.
                        Assert.AreEqual(eventCount, 1);
                        break;

                    case ProviderState.Loading:
                        // The provider has completed login, the provider should now be signed in.
                        Assert.AreEqual(ProviderState.SignedIn, e.NewState);

                        // SignedIn should be the second event fired.
                        Assert.AreEqual(eventCount, 2);
                        break;

                    case ProviderState.SignedIn:
                        // The provider has completed login, the provider should now be signed in.
                        Assert.AreEqual(ProviderState.SignedOut, e.NewState);

                        // SignedIn should be the second event fired.
                        Assert.AreEqual(eventCount, 3);
                        break;

                    default:
                        // This is unexpected, something went wrong during the test.
                        Assert.Fail("The provider has transitioned from an unexpected state: " + Enum.GetName(typeof(ProviderState), e.OldState));
                        break;
                    }
                };

                // Initiate logout.
                await provider.SignInAsync();

                // Logout has completed, the provider should be signed out.
                Assert.AreEqual(ProviderState.SignedIn, provider.State);

                // Initiate logout, which should skip loading, and go straight to signed out.
                await provider.SignOutAsync();

                // Ensure the proper number of events were fired.
                Assert.AreEqual(eventCount, 3);
            });
        }