diff --git a/README.md b/README.md
index 69e007d..887dbd4 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
-# Practice of automation school 2016
+Repository с файлом для docker.
+https://github.com/merkushevio/docker.git
-See all info in repo [autoschool/autoschool.github.io](https://github.com/autoschool/autoschool.github.io)
diff --git a/api-tests-module/pom.xml b/api-tests-module/pom.xml
new file mode 100644
index 0000000..3d369bf
--- /dev/null
+++ b/api-tests-module/pom.xml
@@ -0,0 +1,58 @@
+
+
+ 4.0.0
+ jar
+
+
+ school-2016
+ ru.qatools.school
+ 1.0-SNAPSHOT
+
+
+ api-tests-module
+
+
+ 1.8
+
+ 1.10.4
+ 2.0.2
+ 1.16.6
+
+
+
+
+
+ ru.qatools.school
+ steps-module
+ ${project.version}
+
+
+ ru.qatools.school
+ dbclient-module
+ ${project.version}
+
+
+ com.tngtech.java
+ junit-dataprovider
+ ${dataprovider.version}
+ test
+
+
+ com.squareup.retrofit2
+ retrofit
+ ${retrofit.version}
+
+
+ com.squareup.retrofit2
+ converter-gson
+ ${retrofit.version}
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+
+
+
\ No newline at end of file
diff --git a/api-tests-module/src/main/java/ru/qatools/school/ApiMatchers.java b/api-tests-module/src/main/java/ru/qatools/school/ApiMatchers.java
new file mode 100644
index 0000000..a3c4763
--- /dev/null
+++ b/api-tests-module/src/main/java/ru/qatools/school/ApiMatchers.java
@@ -0,0 +1,34 @@
+package ru.qatools.school;
+
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+import org.hamcrest.TypeSafeDiagnosingMatcher;
+import ru.qatools.school.entity.City;
+
+import java.util.List;
+
+public class ApiMatchers {
+
+
+ public static Matcher findInList(List list) {
+ return new TypeSafeDiagnosingMatcher() {
+ @Override
+ public void describeTo(Description description) {
+ description.appendText("expected inlist");
+ }
+
+ @Override
+ protected boolean matchesSafely(String word, Description mismatch) {
+ for (City city : list) {
+ if (city.getName().toLowerCase().contains(word.toLowerCase())) {
+ mismatch.appendText("return string was ")
+ .appendText(city.getName());
+ return true;
+ }
+ }
+
+ return false;
+ }
+ };
+ }
+}
diff --git a/api-tests-module/src/main/java/ru/qatools/school/WebApiInterface.java b/api-tests-module/src/main/java/ru/qatools/school/WebApiInterface.java
new file mode 100644
index 0000000..e8782de
--- /dev/null
+++ b/api-tests-module/src/main/java/ru/qatools/school/WebApiInterface.java
@@ -0,0 +1,29 @@
+package ru.qatools.school;
+
+import retrofit2.Call;
+import retrofit2.http.GET;
+import retrofit2.http.Query;
+import ru.qatools.school.entity.City;
+import ru.qatools.school.entity.Widget;
+
+import java.util.List;
+
+
+public interface WebApiInterface {
+
+ @GET("cities")
+ Call> getCities();
+
+ @GET("init")
+ Call> getInit();
+
+ @GET("cities")
+ Call> getCitiesLimit(@Query("limit") String limit);
+
+ @GET("suggest")
+ Call> getListSuggest(@Query("query") String query);
+
+ @GET("weather")
+ Call getWeatherWidget(@Query("city") String city, @Query("region") String region);
+}
+
diff --git a/api-tests-module/src/main/java/ru/qatools/school/entity/City.java b/api-tests-module/src/main/java/ru/qatools/school/entity/City.java
new file mode 100644
index 0000000..f5c1626
--- /dev/null
+++ b/api-tests-module/src/main/java/ru/qatools/school/entity/City.java
@@ -0,0 +1,24 @@
+package ru.qatools.school.entity;
+
+
+import lombok.Getter;
+
+@Getter
+public class City {
+
+ public City(int id, long uid, String name, String country) {
+ this.id = id;
+ this.uid = uid;
+ this.name = name;
+ this.country = country;
+ }
+
+ private int id;
+
+ private long uid;
+
+ private String name;
+
+ private String country;
+
+}
diff --git a/api-tests-module/src/main/java/ru/qatools/school/entity/DAYPART.java b/api-tests-module/src/main/java/ru/qatools/school/entity/DAYPART.java
new file mode 100644
index 0000000..d982093
--- /dev/null
+++ b/api-tests-module/src/main/java/ru/qatools/school/entity/DAYPART.java
@@ -0,0 +1,5 @@
+package ru.qatools.school.entity;
+
+public enum DAYPART {
+ DAY, NIGHT
+}
diff --git a/api-tests-module/src/main/java/ru/qatools/school/entity/Temperature.java b/api-tests-module/src/main/java/ru/qatools/school/entity/Temperature.java
new file mode 100644
index 0000000..571b93b
--- /dev/null
+++ b/api-tests-module/src/main/java/ru/qatools/school/entity/Temperature.java
@@ -0,0 +1,17 @@
+package ru.qatools.school.entity;
+
+
+import lombok.Getter;
+
+@Getter
+public class Temperature {
+
+ public Temperature(String unit, double value) {
+ this.unit = unit;
+ this.value = value;
+ }
+
+ private String unit;
+
+ private double value;
+}
diff --git a/api-tests-module/src/main/java/ru/qatools/school/entity/Widget.java b/api-tests-module/src/main/java/ru/qatools/school/entity/Widget.java
new file mode 100644
index 0000000..cc635e4
--- /dev/null
+++ b/api-tests-module/src/main/java/ru/qatools/school/entity/Widget.java
@@ -0,0 +1,37 @@
+package ru.qatools.school.entity;
+
+import lombok.Getter;
+
+import java.util.Date;
+import java.util.List;
+
+
+@Getter
+public class Widget {
+
+
+ private String city;
+ private DAYPART daypart;
+ private int weathercode;
+ private Date sunset;
+ private Date sunrise;
+ private Date dt;
+ private int humidity;
+ private double wind;
+ private List temperatures;
+
+
+ public Widget(String city, DAYPART daypart,
+ int weathercode, Date sunset, Date sunrise, Date dt, int humidity,
+ double wind, List temperatures) {
+ this.city = city;
+ this.daypart = daypart;
+ this.weathercode = weathercode;
+ this.sunset = sunset;
+ this.sunrise = sunrise;
+ this.dt = dt;
+ this.humidity = humidity;
+ this.wind = wind;
+ this.temperatures = temperatures;
+ }
+}
diff --git a/api-tests-module/src/test/java/ru/qatools/school/WeatherDB.java b/api-tests-module/src/test/java/ru/qatools/school/WeatherDB.java
new file mode 100644
index 0000000..b4e395d
--- /dev/null
+++ b/api-tests-module/src/test/java/ru/qatools/school/WeatherDB.java
@@ -0,0 +1,54 @@
+package ru.qatools.school;
+
+import com.google.gson.Gson;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import retrofit2.Call;
+import retrofit2.Response;
+import retrofit2.Retrofit;
+import retrofit2.converter.gson.*;
+import ru.qatools.school.entity.City;
+import java.io.IOException;
+import java.util.List;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsEqual.equalTo;
+
+public class WeatherDB {
+
+ private static DbClient dbClient;
+ private static final String MAIN_PAGE = "http://weather.lanwen.ru/api/";
+ private static WebApiInterface webApiInterface;
+ private static final String city = "Moscow";
+
+
+ @BeforeClass
+ public static void getDbClient() {
+ dbClient = new DbClient();
+ Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl(MAIN_PAGE)
+ .addConverterFactory(GsonConverterFactory.create(new Gson()))
+ .build();
+ webApiInterface = retrofit.create(WebApiInterface.class);
+ }
+
+
+ @Test
+ public void shouldSeeResultFromAPIEqualResultFromDB() throws IOException {
+ String cityDb = dbClient.getCityById(3);
+ Call> callSuggest = webApiInterface.getListSuggest(city);
+ Response> response = callSuggest.execute();
+ assertThat("Вывод от метода suggest по запросу " + city + " не совпадает с выводом из базы данных", cityDb,
+ equalTo(response.body().get(0).getName()));
+ }
+
+
+
+
+ @AfterClass
+ public static void closeDbClient() {
+ dbClient.close();
+ }
+
+}
diff --git a/api-tests-module/src/test/java/ru/qatools/school/restassured/WeatherWebApiRest.java b/api-tests-module/src/test/java/ru/qatools/school/restassured/WeatherWebApiRest.java
new file mode 100644
index 0000000..614b3d2
--- /dev/null
+++ b/api-tests-module/src/test/java/ru/qatools/school/restassured/WeatherWebApiRest.java
@@ -0,0 +1,59 @@
+package ru.qatools.school.restassured;
+
+import org.apache.http.HttpStatus;
+import org.junit.Test;
+import static com.jayway.restassured.RestAssured.given;
+import static org.hamcrest.Matchers.*;
+
+
+public class WeatherWebApiRest {
+
+ private static final String MAIN_PAGE = "http://weather.lanwen.ru";
+ private static final String BASE_PATH = "api";
+ private static final String WEATHER = "weather";
+ private static final String CITIES = "cities";
+ private static final String INIT = "init";
+ private static final String CITY = "Moscow";
+ private static final int ZERO = 0;
+ private static final int ONE = 1;
+
+
+ @Test
+ public void shouldSeeCitiesCityRecord() {
+ given().baseUri(MAIN_PAGE).basePath(BASE_PATH).param("city", "Moscow")
+ .get(WEATHER)
+ .then().assertThat().statusCode(HttpStatus.SC_OK)
+ .and().body("city", equalTo("Moscow"))
+ .and().body("temperatures", hasSize(4));
+
+ }
+
+ @Test
+ public void shouldSeeInitCitiesRecords() {
+ given().baseUri(MAIN_PAGE).basePath(BASE_PATH)
+ .get(CITIES)
+ .then().assertThat().statusCode(HttpStatus.SC_OK)
+ .and().body("size()", greaterThan(ZERO));
+ }
+
+ @Test
+ public void shouldSeeCitiesListCities() {
+ given().baseUri(MAIN_PAGE).basePath(BASE_PATH)
+ .get(CITIES)
+ .then().assertThat().statusCode(HttpStatus.SC_OK)
+ .and().body("size()", greaterThan(ZERO));
+ }
+
+ @Test
+ public void shouldSeeCitiesLimitOneCity() {
+ given().baseUri(MAIN_PAGE).basePath(BASE_PATH).param("limit", ONE)
+ .get(CITIES)
+ .then().assertThat().statusCode(HttpStatus.SC_OK)
+ .and().body("size()", is(ONE));
+ }
+
+
+
+}
+
+
diff --git a/api-tests-module/src/test/java/ru/qatools/school/retrofit/Parameters.java b/api-tests-module/src/test/java/ru/qatools/school/retrofit/Parameters.java
new file mode 100644
index 0000000..d1ba150
--- /dev/null
+++ b/api-tests-module/src/test/java/ru/qatools/school/retrofit/Parameters.java
@@ -0,0 +1,68 @@
+package ru.qatools.school.retrofit;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Parameters {
+
+ public static Object[][] limitsPositive() {
+ return new Object[][]{
+ {"1", 1, 200},
+ {"0", 0, 200},
+ {"273", 272, 200}
+ };
+ }
+
+ public static Object[][] limitsNegative() {
+ return new Object[][] {
+ {"null", 404},
+ {"-3", 404},
+ {"%20", 404},
+ {"city", 404}
+ };
+ }
+
+ public static Object[][] queryString() {
+ return new Object[][]{
+ {"Moscow", "Moscow", 200},
+ {"", null, 200},
+ {"Mosc", "Moscow", 200},
+ {"Moscow Saint Petersburg", null, 200},
+ {"S", null, 200},
+ {"%20", null, 200},
+ {null, null, 200}
+ };
+ }
+
+ public static List