From d235de5c4fa658e9a16489eb3816628b960ddd26 Mon Sep 17 00:00:00 2001 From: totallynotkate Date: Thu, 12 May 2016 17:14:32 +0300 Subject: [PATCH 1/3] Add API vs DB test homework --- .../main/java/ru/qatools/school/DbClient.java | 9 ++++ .../utils/deserialization/CitySuggest.java | 50 +++++++++++++++++++ dbclient-tests/pom.xml | 50 +++++++++++++++++++ .../test/java/ru/qatools/school/DbTest.java | 46 +++++++++++++++++ pom.xml | 1 + 5 files changed, 156 insertions(+) create mode 100644 dbclient-module/src/main/java/ru/qatools/school/utils/deserialization/CitySuggest.java create mode 100644 dbclient-tests/pom.xml create mode 100644 dbclient-tests/src/test/java/ru/qatools/school/DbTest.java diff --git a/dbclient-module/src/main/java/ru/qatools/school/DbClient.java b/dbclient-module/src/main/java/ru/qatools/school/DbClient.java index 12e1204..207f9c3 100644 --- a/dbclient-module/src/main/java/ru/qatools/school/DbClient.java +++ b/dbclient-module/src/main/java/ru/qatools/school/DbClient.java @@ -2,10 +2,12 @@ import org.jooq.*; import org.jooq.impl.DSL; +import ru.qatools.school.utils.deserialization.CitySuggest; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; +import java.util.List; import static org.jooq.impl.DSL.field; import static org.jooq.impl.DSL.table; @@ -39,6 +41,13 @@ public String getCityById(Integer id) { return result.getValue(0, String.class); } + public List getSuggestedCities(String query){ + return create.select() + .from(table("City")) + .where(field("name").contains(query)) + .fetchInto(CitySuggest.class); + } + public void close() { try { connection.close(); diff --git a/dbclient-module/src/main/java/ru/qatools/school/utils/deserialization/CitySuggest.java b/dbclient-module/src/main/java/ru/qatools/school/utils/deserialization/CitySuggest.java new file mode 100644 index 0000000..5077320 --- /dev/null +++ b/dbclient-module/src/main/java/ru/qatools/school/utils/deserialization/CitySuggest.java @@ -0,0 +1,50 @@ +package ru.qatools.school.utils.deserialization; + +/** + * @author totallynotkate (Kate Kocijevska) + */ +public class CitySuggest { + private int id; + private String name; + private String country; + private int uid; + + public int getId() { + return id; + } + + public String getName() { + return name; + } + + public String getCountry() { + return country; + } + + public int getUid() { + return uid; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + CitySuggest suggest = (CitySuggest) o; + + if (id != suggest.id) return false; + if (uid != suggest.uid) return false; + if (name != null ? !name.equals(suggest.name) : suggest.name != null) return false; + return country != null ? country.equals(suggest.country) : suggest.country == null; + + } + + @Override + public int hashCode() { + int result = id; + result = 31 * result + (name != null ? name.hashCode() : 0); + result = 31 * result + (country != null ? country.hashCode() : 0); + result = 31 * result + uid; + return result; + } +} diff --git a/dbclient-tests/pom.xml b/dbclient-tests/pom.xml new file mode 100644 index 0000000..f08d320 --- /dev/null +++ b/dbclient-tests/pom.xml @@ -0,0 +1,50 @@ + + + + school-2016 + ru.qatools.school + 1.0-SNAPSHOT + + 4.0.0 + + dbclient-tests + + + + ru.qatools.school + dbclient-module + ${project.version} + + + ru.yandex.qatools.allure + allure-java-annotations + 1.4.23 + test + + + com.jayway.restassured + rest-assured + 2.9.0 + test + + + com.jayway.restassured + json-schema-validator + 2.9.0 + test + + + ru.yandex.qatools.matchers + collection-matchers + 1.3 + + + com.googlecode.lambdaj + lambdaj + 2.3.3 + + + + \ No newline at end of file diff --git a/dbclient-tests/src/test/java/ru/qatools/school/DbTest.java b/dbclient-tests/src/test/java/ru/qatools/school/DbTest.java new file mode 100644 index 0000000..30f0f28 --- /dev/null +++ b/dbclient-tests/src/test/java/ru/qatools/school/DbTest.java @@ -0,0 +1,46 @@ +package ru.qatools.school; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import ru.qatools.school.utils.deserialization.CitySuggest; +import ru.yandex.qatools.allure.annotations.Features; +import ru.yandex.qatools.allure.annotations.Title; + +import java.util.Arrays; +import java.util.List; + +import static com.jayway.restassured.RestAssured.given; +import static org.hamcrest.MatcherAssert.assertThat; +import static ru.yandex.qatools.matchers.collection.HasSameItemsAsListMatcher.hasSameItemsAsList; + +/** + * @author totallynotkate (Kate Kocijevska) + */ +public class DbTest { + + private DbClient dbClient; + + @Before + public void before(){ + dbClient = new DbClient(); + } + + @Test + @Title ("Списки саджестов городов из API и БД должны совпадать") + @Features("Запросы к DB и API") + public void shouldGetSameSuggests(){ + List dbSuggest = dbClient.getSuggestedCities("mos"); + List apiSuggest = Arrays.asList(given().baseUri("http://weather.lanwen.ru") + .basePath("api") + .param("query", "mos") + .get("suggest") + .as(CitySuggest[].class)); + assertThat("Списки саджестов городов из API и БД должны совпадать", apiSuggest, hasSameItemsAsList(dbSuggest)); + } + + @After + public void after(){ + dbClient.close(); + } +} diff --git a/pom.xml b/pom.xml index 2f0da8b..af08ccf 100644 --- a/pom.xml +++ b/pom.xml @@ -16,6 +16,7 @@ steps-module commons-module dbclient-module + dbclient-tests From 1d104934c8a718542a127cd345fee54c2dfa30c8 Mon Sep 17 00:00:00 2001 From: totallynotkate Date: Fri, 13 May 2016 13:08:17 +0300 Subject: [PATCH 2/3] Change project structure --- api-data-module/pom.xml | 28 +++++++++++ .../qatools/school/apiData/CitySuggest.java | 31 ++++++++++++ {dbclient-tests => api-db-tests}/pom.xml | 0 .../test/java/ru/qatools/school/DbTest.java | 2 +- dbclient-module/pom.xml | 5 ++ .../main/java/ru/qatools/school/DbClient.java | 2 +- .../utils/deserialization/CitySuggest.java | 50 ------------------- pom.xml | 1 + 8 files changed, 67 insertions(+), 52 deletions(-) create mode 100644 api-data-module/pom.xml create mode 100644 api-data-module/src/main/java/ru/qatools/school/apiData/CitySuggest.java rename {dbclient-tests => api-db-tests}/pom.xml (100%) rename {dbclient-tests => api-db-tests}/src/test/java/ru/qatools/school/DbTest.java (95%) delete mode 100644 dbclient-module/src/main/java/ru/qatools/school/utils/deserialization/CitySuggest.java diff --git a/api-data-module/pom.xml b/api-data-module/pom.xml new file mode 100644 index 0000000..a2b3e07 --- /dev/null +++ b/api-data-module/pom.xml @@ -0,0 +1,28 @@ + + + + school-2016 + ru.qatools.school + 1.0-SNAPSHOT + + 4.0.0 + + api-data-module + API Data Module + + + + com.squareup.retrofit2 + retrofit + 2.0.2 + + + org.apache.httpcomponents + httpcore + 4.4.3 + + + + \ No newline at end of file diff --git a/api-data-module/src/main/java/ru/qatools/school/apiData/CitySuggest.java b/api-data-module/src/main/java/ru/qatools/school/apiData/CitySuggest.java new file mode 100644 index 0000000..6466fbc --- /dev/null +++ b/api-data-module/src/main/java/ru/qatools/school/apiData/CitySuggest.java @@ -0,0 +1,31 @@ +package ru.qatools.school.apiData; + +/** + * @author totallynotkate (Kate Kocijevska). + */ +public class CitySuggest { + public int id; + + public String country; + + public String name; + + public int uid; + + public int getId() { + return id; + } + + public String getCountry() { + return country; + } + + public String getName() { + return name; + } + + public int getUid() { + return uid; + } + +} diff --git a/dbclient-tests/pom.xml b/api-db-tests/pom.xml similarity index 100% rename from dbclient-tests/pom.xml rename to api-db-tests/pom.xml diff --git a/dbclient-tests/src/test/java/ru/qatools/school/DbTest.java b/api-db-tests/src/test/java/ru/qatools/school/DbTest.java similarity index 95% rename from dbclient-tests/src/test/java/ru/qatools/school/DbTest.java rename to api-db-tests/src/test/java/ru/qatools/school/DbTest.java index 30f0f28..871efe7 100644 --- a/dbclient-tests/src/test/java/ru/qatools/school/DbTest.java +++ b/api-db-tests/src/test/java/ru/qatools/school/DbTest.java @@ -3,7 +3,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; -import ru.qatools.school.utils.deserialization.CitySuggest; +import ru.qatools.school.apiData.CitySuggest; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Title; diff --git a/dbclient-module/pom.xml b/dbclient-module/pom.xml index 2994039..3c47993 100644 --- a/dbclient-module/pom.xml +++ b/dbclient-module/pom.xml @@ -22,6 +22,11 @@ mysql-connector-java 5.1.6 + + ru.qatools.school + api-data-module + 1.0-SNAPSHOT + diff --git a/dbclient-module/src/main/java/ru/qatools/school/DbClient.java b/dbclient-module/src/main/java/ru/qatools/school/DbClient.java index 207f9c3..f68f1a4 100644 --- a/dbclient-module/src/main/java/ru/qatools/school/DbClient.java +++ b/dbclient-module/src/main/java/ru/qatools/school/DbClient.java @@ -2,7 +2,7 @@ import org.jooq.*; import org.jooq.impl.DSL; -import ru.qatools.school.utils.deserialization.CitySuggest; +import ru.qatools.school.apiData.CitySuggest; import java.sql.Connection; import java.sql.DriverManager; diff --git a/dbclient-module/src/main/java/ru/qatools/school/utils/deserialization/CitySuggest.java b/dbclient-module/src/main/java/ru/qatools/school/utils/deserialization/CitySuggest.java deleted file mode 100644 index 5077320..0000000 --- a/dbclient-module/src/main/java/ru/qatools/school/utils/deserialization/CitySuggest.java +++ /dev/null @@ -1,50 +0,0 @@ -package ru.qatools.school.utils.deserialization; - -/** - * @author totallynotkate (Kate Kocijevska) - */ -public class CitySuggest { - private int id; - private String name; - private String country; - private int uid; - - public int getId() { - return id; - } - - public String getName() { - return name; - } - - public String getCountry() { - return country; - } - - public int getUid() { - return uid; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - CitySuggest suggest = (CitySuggest) o; - - if (id != suggest.id) return false; - if (uid != suggest.uid) return false; - if (name != null ? !name.equals(suggest.name) : suggest.name != null) return false; - return country != null ? country.equals(suggest.country) : suggest.country == null; - - } - - @Override - public int hashCode() { - int result = id; - result = 31 * result + (name != null ? name.hashCode() : 0); - result = 31 * result + (country != null ? country.hashCode() : 0); - result = 31 * result + uid; - return result; - } -} diff --git a/pom.xml b/pom.xml index af08ccf..674f1a5 100644 --- a/pom.xml +++ b/pom.xml @@ -17,6 +17,7 @@ commons-module dbclient-module dbclient-tests + api-data-module From 279496450c1cdce139172b674cbef7b1f4195619 Mon Sep 17 00:00:00 2001 From: totallynotkate Date: Fri, 13 May 2016 14:06:00 +0300 Subject: [PATCH 3/3] Clean up code e.g. move strings to constants --- .../java/ru/qatools/school/apiData/URI.java | 30 +++++++++++++++++++ .../test/java/ru/qatools/school/DbTest.java | 14 +++++---- 2 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 api-data-module/src/main/java/ru/qatools/school/apiData/URI.java diff --git a/api-data-module/src/main/java/ru/qatools/school/apiData/URI.java b/api-data-module/src/main/java/ru/qatools/school/apiData/URI.java new file mode 100644 index 0000000..82f127c --- /dev/null +++ b/api-data-module/src/main/java/ru/qatools/school/apiData/URI.java @@ -0,0 +1,30 @@ +package ru.qatools.school.apiData; + +/** + * @author totallynotkate (Kate Kocijevska) + */ +public enum URI { + BASE_URI("http://weather.lanwen.ru/"), + BASE_PATH("api"), + + CITIES_RESOURCE("cities"), + LIMIT_PARAMETER("limit"), + + SUGGEST_RESOURCE("suggest"), + QUERY_PARAMETER("query"); + + private final String URIValue; + + URI (String URIValue){ + this.URIValue = URIValue; + } + + public String getValue(){ + return URIValue; + } + + @Override + public String toString(){ + return URIValue; + } +} diff --git a/api-db-tests/src/test/java/ru/qatools/school/DbTest.java b/api-db-tests/src/test/java/ru/qatools/school/DbTest.java index 871efe7..f5add0b 100644 --- a/api-db-tests/src/test/java/ru/qatools/school/DbTest.java +++ b/api-db-tests/src/test/java/ru/qatools/school/DbTest.java @@ -4,6 +4,7 @@ import org.junit.Before; import org.junit.Test; import ru.qatools.school.apiData.CitySuggest; +import ru.qatools.school.apiData.URI; import ru.yandex.qatools.allure.annotations.Features; import ru.yandex.qatools.allure.annotations.Title; @@ -19,6 +20,7 @@ */ public class DbTest { + private static final String PARTIAL_CITY_NAME = "mos"; private DbClient dbClient; @Before @@ -28,13 +30,13 @@ public void before(){ @Test @Title ("Списки саджестов городов из API и БД должны совпадать") - @Features("Запросы к DB и API") + @Features("Запросы к БД и API") public void shouldGetSameSuggests(){ - List dbSuggest = dbClient.getSuggestedCities("mos"); - List apiSuggest = Arrays.asList(given().baseUri("http://weather.lanwen.ru") - .basePath("api") - .param("query", "mos") - .get("suggest") + List dbSuggest = dbClient.getSuggestedCities(PARTIAL_CITY_NAME); + List apiSuggest = Arrays.asList(given().baseUri(URI.BASE_URI.getValue()) + .basePath(URI.BASE_PATH.getValue()) + .param(URI.QUERY_PARAMETER.getValue(), PARTIAL_CITY_NAME) + .get(URI.SUGGEST_RESOURCE.getValue()) .as(CitySuggest[].class)); assertThat("Списки саджестов городов из API и БД должны совпадать", apiSuggest, hasSameItemsAsList(dbSuggest)); }