/// <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); }); }