diff --git a/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Drivers/WebDriverDriver.cs b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Drivers/WebDriverDriver.cs
index 7b6adae4..69a2706b 100644
--- a/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Drivers/WebDriverDriver.cs
+++ b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Drivers/WebDriverDriver.cs
@@ -14,7 +14,7 @@ public class WebDriverDriver : IDisposable
private static IWebDriver SetupWebDriver()
{
var options = new ChromeOptions();
- options.AddArgument("--headless");
+ //options.AddArgument("--headless");
options.AddArgument("--start-maximized");
options.AddArgument("--disable-notifications");
options.AddArgument("--no-sandbox");
diff --git a/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/1.2-LoginWithIdentifierFirst.feature b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/1.2-LoginWithIdentifierFirst.feature
new file mode 100644
index 00000000..d0b42056
--- /dev/null
+++ b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/1.2-LoginWithIdentifierFirst.feature
@@ -0,0 +1,26 @@
+Feature: 1.2 Login With Identifier First
+
+This is basic login scenario that includes password optional
+
+Background:
+ Given a Global Session Policy defines the Primary factor as Password / IDP / any factor allowed by app sign on rules
+ And the Global Session Policy does NOT require a second factor
+ And a SPA, WEB APP or MOBILE with an Authentication Policy that is defined as Any 1 factor
+ And User Enumeration Prevention is set to ENABLED in Security > General
+ And the list of Authenticators contains Email and Password is optional
+ And a User named "Mary" exists, and this user has already setup email and password factors
+
+ Scenario: 1.2.1: Mary logs in with Email with an OTP
+ Given Mary navigates to the Basic Login View
+ When she fills in her correct username
+ And she clicks Login
+ Then she is presented with an option to select Email to verify
+ When She selects Email from the list
+ And She selects "Receive a Code"
+ Then the screen changes to receive an input for a code
+ When She inputs the correct code from the Email
+ And She selects "Verify"
+ Then she is redirected to the Root View
+ And she sees a table with her profile info
+ And the cell for the value of email is shown and contains her email
+ And the cell for the value of name is shown and contains her first name and last name
\ No newline at end of file
diff --git a/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/1.2-LoginWithIdentifierFirst.feature.cs b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/1.2-LoginWithIdentifierFirst.feature.cs
new file mode 100644
index 00000000..39a1b977
--- /dev/null
+++ b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/1.2-LoginWithIdentifierFirst.feature.cs
@@ -0,0 +1,193 @@
+// ------------------------------------------------------------------------------
+//
+// This code was generated by SpecFlow (https://www.specflow.org/).
+// SpecFlow Version:3.9.0.0
+// SpecFlow Generator Version:3.9.0.0
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+// ------------------------------------------------------------------------------
+#region Designer generated code
+#pragma warning disable
+namespace embedded_auth_with_sdk.E2ETests.Features
+{
+ using TechTalk.SpecFlow;
+ using System;
+ using System.Linq;
+
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "3.9.0.0")]
+ [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public partial class _1_2LoginWithIdentifierFirstFeature : object, Xunit.IClassFixture<_1_2LoginWithIdentifierFirstFeature.FixtureData>, System.IDisposable
+ {
+
+ private static TechTalk.SpecFlow.ITestRunner testRunner;
+
+ private static string[] featureTags = ((string[])(null));
+
+ private Xunit.Abstractions.ITestOutputHelper _testOutputHelper;
+
+#line 1 "1.2-LoginWithIdentifierFirst.feature"
+#line hidden
+
+ public _1_2LoginWithIdentifierFirstFeature(_1_2LoginWithIdentifierFirstFeature.FixtureData fixtureData, embedded_auth_with_sdk_E2ETests_XUnitAssemblyFixture assemblyFixture, Xunit.Abstractions.ITestOutputHelper testOutputHelper)
+ {
+ this._testOutputHelper = testOutputHelper;
+ this.TestInitialize();
+ }
+
+ public static void FeatureSetup()
+ {
+ testRunner = TechTalk.SpecFlow.TestRunnerManager.GetTestRunner();
+ TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "Features", "1.2 Login With Identifier First", "This is basic login scenario that includes password optional", ProgrammingLanguage.CSharp, featureTags);
+ testRunner.OnFeatureStart(featureInfo);
+ }
+
+ public static void FeatureTearDown()
+ {
+ testRunner.OnFeatureEnd();
+ testRunner = null;
+ }
+
+ public void TestInitialize()
+ {
+ }
+
+ public void TestTearDown()
+ {
+ testRunner.OnScenarioEnd();
+ }
+
+ public void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo)
+ {
+ testRunner.OnScenarioInitialize(scenarioInfo);
+ testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(_testOutputHelper);
+ }
+
+ public void ScenarioStart()
+ {
+ testRunner.OnScenarioStart();
+ }
+
+ public void ScenarioCleanup()
+ {
+ testRunner.CollectScenarioErrors();
+ }
+
+ public virtual void FeatureBackground()
+ {
+#line 5
+#line hidden
+#line 6
+ testRunner.Given("a Global Session Policy defines the Primary factor as Password / IDP / any factor" +
+ " allowed by app sign on rules", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given ");
+#line hidden
+#line 7
+ testRunner.And("the Global Session Policy does NOT require a second factor", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 8
+ testRunner.And("a SPA, WEB APP or MOBILE with an Authentication Policy that is defined as Any 1 f" +
+ "actor", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 9
+ testRunner.And("User Enumeration Prevention is set to ENABLED in Security > General", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 10
+ testRunner.And("the list of Authenticators contains Email and Password is optional", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 11
+ testRunner.And("a User named \"Mary\" exists, and this user has already setup email and password fa" +
+ "ctors", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+ }
+
+ void System.IDisposable.Dispose()
+ {
+ this.TestTearDown();
+ }
+
+ [Xunit.SkippableFactAttribute(DisplayName="1.2.1: Mary logs in with Email with an OTP")]
+ [Xunit.TraitAttribute("FeatureTitle", "1.2 Login With Identifier First")]
+ [Xunit.TraitAttribute("Description", "1.2.1: Mary logs in with Email with an OTP")]
+ public void _1_2_1MaryLogsInWithEmailWithAnOTP()
+ {
+ string[] tagsOfScenario = ((string[])(null));
+ System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary();
+ TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("1.2.1: Mary logs in with Email with an OTP", null, tagsOfScenario, argumentsOfScenario, featureTags);
+#line 13
+ this.ScenarioInitialize(scenarioInfo);
+#line hidden
+ if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags)))
+ {
+ testRunner.SkipScenario();
+ }
+ else
+ {
+ this.ScenarioStart();
+#line 5
+this.FeatureBackground();
+#line hidden
+#line 14
+ testRunner.Given("Mary navigates to the Basic Login View", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given ");
+#line hidden
+#line 15
+ testRunner.When("she fills in her correct username", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 16
+ testRunner.And("she clicks Login", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 17
+ testRunner.Then("she is presented with an option to select Email to verify", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 18
+ testRunner.When("She selects Email from the list", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 19
+ testRunner.And("She selects \"Receive a Code\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 20
+ testRunner.Then("the screen changes to receive an input for a code", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 21
+ testRunner.When("She inputs the correct code from the Email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 22
+ testRunner.And("She selects \"Verify\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 23
+ testRunner.Then("she is redirected to the Root View", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 24
+ testRunner.And("she sees a table with her profile info", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 25
+ testRunner.And("the cell for the value of email is shown and contains her email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 26
+ testRunner.And("the cell for the value of name is shown and contains her first name and last name" +
+ "", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+ }
+ this.ScenarioCleanup();
+ }
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "3.9.0.0")]
+ [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class FixtureData : System.IDisposable
+ {
+
+ public FixtureData()
+ {
+ _1_2LoginWithIdentifierFirstFeature.FeatureSetup();
+ }
+
+ void System.IDisposable.Dispose()
+ {
+ _1_2LoginWithIdentifierFirstFeature.FeatureTearDown();
+ }
+ }
+ }
+}
+#pragma warning restore
+#endregion
diff --git a/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/3-SelfServicePasswordRecovery.feature.cs b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/3-SelfServicePasswordRecovery.feature.cs
index a0677f82..e0eff475 100644
--- a/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/3-SelfServicePasswordRecovery.feature.cs
+++ b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/3-SelfServicePasswordRecovery.feature.cs
@@ -96,15 +96,16 @@ void System.IDisposable.Dispose()
this.TestTearDown();
}
- [Xunit.SkippableFactAttribute(DisplayName="3.1.1 Mary resets her password")]
+ [Xunit.SkippableFactAttribute(DisplayName="3.1.1 Mary resets her password", Skip="Ignored")]
[Xunit.TraitAttribute("FeatureTitle", "3.1: Direct Auth Password Recovery")]
[Xunit.TraitAttribute("Description", "3.1.1 Mary resets her password")]
public void _3_1_1MaryResetsHerPassword()
{
- string[] tagsOfScenario = ((string[])(null));
+ string[] tagsOfScenario = new string[] {
+ "Ignore"};
System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary();
TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("3.1.1 Mary resets her password", null, tagsOfScenario, argumentsOfScenario, featureTags);
-#line 8
+#line 9
this.ScenarioInitialize(scenarioInfo);
#line hidden
if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags)))
@@ -117,61 +118,62 @@ public void _3_1_1MaryResetsHerPassword()
#line 3
this.FeatureBackground();
#line hidden
-#line 9
+#line 10
testRunner.Given("Mary navigates to the Self Service Password Reset View", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given ");
#line hidden
-#line 10
+#line 11
testRunner.When("she inputs her correct Email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
#line hidden
-#line 11
+#line 12
testRunner.And("she submits the recovery form", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
#line hidden
-#line 12
+#line 13
testRunner.Then("she sees a page to select an authenticator", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
#line hidden
-#line 13
+#line 14
testRunner.When("she chooses Email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
#line hidden
-#line 14
+#line 15
testRunner.And("she submits the select form", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
#line hidden
-#line 15
+#line 16
testRunner.Then("she sees a page to input her code", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
#line hidden
-#line 16
+#line 17
testRunner.When("she fills in the correct code", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
#line hidden
-#line 17
+#line 18
testRunner.And("she submits the verification form", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
#line hidden
-#line 18
+#line 19
testRunner.Then("she sees a page to set her password", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
#line hidden
-#line 19
+#line 20
testRunner.When("she fills a password that fits within the password policy", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
#line hidden
-#line 20
+#line 21
testRunner.And("she confirms that password", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
#line hidden
-#line 21
+#line 22
testRunner.And("she submits the change password form", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
#line hidden
-#line 22
+#line 23
testRunner.Then("she is redirected to the Root Page is provided", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
#line hidden
}
this.ScenarioCleanup();
}
- [Xunit.SkippableFactAttribute(DisplayName="3.1.2 Mary tries to reset a password with the wrong email")]
+ [Xunit.SkippableFactAttribute(DisplayName="3.1.2 Mary tries to reset a password with the wrong email", Skip="Ignored")]
[Xunit.TraitAttribute("FeatureTitle", "3.1: Direct Auth Password Recovery")]
[Xunit.TraitAttribute("Description", "3.1.2 Mary tries to reset a password with the wrong email")]
public void _3_1_2MaryTriesToResetAPasswordWithTheWrongEmail()
{
- string[] tagsOfScenario = ((string[])(null));
+ string[] tagsOfScenario = new string[] {
+ "Ignore"};
System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary();
TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("3.1.2 Mary tries to reset a password with the wrong email", null, tagsOfScenario, argumentsOfScenario, featureTags);
-#line 24
+#line 26
this.ScenarioInitialize(scenarioInfo);
#line hidden
if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags)))
@@ -184,19 +186,19 @@ public void _3_1_2MaryTriesToResetAPasswordWithTheWrongEmail()
#line 3
this.FeatureBackground();
#line hidden
-#line 25
+#line 27
testRunner.Given("Mary navigates to the Self Service Password Reset View", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given ");
#line hidden
-#line 26
+#line 28
testRunner.Then("she sees the Password Recovery Page", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
#line hidden
-#line 27
+#line 29
testRunner.When("she inputs an Email that doesn\'t exist", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
#line hidden
-#line 28
+#line 30
testRunner.And("she submits the recovery form", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
#line hidden
-#line 29
+#line 31
testRunner.Then("she sees a message \"Authentication failed\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
#line hidden
}
diff --git a/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/4.2-SelfServiceRegistrationPasswordOptional.feature b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/4.2-SelfServiceRegistrationPasswordOptional.feature
new file mode 100644
index 00000000..458d24b1
--- /dev/null
+++ b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/4.2-SelfServiceRegistrationPasswordOptional.feature
@@ -0,0 +1,62 @@
+Feature: 4.2 Self Service Registration Password Optional
+
+User registeration scenario for password optional feature
+
+Background:
+ Given a Profile Enrollment policy defined assigning new users to the Everyone Group and by collecting "First Name", "Last Name", and "Email", is allowed and assigned to a SPA, WEB APP or MOBILE application
+ And "Required before access is granted" is selected for Email Verification under Profile Enrollment in Security > Profile Enrollment
+ And configured Authenticators are Email (required) and Password (optional)
+ And a user named "Mary"
+ And Mary does not have an account in the org
+
+ @ignore
+ Scenario: 4.2.1 Mary signs up for an account with required Email factor, then skips optional Password
+ Given Mary navigates to the Self Service Registration View
+ When she fills out her First Name
+ And she fills out her Last Name
+ And she fills out her Email
+ And she submits the registration form
+ Then She sees a list of factors
+ When she selects Email
+ And she submits the select authenticator form
+ Then she sees a page to input a code
+ When she inputs the correct code from her email
+ Then she sees the list of optional factors
+ When she skips optional authenticators if prompted
+ Then she is redirected to the Root View
+ And she sees a table with her profile info
+ And the access_token is shown and not empty
+ And the id_token is shown and not empty
+ And the cell for the value of email is shown and contains her email
+ And the cell for the value of name is shown and contains her first name and last name
+ And the preferred_username claim is shown and matches Mary's email
+
+ @ignore
+ Scenario: 4.2.2 Mary signs up for an account with required Email factor, then sets up optional Password
+ Given Mary navigates to the Self Service Registration View
+ When she fills out her First Name
+ And she fills out her Last Name
+ And she fills out her Email
+ And she submits the registration form
+ Then She sees a list of factors
+ When she selects Email
+ And she submits the select authenticator form
+ Then she sees a page to input a code
+ When she inputs the correct code from her email
+ Then she sees the list of optional factors
+ When she chooses password factor option
+ And she submits the select authenticator form
+ Then she sees the set new password form
+ When she fills out her Password
+ And she confirms her Password
+ And she submits the change password form
+ Then she sees the list of optional factors
+ When she selects Skip
+ Then she is redirected to the Root View
+ And she sees a table with her profile info
+ And the access_token is shown and not empty
+ And the id_token is shown and not empty
+ And the cell for the value of email is shown and contains her email
+ And the cell for the value of name is shown and contains her first name and last name
+ And the preferred_username claim is shown and matches Mary's email
+
\ No newline at end of file
diff --git a/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/4.2-SelfServiceRegistrationPasswordOptional.feature.cs b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/4.2-SelfServiceRegistrationPasswordOptional.feature.cs
new file mode 100644
index 00000000..f53fc135
--- /dev/null
+++ b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Features/4.2-SelfServiceRegistrationPasswordOptional.feature.cs
@@ -0,0 +1,320 @@
+// ------------------------------------------------------------------------------
+//
+// This code was generated by SpecFlow (https://www.specflow.org/).
+// SpecFlow Version:3.9.0.0
+// SpecFlow Generator Version:3.9.0.0
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+// ------------------------------------------------------------------------------
+#region Designer generated code
+#pragma warning disable
+namespace embedded_auth_with_sdk.E2ETests.Features
+{
+ using TechTalk.SpecFlow;
+ using System;
+ using System.Linq;
+
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "3.9.0.0")]
+ [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public partial class _4_2SelfServiceRegistrationPasswordOptionalFeature : object, Xunit.IClassFixture<_4_2SelfServiceRegistrationPasswordOptionalFeature.FixtureData>, System.IDisposable
+ {
+
+ private static TechTalk.SpecFlow.ITestRunner testRunner;
+
+ private static string[] featureTags = ((string[])(null));
+
+ private Xunit.Abstractions.ITestOutputHelper _testOutputHelper;
+
+#line 1 "4.2-SelfServiceRegistrationPasswordOptional.feature"
+#line hidden
+
+ public _4_2SelfServiceRegistrationPasswordOptionalFeature(_4_2SelfServiceRegistrationPasswordOptionalFeature.FixtureData fixtureData, embedded_auth_with_sdk_E2ETests_XUnitAssemblyFixture assemblyFixture, Xunit.Abstractions.ITestOutputHelper testOutputHelper)
+ {
+ this._testOutputHelper = testOutputHelper;
+ this.TestInitialize();
+ }
+
+ public static void FeatureSetup()
+ {
+ testRunner = TechTalk.SpecFlow.TestRunnerManager.GetTestRunner();
+ TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "Features", "4.2 Self Service Registration Password Optional", "User registeration scenario for password optional feature", ProgrammingLanguage.CSharp, featureTags);
+ testRunner.OnFeatureStart(featureInfo);
+ }
+
+ public static void FeatureTearDown()
+ {
+ testRunner.OnFeatureEnd();
+ testRunner = null;
+ }
+
+ public void TestInitialize()
+ {
+ }
+
+ public void TestTearDown()
+ {
+ testRunner.OnScenarioEnd();
+ }
+
+ public void ScenarioInitialize(TechTalk.SpecFlow.ScenarioInfo scenarioInfo)
+ {
+ testRunner.OnScenarioInitialize(scenarioInfo);
+ testRunner.ScenarioContext.ScenarioContainer.RegisterInstanceAs(_testOutputHelper);
+ }
+
+ public void ScenarioStart()
+ {
+ testRunner.OnScenarioStart();
+ }
+
+ public void ScenarioCleanup()
+ {
+ testRunner.CollectScenarioErrors();
+ }
+
+ public virtual void FeatureBackground()
+ {
+#line 5
+#line hidden
+#line 6
+ testRunner.Given("a Profile Enrollment policy defined assigning new users to the Everyone Group and" +
+ " by collecting \"First Name\", \"Last Name\", and \"Email\", is allowed and assigned t" +
+ "o a SPA, WEB APP or MOBILE application", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given ");
+#line hidden
+#line 7
+ testRunner.And("\"Required before access is granted\" is selected for Email Verification under Prof" +
+ "ile Enrollment in Security > Profile Enrollment", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 8
+ testRunner.And("configured Authenticators are Email (required) and Password (optional)", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 9
+ testRunner.And("a user named \"Mary\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 10
+ testRunner.And("Mary does not have an account in the org", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+ }
+
+ void System.IDisposable.Dispose()
+ {
+ this.TestTearDown();
+ }
+
+ [Xunit.SkippableFactAttribute(DisplayName="4.2.1 Mary signs up for an account with required Email factor, then skips optiona" +
+ "l Password", Skip="Ignored")]
+ [Xunit.TraitAttribute("FeatureTitle", "4.2 Self Service Registration Password Optional")]
+ [Xunit.TraitAttribute("Description", "4.2.1 Mary signs up for an account with required Email factor, then skips optiona" +
+ "l Password")]
+ public void _4_2_1MarySignsUpForAnAccountWithRequiredEmailFactorThenSkipsOptionalPassword()
+ {
+ string[] tagsOfScenario = new string[] {
+ "ignore"};
+ System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary();
+ TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("4.2.1 Mary signs up for an account with required Email factor, then skips optiona" +
+ "l Password", null, tagsOfScenario, argumentsOfScenario, featureTags);
+#line 13
+ this.ScenarioInitialize(scenarioInfo);
+#line hidden
+ if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags)))
+ {
+ testRunner.SkipScenario();
+ }
+ else
+ {
+ this.ScenarioStart();
+#line 5
+this.FeatureBackground();
+#line hidden
+#line 14
+ testRunner.Given("Mary navigates to the Self Service Registration View", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given ");
+#line hidden
+#line 15
+ testRunner.When("she fills out her First Name", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 16
+ testRunner.And("she fills out her Last Name", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 17
+ testRunner.And("she fills out her Email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 18
+ testRunner.And("she submits the registration form", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 19
+ testRunner.Then("She sees a list of factors", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 20
+ testRunner.When("she selects Email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 21
+ testRunner.And("she submits the select authenticator form", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 22
+ testRunner.Then("she sees a page to input a code", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 23
+ testRunner.When("she inputs the correct code from her email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 24
+ testRunner.Then("she sees the list of optional factors", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 25
+ testRunner.When("she skips optional authenticators if prompted", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 26
+ testRunner.Then("she is redirected to the Root View", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 27
+ testRunner.And("she sees a table with her profile info", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 28
+ testRunner.And("the access_token is shown and not empty", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 29
+ testRunner.And("the id_token is shown and not empty", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 30
+ testRunner.And("the cell for the value of email is shown and contains her email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 31
+ testRunner.And("the cell for the value of name is shown and contains her first name and last name" +
+ "", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 32
+ testRunner.And("the preferred_username claim is shown and matches Mary\'s email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+ }
+ this.ScenarioCleanup();
+ }
+
+ [Xunit.SkippableFactAttribute(DisplayName="4.2.2 Mary signs up for an account with required Email factor, then sets up optio" +
+ "nal Password", Skip="Ignored")]
+ [Xunit.TraitAttribute("FeatureTitle", "4.2 Self Service Registration Password Optional")]
+ [Xunit.TraitAttribute("Description", "4.2.2 Mary signs up for an account with required Email factor, then sets up optio" +
+ "nal Password")]
+ public void _4_2_2MarySignsUpForAnAccountWithRequiredEmailFactorThenSetsUpOptionalPassword()
+ {
+ string[] tagsOfScenario = new string[] {
+ "ignore"};
+ System.Collections.Specialized.OrderedDictionary argumentsOfScenario = new System.Collections.Specialized.OrderedDictionary();
+ TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("4.2.2 Mary signs up for an account with required Email factor, then sets up optio" +
+ "nal Password", null, tagsOfScenario, argumentsOfScenario, featureTags);
+#line 35
+ this.ScenarioInitialize(scenarioInfo);
+#line hidden
+ if ((TagHelper.ContainsIgnoreTag(tagsOfScenario) || TagHelper.ContainsIgnoreTag(featureTags)))
+ {
+ testRunner.SkipScenario();
+ }
+ else
+ {
+ this.ScenarioStart();
+#line 5
+this.FeatureBackground();
+#line hidden
+#line 36
+ testRunner.Given("Mary navigates to the Self Service Registration View", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given ");
+#line hidden
+#line 37
+ testRunner.When("she fills out her First Name", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 38
+ testRunner.And("she fills out her Last Name", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 39
+ testRunner.And("she fills out her Email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 40
+ testRunner.And("she submits the registration form", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 41
+ testRunner.Then("She sees a list of factors", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 42
+ testRunner.When("she selects Email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 43
+ testRunner.And("she submits the select authenticator form", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 44
+ testRunner.Then("she sees a page to input a code", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 45
+ testRunner.When("she inputs the correct code from her email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 46
+ testRunner.Then("she sees the list of optional factors", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 47
+ testRunner.When("she chooses password factor option", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 48
+ testRunner.And("she submits the select authenticator form", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 49
+ testRunner.Then("she sees the set new password form", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 50
+ testRunner.When("she fills out her Password", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 51
+ testRunner.And("she confirms her Password", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 52
+ testRunner.And("she submits the change password form", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 53
+ testRunner.Then("she sees the list of optional factors", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 54
+ testRunner.When("she selects Skip", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "When ");
+#line hidden
+#line 55
+ testRunner.Then("she is redirected to the Root View", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then ");
+#line hidden
+#line 56
+ testRunner.And("she sees a table with her profile info", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 57
+ testRunner.And("the access_token is shown and not empty", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 58
+ testRunner.And("the id_token is shown and not empty", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 59
+ testRunner.And("the cell for the value of email is shown and contains her email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 60
+ testRunner.And("the cell for the value of name is shown and contains her first name and last name" +
+ "", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+#line 61
+ testRunner.And("the preferred_username claim is shown and matches Mary\'s email", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
+#line hidden
+ }
+ this.ScenarioCleanup();
+ }
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "3.9.0.0")]
+ [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ public class FixtureData : System.IDisposable
+ {
+
+ public FixtureData()
+ {
+ _4_2SelfServiceRegistrationPasswordOptionalFeature.FeatureSetup();
+ }
+
+ void System.IDisposable.Dispose()
+ {
+ _4_2SelfServiceRegistrationPasswordOptionalFeature.FeatureTearDown();
+ }
+ }
+ }
+}
+#pragma warning restore
+#endregion
diff --git a/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Steps/_1_2LoginWithIdentifierFirstStepDefinitions.cs b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Steps/_1_2LoginWithIdentifierFirstStepDefinitions.cs
new file mode 100644
index 00000000..1063c7e9
--- /dev/null
+++ b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Steps/_1_2LoginWithIdentifierFirstStepDefinitions.cs
@@ -0,0 +1,34 @@
+using System;
+using TechTalk.SpecFlow;
+
+namespace embedded_auth_with_sdk.E2ETests.Steps
+{
+ [Binding]
+ public class _1_2LoginWithIdentifierFirstStepDefinitions
+ {
+ [Given(@"a Global Session Policy defines the Primary factor as Password / IDP / any factor allowed by app sign on rules")]
+ public void GivenAGlobalSessionPolicyDefinesThePrimaryFactorAsPasswordIDPAnyFactorAllowedByAppSignOnRules()
+ {
+ }
+
+ [Given(@"the Global Session Policy does NOT require a second factor")]
+ public void GivenTheGlobalSessionPolicyDoesNOTRequireASecondFactor()
+ {
+ }
+
+ [Given(@"a SPA, WEB APP or MOBILE with an Authentication Policy that is defined as Any (.*) factor")]
+ public void GivenASPAWEBAPPOrMOBILEWithAnAuthenticationPolicyThatIsDefinedAsAnyFactor(int p0)
+ {
+ }
+
+ [Given(@"User Enumeration Prevention is set to ENABLED in Security > General")]
+ public void GivenUserEnumerationPreventionIsSetToENABLEDInSecurityGeneral()
+ {
+ }
+
+ [Given(@"the list of Authenticators contains Email and Password is optional")]
+ public void GivenTheListOfAuthenticatorsContainsEmailAndPasswordIsOptional()
+ {
+ }
+ }
+}
diff --git a/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Steps/_4_2SelfServiceRegistrationPasswordOptionalStepDefinitions.cs b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Steps/_4_2SelfServiceRegistrationPasswordOptionalStepDefinitions.cs
new file mode 100644
index 00000000..a612f182
--- /dev/null
+++ b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/Steps/_4_2SelfServiceRegistrationPasswordOptionalStepDefinitions.cs
@@ -0,0 +1,14 @@
+using System;
+using TechTalk.SpecFlow;
+
+namespace embedded_auth_with_sdk.E2ETests.Steps
+{
+ [Binding]
+ public class _4_2SelfServiceRegistrationPasswordOptionalStepDefinitions
+ {
+ [Given(@"configured Authenticators are Email \(required\) and Password \(optional\)")]
+ public void GivenConfiguredAuthenticatorsAreEmailRequiredAndPasswordOptional()
+ {
+ }
+ }
+}
diff --git a/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/embedded-auth-with-sdk.E2ETests.csproj b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/embedded-auth-with-sdk.E2ETests.csproj
index fdf46abb..041c54e2 100644
--- a/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/embedded-auth-with-sdk.E2ETests.csproj
+++ b/samples/samples-aspnet/embedded-auth-with-sdk/Okta.Idx.Sdk.E2ETests/embedded-auth-with-sdk.E2ETests.csproj
@@ -31,7 +31,7 @@
-
+