Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
using codeRR.Server.SqlServer.Core.Accounts;
using codeRR.Server.SqlServer.Core.Applications;
using codeRR.Server.SqlServer.Core.Users;
using codeRR.Server.SqlServer.Tests.Models;
using Coderr.Server.PluginApi.Config;
using Griffin.Data;
using Griffin.Data.Mapper;
Expand All @@ -38,6 +39,8 @@ public TestDataManager(Func<IDbConnection> connectionFactory)
/// </remarks>
public int AccountId { get; private set; }

public TestUser TestUser { get; set; }

public Application Application { get; private set; }

/// <summary>
Expand Down Expand Up @@ -119,7 +122,7 @@ private void EnsureServerSettings(string baseUrl)
}

var sql = $@"INSERT INTO Settings (Section, Name, Value) VALUES
('BaseConfig', 'AllowRegistrations', 'False'),
('BaseConfig', 'AllowRegistrations', 'True'),
('BaseConfig', 'BaseUrl', '{baseUrl}'),
('BaseConfig', 'SenderEmail', 'webtests@coderrapp.com'),
('BaseConfig', 'SupportEmail', 'webtests@coderrapp.com'),
Expand Down Expand Up @@ -184,11 +187,11 @@ public void ResetDatabase(string baseUrl)
protected void CreateUserAndApplication(IAdoNetUnitOfWork uow, out int accountId, out int applicationId)
{
var accountRepos = new AccountRepository(uow);
var account = new Account("arne", "123456") {Email = "arne@som.com"};
var account = new Account(TestUser.Username, TestUser.Password) {Email = TestUser.Email};
account.Activate();
accountRepos.Create(account);
var userRepos = new UserRepository(uow);
var user = new User(account.Id, "arne") {EmailAddress = "arne@som.com"};
var user = new User(account.Id, TestUser.Username) {EmailAddress =TestUser.Email};
userRepos.CreateAsync(user).GetAwaiter().GetResult();

var appRepos = new ApplicationRepository(uow);
Expand Down
9 changes: 9 additions & 0 deletions src/Server/Coderr.Server.SqlServer.Tests/Models/TestUser.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace codeRR.Server.SqlServer.Tests.Models
{
public class TestUser
{
public string Username { get; set; }
public string Password { get; set; }
public string Email { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,31 @@ public static bool ElementIsPresent(this IWebDriver driver, By by)
return present;
}

public static bool ElementIsPresent(this IWebDriver driver, IWebElement element)
{
var present = false;
try
{
present = element.Displayed;
}
catch (NoSuchElementException)
{
}
return present;
}

public static bool WaitUntilElementIsPresent(this IWebDriver driver, By by, int timeout = 5)
{
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
return wait.Until(d => d.ElementIsPresent(by));
}

public static bool WaitUntilElementIsPresent(this IWebDriver driver, IWebElement element, int timeout = 5)
{
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
return wait.Until(d => d.ElementIsPresent(element));
}

public static string WaitUntilTitleEquals(this IWebDriver driver, string title, int timeout = 5)
{
try
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using OpenQA.Selenium;
using OpenQA.Selenium.Support.UI;

namespace codeRR.Server.Web.Tests.Pages.Account
{
public class ActivationRequestedPage : BasePage
{
public ActivationRequestedPage(IWebDriver webDriver) : base(webDriver, (string) "Account/ActivationRequested", (string) "Account registered - codeRR")
{
}

public void VerifyIsCurrentPage()
{
Wait.Until(ExpectedConditions.TitleIs(Title));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,11 @@
using OpenQA.Selenium.Support.PageObjects;
using OpenQA.Selenium.Support.UI;

namespace codeRR.Server.Web.Tests.Pages
namespace codeRR.Server.Web.Tests.Pages.Account
{
public class LoginPage : BasePage
{
private const string UserName = "arne";
private const string Password = "123456";

public LoginPage(IWebDriver webDriver) : base(webDriver, "Account/Login", "Login - codeRR")
public LoginPage(IWebDriver webDriver) : base(webDriver, (string) "Account/Login", (string) "Login - codeRR")
{
}

Expand All @@ -27,24 +24,66 @@ public HomePage LoginWithValidCredentials()
NavigateToPage();

UserNameField.Clear();
UserNameField.SendKeys(UserName);
UserNameField.SendKeys(TestUser.Username);

PasswordField.Clear();
PasswordField.SendKeys(Password);
PasswordField.SendKeys(TestUser.Password);

SignInButton.Click();

return new HomePage(WebDriver);
}

public LoginPage LoginWithNonExistingUserWithoutPasswordSpecified()
{
NavigateToPage();

UserNameField.Clear();
UserNameField.SendKeys("NonExistingUsername");

PasswordField.Clear();

SignInButton.Click();

return this;
}

public LoginPage LoginWithNonExistingUserWithPasswordSpecified()
{
NavigateToPage();

UserNameField.Clear();
UserNameField.SendKeys("NonExistingUsername");

PasswordField.Clear();
PasswordField.SendKeys(TestUser.Password);

SignInButton.Click();

return this;
}

public LoginPage LoginWithNoUserNameSpecified()
{
NavigateToPage();

UserNameField.Clear();

PasswordField.Clear();
PasswordField.SendKeys(Password);
PasswordField.SendKeys(TestUser.Password);

SignInButton.Click();

return this;
}

public LoginPage LoginWithNoUserNameAndNoPasswordSpecified()
{
NavigateToPage();

UserNameField.Clear();

PasswordField.Clear();

SignInButton.Click();

Expand All @@ -56,7 +95,7 @@ public LoginPage LoginWithNoPasswordSpecified()
NavigateToPage();

UserNameField.Clear();
UserNameField.SendKeys(UserName);
UserNameField.SendKeys(TestUser.Username);

PasswordField.Clear();

Expand All @@ -70,10 +109,10 @@ public LoginPage LoginWithWrongPasswordSpecified()
NavigateToPage();

UserNameField.Clear();
UserNameField.SendKeys(UserName);
UserNameField.SendKeys(TestUser.Username);

PasswordField.Clear();
PasswordField.SendKeys(Password.Substring(1));
PasswordField.SendKeys(TestUser.Password.Substring(1));

SignInButton.Click();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
using OpenQA.Selenium;

namespace codeRR.Server.Web.Tests.Pages
namespace codeRR.Server.Web.Tests.Pages.Account
{
public class LogoutPage : BasePage
{
public LogoutPage(IWebDriver webDriver) : base(webDriver, "Account/Logout", "")
public LogoutPage(IWebDriver webDriver) : base(webDriver, (string) "Account/Logout", (string) "")
{
}

Expand Down
105 changes: 105 additions & 0 deletions src/Server/Coderr.Server.Web.Tests/Pages/Account/RegisterPage.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
using codeRR.Server.Web.Tests.Helpers.Extensions;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using OpenQA.Selenium.Support.UI;

namespace codeRR.Server.Web.Tests.Pages.Account
{
public class RegisterPage : BasePage
{
public RegisterPage(IWebDriver webDriver) : base(webDriver, (string) "Account/Register", (string) "Register account - codeRR")
{
}

[FindsBy(How = How.Id, Using = "UserName")]
public IWebElement UserNameField { get; set; }

[FindsBy(How = How.Id, Using = "Password")]
public IWebElement PasswordField { get; set; }

[FindsBy(How = How.Id, Using = "Password2")]
public IWebElement RetypePasswordField { get; set; }

[FindsBy(How = How.Id, Using = "Email")]
public IWebElement EmailField { get; set; }

[FindsBy(How = How.ClassName, Using = "btn-primary")]
public IWebElement SignUpButton { get; set; }

[FindsBy(How = How.ClassName, Using = "field-validation-error")]
public IWebElement ValidationErrorField { get; set; }

public void VerifyIsCurrentPage()
{
Wait.Until(ExpectedConditions.TitleIs(Title));
}

public RegisterPage RegisterUsingAlreadyTakenUsername()
{
NavigateToPage();

ClearForm();

UserNameField.SendKeys(TestUser.Username);
PasswordField.SendKeys(TestUser.Password);
RetypePasswordField.SendKeys(TestUser.Password);
EmailField.SendKeys(TestUser.Email);

SignUpButton.Click();

return this;
}

public RegisterPage RegisterUsingAlreadyTakenEmail()
{
NavigateToPage();

ClearForm();

UserNameField.SendKeys(TestUser.Username + "2");
PasswordField.SendKeys(TestUser.Password);
RetypePasswordField.SendKeys(TestUser.Password);
EmailField.SendKeys(TestUser.Email);

SignUpButton.Click();

return this;
}

public ActivationRequestedPage RegisterNewUser()
{
NavigateToPage();

ClearForm();

UserNameField.SendKeys(TestUser.Username + "2");
PasswordField.SendKeys(TestUser.Password);
RetypePasswordField.SendKeys(TestUser.Password);
EmailField.SendKeys("TestUser2@coderrapp.com");

SignUpButton.Click();

return new ActivationRequestedPage(WebDriver);
}

public RegisterPage VerifyUsernameIsAlreadyTaken()
{
WebDriver.WaitUntilElementIsPresent(ValidationErrorField);
return this;
}

public RegisterPage VerifyEmailIsAlreadyTaken()
{
WebDriver.WaitUntilElementIsPresent(ValidationErrorField);
return this;
}

private void ClearForm()
{
UserNameField.Clear();
PasswordField.Clear();
RetypePasswordField.Clear();
EmailField.Clear();
}
}
}
5 changes: 4 additions & 1 deletion src/Server/Coderr.Server.Web.Tests/Pages/BasePage.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using codeRR.Server.SqlServer.Tests.Models;
using OpenQA.Selenium;
using OpenQA.Selenium.Support.PageObjects;
using OpenQA.Selenium.Support.UI;
Expand All @@ -11,7 +12,9 @@ public class BasePage
protected WebDriverWait Wait;
protected string BaseUrl { get; }
protected string Url { get; set; }
protected string Title { get; }
public string Title { get; }

protected readonly TestUser TestUser = WebTest.TestUser;

public BasePage(IWebDriver webDriver, string url, string title)
{
Expand Down
6 changes: 3 additions & 3 deletions src/Server/Coderr.Server.Web.Tests/Pages/HomePage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public HomePage(IWebDriver webDriver) : base(webDriver, "", "Overview")
}

[FindsBy(How = How.XPath, Using = "//a/span[.=' MyTestApp ']")]
public IWebElement FirstApplication { get; set; }
public IWebElement NavigationMyTestApp { get; set; }

[FindsBy(How = How.Id, Using = "pageTitle")]
public IWebElement PageTitle { get; set; }
Expand Down Expand Up @@ -41,9 +41,9 @@ public void VerifyIsCurrentPage()
Wait.Until(ExpectedConditions.TitleIs("Overview"));
}

public void VerifyNavigatedToFirstApplication()
public void VerifyNavigatedToMyTestApp()
{
Wait.Until(ExpectedConditions.TextToBePresentInElement(PageTitle, Title));
Wait.Until(ExpectedConditions.TextToBePresentInElement(PageTitle, "MyTestApp"));
}
}
}
6 changes: 3 additions & 3 deletions src/Server/Coderr.Server.Web.Tests/Tests/HomePageTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace codeRR.Server.Web.Tests.Tests
public class HomePageTests : LoggedInTest
{
[Fact]
public void Should_be_able_to_navigate_to_application()
public void Should_be_able_to_navigate_to_myfirstapp_application()
{
UITest(() =>
{
Expand All @@ -16,9 +16,9 @@ public void Should_be_able_to_navigate_to_application()
var sut = new HomePage(WebDriver);
sut.NavigateToPage();

sut.FirstApplication.Click();
sut.NavigationMyTestApp.Click();

sut.VerifyNavigatedToFirstApplication();
sut.VerifyNavigatedToMyTestApp();

Logout();
});
Expand Down
1 change: 1 addition & 0 deletions src/Server/Coderr.Server.Web.Tests/Tests/LoggedInTest.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using codeRR.Server.Web.Tests.Pages;
using codeRR.Server.Web.Tests.Pages.Account;
using Xunit;

namespace codeRR.Server.Web.Tests.Tests
Expand Down
Loading