Skip to content
This repository has been archived by the owner on Jun 30, 2023. It is now read-only.

Commit

Permalink
Switching ui tests to use appids supplied by the lab. (#1385)
Browse files Browse the repository at this point in the history
* Switching ui tests to use appids supplied by the lab.

Adding dismiss keyboard to enterText method in test controller.

Changing determineUser to detrmineFieldIds for extra clarity.

* Refactoring flow of tests to check for user availability first.
removing appId from lab user class

* Resolving errors

* Remove some test interfaces and simplify model (#1390)

* Remove some test interfaces and simplify model

* Use the urn:obo redirect uri in the automation app

* Refactoring to further simplify automation framework.
addressing PR comments

* Removing extra spaces
  • Loading branch information
trwalke authored Nov 8, 2018
1 parent ff820ed commit e47ba87
Show file tree
Hide file tree
Showing 19 changed files with 148 additions and 253 deletions.
36 changes: 15 additions & 21 deletions adal/tests/Test.ADAL.NET.UIAutomation/ADALMobileTestHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,85 +47,79 @@ public class ADALMobileTestHelper
/// Runs through the standard acquire token interactive flow
/// </summary>
/// <param name="controller">The test framework that will execute the test interaction</param>
public void AcquireTokenInteractiveTestHelper(ITestController controller, UserQueryParameters userParams)
public void AcquireTokenInteractiveTestHelper(ITestController controller, LabResponse labResponse)
{
AcquireTokenInteractiveHelper(controller, userParams);
AcquireTokenInteractiveHelper(controller, labResponse);
CoreMobileTestHelper.VerifyResult(controller);
}

/// <summary>
/// Runs through the standard acquire token silent flow
/// </summary>
/// <param name="controller">The test framework that will execute the test interaction</param>
public void AcquireTokenSilentTestHelper(ITestController controller, UserQueryParameters userParams)
public void AcquireTokenSilentTestHelper(ITestController controller, LabResponse labResponse)
{
AcquireTokenInteractiveHelper(controller, userParams);
AcquireTokenInteractiveHelper(controller, labResponse);
CoreMobileTestHelper.VerifyResult(controller);

//Enter 2nd Resource
controller.EnterText(CoreUiTestConstants.ResourceEntryID, CoreUiTestConstants.Exchange, false);
controller.DismissKeyboard();

//Acquire token silently
controller.Tap(CoreUiTestConstants.AcquireTokenSilentID);

CoreMobileTestHelper.VerifyResult(controller);
}

public void AcquireTokenInteractiveHelper(ITestController controller, UserQueryParameters userParams)
public void AcquireTokenInteractiveHelper(ITestController controller, LabResponse labResponse)
{
var user = PrepareForAuthentication(controller, userParams);
SetInputData(controller, CoreUiTestConstants.MSIDLAB4ClientId, CoreUiTestConstants.MSGraph);
PrepareForAuthentication(controller);
var user = labResponse.User;
SetInputData(controller, labResponse.AppId, CoreUiTestConstants.MSGraph);
CoreMobileTestHelper.PerformSignInFlow(controller, user);
}

public void AcquireTokenWithPromptBehaviorAlwaysHelper(ITestController controller, UserQueryParameters userParams)
public void AcquireTokenWithPromptBehaviorAlwaysHelper(ITestController controller, LabResponse labResponse)
{
var user = PrepareForAuthentication(controller, userParams);
SetInputData(controller, CoreUiTestConstants.MSIDLAB4ClientId, CoreUiTestConstants.MSGraph);
PrepareForAuthentication(controller);
SetInputData(controller, labResponse.AppId, CoreUiTestConstants.MSGraph);

// AcquireToken promptBehavior.Auto to get a token in the cache
SetPromptBehavior(controller, CoreUiTestConstants.PromptBehaviorAuto);
CoreMobileTestHelper.PerformSignInFlow(controller, user);
CoreMobileTestHelper.PerformSignInFlow(controller, labResponse.User);

// AcquireToken promptBehavior.Always. Even with a token, the UI should be shown
SetPromptBehavior(controller, CoreUiTestConstants.PromptBehaviorAlways);
CoreMobileTestHelper.PerformSignInFlow(controller, user);
CoreMobileTestHelper.PerformSignInFlow(controller, labResponse.User);

// AcquireToken promptBehavior.Auto. No UI should be shown.
SetPromptBehavior(controller, CoreUiTestConstants.PromptBehaviorAuto);
CoreMobileTestHelper.PerformSignInFlowWithoutUI(controller);
CoreMobileTestHelper.VerifyResult(controller);
}

private IUser PrepareForAuthentication(ITestController controller, UserQueryParameters userParams)
private void PrepareForAuthentication(ITestController controller)
{
//Navigate to second page
controller.Tap(CoreUiTestConstants.SecondPageID);

//Clear Cache
controller.Tap(CoreUiTestConstants.ClearCacheID);

//Get User from Lab
return controller.GetUser(userParams);
}

private void SetInputData(ITestController controller, string clientID, string resource)
{
//Enter ClientID
controller.EnterText(CoreUiTestConstants.ClientIdEntryID, clientID, false);
controller.DismissKeyboard();

//Enter Resource
controller.EnterText(CoreUiTestConstants.ResourceEntryID, resource, false);
controller.DismissKeyboard();
}

private void SetPromptBehavior(ITestController controller, string promptBehavior)
{
//Select PromptBehavior
//Select PromptBehavior
controller.EnterText(CoreUiTestConstants.PromptBehaviorEntryID, promptBehavior, false);
controller.DismissKeyboard();
}
}
}
32 changes: 8 additions & 24 deletions adal/tests/Test.ADAL.NET.UIAutomation/XamarinDroidADALTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public void InitializeTest()
[Test]
public void AcquireTokenInteractiveTest()
{
_adalMobileTestHelper.AcquireTokenInteractiveTestHelper(xamarinController, LabUserHelper.DefaultUserQuery);
_adalMobileTestHelper.AcquireTokenInteractiveTestHelper(xamarinController, LabUserHelper.GetLabResponseWithDefaultUser());
}

/// <summary>
Expand All @@ -79,7 +79,7 @@ public void AcquireTokenInteractiveTest()
[Test]
public void AcquireTokenSilentTest()
{
_adalMobileTestHelper.AcquireTokenSilentTestHelper(xamarinController, LabUserHelper.DefaultUserQuery);
_adalMobileTestHelper.AcquireTokenSilentTestHelper(xamarinController, LabUserHelper.GetLabResponseWithDefaultUser());
}

/// <summary>
Expand All @@ -90,7 +90,7 @@ public void AcquireTokenSilentTest()
[Test]
public void AcquireTokenInteractiveWithPromptAlwaysTest()
{
_adalMobileTestHelper.AcquireTokenWithPromptBehaviorAlwaysHelper(xamarinController, LabUserHelper.DefaultUserQuery);
_adalMobileTestHelper.AcquireTokenWithPromptBehaviorAlwaysHelper(xamarinController, LabUserHelper.GetLabResponseWithDefaultUser());
}

/// <summary>
Expand All @@ -99,24 +99,16 @@ public void AcquireTokenInteractiveWithPromptAlwaysTest()
[Test]
public void AcquireTokenADFSv4FederatedInteractiveTest()
{
var user = LabUserHelper.DefaultUserQuery;
user.FederationProvider = FederationProvider.AdfsV4;
user.IsFederatedUser = true;

_adalMobileTestHelper.AcquireTokenInteractiveTestHelper(xamarinController, user);
_adalMobileTestHelper.AcquireTokenInteractiveTestHelper(xamarinController, LabUserHelper.GetLabResponseWithADFSUser(FederationProvider.AdfsV4));
}

/// <summary>
/// Runs through the standard acquire token flow
/// Runs through the standard acquire token flow with a non federated ADFS V4 account
/// </summary>
[Test]
public void AcquireTokenInteractiveADFSv4NonFederatedTest()
{
var user = LabUserHelper.DefaultUserQuery;
user.FederationProvider = FederationProvider.AdfsV4;
user.IsFederatedUser = false;

_adalMobileTestHelper.AcquireTokenInteractiveTestHelper(xamarinController, user);
_adalMobileTestHelper.AcquireTokenInteractiveTestHelper(xamarinController, LabUserHelper.GetLabResponseWithADFSUser(FederationProvider.AdfsV4, false));
}

/// <summary>
Expand All @@ -125,11 +117,7 @@ public void AcquireTokenInteractiveADFSv4NonFederatedTest()
[Test]
public void AcquireTokenADFSv3FederatedInteractiveTest()
{
var user = LabUserHelper.DefaultUserQuery;
user.FederationProvider = FederationProvider.AdfsV3;
user.IsFederatedUser = true;

_adalMobileTestHelper.AcquireTokenInteractiveTestHelper(xamarinController, user);
_adalMobileTestHelper.AcquireTokenInteractiveTestHelper(xamarinController, LabUserHelper.GetLabResponseWithADFSUser(FederationProvider.AdfsV3));
}

/// <summary>
Expand All @@ -138,11 +126,7 @@ public void AcquireTokenADFSv3FederatedInteractiveTest()
[Test]
public void AcquireTokenInteractiveADFSv3NonFederatedTest()
{
var user = LabUserHelper.DefaultUserQuery;
user.FederationProvider = FederationProvider.AdfsV3;
user.IsFederatedUser = false;

_adalMobileTestHelper.AcquireTokenInteractiveTestHelper(xamarinController, user);
_adalMobileTestHelper.AcquireTokenInteractiveTestHelper(xamarinController, LabUserHelper.GetLabResponseWithADFSUser(FederationProvider.AdfsV3, false));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,19 @@ namespace Test.Microsoft.Identity.Core.UIAutomation
{
public class CoreMobileTestHelper
{
public void PerformSignInFlow(ITestController controller, IUser user)
public void PerformSignInFlow(ITestController controller, LabUser user)
{
UserInformationFieldIds userInformationFieldIds = new UserInformationFieldIds();
userInformationFieldIds.DetermineUser(user);
userInformationFieldIds.DetermineFieldIds(user);

//Acquire token flow
controller.Tap(CoreUiTestConstants.AcquireTokenID);
//i0116 = UPN text field on AAD sign in endpoint
controller.EnterText(CoreUiTestConstants.WebUPNInputID, 20, user.Upn, true);
controller.DismissKeyboard();
//idSIButton9 = Sign in button
controller.Tap(CoreUiTestConstants.WebSubmitID, true);
//i0118 = password text field
controller.EnterText(userInformationFieldIds.PasswordInputId, ((LabUser)user).GetPassword(), true);
controller.DismissKeyboard();
controller.EnterText(userInformationFieldIds.PasswordInputId, LabUserHelper.GetUserPassword(user), true);
controller.Tap(userInformationFieldIds.SignInButtonId, true);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,14 +91,6 @@ public interface ITestController
/// <returns>The text value of the element</returns>
string GetText(string elementID);

/// <summary>
/// Returns a test user account for use in testing.
/// An exception is thrown if no matching user is found.
/// </summary>
/// <param name="query">Any and all parameters that the returned user should satisfy.</param>
/// <returns>A single user that matches the given query parameters.</returns>
IUser GetUser(UserQueryParameters query);

IApp Application { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public class UserInformationFieldIds
public string PasswordInputId { get; set; }
public string SignInButtonId { get; set; }

public void DetermineUser(IUser user)
public void DetermineFieldIds(LabUser user)
{
if (user.IsFederated)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ public class XamarinUITestController : ITestController
const int defaultRetryFrequencySec = 1;
const int defaultPostTimeoutSec = 1;
const string CSSIDSelector = "[id|={0}]";
private ILabService _labService;

public IApp Application { get; set; }

Expand All @@ -52,8 +51,6 @@ public XamarinUITestController()
this.defaultSearchTimeout = new TimeSpan(0, 0, defaultSearchTimeoutSec);
this.defaultRetryFrequency = new TimeSpan(0, 0, defaultRetryFrequencySec);
this.defaultPostTimeout = new TimeSpan(0, 0, defaultPostTimeoutSec);
var keyVaultSecretsProvider = new KeyVaultSecretsProvider();
_labService = new LabServiceApi(keyVaultSecretsProvider);
}

public void Tap(string elementID)
Expand Down Expand Up @@ -121,6 +118,8 @@ private void EnterText(string elementID, string text, bool isWebElement, TimeSpa
Application.ClearText();
Application.EnterText(x => x.Marked(elementID), text);
}

DismissKeyboard();
}

public void DismissKeyboard()
Expand All @@ -133,12 +132,5 @@ public string GetText(string elementID)
Application.WaitForElement(elementID, "Could not find element", defaultSearchTimeout, defaultRetryFrequency, defaultPostTimeout);
return Application.Query(x => x.Marked(elementID)).FirstOrDefault().Text;
}

public IUser GetUser(UserQueryParameters query)
{
var user = _labService.GetUser(query);
Assert.True(user != null, "Found no users for the given query.");
return user;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@ namespace Test.Microsoft.Identity.LabInfrastructure
{
public interface ILabService
{
IUser GetUser(UserQueryParameters query);
LabResponse GetLabResponse(UserQueryParameters query);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ public class KeyVaultSecretsProvider : IDisposable
public KeyVaultSecretsProvider()
{
_config = new KeyVaultConfiguration();
_config.AuthType = KeyVaultAuthenticationType.ClientCertificate;

//The data.txt is a place holder for the keyvault secret. It will only be written to during build time when testing appcenter.
//After the tests are finished in appcenter, the file will be deleted from the appcenter servers.
Expand All @@ -97,25 +98,16 @@ public KeyVaultSecretsProvider()
{
var data = File.ReadAllText(_dataFileName);

if (string.IsNullOrWhiteSpace(data))
{
_config.AuthType = KeyVaultAuthenticationType.ClientCertificate;
}
else
if (!string.IsNullOrWhiteSpace(data))
{
_config.AuthType = KeyVaultAuthenticationType.ClientSecret;
_config.KeyVaultSecret = data;
}
}
else
{
_config.AuthType = KeyVaultAuthenticationType.ClientCertificate;
}

_config.ClientId = _keyVaultClientID;
_config.CertThumbprint = _keyVaultThumbPrint;
_keyVaultClient = new KeyVaultClient(AuthenticationCallbackAsync);

_keyVaultClient = new KeyVaultClient(AuthenticationCallbackAsync);
}

~KeyVaultSecretsProvider()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//----------------------------------------------------------------------
//-----------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation.
// All rights reserved.
Expand All @@ -25,26 +25,19 @@
//
//------------------------------------------------------------------------------

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Text;

namespace Test.Microsoft.Identity.LabInfrastructure
{
public interface IUser
public class LabResponse
{
Guid ObjectId { get; }
UserType UserType { get; }
string Upn { get; }
string CredentialUrl { get; }
IUser HomeUser { get; }
bool IsExternal { get; }
bool IsMfa { get; }
bool IsMam { get; }
ISet<string> Licenses { get; }
bool IsFederated { get; }
FederationProvider FederationProvider { get; }
string CurrentTenantId { get; }
string HomeTenantId { get; }
KeyVaultSecretsProvider KeyVault { get; set; }
[JsonProperty("AppId")]
public string AppId { get; set; }

[JsonProperty("Users")]
public LabUser User { get; set; }
}
}
Loading

0 comments on commit e47ba87

Please sign in to comment.