public void CanLoginLocallyAfterChangingPassword() { var email = "*****@*****.**"; var firstPassword = "******"; var secondPassword = "******"; using (var site = new KeyHubWebDriver()) { SiteUtil.CreateLocalAccount(site, email, firstPassword); using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, email, firstPassword); browser.Navigate().GoToUrl(site.UrlFor("/")); browser.FindElementByCssSelector("a[href^='/Account']").Click(); browser.FindElementByCssSelector("a[href^='/Account/ChangePassword']").Click(); browser.FindElementByCssSelector("#OldPassword").SendKeys(firstPassword); browser.FindElementByCssSelector("#NewPassword").SendKeys(secondPassword); browser.FindElementByCssSelector("#ConfirmPassword").SendKeys(secondPassword); browser.FindElementByCssSelector("input[type='submit']").Click(); // Ensure the change saves by waiting for the browser to return to the account edit page browser.FindElementByCssSelector("a[href^='/Account/Edit']"); } using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, email, secondPassword); } } }
public void AdminShouldBeAbleToCreateUsers() { var username = "******"; var password = "******"; using (var site = new KeyHubWebDriver()) { using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor("/Account/Create")); SiteUtil.SubmitLoginForm(browser, "admin", "password"); browser.FindElementByCssSelector("#User_Email").SendKeys(username); browser.FindElementByCssSelector("#User_Password").SendKeys(password); browser.FindElementByCssSelector("#User_ConfirmPassword").SendKeys(password); browser.FindElementByCssSelector("input[value='Save']").Click(); var successMessage = browser.FindElementByCssSelector(".success"); Assert.Contains("New user succesfully created", successMessage.Text); } using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, "admin", "password"); } } }
public void CanLoginLocallyAfterChangingEmail() { var firstEmail = "*****@*****.**"; var secondEmail = "*****@*****.**"; var password = "******"; using (var site = new KeyHubWebDriver()) { SiteUtil.CreateLocalAccount(site, firstEmail, password); using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, firstEmail, password); browser.Navigate().GoToUrl(site.UrlFor("/")); browser.FindElementByCssSelector("a[href^='/Account']").Click(); browser.FindElementByCssSelector("a[href^='/Account/Edit']").Click(); var emailForm = browser.FindElementByCssSelector("#Email"); emailForm.Clear(); emailForm.SendKeys(secondEmail); browser.FindElementByCssSelector("input[value='Save']").Click(); // Ensure the change saves by waiting for the browser to return to the account edit page browser.FindElementByCssSelector("a[href^='/Account/Edit']"); } using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, secondEmail.ToUpper(), password); } } }
private static void VendorManuallyCreatesTransaction(Action <RemoteWebDriver> vendorActionBeforeCreatingTransaction, Action <RemoteWebDriver> transactionSubmitHandler) { var vendorScenario = new WithAVendorDBScenario(); var vendorEmail = "*****@*****.**"; var vendorPassword = "******"; using (var site = new KeyHubWebDriver()) { string editVendorUserUrl = null; SiteUtil.CreateLocalAccount(site, vendorEmail, vendorPassword, firstBrowser => { firstBrowser.FindElementByCssSelector("a[href='/Account/LogOff']"); firstBrowser.Navigate().GoToUrl(site.UrlFor("/Account")); editVendorUserUrl = firstBrowser.FindElementByCssSelector("a[href^='/Account/Edit']").GetAttribute("href"); }); // Log in as admin to give the new vendor account vendor permissions using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor(editVendorUserUrl)); SiteUtil.SubmitLoginForm(browser, "admin", "password"); AdminUtil.CreateAccountRightsFor(browser, vendorEmail, ObjectTypes.Vendor, vendorScenario.VendorName); } using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, vendorEmail, vendorPassword); vendorActionBeforeCreatingTransaction(browser); browser.Navigate().GoToUrl(site.UrlFor("/")); browser.FindElementByCssSelector("a[href='/Transaction/Create']").Click(); SiteUtil.SetValueForChosenJQueryControlMulti(browser, "div#Transaction_SelectedSKUGuids_chzn", vendorScenario.SkuCode); browser.FindElementByCssSelector("form[action^='/Transaction/Create'] input[type='submit']").Click(); transactionSubmitHandler(browser); var appKeyValue = GetAppKeyFromTransactionCompletePage(browser); LicenseValidatorTests.AssertRemoteValidationCheckPasses( site, "example.com", appKeyValue, vendorScenario.FeatureCode, vendorScenario.PublicKeyXml); } } }
public void VendorCanManuallyCreateLicensedApplicationAndChangeItsSkus() { var vendorAndCustomerScenario = new VendorWithALicensedCustomerScenario(); using (var site = new KeyHubWebDriver()) { vendorAndCustomerScenario.Setup(site); var firstCustomerAppName = "customerApp.name1"; var secondCustomerAppName = "customerApp.name2"; using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, vendorAndCustomerScenario.UserEmail, vendorAndCustomerScenario.UserPassword); // Create a CustomerApp / Licensed Application browser.Navigate().GoToUrl(site.UrlFor("/")); browser.FindElementByCssSelector("a[href='/CustomerApp']").Click(); browser.FindElementByCssSelector("a[href='/CustomerApp/Create']").Click(); browser.FindElementByCssSelector("input#ApplicationName").SendKeys(firstCustomerAppName); SiteUtil.SetValueForChosenJQueryControlMulti(browser, "#SelectedLicenseGUIDs_chzn", "first sku"); browser.FindElementByCssSelector("form[action='/CustomerApp/Create'] input[type=submit]").Click(); browser.FindElementByCssSelector(".success"); AssertApplicationNameIs(browser, firstCustomerAppName); AssertApplicationSkuIs(browser, "first sku"); // Rename the customer app browser.FindElementByCssSelector("a[href^='/CustomerApp/Edit']").Click(); var nameElement = browser.FindElementByCssSelector("input#ApplicationName"); nameElement.Clear(); nameElement.SendKeys(secondCustomerAppName); browser.FindElementByCssSelector("form[action^='/CustomerApp/Edit'] input[type='submit']").Click(); browser.FindElementByCssSelector(".success"); AssertApplicationNameIs(browser, secondCustomerAppName); // Switch licenses on the customer app browser.FindElementByCssSelector("a[href^='/CustomerApp/Edit']").Click(); SiteUtil.SetValueForChosenJQueryControlMulti(browser, "#SelectedLicenseGUIDs_chzn", "second sku", clearExisting: true); browser.FindElementByCssSelector("form[action^='/CustomerApp/Edit'] input[type='submit']").Click(); browser.FindElementByCssSelector(".success"); AssertApplicationSkuIs(browser, "second sku"); // Remove the customer app browser.FindElementByCssSelector("a[href^='/CustomerApp/Remove']").Click(); browser.FindElementByCssSelector("form[action^='/CustomerApp/Remove'] input[type='submit']").Click(); browser.FindElementByCssSelector(".success"); Assert.Equal(0, browser.FindElementsByCssSelector("a[href^='/CustomerApp/Remove']").Count()); } } }
public void Setup(KeyHubWebDriver site, bool canDeleteManualDomainsOfLicense = true) { using (var browser = BrowserUtil.GetBrowser()) { base.Setup(site); browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, UserEmail, UserPassword); VendorUtil.CreatePrivateKey(browser, VendorName); VendorUtil.CreateFeature(browser, "first feature", VendorName); VendorUtil.CreateFeature(browser, "second feature", VendorName); VendorUtil.CreateSku(browser, "first sku", VendorName, "first feature", canDeleteManualDomainsOfLicense); VendorUtil.CreateSku(browser, "second sku", VendorName, "second feature", canDeleteManualDomainsOfLicense); // Create a Customer var customerName = VendorUtil.CreateCustomer(browser); // Create a License VendorUtil.CreateLicense(browser, "first sku", customerName); VendorUtil.CreateLicense(browser, "second sku", customerName); } }
public void VendorCanRenameAndRemovePrivateKeys() { using (var site = new KeyHubWebDriver()) { var scenario = new WithAVendorScenario(); scenario.Setup(site); using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, scenario.UserEmail, scenario.UserPassword); var privateKeyName = VendorUtil.CreatePrivateKey(browser, scenario.VendorName); var privateKeyRow = browser.FindElementByXPath("//td[contains(text(),'" + privateKeyName + "')]/ancestor::tr"); privateKeyRow.FindElement((By.CssSelector("a[href^='/PrivateKey/Edit']"))).Click(); var nameInput = browser.FindElementByCssSelector("input#PrivateKey_DisplayName"); nameInput.Clear(); nameInput.SendKeys("second name"); browser.FindElementByCssSelector("form[action^='/PrivateKey/Edit'] input[type='submit']").Click(); privateKeyRow = browser.FindElementByXPath("//td[contains(text(),'second name')]/ancestor::tr"); Assert.Equal(1, browser.FindElementsByCssSelector(".private-key-list").Count()); Assert.Equal(1, browser.FindElementsByCssSelector(".private-key-list tbody tr").Count()); privateKeyRow.FindElement((By.CssSelector("a[href^='/PrivateKey/Remove']"))).Click(); browser.FindElementByCssSelector("form[action^='/PrivateKey/Remove'] input[type='submit']").Click(); Assert.Equal(1, browser.FindElementsByCssSelector(".private-key-list").Count()); Assert.Equal(0, browser.FindElementsByCssSelector(".private-key-list tbody tr").Count()); } } }
public void VendorCanEditAFeature() { using (var site = new KeyHubWebDriver()) { var scenario = new WithAVendorScenario(); scenario.Setup(site); using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, scenario.UserEmail, scenario.UserPassword); VendorUtil.CreateFeature(browser, "first feature", scenario.VendorName); var featureRow = browser.FindElement(By.XPath("//td[contains(text(),'first feature')]/ancestor::tr")); featureRow.FindElement(By.CssSelector("a[href^='/Feature/Edit']")).Click(); var nameInput = browser.FindElementByCssSelector("#Feature_FeatureName"); nameInput.Clear(); nameInput.SendKeys("second name"); browser.FindElementByCssSelector("form[action^='/Feature/Edit'] input[type='submit']").Click(); browser.FindElementByCssSelector(".success"); browser.FindElement(By.XPath("//td[contains(text(),'second name')]")); } } }
public void AdminShouldBeAbleToAddAndRemoveUserRights() { using (var site = new KeyHubWebDriver()) { string userEmail = "*****@*****.**"; using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor("/")); browser.FindElementByCssSelector("a[href^='/Account/Register']").Click(); SiteUtil.SubmitRegistrationForm(browser, userEmail, "password"); SiteUtil.WaitUntilUserIsLoggedIn(browser); browser.FindElementByCssSelector("a[href^='/Account']").Click(); browser.FindElementByCssSelector("a[href^='/Account/Edit']").GetAttribute("href"); } using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, "admin", "password"); var customerName = VendorUtil.CreateCustomer(browser); AdminUtil.CreateAccountRightsFor(browser, userEmail, ObjectTypes.Customer, customerName); browser.FindElementByCssSelector(".account-rights-table"); var accountRights = browser.FindElementsByCssSelector(".account-rights-table tbody tr"); Assert.Equal(1, accountRights.Count()); Assert.Contains(customerName, accountRights.First().Text); accountRights.First().FindElement(By.CssSelector("a[href^='/AccountRights/Delete']")).Click(); browser.FindElementByCssSelector("input[value='Confirm Delete']").Click(); new WebDriverWait(browser, TimeSpan.FromSeconds(2)).Until(waitBrowser => { return(browser.FindElementByCssSelector(".account-rights-table") != null && browser.FindElementsByCssSelector(".account-rights-table tbody tr").Count() == 0); }); } } }
public void CanManageVendorCredentials() { using (var site = new KeyHubWebDriver()) { using (var browser = BrowserUtil.GetBrowser()) { // Log in as pre-created admin user browser.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(3)); browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, "admin", "password"); // Create a vendor AdminUtil.CreateVendor(browser); // Create a VendorCredential for the vendor browser.FindElementByCssSelector("a[href^='/VendorCredential/Create']").Click(); var firstVendorCredentialName = "first vendor secret name"; var firstVendorCredentialValue = "vendor secret shared secret"; FillVendorCredentialForm(browser, firstVendorCredentialName, firstVendorCredentialValue); browser.FindElementByCssSelector("form[action^='/VendorCredential/Create'] input[type=submit]").Click(); // Make sure the VendorCredential was created, and edit it. var editButton = browser.FindElementByCssSelector("a[href^='/VendorCredential/Edit']"); Assert.Contains(firstVendorCredentialName, browser.PageSource); editButton.Click(); AssertVendorCredentialFormValues(browser, firstVendorCredentialName, firstVendorCredentialValue); var secondVendorCredentialName = "second vendor secret name"; var secondVendorCredentialValue = "second vendor secret"; FillVendorCredentialForm(browser, secondVendorCredentialName, secondVendorCredentialValue); browser.FindElementByCssSelector("form[action^='/VendorCredential/Edit'] input[type=submit]").Click(); // Check the VendorCredential edit page to ensure the edit saved editButton = browser.FindElementByCssSelector("a[href^='/VendorCredential/Edit']"); Assert.DoesNotContain(firstVendorCredentialName, browser.PageSource); Assert.Contains(secondVendorCredentialValue, browser.PageSource); editButton.Click(); AssertVendorCredentialFormValues(browser, secondVendorCredentialName, secondVendorCredentialValue); // Return to the Vendor edit page browser.FindElementByCssSelector("a[href^='/Vendor/Details']").Click(); // Remove the VendorCredential var removeButton = browser.FindElementByCssSelector("a[href^='/VendorCredential/Remove']"); removeButton.Click(); browser.FindElementByCssSelector("form[action^='/VendorCredential/Remove'] input[type=submit]").Click(); browser.FindElementByCssSelector(".success"); Assert.DoesNotContain(firstVendorCredentialName, browser.PageSource); Assert.DoesNotContain(secondVendorCredentialValue, browser.PageSource); } } }
public void VendorCanManageDomainLicenses() { using (var site = new KeyHubWebDriver()) { var scenario = new VendorWithALicensedCustomerScenario(); scenario.Setup(site, canDeleteManualDomainsOfLicense: true); using (var browser = BrowserUtil.GetBrowser()) { // Create a license browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, scenario.UserEmail, scenario.UserPassword); browser.FindElementByCssSelector("a[href='/License']").Click(); browser.FindElementByCssSelector("a[href^='/License/Details']").Click(); browser.FindElementByCssSelector("a[href^='/DomainLicense/Create']").Click(); browser.FindElementByCssSelector("input#DomainName").SendKeys("example.com"); browser.FindElementByCssSelector("form[action^='/DomainLicense/Create'] input[type='submit']").Click(); browser.FindElementByCssSelector(".success"); var licensedDomains = GetLicensedDomains(browser); Assert.Contains("example.com", licensedDomains); // Edit a license browser.FindElementByCssSelector("a[href^='/DomainLicense/Edit']").Click(); IWebElement domainNameInput = browser.FindElementByCssSelector("input#DomainName"); domainNameInput.Clear(); domainNameInput.SendKeys("example.org"); browser.FindElementByCssSelector("form[action^='/DomainLicense/Edit'] input[type='submit']").Click(); browser.FindElementByCssSelector(".success"); licensedDomains = GetLicensedDomains(browser); Assert.Contains("example.org", licensedDomains); Assert.DoesNotContain("example.com", licensedDomains); // Delete a license browser.FindElementByCssSelector("a[href^='/DomainLicense/Remove']").Click(); browser.FindElementByCssSelector("form[action^='/DomainLicense/Remove'] input[type='submit']").Click(); browser.FindElementByCssSelector(".success"); licensedDomains = GetLicensedDomains(browser); Assert.Equal(0, licensedDomains.Count()); } } }
public static void AssertRemoteValidationCheckPasses(KeyHubWebDriver site, string domain, Guid appKey, Guid featureCode, string vendorPublicKey) { var licensingUrl = site.UrlFor("/api/LicenseValidation"); var licensesAndSignature = new LicenseDownloader().RequestLicenses(licensingUrl, appKey, new Dictionary <string, List <Guid> >() { { domain, new List <Guid>() { featureCode } } }); var newLicenses = new LicenseDeserializer().DeserializeAll(vendorPublicKey, licensesAndSignature); DomainLicense license = newLicenses[domain].Single(); Assert.Equal(license.Domain, domain); Assert.Contains(featureCode, license.Features); }
public void CanUseALicensePurchasedViaEJunkie() { var vendorScenario = new WithAVendorDBScenario(); var payerEmail = "*****@*****.**"; var customerEmail = "*****@*****.**"; var customerPassword = "******"; var smtpServer = SimpleSmtpServer.Start(25); try { using (var site = new KeyHubWebDriver()) { using (var client = new WebClient()) { var uploadVariables = new NameValueCollection(); uploadVariables.Add("handshake", vendorScenario.VendorCredential); uploadVariables.Add("txn_id", GetRandomString()); uploadVariables.Add("payment_status", "Completed"); uploadVariables.Add("payment_date", "02:51:26 Jul 18, 2012 MST"); uploadVariables.Add("num_cart_items", "0"); uploadVariables.Add("payer_name", "payerName"); uploadVariables.Add("payer_email", payerEmail); uploadVariables.Add("num_cart_items", "1"); uploadVariables.Add("item_name1", "item name"); uploadVariables.Add("item_number1", vendorScenario.SkuCode); uploadVariables.Add("mc_gross_1", "350"); uploadVariables.Add("quantity1", "1"); client.UploadValues(site.UrlFor("Api/TransactionByIpn/" + vendorScenario.VendorId), uploadVariables); } var email = smtpServer.ReceivedEmail.Single(); Assert.Equal(payerEmail, email.ToAddresses.Single().Address); var emailBody = Encoding.ASCII.GetString(Convert.FromBase64String(email.MessageParts.Single().BodyData)); var emailLinkMatch = Regex.Match(emailBody, @"\s(http[^\s]+)\s", RegexOptions.Multiline | RegexOptions.IgnoreCase); Assert.True(emailLinkMatch.Success, "Did not find followup link in email body: " + emailBody); var emailLink = emailLinkMatch.Groups[1].Value; using (var browser = BrowserUtil.GetBrowser()) { browser.Navigate().GoToUrl(emailLink); browser.FindElementByCssSelector("a[href^='/Transaction/Checkout']").Click(); browser.FindElementByCssSelector("a[href^='/Account/Register']").Click(); SiteUtil.SubmitRegistrationForm(browser, customerEmail, customerPassword); SiteUtil.WaitUntilUserIsLoggedIn(browser); SubmitTransactionCheckoutFormWithNewCustomer(browser); var appKeyValue = GetAppKeyFromTransactionCompletePage(browser); LicenseValidatorTests.AssertRemoteValidationCheckPasses( site, "example.com", appKeyValue, vendorScenario.FeatureCode, vendorScenario.PublicKeyXml); } } } finally { smtpServer.Stop(); } }
public void CanRegisterLocallyThenAssociateAndDisassociate3rdPartyLogin() { var email = ConfigurationManager.AppSettings.Get("googleTestEmail"); var password = ConfigurationManager.AppSettings.Get("googleTestPassword"); using (var site = new KeyHubWebDriver()) { SiteUtil.CreateLocalAccount(site, email, password); int expectedUserID; using (var browser = BrowserUtil.GetBrowser()) { browser.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); browser.Navigate().GoToUrl(site.UrlFor("/Account/Login")); browser.FindElementByCssSelector("input[name=provider][value=Google]").Click(); FillGoogleLoginForm(browser, email, password); var errorText = browser.FindElementByCssSelector(".error").Text; Assert.Contains("The email address used to login is already in use", errorText); browser.Navigate().GoToUrl(site.UrlFor("/")); SiteUtil.SubmitLoginForm(browser, email, password); expectedUserID = GetCurrentUserId(browser); browser.FindElementByCssSelector("a[href='/Account']").Click(); browser.FindElementByCssSelector("a[href='/Account/LinkAccount']").Click(); browser.Navigate().GoToUrl(site.UrlFor("/Account/LinkAccount")); Console.WriteLine("Page is " + browser.Url); browser.FindElementByCssSelector("input[name=provider][value=Google]").Click(); var successText = browser.FindElementByCssSelector(".success").Text; Assert.Contains("Your google login has been linked", successText); } using (var browser = BrowserUtil.GetBrowser()) { browser.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); browser.Navigate().GoToUrl(site.UrlFor("/")); browser.FindElementByCssSelector("input[type='submit'][value='Google']").Click(); FillGoogleLoginForm(browser, email, password); SiteUtil.WaitUntilUserIsLoggedIn(browser); Assert.Equal(expectedUserID, GetCurrentUserId(browser)); browser.FindElementByCssSelector("a[href='/Account']").Click(); browser.FindElementByCssSelector("a[href='/Account/LinkAccount']").Click(); browser.FindElementByCssSelector("a[href^='/Account/UnlinkLogin']").Click(); browser.FindElementByCssSelector("form[action^='/Account/UnlinkLogin'] input[type='submit']").Click(); var successText = browser.FindElementByCssSelector(".success").Text; Assert.Contains("Your Google login has been unlinked", successText); } using (var browser = BrowserUtil.GetBrowser()) { browser.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); browser.Navigate().GoToUrl(site.UrlFor("/")); browser.FindElementByCssSelector("input[type='submit'][value='Google']").Click(); FillGoogleLoginForm(browser, email, password); var errorText = browser.FindElementByCssSelector(".error").Text; Assert.Contains("The email address used to login is already in use", errorText); } } }