Skip to content

Commit 3bd5de3

Browse files
committed
Added user registration tests + some UI tests refactoring
1 parent 60cc073 commit 3bd5de3

File tree

12 files changed

+232
-19
lines changed

12 files changed

+232
-19
lines changed

src/Server/Coderr.Server.SqlServer.Tests/Helpers/TestDataManager.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using codeRR.Server.SqlServer.Core.Accounts;
1313
using codeRR.Server.SqlServer.Core.Applications;
1414
using codeRR.Server.SqlServer.Core.Users;
15+
using codeRR.Server.SqlServer.Tests.Models;
1516
using Coderr.Server.PluginApi.Config;
1617
using Griffin.Data;
1718
using Griffin.Data.Mapper;
@@ -38,6 +39,8 @@ public TestDataManager(Func<IDbConnection> connectionFactory)
3839
/// </remarks>
3940
public int AccountId { get; private set; }
4041

42+
public TestUser TestUser { get; set; }
43+
4144
public Application Application { get; private set; }
4245

4346
/// <summary>
@@ -119,7 +122,7 @@ private void EnsureServerSettings(string baseUrl)
119122
}
120123

121124
var sql = $@"INSERT INTO Settings (Section, Name, Value) VALUES
122-
('BaseConfig', 'AllowRegistrations', 'False'),
125+
('BaseConfig', 'AllowRegistrations', 'True'),
123126
('BaseConfig', 'BaseUrl', '{baseUrl}'),
124127
('BaseConfig', 'SenderEmail', 'webtests@coderrapp.com'),
125128
('BaseConfig', 'SupportEmail', 'webtests@coderrapp.com'),
@@ -184,11 +187,11 @@ public void ResetDatabase(string baseUrl)
184187
protected void CreateUserAndApplication(IAdoNetUnitOfWork uow, out int accountId, out int applicationId)
185188
{
186189
var accountRepos = new AccountRepository(uow);
187-
var account = new Account("arne", "123456") {Email = "arne@som.com"};
190+
var account = new Account(TestUser.Username, TestUser.Password) {Email = TestUser.Email};
188191
account.Activate();
189192
accountRepos.Create(account);
190193
var userRepos = new UserRepository(uow);
191-
var user = new User(account.Id, "arne") {EmailAddress = "arne@som.com"};
194+
var user = new User(account.Id, TestUser.Username) {EmailAddress =TestUser.Email};
192195
userRepos.CreateAsync(user).GetAwaiter().GetResult();
193196

194197
var appRepos = new ApplicationRepository(uow);
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace codeRR.Server.SqlServer.Tests.Models
2+
{
3+
public class TestUser
4+
{
5+
public string Username { get; set; }
6+
public string Password { get; set; }
7+
public string Email { get; set; }
8+
}
9+
}

src/Server/Coderr.Server.Web.Tests/Helpers/Extensions/WebDriverExtensions.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,31 @@ public static bool ElementIsPresent(this IWebDriver driver, By by)
2020
return present;
2121
}
2222

23+
public static bool ElementIsPresent(this IWebDriver driver, IWebElement element)
24+
{
25+
var present = false;
26+
try
27+
{
28+
present = element.Displayed;
29+
}
30+
catch (NoSuchElementException)
31+
{
32+
}
33+
return present;
34+
}
35+
2336
public static bool WaitUntilElementIsPresent(this IWebDriver driver, By by, int timeout = 5)
2437
{
2538
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
2639
return wait.Until(d => d.ElementIsPresent(by));
2740
}
2841

42+
public static bool WaitUntilElementIsPresent(this IWebDriver driver, IWebElement element, int timeout = 5)
43+
{
44+
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(timeout));
45+
return wait.Until(d => d.ElementIsPresent(element));
46+
}
47+
2948
public static string WaitUntilTitleEquals(this IWebDriver driver, string title, int timeout = 5)
3049
{
3150
try
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using OpenQA.Selenium;
2+
using OpenQA.Selenium.Support.UI;
3+
4+
namespace codeRR.Server.Web.Tests.Pages.Account
5+
{
6+
public class ActivationRequestedPage : BasePage
7+
{
8+
public ActivationRequestedPage(IWebDriver webDriver) : base(webDriver, (string) "Account/ActivationRequested", (string) "Account registered - codeRR")
9+
{
10+
}
11+
12+
public void VerifyIsCurrentPage()
13+
{
14+
Wait.Until(ExpectedConditions.TitleIs(Title));
15+
}
16+
}
17+
}

src/Server/Coderr.Server.Web.Tests/Pages/LoginPage.cs renamed to src/Server/Coderr.Server.Web.Tests/Pages/Account/LoginPage.cs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@
22
using OpenQA.Selenium.Support.PageObjects;
33
using OpenQA.Selenium.Support.UI;
44

5-
namespace codeRR.Server.Web.Tests.Pages
5+
namespace codeRR.Server.Web.Tests.Pages.Account
66
{
77
public class LoginPage : BasePage
88
{
9-
private const string UserName = "arne";
10-
private const string Password = "123456";
11-
12-
public LoginPage(IWebDriver webDriver) : base(webDriver, "Account/Login", "Login - codeRR")
9+
public LoginPage(IWebDriver webDriver) : base(webDriver, (string) "Account/Login", (string) "Login - codeRR")
1310
{
1411
}
1512

@@ -27,10 +24,10 @@ public HomePage LoginWithValidCredentials()
2724
NavigateToPage();
2825

2926
UserNameField.Clear();
30-
UserNameField.SendKeys(UserName);
27+
UserNameField.SendKeys(TestUser.Username);
3128

3229
PasswordField.Clear();
33-
PasswordField.SendKeys(Password);
30+
PasswordField.SendKeys(TestUser.Password);
3431

3532
SignInButton.Click();
3633

@@ -59,7 +56,7 @@ public LoginPage LoginWithNonExistingUserWithPasswordSpecified()
5956
UserNameField.SendKeys("NonExistingUsername");
6057

6158
PasswordField.Clear();
62-
PasswordField.SendKeys(Password);
59+
PasswordField.SendKeys(TestUser.Password);
6360

6461
SignInButton.Click();
6562

@@ -73,7 +70,7 @@ public LoginPage LoginWithNoUserNameSpecified()
7370
UserNameField.Clear();
7471

7572
PasswordField.Clear();
76-
PasswordField.SendKeys(Password);
73+
PasswordField.SendKeys(TestUser.Password);
7774

7875
SignInButton.Click();
7976

@@ -98,7 +95,7 @@ public LoginPage LoginWithNoPasswordSpecified()
9895
NavigateToPage();
9996

10097
UserNameField.Clear();
101-
UserNameField.SendKeys(UserName);
98+
UserNameField.SendKeys(TestUser.Username);
10299

103100
PasswordField.Clear();
104101

@@ -112,10 +109,10 @@ public LoginPage LoginWithWrongPasswordSpecified()
112109
NavigateToPage();
113110

114111
UserNameField.Clear();
115-
UserNameField.SendKeys(UserName);
112+
UserNameField.SendKeys(TestUser.Username);
116113

117114
PasswordField.Clear();
118-
PasswordField.SendKeys(Password.Substring(1));
115+
PasswordField.SendKeys(TestUser.Password.Substring(1));
119116

120117
SignInButton.Click();
121118

src/Server/Coderr.Server.Web.Tests/Pages/LogoutPage.cs renamed to src/Server/Coderr.Server.Web.Tests/Pages/Account/LogoutPage.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
using OpenQA.Selenium;
22

3-
namespace codeRR.Server.Web.Tests.Pages
3+
namespace codeRR.Server.Web.Tests.Pages.Account
44
{
55
public class LogoutPage : BasePage
66
{
7-
public LogoutPage(IWebDriver webDriver) : base(webDriver, "Account/Logout", "")
7+
public LogoutPage(IWebDriver webDriver) : base(webDriver, (string) "Account/Logout", (string) "")
88
{
99
}
1010

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
using codeRR.Server.Web.Tests.Helpers.Extensions;
2+
using OpenQA.Selenium;
3+
using OpenQA.Selenium.Support.PageObjects;
4+
using OpenQA.Selenium.Support.UI;
5+
6+
namespace codeRR.Server.Web.Tests.Pages.Account
7+
{
8+
public class RegisterPage : BasePage
9+
{
10+
public RegisterPage(IWebDriver webDriver) : base(webDriver, (string) "Account/Register", (string) "Register account - codeRR")
11+
{
12+
}
13+
14+
[FindsBy(How = How.Id, Using = "UserName")]
15+
public IWebElement UserNameField { get; set; }
16+
17+
[FindsBy(How = How.Id, Using = "Password")]
18+
public IWebElement PasswordField { get; set; }
19+
20+
[FindsBy(How = How.Id, Using = "Password2")]
21+
public IWebElement RetypePasswordField { get; set; }
22+
23+
[FindsBy(How = How.Id, Using = "Email")]
24+
public IWebElement EmailField { get; set; }
25+
26+
[FindsBy(How = How.ClassName, Using = "btn-primary")]
27+
public IWebElement SignUpButton { get; set; }
28+
29+
[FindsBy(How = How.ClassName, Using = "field-validation-error")]
30+
public IWebElement ValidationErrorField { get; set; }
31+
32+
public void VerifyIsCurrentPage()
33+
{
34+
Wait.Until(ExpectedConditions.TitleIs(Title));
35+
}
36+
37+
public RegisterPage RegisterUsingAlreadyTakenUsername()
38+
{
39+
NavigateToPage();
40+
41+
ClearForm();
42+
43+
UserNameField.SendKeys(TestUser.Username);
44+
PasswordField.SendKeys(TestUser.Password);
45+
RetypePasswordField.SendKeys(TestUser.Password);
46+
EmailField.SendKeys(TestUser.Email);
47+
48+
SignUpButton.Click();
49+
50+
return this;
51+
}
52+
53+
public RegisterPage RegisterUsingAlreadyTakenEmail()
54+
{
55+
NavigateToPage();
56+
57+
ClearForm();
58+
59+
UserNameField.SendKeys(TestUser.Username + "2");
60+
PasswordField.SendKeys(TestUser.Password);
61+
RetypePasswordField.SendKeys(TestUser.Password);
62+
EmailField.SendKeys(TestUser.Email);
63+
64+
SignUpButton.Click();
65+
66+
return this;
67+
}
68+
69+
public ActivationRequestedPage RegisterNewUser()
70+
{
71+
NavigateToPage();
72+
73+
ClearForm();
74+
75+
UserNameField.SendKeys(TestUser.Username + "2");
76+
PasswordField.SendKeys(TestUser.Password);
77+
RetypePasswordField.SendKeys(TestUser.Password);
78+
EmailField.SendKeys("TestUser2@coderrapp.com");
79+
80+
SignUpButton.Click();
81+
82+
return new ActivationRequestedPage(WebDriver);
83+
}
84+
85+
public RegisterPage VerifyUsernameIsAlreadyTaken()
86+
{
87+
WebDriver.WaitUntilElementIsPresent(ValidationErrorField);
88+
return this;
89+
}
90+
91+
public RegisterPage VerifyEmailIsAlreadyTaken()
92+
{
93+
WebDriver.WaitUntilElementIsPresent(ValidationErrorField);
94+
return this;
95+
}
96+
97+
private void ClearForm()
98+
{
99+
UserNameField.Clear();
100+
PasswordField.Clear();
101+
RetypePasswordField.Clear();
102+
EmailField.Clear();
103+
}
104+
}
105+
}

src/Server/Coderr.Server.Web.Tests/Pages/BasePage.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using codeRR.Server.SqlServer.Tests.Models;
23
using OpenQA.Selenium;
34
using OpenQA.Selenium.Support.PageObjects;
45
using OpenQA.Selenium.Support.UI;
@@ -11,7 +12,9 @@ public class BasePage
1112
protected WebDriverWait Wait;
1213
protected string BaseUrl { get; }
1314
protected string Url { get; set; }
14-
protected string Title { get; }
15+
public string Title { get; }
16+
17+
protected readonly TestUser TestUser = WebTest.TestUser;
1518

1619
public BasePage(IWebDriver webDriver, string url, string title)
1720
{

src/Server/Coderr.Server.Web.Tests/Tests/LoggedInTest.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using codeRR.Server.Web.Tests.Pages;
2+
using codeRR.Server.Web.Tests.Pages.Account;
23
using Xunit;
34

45
namespace codeRR.Server.Web.Tests.Tests

src/Server/Coderr.Server.Web.Tests/Tests/LoginPageTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using codeRR.Server.Web.Tests.Pages;
2+
using codeRR.Server.Web.Tests.Pages.Account;
23
using Xunit;
34

45
namespace codeRR.Server.Web.Tests.Tests

0 commit comments

Comments
 (0)