From f8501d374dbd39a66078bad11384ea241848acc6 Mon Sep 17 00:00:00 2001 From: Mavlushechka Date: Fri, 7 Oct 2022 23:46:46 +0500 Subject: Solve 1st test case --- .../a1qa/utils/HttpUrlConnectionFactory.java | 25 ++++++ .../com/mavlushechka/a1qa/utils/JSONParser.java | 94 ---------------------- .../a1qa/utils/JSONPlaceholderAPIManager.java | 60 -------------- .../com/mavlushechka/a1qa/utils/JsonParser.java | 94 ++++++++++++++++++++++ .../com/mavlushechka/a1qa/utils/LoggerUtils.java | 10 +-- .../java/com/mavlushechka/a1qa/utils/Posts.java | 16 ---- .../com/mavlushechka/a1qa/utils/StringUtils.java | 2 +- .../a1qa/utils/URLConnectionManager.java | 49 ----------- .../a1qa/utils/UrlConnectionManager.java | 50 ++++++++++++ .../com/mavlushechka/a1qa/utils/VkApiUtils.java | 62 ++++++++++++++ 10 files changed, 237 insertions(+), 225 deletions(-) create mode 100644 src/main/java/com/mavlushechka/a1qa/utils/HttpUrlConnectionFactory.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/JSONParser.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/JSONPlaceholderAPIManager.java create mode 100644 src/main/java/com/mavlushechka/a1qa/utils/JsonParser.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/Posts.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/URLConnectionManager.java create mode 100644 src/main/java/com/mavlushechka/a1qa/utils/UrlConnectionManager.java create mode 100644 src/main/java/com/mavlushechka/a1qa/utils/VkApiUtils.java (limited to 'src/main/java/com/mavlushechka/a1qa/utils') diff --git a/src/main/java/com/mavlushechka/a1qa/utils/HttpUrlConnectionFactory.java b/src/main/java/com/mavlushechka/a1qa/utils/HttpUrlConnectionFactory.java new file mode 100644 index 0000000..25d3a90 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/utils/HttpUrlConnectionFactory.java @@ -0,0 +1,25 @@ +package com.mavlushechka.a1qa.utils; + +import com.mavlushechka.a1qa.constants.RequestMethod; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URL; + +public class HttpUrlConnectionFactory { + + private HttpUrlConnectionFactory() { + } + + public static HttpURLConnection createHttpUrlConnection(String spec, RequestMethod requestMethod, boolean doOutput) throws IOException { + HttpURLConnection httpUrlConnection = (HttpURLConnection) new URL(spec).openConnection(); + + httpUrlConnection.setRequestMethod(requestMethod.name()); + httpUrlConnection.setConnectTimeout(Integer.parseInt(JsonParser.parseData("config", "httpUrlConnection.connectTimeout"))); + httpUrlConnection.setReadTimeout(Integer.parseInt(JsonParser.parseData("config", "httpUrlConnection.readTimeout"))); + httpUrlConnection.setDoOutput(doOutput); + httpUrlConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); + return httpUrlConnection; + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/utils/JSONParser.java b/src/main/java/com/mavlushechka/a1qa/utils/JSONParser.java deleted file mode 100644 index 67595f9..0000000 --- a/src/main/java/com/mavlushechka/a1qa/utils/JSONParser.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.mavlushechka.a1qa.utils; - -import com.google.gson.Gson; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import java.util.ArrayList; -import java.util.Map; -import java.util.TreeMap; - -public class JSONParser { - - private final static TreeMap parsedJSON = new TreeMap<>(); - - - public static String parseData(String filename, String key) { - return parse(filename, key, false); - } - - public static String parseObject(String filename, String key) { - return parse(filename, key, true); - } - - public static boolean isJson(String json) { - try { - new JSONObject(json); - } catch (JSONException jsonObjectException) { - try { - new JSONArray(json); - } catch (JSONException jsonArrayException) { - return false; - } - } - return true; - } - - public static boolean isBodyEmpty(String json) { - return json.equals("{}"); - } - - public static T convertToObject(String json, Class classToConvert) { - return new Gson().fromJson(json, classToConvert); - } - - public static String convertToJSON(T object) { - return new Gson().toJson(object); - } - - public static T[] convertArray(String json, Class classToConvert) { - Gson gson = new Gson(); - JSONArray jsonArray = new JSONArray(json); - ArrayList objects = new ArrayList<>(); - - for (int i = 0; i < jsonArray.length(); i++) { - objects.add(gson.fromJson(jsonArray.getJSONObject(i).toString(), classToConvert)); - } - return (T[]) objects.toArray(); - } - - private static String parse(String filename, String key, boolean isObject) { - Map.Entry ceilingEntry = parsedJSON.ceilingEntry(filename); - - if (ceilingEntry == null || !ceilingEntry.getKey().startsWith(filename)) { - parseFile(filename); - } - return parseData(filename, key, isObject); - } - - private static void parseFile(String filename) { - parsedJSON.put(filename, new JSONObject(FileParser.parse("src/main/resources/" + filename + ".json"))); - } - - private static String parseData(String JSONName, String key, boolean isObject) { - JSONObject jsonObject = new JSONObject(parsedJSON.get(JSONName).toString()); - String[] keys = key.split("\\."); - - for (int i = 0; i < keys.length-1; i++) { - if (keys[i].contains("[") && keys[i].contains("]")) { - String splitKey = keys[i].split("\\[")[0]; - int index = Integer.parseInt(keys[i].split("\\[")[1].replaceAll("[\\[\\]]", "")); - - jsonObject = jsonObject.getJSONArray(splitKey).getJSONObject(index); - } else { - jsonObject = jsonObject.getJSONObject(keys[i]); - } - } - if (isObject) { - return jsonObject.getJSONObject(keys[keys.length-1]).toString(); - } - return jsonObject.getString(keys[keys.length-1]); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/utils/JSONPlaceholderAPIManager.java b/src/main/java/com/mavlushechka/a1qa/utils/JSONPlaceholderAPIManager.java deleted file mode 100644 index 54df569..0000000 --- a/src/main/java/com/mavlushechka/a1qa/utils/JSONPlaceholderAPIManager.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.mavlushechka.a1qa.utils; - -import com.mavlushechka.a1qa.constants.Endpoint; -import com.mavlushechka.a1qa.constants.RequestMethod; -import com.mavlushechka.a1qa.models.Post; -import com.mavlushechka.a1qa.models.User; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -public class JSONPlaceholderAPIManager { - - private final static String postsSpec = Endpoint.POSTS.spec; - private final static String usersSpec = Endpoint.USERS.spec; - - - public static Post getPost(int id) throws IOException { - return JSONParser.convertToObject(URLConnectionManager.get(postsSpec + "/" + id), Post.class); - } - - public static int getPostResponseCode(int id, RequestMethod requestMethod) throws IOException { - return URLConnectionManager.getResponseCode(postsSpec + "/" + id, requestMethod); - } - - public static List getPosts() throws IOException { - return getObjects(postsSpec, Post.class); - } - - public static int getPostsResponseCode(RequestMethod requestMethod) throws IOException { - return URLConnectionManager.getResponseCode(postsSpec, requestMethod); - } - - public static Post postPost(Post post) throws IOException { - return JSONParser.convertToObject(URLConnectionManager.post(postsSpec, JSONParser.convertToJSON(post)), Post.class); - } - - public static User getUser(int id) throws IOException { - return JSONParser.convertToObject(URLConnectionManager.get(usersSpec + "/" + id), User.class); - } - - public static List getUsers() throws IOException { - return getObjects(usersSpec, User.class); - } - - public static int getUsersResponseCode(RequestMethod requestMethod) throws IOException { - return URLConnectionManager.getResponseCode(usersSpec, requestMethod); - } - - private static List getObjects(String spec, Class classOfObject) throws IOException { - Object[] objects = JSONParser.convertArray(URLConnectionManager.get(spec), classOfObject); - ArrayList objectsArrayList = new ArrayList<>(); - - for (Object object : objects) { - objectsArrayList.add((T) object); - } - return objectsArrayList.stream().toList(); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/utils/JsonParser.java b/src/main/java/com/mavlushechka/a1qa/utils/JsonParser.java new file mode 100644 index 0000000..bbcc732 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/utils/JsonParser.java @@ -0,0 +1,94 @@ +package com.mavlushechka.a1qa.utils; + +import com.google.gson.Gson; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Map; +import java.util.TreeMap; + +public class JsonParser { + + private final static TreeMap parsedJSON = new TreeMap<>(); + + + public static String parseData(String filename, String key) { + return parse(filename, key, false); + } + + public static String parseObject(String filename, String key) { + return parse(filename, key, true); + } + + public static boolean isJson(String json) { + try { + new JSONObject(json); + } catch (JSONException jsonObjectException) { + try { + new JSONArray(json); + } catch (JSONException jsonArrayException) { + return false; + } + } + return true; + } + + public static boolean isBodyEmpty(String json) { + return json.equals("{}"); + } + + public static T convertToObject(String json, Class classToConvert) { + return new Gson().fromJson(json, classToConvert); + } + + public static String convertToJson(T object) { + return new Gson().toJson(object); + } + + public static T[] convertArray(String json, Class classToConvert) { + Gson gson = new Gson(); + JSONArray jsonArray = new JSONArray(json); + ArrayList objects = new ArrayList<>(); + + for (int i = 0; i < jsonArray.length(); i++) { + objects.add(gson.fromJson(jsonArray.getJSONObject(i).toString(), classToConvert)); + } + return (T[]) objects.toArray(); + } + + private static String parse(String filename, String key, boolean isObject) { + Map.Entry ceilingEntry = parsedJSON.ceilingEntry(filename); + + if (ceilingEntry == null || !ceilingEntry.getKey().startsWith(filename)) { + parseFile(filename); + } + return parseData(filename, key, isObject); + } + + private static void parseFile(String filename) { + parsedJSON.put(filename, new JSONObject(FileParser.parse("src/main/resources/" + filename + ".json"))); + } + + private static String parseData(String jsonName, String key, boolean isObject) { + JSONObject jsonObject = new JSONObject(parsedJSON.get(jsonName).toString()); + String[] keys = key.split("\\."); + + for (int i = 0; i < keys.length - 1; i++) { + if (keys[i].contains("[") && keys[i].contains("]")) { + String splitKey = keys[i].split("\\[")[0]; + int index = Integer.parseInt(keys[i].split("\\[")[1].replaceAll("[\\[\\]]", "")); + + jsonObject = jsonObject.getJSONArray(splitKey).getJSONObject(index); + } else { + jsonObject = jsonObject.getJSONObject(keys[i]); + } + } + if (isObject) { + return jsonObject.getJSONObject(keys[keys.length - 1]).toString(); + } + return jsonObject.getString(keys[keys.length - 1]); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/utils/LoggerUtils.java b/src/main/java/com/mavlushechka/a1qa/utils/LoggerUtils.java index 51d49ae..2498f87 100644 --- a/src/main/java/com/mavlushechka/a1qa/utils/LoggerUtils.java +++ b/src/main/java/com/mavlushechka/a1qa/utils/LoggerUtils.java @@ -30,6 +30,11 @@ public class LoggerUtils { logger = LogManager.getLogger(); } + public static void step(String text) { + step++; + info("Step %d: %s".formatted(step, text)); + } + public static void info(String text) { logger.log(Level.INFO, text); } @@ -38,9 +43,4 @@ public class LoggerUtils { logger.log(Level.ERROR, text); } - public static void step(String text) { - step++; - logger.log(Level.INFO, "Step %d: %s".formatted(step, text)); - } - } diff --git a/src/main/java/com/mavlushechka/a1qa/utils/Posts.java b/src/main/java/com/mavlushechka/a1qa/utils/Posts.java deleted file mode 100644 index d0bdfaa..0000000 --- a/src/main/java/com/mavlushechka/a1qa/utils/Posts.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.mavlushechka.a1qa.utils; - -import com.mavlushechka.a1qa.models.Post; - -import java.util.List; -import java.util.stream.IntStream; - -public class Posts { - - public static boolean isPostsAscending(List posts) { - return IntStream.range(1, posts.size()) - .map(index -> posts.get(index - 1).compareTo(posts.get(index))) - .allMatch(order -> order <= 0); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/utils/StringUtils.java b/src/main/java/com/mavlushechka/a1qa/utils/StringUtils.java index cbce72f..854d7cc 100644 --- a/src/main/java/com/mavlushechka/a1qa/utils/StringUtils.java +++ b/src/main/java/com/mavlushechka/a1qa/utils/StringUtils.java @@ -13,7 +13,7 @@ public class StringUtils { for (int i = 0; i < words.length; i++) { stringBuilder.append(words[i].toUpperCase()); - if (i != words.length-1) { + if (i != words.length - 1) { stringBuilder.append("_"); } } diff --git a/src/main/java/com/mavlushechka/a1qa/utils/URLConnectionManager.java b/src/main/java/com/mavlushechka/a1qa/utils/URLConnectionManager.java deleted file mode 100644 index c6c9fae..0000000 --- a/src/main/java/com/mavlushechka/a1qa/utils/URLConnectionManager.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.mavlushechka.a1qa.utils; - -import com.mavlushechka.a1qa.constants.RequestMethod; -import com.mavlushechka.a1qa.driverUtils.HttpURLConnectionFactory; - -import java.io.BufferedReader; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; - -public class URLConnectionManager { - - public static String get(String spec) throws IOException { - StringBuilder stringBuilder = new StringBuilder(); - - try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(HttpURLConnectionFactory.createHttpURLConnection(spec, RequestMethod.GET, false).getInputStream()))) { - String inputLine; - - while ((inputLine = bufferedReader.readLine()) != null) { - stringBuilder.append(inputLine); - } - } - return stringBuilder.toString(); - } - - public static String post(String spec, String content) throws IOException { - HttpURLConnection httpURLConnection = HttpURLConnectionFactory.createHttpURLConnection(spec, RequestMethod.POST, true); - StringBuilder stringBuilder = new StringBuilder(); - - try (DataOutputStream dataOutputStream = new DataOutputStream(httpURLConnection.getOutputStream())) { - dataOutputStream.writeBytes(content); - dataOutputStream.flush(); - } - try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()))) { - String inputLine; - - while ((inputLine = bufferedReader.readLine()) != null) { - stringBuilder.append(inputLine); - } - } - return stringBuilder.toString(); - } - - public static int getResponseCode(String spec, RequestMethod requestMethod) throws IOException { - return HttpURLConnectionFactory.createHttpURLConnection(spec, requestMethod, false).getResponseCode(); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/utils/UrlConnectionManager.java b/src/main/java/com/mavlushechka/a1qa/utils/UrlConnectionManager.java new file mode 100644 index 0000000..7ea092c --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/utils/UrlConnectionManager.java @@ -0,0 +1,50 @@ +package com.mavlushechka.a1qa.utils; + +import com.mavlushechka.a1qa.constants.RequestMethod; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; + +public class UrlConnectionManager { + + public static String get(String spec) throws IOException { + StringBuilder stringBuilder = new StringBuilder(); + + try (BufferedReader bufferedReader = new BufferedReader( + new InputStreamReader(HttpUrlConnectionFactory.createHttpUrlConnection(spec, RequestMethod.GET, false).getInputStream())) + ) { + String inputLine; + + while ((inputLine = bufferedReader.readLine()) != null) { + stringBuilder.append(inputLine); + } + } + return stringBuilder.toString(); + } + + public static String post(String spec, String content) throws IOException { + HttpURLConnection httpUrlConnection = HttpUrlConnectionFactory.createHttpUrlConnection(spec, RequestMethod.POST, true); + StringBuilder stringBuilder = new StringBuilder(); + + try (DataOutputStream dataOutputStream = new DataOutputStream(httpUrlConnection.getOutputStream())) { + dataOutputStream.writeBytes(content); + dataOutputStream.flush(); + } + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpUrlConnection.getInputStream()))) { + String inputLine; + + while ((inputLine = bufferedReader.readLine()) != null) { + stringBuilder.append(inputLine); + } + } + return stringBuilder.toString(); + } + + public static int getResponseCode(String spec, RequestMethod requestMethod) throws IOException { + return HttpUrlConnectionFactory.createHttpUrlConnection(spec, requestMethod, false).getResponseCode(); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/utils/VkApiUtils.java b/src/main/java/com/mavlushechka/a1qa/utils/VkApiUtils.java new file mode 100644 index 0000000..845ecc7 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/utils/VkApiUtils.java @@ -0,0 +1,62 @@ +package com.mavlushechka.a1qa.utils; + +import com.mavlushechka.a1qa.constants.Method; +import com.mavlushechka.a1qa.models.Liker; +import com.mavlushechka.a1qa.models.Post; +import com.mavlushechka.a1qa.models.User; +import org.json.JSONObject; + +import java.io.IOException; + +public class VkApiUtils { + + private final static double apiVersion = 5.131; + private final static String url = "https://api.vk.com/method/%s?v=" + apiVersion + "&%s&access_token=" + JsonParser.parseData("testData", "vkontakte.account.token"); + + + public static User getCurrentUser() throws IOException { + return JsonParser.convertToObject( + new JSONObject(UrlConnectionManager.get(url.formatted(Method.USERS_GET.name, ""))) + .getJSONArray("response").get(0).toString(), User.class + ); + } + + public static int createPost(String message) throws IOException { + return new JSONObject(UrlConnectionManager.get(url.formatted(Method.WALL_POST.name, "message=" + message))) + .getJSONObject("response").getInt("post_id"); + } + + public static void editPost(Post post, Post editedPost) throws IOException { + UrlConnectionManager.get( + url.formatted( + Method.WALL_EDIT.name, + "post_id=" + post.id() + "&message=" + editedPost.message() + "&attachments=" + editedPost.attachment() + ) + ); + } + + public static void deletePost(Post post) throws IOException { + UrlConnectionManager.get(url.formatted(Method.WALL_DELETE.name, "post_id=" + post.id())); + } + + public static int createComment(int postId, String message) throws IOException { + return new JSONObject(UrlConnectionManager.get(url.formatted(Method.WALL_CREATE_COMMENT.name, "post_id=" + postId + "&message=" + message))) + .getJSONObject("response").getInt("comment_id"); + } + + public static boolean containsLike(Post post, User user) throws IOException { + Object[] users = JsonParser.convertArray(new JSONObject(UrlConnectionManager.get( + url.formatted(Method.WALL_GET_LIKES.name, "post_id=" + post.id()) + )).getJSONObject("response").getJSONArray("users").toString(), + Liker.class + ); + + for (Object userObject : users) { + if (((Liker) userObject).getUid() == user.getId()) { + return true; + } + } + return false; + } + +} -- cgit v1.2.3