From 7feee798685959f4e234e9f86f53187542d39f1e Mon Sep 17 00:00:00 2001 From: Mavlushechka Date: Wed, 28 Sep 2022 21:30:51 +0500 Subject: Solve 1st test case --- .../java/com/mavlushechka/a1qa/models/Address.java | 30 +++++++ .../java/com/mavlushechka/a1qa/models/Company.java | 26 ++++++ .../java/com/mavlushechka/a1qa/models/Geo.java | 24 ++++++ .../java/com/mavlushechka/a1qa/models/Post.java | 41 +++++++++ .../java/com/mavlushechka/a1qa/models/User.java | 50 +++++++++++ src/main/resources/testData.json | 70 +++++++++++++++- src/test/java/com/mavlushechka/a1qa/TestCase1.java | 96 ++++++++++++++++++++++ 7 files changed, 336 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/mavlushechka/a1qa/models/Address.java create mode 100644 src/main/java/com/mavlushechka/a1qa/models/Company.java create mode 100644 src/main/java/com/mavlushechka/a1qa/models/Geo.java create mode 100644 src/main/java/com/mavlushechka/a1qa/models/Post.java create mode 100644 src/main/java/com/mavlushechka/a1qa/models/User.java create mode 100644 src/test/java/com/mavlushechka/a1qa/TestCase1.java diff --git a/src/main/java/com/mavlushechka/a1qa/models/Address.java b/src/main/java/com/mavlushechka/a1qa/models/Address.java new file mode 100644 index 0000000..ca2da32 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/models/Address.java @@ -0,0 +1,30 @@ +package com.mavlushechka.a1qa.models; + +import java.util.Objects; + +public class Address { + + public final String street; + public final String suite; + public final String city; + public final String zipcode; + public final Geo geo; + + + public Address(String street, String suite, String city, String zipcode, Geo geo) { + this.street = street; + this.suite = suite; + this.city = city; + this.zipcode = zipcode; + this.geo = geo; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Address address = (Address) o; + return Objects.equals(street, address.street) && Objects.equals(suite, address.suite) && Objects.equals(city, address.city) && Objects.equals(zipcode, address.zipcode) && Objects.equals(geo, address.geo); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/models/Company.java b/src/main/java/com/mavlushechka/a1qa/models/Company.java new file mode 100644 index 0000000..3a1a448 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/models/Company.java @@ -0,0 +1,26 @@ +package com.mavlushechka.a1qa.models; + +import java.util.Objects; + +public class Company { + + public final String name; + public final String catchPhrase; + public final String bs; + + + public Company(String name, String catchPhrase, String bs) { + this.name = name; + this.catchPhrase = catchPhrase; + this.bs = bs; + } + + @Override + public boolean equals(Object object) { + if (this == object) return true; + if (object == null || getClass() != object.getClass()) return false; + Company company = (Company) object; + return Objects.equals(name, company.name) && Objects.equals(catchPhrase, company.catchPhrase) && Objects.equals(bs, company.bs); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/models/Geo.java b/src/main/java/com/mavlushechka/a1qa/models/Geo.java new file mode 100644 index 0000000..4a514da --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/models/Geo.java @@ -0,0 +1,24 @@ +package com.mavlushechka.a1qa.models; + +import java.util.Objects; + +public class Geo { + + public final String lat; + public final String lng; + + + public Geo(String lat, String lng) { + this.lat = lat; + this.lng = lng; + } + + @Override + public boolean equals(Object object) { + if (this == object) return true; + if (object == null || getClass() != object.getClass()) return false; + Geo geo = (Geo) object; + return Objects.equals(lat, geo.lat) && Objects.equals(lng, geo.lng); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/models/Post.java b/src/main/java/com/mavlushechka/a1qa/models/Post.java new file mode 100644 index 0000000..c936a71 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/models/Post.java @@ -0,0 +1,41 @@ +package com.mavlushechka.a1qa.models; + +import java.util.Objects; + +public class Post implements Comparable { + + public final String id; + public final String title; + public final String body; + public final String userId; + + + public Post(String id, String title, String body, String userId) { + this.id = id; + this.title = title; + this.body = body; + this.userId = userId; + } + + @Override + public int compareTo(Post post) { + int thisId = Integer.parseInt(id); + int otherId = Integer.parseInt(post.id); + + return Integer.compare(thisId, otherId); + } + + @Override + public boolean equals(Object object) { + if (this == object) return true; + if (object == null || getClass() != object.getClass()) return false; + Post post = (Post) object; + return Objects.equals(id, post.id) && Objects.equals(title, post.title) && Objects.equals(body, post.body) && Objects.equals(userId, post.userId); + } + + @Override + public int hashCode() { + return Objects.hash(id, title, body, userId); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/models/User.java b/src/main/java/com/mavlushechka/a1qa/models/User.java new file mode 100644 index 0000000..ac13c82 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/models/User.java @@ -0,0 +1,50 @@ +package com.mavlushechka.a1qa.models; + +import java.util.Objects; + +public class User { + + public final String id; + public final String name; + public final String username; + public final String email; + public final Address address; + public final String phone; + public final String website; + public final Company company; + + + public User(String id, String name, String username, String email, Address address, String phone, String website, Company company) { + this.id = id; + this.name = name; + this.username = username; + this.email = email; + this.address = address; + this.phone = phone; + this.website = website; + this.company = company; + } + + @Override + public boolean equals(Object object) { + if (this == object) return true; + if (object == null || getClass() != object.getClass()) return false; + User user = (User) object; + return Objects.equals(id, user.id) && Objects.equals(name, user.name) && Objects.equals(username, user.username) && Objects.equals(email, user.email) && Objects.equals(address, user.address) && Objects.equals(phone, user.phone) && Objects.equals(website, user.website) && Objects.equals(company, user.company); + } + + @Override + public String toString() { + return "User{" + + "id='" + id + '\'' + + ", name='" + name + '\'' + + ", username='" + username + '\'' + + ", email='" + email + '\'' + + ", address=" + address + + ", phone='" + phone + '\'' + + ", website='" + website + '\'' + + ", company=" + company + + '}'; + } + +} diff --git a/src/main/resources/testData.json b/src/main/resources/testData.json index 0e0dcd2..b495e75 100644 --- a/src/main/resources/testData.json +++ b/src/main/resources/testData.json @@ -1,3 +1,71 @@ { - + "testCases": [ + { + "steps": [ + { + "spec": "/posts", + "requestMethod": "GET", + "responseCode": "200" + }, + { + "spec": "/posts/99", + "requestMethod": "GET", + "responseCode": "200", + "post": { + "id": "99", + "userId": "10", + "isTitleEmpty": "false", + "isBodyEmpty": "false" + } + }, + { + "spec": "/posts/150", + "requestMethod": "GET", + "responseCode": "404", + "isResponseBodyEmpty": "true" + }, + { + "spec": "/posts", + "requestMethod": "POST", + "responseCode": "201", + "post": { + "userId": "1" + } + }, + { + "spec": "/users", + "requestMethod": "GET", + "responseCode": "200", + "user": { + "id": "5", + "name": "Chelsey Dietrich", + "username": "Kamren", + "email": "Lucio_Hettinger@annie.ca", + "address": { + "street": "Skiles Walks", + "suite": "Suite 351", + "city": "Roscoeview", + "zipcode": "33263", + "geo": { + "lat": "-31.8129", + "lng": "62.5342" + } + }, + "phone": "(254)954-1289", + "website": "demarco.info", + "company": { + "name": "Keebler LLC", + "catchPhrase": "User-centric fault-tolerant solution", + "bs": "revolutionize end-to-end systems" + } + } + }, + { + "spec": "/users/5", + "requestMethod": "GET", + "responseCode": "200" + } + ] + } + ] } \ No newline at end of file diff --git a/src/test/java/com/mavlushechka/a1qa/TestCase1.java b/src/test/java/com/mavlushechka/a1qa/TestCase1.java new file mode 100644 index 0000000..a823980 --- /dev/null +++ b/src/test/java/com/mavlushechka/a1qa/TestCase1.java @@ -0,0 +1,96 @@ +package com.mavlushechka.a1qa; + +import com.mavlushechka.a1qa.models.Post; +import com.mavlushechka.a1qa.models.User; +import com.mavlushechka.a1qa.utils.*; +import org.testng.Assert; +import org.testng.annotations.Test; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.stream.IntStream; + +public class TestCase1 extends BaseTest { + + @Test + public void test1() throws IOException { + String postsSpec = JSONParser.parseData("testData", "testCases[0].steps[0].spec"); + String postsRequestMethod = JSONParser.parseData("testData", "testCases[0].steps[0].requestMethod"); + int postsResponseCode = URLConnectionManager.getResponseCode(postsSpec, postsRequestMethod); + Assert.assertEquals(postsResponseCode, Integer.parseInt(JSONParser.parseData("testData", "testCases[0].steps[0].responseCode")), "Response code is not correct."); + LoggerUtils.step("Send GET Request to get all posts (/posts)."); + String postsJson = URLConnectionManager.get(postsSpec); + Assert.assertTrue(JSONParser.isJson(postsJson), "Response is not json."); + Object[] posts = JSONParser.convertArray(postsJson, Post.class); + ArrayList postsArrayList = new ArrayList<>(); + for (Object post : posts) { + postsArrayList.add((Post) post); + } + boolean isPostsAscending = IntStream.range(1, postsArrayList.size()) + .map(index -> postsArrayList.get(index - 1).compareTo(postsArrayList.get(index))) + .allMatch(order -> order <= 0); + Assert.assertTrue(isPostsAscending, "Posts are not sorted ascending."); + + String post99Spec = JSONParser.parseData("testData", "testCases[0].steps[1].spec"); + String post99RequestMethod = JSONParser.parseData("testData", "testCases[0].steps[1].requestMethod"); + int post99ResponseCode = URLConnectionManager.getResponseCode(post99Spec, post99RequestMethod); + Assert.assertEquals(post99ResponseCode, Integer.parseInt(JSONParser.parseData("testData", "testCases[0].steps[1].responseCode")), "Response code is not correct."); + LoggerUtils.step("Send GET request to get post with id=99 (/posts/99)."); + String post99Json = URLConnectionManager.get(post99Spec); + Post post99 = JSONParser.convertToObject(post99Json, Post.class); + Assert.assertEquals(post99.id, JSONParser.parseData("testData", "testCases[0].steps[1].post.id"), "Post id is not correct."); + Assert.assertEquals(post99.userId, JSONParser.parseData("testData", "testCases[0].steps[1].post.userId"), "Post user id is not correct."); + Assert.assertEquals(post99.title.isEmpty(), Boolean.parseBoolean(JSONParser.parseData("testData", "testCases[0].steps[1].post.isTitleEmpty")), "Post title is not correct."); + Assert.assertEquals(post99.body.isEmpty(), Boolean.parseBoolean(JSONParser.parseData("testData", "testCases[0].steps[1].post.isBodyEmpty")), "Post body is not correct."); + + String post150Spec = JSONParser.parseData("testData", "testCases[0].steps[2].spec"); + String post150RequestMethod = JSONParser.parseData("testData", "testCases[0].steps[2].requestMethod"); + int post150ResponseCode = URLConnectionManager.getResponseCode(post150Spec, post150RequestMethod); + Assert.assertEquals(post150ResponseCode, Integer.parseInt(JSONParser.parseData("testData", "testCases[0].steps[2].responseCode")), "Response code is not correct."); + LoggerUtils.step("Send GET request to get post with id=150 (/posts/150)."); + String post150Json; + try { + post150Json = URLConnectionManager.get(post150Spec); + } catch (IOException ioException) { + post150Json = "{}"; + } + Assert.assertEquals(JSONParser.isBodyEmpty(post150Json), Boolean.parseBoolean(JSONParser.parseData("testData", "testCases[0].steps[2].isResponseBodyEmpty")), "Response body is not correct."); + + String postSpec = JSONParser.parseData("testData", "testCases[0].steps[3].spec"); + String postRequestMethod = JSONParser.parseData("testData", "testCases[0].steps[3].requestMethod"); + Post post = new Post( + String.valueOf(postsArrayList.size()+1), + StringUtils.generateRandomText(Integer.parseInt(JSONParser.parseData("config", "randomTextGenerator.lettersLowerBound")), Integer.parseInt(JSONParser.parseData("config", "randomTextGenerator.lettersUpperBound")), Integer.parseInt(JSONParser.parseData("config", "randomTextGenerator.length"))), + StringUtils.generateRandomText(Integer.parseInt(JSONParser.parseData("config", "randomTextGenerator.lettersLowerBound")), Integer.parseInt(JSONParser.parseData("config", "randomTextGenerator.lettersUpperBound")), Integer.parseInt(JSONParser.parseData("config", "randomTextGenerator.length"))), + JSONParser.parseData("testData", "testCases[0].steps[3].post.userId") + ); + int postResponseCode = URLConnectionManager.getResponseCode(postSpec, postRequestMethod); + Assert.assertEquals(postResponseCode, Integer.parseInt(JSONParser.parseData("testData", "testCases[0].steps[3].responseCode")), "Response code is not correct."); + LoggerUtils.step("Send POST request to create post with userId=1 and random body and random title (/posts)."); + String postJson = URLConnectionManager.post(postSpec, JSONParser.convertToJSON(post)); + Assert.assertEquals(post, JSONParser.convertToObject(postJson, Post.class), "Post information is not correct."); + + String usersSpec = JSONParser.parseData("testData", "testCases[0].steps[4].spec"); + String usersRequestMethod = JSONParser.parseData("testData", "testCases[0].steps[4].requestMethod"); + int usersResponseCode = URLConnectionManager.getResponseCode(usersSpec, usersRequestMethod); + Assert.assertEquals(usersResponseCode, Integer.parseInt(JSONParser.parseData("testData", "testCases[0].steps[4].responseCode")), "Response code is not correct."); + LoggerUtils.step("Send GET request to get users (/users)."); + Object[] users = JSONParser.convertArray(URLConnectionManager.get(usersSpec), User.class); + User user = null; + for (Object userObject : users) { + if (Integer.parseInt(((User) userObject).id) == Integer.parseInt(JSONParser.parseData("testData", "testCases[0].steps[4].user.id"))) { + user = (User) userObject; + } + } + Assert.assertEquals(JSONParser.convertToObject(JSONParser.parseObject("testData", "testCases[0].steps[4].user"), User.class), user, "User information is not correct."); + + String user5Spec = JSONParser.parseData("testData", "testCases[0].steps[5].spec"); + String user5RequestMethod = JSONParser.parseData("testData", "testCases[0].steps[5].requestMethod"); + int user5ResponseCode = URLConnectionManager.getResponseCode(user5Spec, user5RequestMethod); + Assert.assertEquals(user5ResponseCode, Integer.parseInt(JSONParser.parseData("testData", "testCases[0].steps[5].responseCode")), "Response code is not correct."); + LoggerUtils.step("Send GET request to get user with id=5 (/users/5)."); + Object user5 = JSONParser.convertToObject(URLConnectionManager.get(user5Spec), User.class); + Assert.assertEquals(user, user5, "User information is not correct."); + } + +} -- cgit v1.2.3