diff --git a/src/test/java/skeleton/ListSteps.java b/src/test/java/skeleton/ListSteps.java new file mode 100644 index 00000000..7550b677 --- /dev/null +++ b/src/test/java/skeleton/ListSteps.java @@ -0,0 +1,53 @@ +package skeleton; + +import cucumber.api.java.en.Given; +import cucumber.api.java.en.Then; +import cucumber.api.java.en.When; + +import java.util.ArrayList; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +/** + * Created by korobitsyna on 5/24/15. + */ +public class ListSteps { + + private ArrayList testList; + private String testString = "String"; + + @Given("I have an empty list") + public void i_have_an_empty_list() { + testList = new ArrayList(); + } + + @Given("I have a list with (\\d+) elements") + public void i_have_a_list_with_elements(int quantity) { + testList = new ArrayList(); + for(int i = 0; i < quantity; i++) { + testList.add(testString); + } + } + + @When("I add string \"(.*?)\" to a list") + public void i_add_string_to_list(String s) { + testList.add(s); + } + + @When("I remove last element") + public void i_remove_element() { + testList.remove(testList.size()-1); + } + + @Then("List length is (\\d+)") + public void list_length(int length) { + assertEquals(length, testList.size()); + } + + @Then("List contains string \"(.*?)\"$") + public void list_contains_string(String s) { + assertTrue(testList.contains(s)); + } + +} diff --git a/src/test/java/skeleton/RestSteps.java b/src/test/java/skeleton/RestSteps.java index b2fa80fa..dcf3d1f3 100644 --- a/src/test/java/skeleton/RestSteps.java +++ b/src/test/java/skeleton/RestSteps.java @@ -12,6 +12,7 @@ import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; +import org.json.JSONArray; import org.json.JSONObject; import sun.misc.IOUtils; @@ -20,6 +21,7 @@ import java.util.Map; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; /** * @author Alexey Lyanguzov @@ -46,7 +48,7 @@ public void sum_must_be(int sum) { @Given("^I have no users$") public void i_have_no_users() { - doRequest(Unirest.delete(usersBaseUrl)); + i_delete_all_users(); } @When("^I add users$") @@ -60,12 +62,53 @@ public void i_add_users(List users) { } } + @When("I delete user (.*?)$") + public void i_delete_user(String email) { + doRequest( + Unirest.delete(usersBaseUrl).queryString("email", email) + ); + + } + + @When("I delete all users") + public void i_delete_all_users() { + doRequest(Unirest.delete(usersBaseUrl)); + } + + @When("I edit user (.*?) with (.*?) and (.*?)$") + public void i_edit_user(String email, String newFirstname, String newLastname) { + + doRequest( + Unirest.post(usersBaseUrl + "/edit") + .queryString("email", email) + .body("{\"firstName\":\"" + newFirstname + "\",\"lastName\":\"" + newLastname + "\"}") + .getHttpRequest() + ); + + } + @Then("^there are (\\d+) users$") public void there_are_users(int expectedUsersCount) { doRequest(Unirest.get(usersBaseUrl)); int actualUsersCount = response.getBody().getObject().getJSONArray("users").length(); assertEquals("BBB!", expectedUsersCount, actualUsersCount); } + + @Then("User (.*?) has firstname (.*?) and lastname (.*?)$") + public void user_has_credentials(String email, String firstname, String lastname) { + doRequest(Unirest.get(usersBaseUrl)); + JSONArray users = response.getBody().getObject().getJSONArray("users"); + int index; + for(index = 0; index < users.length(); index++) { + JSONObject userRecord = users.getJSONObject(index); + if (userRecord.getString("email").equals(email)) break; + + } + String actualFirstname = users.getJSONObject(index).getString("first_name"); + String actualLastname = users.getJSONObject(index).getString("last_name"); + + assertTrue(actualFirstname.equals(firstname) && actualLastname.equals(lastname)); + } private void doRequest(HttpRequest request){ response = null; diff --git a/src/test/java/skeleton/RunCukesTest.java b/src/test/java/skeleton/RunCukesTest.java index 6c06fd7c..e2bce6a6 100644 --- a/src/test/java/skeleton/RunCukesTest.java +++ b/src/test/java/skeleton/RunCukesTest.java @@ -5,6 +5,6 @@ import org.junit.runner.RunWith; @RunWith(Cucumber.class) -@CucumberOptions(plugin = {"pretty"}, tags = {"~@my"}) +@CucumberOptions(plugin = {"pretty"}, tags = {"@my"}) public class RunCukesTest { } diff --git a/src/test/java/skeleton/SeleniumSteps.java b/src/test/java/skeleton/SeleniumSteps.java index 77fe1b8f..669be081 100644 --- a/src/test/java/skeleton/SeleniumSteps.java +++ b/src/test/java/skeleton/SeleniumSteps.java @@ -11,6 +11,8 @@ import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; +import java.util.List; +import java.util.ListIterator; import java.util.concurrent.TimeUnit; import static org.junit.Assert.assertEquals; @@ -23,6 +25,7 @@ public class SeleniumSteps { private static final String BASE_URL = "http://localhost:9944/web"; private static final String HOME_PAGE_URL = BASE_URL + "/home"; private static final String ABOUT_PAGE_URL = BASE_URL + "/about"; + private static final String LIST_USER_PAGE_URL = BASE_URL + "/listusers"; private static final int LOAD_TIMEOUT = 5; private static final int WAIT_TIMEOUT = 2; public static final int DEMO_TIMEOUT = 1000; @@ -70,9 +73,9 @@ public void back_Button_is_shown() throws Throwable { @When("^I try to return back$") public void i_try_to_return_back() throws Throwable { WebElement btn1 = driver.findElement(By.id("btn1")); - btn1.click(); //comment this line and uncomment next two -// btn1.sendKeys(Keys.RETURN); -// demo_delay(); + //btn1.click(); //comment this line and uncomment next two + btn1.sendKeys(Keys.RETURN); + demo_delay(); } @Then("^text '([^']+)' is shown$") @@ -90,4 +93,46 @@ private void demo_delay(){ } } } + + @When("I go to List User page") + public void i_open_list_user_page() throws Throwable { + WebElement listUserLink = driver.findElement(By.linkText("list users")); + listUserLink.click(); + } + + @Then("List User page is opened") + public void list_user_page_is_opened() throws Throwable { + String actualUrl = driver.getCurrentUrl(); + assertEquals(LIST_USER_PAGE_URL, actualUrl); + demo_delay(); + } + + @Then("User table contains (\\d+) records") + public void user_table_contains_records(int number) { + WebElement table = driver.findElement(By.tagName("table")); + List tableContents = table.findElements(By.tagName("tr")); + assertEquals(number, tableContents.size() - 1); + } + + @When("I reload the page") + public void reload_page() { + driver.navigate().refresh(); + } + + @Then("User ([^']+) is on the list") + public void user_is_on_the_list(String email) { + WebElement table = driver.findElement(By.tagName("table")); + List tableContents = table.findElements(By.tagName("tr")); + + boolean containsString = false; + ListIterator iter = tableContents.listIterator(); + while(iter.hasNext()) { + if(iter.next().getText().contains(email)) { + containsString = true; + break; + } + } + assertTrue(containsString); + + } } diff --git a/src/test/resources/skeleton/api_test_hw.feature b/src/test/resources/skeleton/api_test_hw.feature new file mode 100644 index 00000000..0ed06648 --- /dev/null +++ b/src/test/resources/skeleton/api_test_hw.feature @@ -0,0 +1,17 @@ +Feature: test java.util.ArrayList + + @my + Scenario: empty list length + Given I have an empty list + Then List length is 0 + @my + Scenario: add element to list + Given I have an empty list + When I add string "abc" to a list + Then List contains string "abc" + @my + Scenario: remove element from list + Given I have a list with 5 elements + When I remove last element + Then List length is 4 + diff --git a/src/test/resources/skeleton/rest_test.feature b/src/test/resources/skeleton/rest_test.feature index 36dfaad5..5908beb3 100644 --- a/src/test/resources/skeleton/rest_test.feature +++ b/src/test/resources/skeleton/rest_test.feature @@ -12,3 +12,39 @@ Feature: test through Rest | u1@a.b | aa | bb | | u2@c.d | cc | dd | Then there are 2 users + +#Homework test scenarios + @my + Scenario: delete a user + Given I have no users + And I add users + | email | firstName | lastName | + | test1@mail.com | test1FirstName | test1LastName | + | test2@mail.com | test2FirstName | test2LastName | + When I delete user test1@mail.com + Then there are 1 users + @my + Scenario: delete all users + Given I add users + | email | firstName | lastName | + | test3@mail.com | test3FirstName | test3LastName | + | test4@mail.com | test4FirstName | test4LastName | + When I delete all users + Then there are 0 users + + @my + Scenario Outline: editing users + Given I have no users + And I add users + | email | firstName | lastName | + | | | | + When I edit user with and + Then User has firstname and lastname + + #test valid editing, test editing with empty fields + Examples: + | email | oldFirstname | oldLastname | newFirstname | newLastname | + | test1@mail.com | oldfirstname1 | oldlastname1 | newf1 | newl1 | + | test1@mail.com | oldfirstname1 | oldlastname1 | | | + + diff --git a/src/test/resources/skeleton/selenium_test.feature b/src/test/resources/skeleton/selenium_test.feature index 4e8f0ea1..84753fda 100644 --- a/src/test/resources/skeleton/selenium_test.feature +++ b/src/test/resources/skeleton/selenium_test.feature @@ -10,4 +10,32 @@ Feature: Selenium WebDriver When I try to return back Then text 'Wow! You have clicked me!' is shown And About page is still opened - + + + #Homework test scenarios + @my + Scenario: list users + Given I have no users + And I add users + | email | firstName | lastName | + | test1@mail.com | test1FirstName | test1LastName | + | test2@mail.com | test2FirstName | test2LastName | + And I am on home page + When I go to List User page + Then List User page is opened + And User table contains 2 records + + @my + Scenario: list empty user list + Given I have no users + And I am on home page + When I go to List User page + Then List User page is opened + And User table contains 0 records + When I add users + | email | firstName | lastName | + | test1@mail.com | test1FirstName | test1LastName | + And I reload the page + Then User table contains 1 records + And User test1@mail.com is on the list +