From a32de03308b2246f1e7cd4c970e6f96116b41ea1 Mon Sep 17 00:00:00 2001 From: Mavlushechka Date: Mon, 17 Oct 2022 22:18:25 +0500 Subject: Divide classes into 2 packages: framework and project --- .../mavlushechka/a1qa/constants/Attachment.java | 7 -- .../mavlushechka/a1qa/constants/RequestMethod.java | 7 -- .../com/mavlushechka/a1qa/constants/Status.java | 13 --- .../mavlushechka/a1qa/constants/VkApiMethod.java | 14 ---- .../a1qa/framework/constants/RequestMethod.java | 7 ++ .../a1qa/framework/constants/Status.java | 13 +++ .../a1qa/framework/pages/BaseForm.java | 25 ++++++ .../a1qa/framework/utils/DoubleUtils.java | 9 +++ .../a1qa/framework/utils/FileParser.java | 22 +++++ .../framework/utils/HttpUrlConnectionFactory.java | 25 ++++++ .../a1qa/framework/utils/IntegerUtils.java | 21 +++++ .../a1qa/framework/utils/JsonParser.java | 94 ++++++++++++++++++++++ .../a1qa/framework/utils/LoggerUtils.java | 46 +++++++++++ .../a1qa/framework/utils/StringUtils.java | 43 ++++++++++ .../a1qa/framework/utils/UrlConnectionManager.java | 50 ++++++++++++ .../com/mavlushechka/a1qa/models/Attachment.java | 10 --- .../java/com/mavlushechka/a1qa/models/Comment.java | 4 - .../java/com/mavlushechka/a1qa/models/Liker.java | 22 ----- .../java/com/mavlushechka/a1qa/models/Post.java | 4 - .../java/com/mavlushechka/a1qa/models/User.java | 46 ----------- .../java/com/mavlushechka/a1qa/pages/BaseForm.java | 25 ------ .../com/mavlushechka/a1qa/pages/CommentForm.java | 28 ------- .../com/mavlushechka/a1qa/pages/CommentsForm.java | 32 -------- .../java/com/mavlushechka/a1qa/pages/FeedPage.java | 19 ----- .../java/com/mavlushechka/a1qa/pages/HomePage.java | 25 ------ .../java/com/mavlushechka/a1qa/pages/PostForm.java | 67 --------------- .../com/mavlushechka/a1qa/pages/ProfilePage.java | 41 ---------- .../mavlushechka/a1qa/pages/ProfileWallForm.java | 43 ---------- .../com/mavlushechka/a1qa/pages/SideBarForm.java | 20 ----- .../com/mavlushechka/a1qa/pages/SignInPage.java | 30 ------- .../a1qa/project/constants/Attachment.java | 7 ++ .../a1qa/project/constants/VkApiMethod.java | 14 ++++ .../a1qa/project/models/Attachment.java | 10 +++ .../mavlushechka/a1qa/project/models/Comment.java | 4 + .../mavlushechka/a1qa/project/models/Liker.java | 22 +++++ .../com/mavlushechka/a1qa/project/models/Post.java | 4 + .../com/mavlushechka/a1qa/project/models/User.java | 46 +++++++++++ .../a1qa/project/pages/CommentForm.java | 29 +++++++ .../a1qa/project/pages/CommentsForm.java | 33 ++++++++ .../mavlushechka/a1qa/project/pages/FeedPage.java | 20 +++++ .../mavlushechka/a1qa/project/pages/HomePage.java | 26 ++++++ .../mavlushechka/a1qa/project/pages/PostForm.java | 68 ++++++++++++++++ .../a1qa/project/pages/ProfilePage.java | 42 ++++++++++ .../a1qa/project/pages/ProfileWallForm.java | 44 ++++++++++ .../a1qa/project/pages/SideBarForm.java | 21 +++++ .../a1qa/project/pages/SignInPage.java | 31 +++++++ .../a1qa/project/utils/VkApiUtils.java | 68 ++++++++++++++++ .../com/mavlushechka/a1qa/utils/DoubleUtils.java | 9 --- .../com/mavlushechka/a1qa/utils/FileParser.java | 22 ----- .../a1qa/utils/HttpUrlConnectionFactory.java | 25 ------ .../com/mavlushechka/a1qa/utils/IntegerUtils.java | 21 ----- .../com/mavlushechka/a1qa/utils/JsonParser.java | 94 ---------------------- .../com/mavlushechka/a1qa/utils/LoggerUtils.java | 46 ----------- .../com/mavlushechka/a1qa/utils/StringUtils.java | 43 ---------- .../a1qa/utils/UrlConnectionManager.java | 50 ------------ .../com/mavlushechka/a1qa/utils/VkApiUtils.java | 66 --------------- 56 files changed, 844 insertions(+), 833 deletions(-) delete mode 100644 src/main/java/com/mavlushechka/a1qa/constants/Attachment.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/constants/RequestMethod.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/constants/Status.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/constants/VkApiMethod.java create mode 100644 src/main/java/com/mavlushechka/a1qa/framework/constants/RequestMethod.java create mode 100644 src/main/java/com/mavlushechka/a1qa/framework/constants/Status.java create mode 100644 src/main/java/com/mavlushechka/a1qa/framework/pages/BaseForm.java create mode 100644 src/main/java/com/mavlushechka/a1qa/framework/utils/DoubleUtils.java create mode 100644 src/main/java/com/mavlushechka/a1qa/framework/utils/FileParser.java create mode 100644 src/main/java/com/mavlushechka/a1qa/framework/utils/HttpUrlConnectionFactory.java create mode 100644 src/main/java/com/mavlushechka/a1qa/framework/utils/IntegerUtils.java create mode 100644 src/main/java/com/mavlushechka/a1qa/framework/utils/JsonParser.java create mode 100644 src/main/java/com/mavlushechka/a1qa/framework/utils/LoggerUtils.java create mode 100644 src/main/java/com/mavlushechka/a1qa/framework/utils/StringUtils.java create mode 100644 src/main/java/com/mavlushechka/a1qa/framework/utils/UrlConnectionManager.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/models/Attachment.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/models/Comment.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/models/Liker.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/models/Post.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/models/User.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/pages/BaseForm.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/pages/CommentForm.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/pages/CommentsForm.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/pages/FeedPage.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/pages/HomePage.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/pages/PostForm.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/pages/ProfilePage.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/pages/ProfileWallForm.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/pages/SideBarForm.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/pages/SignInPage.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/constants/Attachment.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/constants/VkApiMethod.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/models/Attachment.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/models/Comment.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/models/Liker.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/models/Post.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/models/User.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/pages/CommentForm.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/pages/CommentsForm.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/pages/FeedPage.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/pages/HomePage.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/pages/PostForm.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/pages/ProfilePage.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/pages/ProfileWallForm.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/pages/SideBarForm.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/pages/SignInPage.java create mode 100644 src/main/java/com/mavlushechka/a1qa/project/utils/VkApiUtils.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/DoubleUtils.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/FileParser.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/HttpUrlConnectionFactory.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/IntegerUtils.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/JsonParser.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/LoggerUtils.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/StringUtils.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/UrlConnectionManager.java delete mode 100644 src/main/java/com/mavlushechka/a1qa/utils/VkApiUtils.java (limited to 'src/main/java/com/mavlushechka') diff --git a/src/main/java/com/mavlushechka/a1qa/constants/Attachment.java b/src/main/java/com/mavlushechka/a1qa/constants/Attachment.java deleted file mode 100644 index a011430..0000000 --- a/src/main/java/com/mavlushechka/a1qa/constants/Attachment.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.mavlushechka.a1qa.constants; - -public enum Attachment { - - PHOTO - -} diff --git a/src/main/java/com/mavlushechka/a1qa/constants/RequestMethod.java b/src/main/java/com/mavlushechka/a1qa/constants/RequestMethod.java deleted file mode 100644 index 0f7e15c..0000000 --- a/src/main/java/com/mavlushechka/a1qa/constants/RequestMethod.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.mavlushechka.a1qa.constants; - -public enum RequestMethod { - - GET, POST - -} diff --git a/src/main/java/com/mavlushechka/a1qa/constants/Status.java b/src/main/java/com/mavlushechka/a1qa/constants/Status.java deleted file mode 100644 index a319f39..0000000 --- a/src/main/java/com/mavlushechka/a1qa/constants/Status.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mavlushechka.a1qa.constants; - -public enum Status { - - OK(200), CREATED(201), NOT_FOUND(404); - - public final int code; - - Status(int code) { - this.code = code; - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/constants/VkApiMethod.java b/src/main/java/com/mavlushechka/a1qa/constants/VkApiMethod.java deleted file mode 100644 index 7126abb..0000000 --- a/src/main/java/com/mavlushechka/a1qa/constants/VkApiMethod.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.mavlushechka.a1qa.constants; - -public enum VkApiMethod { - - WALL_GET_LIKES("wall.getLikes"), WALL_POST("wall.post"), WALL_EDIT("wall.edit"), WALL_DELETE("wall.delete"), - WALL_CREATE_COMMENT("wall.createComment"), USERS_GET("users.get"); - - public final String name; - - VkApiMethod(String name) { - this.name = name; - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/framework/constants/RequestMethod.java b/src/main/java/com/mavlushechka/a1qa/framework/constants/RequestMethod.java new file mode 100644 index 0000000..85316c9 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/framework/constants/RequestMethod.java @@ -0,0 +1,7 @@ +package com.mavlushechka.a1qa.framework.constants; + +public enum RequestMethod { + + GET, POST + +} diff --git a/src/main/java/com/mavlushechka/a1qa/framework/constants/Status.java b/src/main/java/com/mavlushechka/a1qa/framework/constants/Status.java new file mode 100644 index 0000000..63fbc9a --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/framework/constants/Status.java @@ -0,0 +1,13 @@ +package com.mavlushechka.a1qa.framework.constants; + +public enum Status { + + OK(200), CREATED(201), NOT_FOUND(404); + + public final int code; + + Status(int code) { + this.code = code; + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/framework/pages/BaseForm.java b/src/main/java/com/mavlushechka/a1qa/framework/pages/BaseForm.java new file mode 100644 index 0000000..6584879 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/framework/pages/BaseForm.java @@ -0,0 +1,25 @@ +package com.mavlushechka.a1qa.framework.pages; + +import aquality.selenium.elements.interfaces.IElement; +import aquality.selenium.elements.interfaces.ILabel; + +public abstract class BaseForm { + + private final IElement uniqueElement; + private final String name; + + + public BaseForm(ILabel uniqueElement, String name) { + this.uniqueElement = uniqueElement; + this.name = name; + } + + public boolean isOpened() { + return uniqueElement.getElement().isDisplayed(); + } + + public String getName() { + return name; + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/DoubleUtils.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/DoubleUtils.java new file mode 100644 index 0000000..1865715 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/DoubleUtils.java @@ -0,0 +1,9 @@ +package com.mavlushechka.a1qa.framework.utils; + +public class DoubleUtils { + + public static double getPercentageOf(double number, double percentage) { + return number / 100 * percentage; + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/FileParser.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/FileParser.java new file mode 100644 index 0000000..40ea62d --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/FileParser.java @@ -0,0 +1,22 @@ +package com.mavlushechka.a1qa.framework.utils; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; + +public class FileParser { + + public static String parse(String filename) { + StringBuilder stringBuilder = new StringBuilder(); + + try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filename))) { + while (bufferedReader.ready()) { + stringBuilder.append(bufferedReader.readLine()); + } + } catch (IOException ioException) { + throw new IllegalArgumentException("Cannot find required file."); + } + return stringBuilder.toString(); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/HttpUrlConnectionFactory.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/HttpUrlConnectionFactory.java new file mode 100644 index 0000000..cfa0628 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/HttpUrlConnectionFactory.java @@ -0,0 +1,25 @@ +package com.mavlushechka.a1qa.framework.utils; + +import com.mavlushechka.a1qa.framework.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/framework/utils/IntegerUtils.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/IntegerUtils.java new file mode 100644 index 0000000..76280cc --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/IntegerUtils.java @@ -0,0 +1,21 @@ +package com.mavlushechka.a1qa.framework.utils; + +import java.util.OptionalInt; +import java.util.Random; + +public class IntegerUtils { + + private IntegerUtils() { + } + + public static int getRandomNumber(int min, int max) { + OptionalInt randomNumber = new Random().ints(min, max).findFirst(); + + if (randomNumber.isPresent()) { + return randomNumber.getAsInt(); + } + LoggerUtils.error("Incorrect min and max arguments."); + throw new IllegalArgumentException("Incorrect min and max arguments."); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/JsonParser.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/JsonParser.java new file mode 100644 index 0000000..4f89e12 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/JsonParser.java @@ -0,0 +1,94 @@ +package com.mavlushechka.a1qa.framework.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/framework/utils/LoggerUtils.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/LoggerUtils.java new file mode 100644 index 0000000..8675d92 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/LoggerUtils.java @@ -0,0 +1,46 @@ +package com.mavlushechka.a1qa.framework.utils; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.config.ConfigurationSource; +import org.apache.logging.log4j.core.config.Configurator; +import org.apache.logging.log4j.core.config.xml.XmlConfiguration; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +public class LoggerUtils { + + private final static File CONFIGURATION_FILE = new File("src/main/resources/log4j2.xml"); + private static Logger logger; + private static int step = 0; + + + private LoggerUtils() { + } + + public static void initialize() { + try { + Configurator.initialize(new XmlConfiguration(null, new ConfigurationSource(new FileInputStream(CONFIGURATION_FILE)))); + } catch (IOException ioException) { + throw new RuntimeException(ioException); + } + 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); + } + + public static void error(String text) { + logger.log(Level.ERROR, text); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/StringUtils.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/StringUtils.java new file mode 100644 index 0000000..ae699d1 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/StringUtils.java @@ -0,0 +1,43 @@ +package com.mavlushechka.a1qa.framework.utils; + +import java.util.Random; + +public class StringUtils { + + private StringUtils() { + } + + public static String convertToConstantCase(String text) { + StringBuilder stringBuilder = new StringBuilder(); + String[] words = text.split(" "); + + for (int i = 0; i < words.length; i++) { + stringBuilder.append(words[i].toUpperCase()); + if (i != words.length - 1) { + stringBuilder.append("_"); + } + } + + return stringBuilder.toString(); + } + + public static String capitalizeFirstLetter(String text) { + return text.substring(0, 1).toUpperCase() + text.substring(1); + } + + public static int removeNonDigits(String text) { + return Integer.parseInt(text.replaceAll("[^0-9]+", "")); + } + + public static String generateRandomText(int lettersLowerBound, int lettersUpperBound, int length) { + return new Random().ints(lettersLowerBound, lettersUpperBound + 1) + .limit(length) + .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) + .toString(); + } + + public static String replaceByStars(String text) { + return "*".repeat(text.length()); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/framework/utils/UrlConnectionManager.java b/src/main/java/com/mavlushechka/a1qa/framework/utils/UrlConnectionManager.java new file mode 100644 index 0000000..b8dad83 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/framework/utils/UrlConnectionManager.java @@ -0,0 +1,50 @@ +package com.mavlushechka.a1qa.framework.utils; + +import com.mavlushechka.a1qa.framework.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/models/Attachment.java b/src/main/java/com/mavlushechka/a1qa/models/Attachment.java deleted file mode 100644 index a05ee71..0000000 --- a/src/main/java/com/mavlushechka/a1qa/models/Attachment.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.mavlushechka.a1qa.models; - -public record Attachment(com.mavlushechka.a1qa.constants.Attachment attachment, int ownerId, int mediaId) { - - @Override - public String toString() { - return attachment.name().toLowerCase() + ownerId + "_" + mediaId; - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/models/Comment.java b/src/main/java/com/mavlushechka/a1qa/models/Comment.java deleted file mode 100644 index b8de1e0..0000000 --- a/src/main/java/com/mavlushechka/a1qa/models/Comment.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.mavlushechka.a1qa.models; - -public record Comment(int id, User user, Post post, String message) { -} diff --git a/src/main/java/com/mavlushechka/a1qa/models/Liker.java b/src/main/java/com/mavlushechka/a1qa/models/Liker.java deleted file mode 100644 index 045852f..0000000 --- a/src/main/java/com/mavlushechka/a1qa/models/Liker.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.mavlushechka.a1qa.models; - -public class Liker { - - private final int uid; - private final int copied; - - - public Liker(int uid, int copied) { - this.uid = uid; - this.copied = copied; - } - - public int getUid() { - return uid; - } - - public int getCopied() { - return copied; - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/models/Post.java b/src/main/java/com/mavlushechka/a1qa/models/Post.java deleted file mode 100644 index 9cf8474..0000000 --- a/src/main/java/com/mavlushechka/a1qa/models/Post.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.mavlushechka.a1qa.models; - -public record Post(int id, User owner, String message, Attachment attachment) { -} diff --git a/src/main/java/com/mavlushechka/a1qa/models/User.java b/src/main/java/com/mavlushechka/a1qa/models/User.java deleted file mode 100644 index c9bb3ff..0000000 --- a/src/main/java/com/mavlushechka/a1qa/models/User.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.mavlushechka.a1qa.models; - -import com.google.gson.annotations.SerializedName; - -public class User { - - private final int id; - @SerializedName("first_name") - private final String firstName; - @SerializedName("last_name") - private final String lastName; - @SerializedName("can_access_closed") - private final boolean canAccessClosed; - @SerializedName("is_closed") - private final boolean isClosed; - - - public User(int id, String firstName, String lastName, boolean canAccessClosed, boolean isClosed) { - this.id = id; - this.firstName = firstName; - this.lastName = lastName; - this.canAccessClosed = canAccessClosed; - this.isClosed = isClosed; - } - - public int getId() { - return id; - } - - public String getFirstName() { - return firstName; - } - - public String getLastName() { - return lastName; - } - - public boolean isCanAccessClosed() { - return canAccessClosed; - } - - public boolean isClosed() { - return isClosed; - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/pages/BaseForm.java b/src/main/java/com/mavlushechka/a1qa/pages/BaseForm.java deleted file mode 100644 index 8ed6026..0000000 --- a/src/main/java/com/mavlushechka/a1qa/pages/BaseForm.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mavlushechka.a1qa.pages; - -import aquality.selenium.elements.interfaces.IElement; -import aquality.selenium.elements.interfaces.ILabel; - -public abstract class BaseForm { - - private final IElement uniqueElement; - private final String name; - - - public BaseForm(ILabel uniqueElement, String name) { - this.uniqueElement = uniqueElement; - this.name = name; - } - - public boolean isOpened() { - return uniqueElement.getElement().isDisplayed(); - } - - public String getName() { - return name; - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/pages/CommentForm.java b/src/main/java/com/mavlushechka/a1qa/pages/CommentForm.java deleted file mode 100644 index a4f79fe..0000000 --- a/src/main/java/com/mavlushechka/a1qa/pages/CommentForm.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.mavlushechka.a1qa.pages; - -import aquality.selenium.browser.AqualityServices; -import aquality.selenium.elements.interfaces.ILabel; -import com.mavlushechka.a1qa.models.Comment; -import org.openqa.selenium.By; - -import java.util.Objects; - -public class CommentForm extends BaseForm { - - private final ILabel commentLabel; - private final ILabel commentText; - - - public CommentForm(Comment comment) { - super(AqualityServices.getElementFactory().getLabel(By.id("post" + comment.user().getId() + "_" + comment.id()), "Comment"), "Comment form"); - String commentXpath = "//*[@id='" + "post" + comment.user().getId() + "_" + comment.id() + "']"; - commentLabel = AqualityServices.getElementFactory().getLabel(By.xpath(commentXpath), "Comment"); - commentText = AqualityServices.getElementFactory().getLabel(By.xpath(commentXpath + "//*[contains(@class, 'wall_reply_text')]"), "Comment"); - } - - public boolean containsComment(Comment comment) { - return Integer.parseInt(commentLabel.getAttribute("data-answering-id")) == comment.user().getId() - && Objects.equals(commentText.getText(), comment.message()); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/pages/CommentsForm.java b/src/main/java/com/mavlushechka/a1qa/pages/CommentsForm.java deleted file mode 100644 index 0cb1c08..0000000 --- a/src/main/java/com/mavlushechka/a1qa/pages/CommentsForm.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.mavlushechka.a1qa.pages; - -import aquality.selenium.browser.AqualityServices; -import aquality.selenium.elements.interfaces.IButton; -import com.mavlushechka.a1qa.models.Comment; -import com.mavlushechka.a1qa.models.Post; -import org.openqa.selenium.By; - -public class CommentsForm extends BaseForm { - - private final IButton nextCommentsButton; - - - public CommentsForm(Post post) { - super(AqualityServices.getElementFactory().getLabel(By.id("replies_wrap" + post.owner().getId() + "_" + post.id()), "Comments"), - "Comments form"); - nextCommentsButton = AqualityServices.getElementFactory().getButton( - By.xpath("//*[@id='" + "replies_wrap" + post.owner().getId() + "_" + post.id() + "']//*[contains(@class, 'replies_next')]"), - "Next comments" - ); - } - - public boolean containsComment(Comment comment) { - CommentForm commentForm = new CommentForm(comment); - - if (nextCommentsButton.getElement().isDisplayed()) { - nextCommentsButton.click(); - } - return commentForm.containsComment(comment); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/pages/FeedPage.java b/src/main/java/com/mavlushechka/a1qa/pages/FeedPage.java deleted file mode 100644 index bebecc1..0000000 --- a/src/main/java/com/mavlushechka/a1qa/pages/FeedPage.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.mavlushechka.a1qa.pages; - -import aquality.selenium.browser.AqualityServices; -import org.openqa.selenium.By; - -public class FeedPage extends BaseForm { - - private final SideBarForm sideBarForm = new SideBarForm(); - - - public FeedPage() { - super(AqualityServices.getElementFactory().getLabel(By.id("main_feed"), "Main feed"), "Feed"); - } - - public void clickMyProfileButton() { - sideBarForm.clickMyProfileButton(); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/pages/HomePage.java b/src/main/java/com/mavlushechka/a1qa/pages/HomePage.java deleted file mode 100644 index 20339f8..0000000 --- a/src/main/java/com/mavlushechka/a1qa/pages/HomePage.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mavlushechka.a1qa.pages; - -import aquality.selenium.browser.AqualityServices; -import aquality.selenium.elements.interfaces.IButton; -import aquality.selenium.elements.interfaces.ITextBox; -import org.openqa.selenium.By; - -public class HomePage extends BaseForm { - - private final ITextBox phoneOrEmailTextBox = AqualityServices.getElementFactory().getTextBox(By.id("index_email"), "Phone or email"); - private final IButton signInButton = AqualityServices.getElementFactory().getButton( - By.xpath("//button[contains(@class, 'VkIdForm__signInButton')]"),"Sign in" - ); - - - public HomePage() { - super(AqualityServices.getElementFactory().getLabel(By.xpath("//*[contains(@class, 'IndexPageContent')]"), "Index page content"), "Home"); - } - - public void performAuthorization(String phoneOrEmail) { - phoneOrEmailTextBox.clearAndType(phoneOrEmail); - signInButton.click(); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/pages/PostForm.java b/src/main/java/com/mavlushechka/a1qa/pages/PostForm.java deleted file mode 100644 index 11b9513..0000000 --- a/src/main/java/com/mavlushechka/a1qa/pages/PostForm.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.mavlushechka.a1qa.pages; - -import aquality.selenium.browser.AqualityServices; -import aquality.selenium.elements.interfaces.IButton; -import aquality.selenium.elements.interfaces.ILabel; -import com.mavlushechka.a1qa.models.Comment; -import com.mavlushechka.a1qa.models.Post; -import org.openqa.selenium.By; - -import java.util.Objects; - -public class PostForm extends BaseForm { - - private final ILabel authorLabel; - private final ILabel textLabel; - private final ILabel imageLabel; - private final IButton likeButton; - - - public PostForm(Post post) { - super(AqualityServices.getElementFactory().getLabel(By.id("post" + post.owner().getId() + "_" + post.id()), "Post"), "Post form"); - String postXpath = "//*[@id='" + "post" + post.owner().getId() + "_" + post.id() + "']"; - authorLabel = AqualityServices.getElementFactory().getLabel( - By.xpath(postXpath + "//*[contains(@class, 'post_author')]//a[contains(@class, 'author')]"), "Post author" - ); - textLabel = AqualityServices.getElementFactory().getLabel(By.xpath(postXpath + "//*[contains(@class, 'wall_post_text')]"), "Post text"); - imageLabel = AqualityServices.getElementFactory().getLabel( - By.xpath(postXpath + "//*[contains(@class, 'page_post_thumb_wrap')]"), "Post image" - ); - likeButton = AqualityServices.getElementFactory().getButton(By.xpath(postXpath + "//*[@data-reaction-set-id='reactions']"), "Like"); - } - - public boolean containsPost(Post post) { - boolean containsPost = Objects.equals(authorLabel.getText(), post.owner().getFirstName() + " " + post.owner().getLastName()) - && Objects.equals(textLabel.getText(), post.message()); - - if (post.attachment() != null) { - containsPost &= Objects.equals(post.attachment().toString(), imageLabel.getAttribute("href").split("vk.com/")[1]); - } else { - containsPost &= !imageLabel.state().isDisplayed(); - } - - return containsPost; - } - - public boolean containsComment(Comment comment) { - return new CommentsForm(comment.post()).containsComment(comment); - } - - public void clickLikeButton() { - likeButton.getElement().click(); - } - - public void waitForUpdate() { - String text = textLabel.getText(); - AqualityServices.getConditionalWait().waitFor(() -> !Objects.equals(textLabel.getText(), text)); - } - - public void waitForDelete() { - AqualityServices.getConditionalWait().waitFor(() -> !postExists()); - } - - public boolean postExists() { - return authorLabel.state().isDisplayed(); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/pages/ProfilePage.java b/src/main/java/com/mavlushechka/a1qa/pages/ProfilePage.java deleted file mode 100644 index 7b6aa9d..0000000 --- a/src/main/java/com/mavlushechka/a1qa/pages/ProfilePage.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.mavlushechka.a1qa.pages; - -import aquality.selenium.browser.AqualityServices; -import com.mavlushechka.a1qa.models.Comment; -import com.mavlushechka.a1qa.models.Post; -import org.openqa.selenium.By; - -public class ProfilePage extends BaseForm { - - private final ProfileWallForm profileWallForm = new ProfileWallForm(); - - - public ProfilePage() { - super(AqualityServices.getElementFactory().getLabel(By.id("profile"), "Profile"), "Profile"); - } - - public boolean containsPost(Post post) { - return profileWallForm.containsPost(post); - } - - public boolean containsComment(Comment comment) { - return profileWallForm.containsComment(comment); - } - - public boolean notContainsPost(Post post) { - return profileWallForm.notContainsPost(post); - } - - public void clickPostLikeButton(Post post) { - profileWallForm.clickPostLikeButton(post); - } - - public void waitForPostUpdate(Post post) { - profileWallForm.waitForPostUpdate(post); - } - - public void waitForPostDelete(Post post) { - profileWallForm.waitForPostDelete(post); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/pages/ProfileWallForm.java b/src/main/java/com/mavlushechka/a1qa/pages/ProfileWallForm.java deleted file mode 100644 index f030924..0000000 --- a/src/main/java/com/mavlushechka/a1qa/pages/ProfileWallForm.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.mavlushechka.a1qa.pages; - -import aquality.selenium.browser.AqualityServices; -import com.mavlushechka.a1qa.models.Comment; -import com.mavlushechka.a1qa.models.Post; -import org.openqa.selenium.By; - -public class ProfileWallForm extends BaseForm { - - public ProfileWallForm() { - super(AqualityServices.getElementFactory().getLabel(By.id("profile_wall"), "Profile wall"), "Profile wall form"); - } - - public boolean containsPost(Post post) { - PostForm postForm = new PostForm(post); - - if (!postForm.isOpened()) { - return false; - } - return postForm.containsPost(post); - } - - public boolean notContainsPost(Post post) { - return !new PostForm(post).postExists(); - } - - public boolean containsComment(Comment comment) { - return new PostForm(comment.post()).containsComment(comment); - } - - public void clickPostLikeButton(Post post) { - new PostForm(post).clickLikeButton(); - } - - public void waitForPostUpdate(Post post) { - new PostForm(post).waitForUpdate(); - } - - public void waitForPostDelete(Post post) { - new PostForm(post).waitForDelete(); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/pages/SideBarForm.java b/src/main/java/com/mavlushechka/a1qa/pages/SideBarForm.java deleted file mode 100644 index 8df8c3d..0000000 --- a/src/main/java/com/mavlushechka/a1qa/pages/SideBarForm.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mavlushechka.a1qa.pages; - -import aquality.selenium.browser.AqualityServices; -import aquality.selenium.elements.interfaces.IButton; -import org.openqa.selenium.By; - -public class SideBarForm extends BaseForm { - - private final IButton myProfileButton = AqualityServices.getElementFactory().getButton(By.id("l_pr"), "My profile"); - - - public SideBarForm() { - super(AqualityServices.getElementFactory().getLabel(By.id("side_bar"), "Side bar"), "Side bar form"); - } - - public void clickMyProfileButton() { - myProfileButton.click(); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/pages/SignInPage.java b/src/main/java/com/mavlushechka/a1qa/pages/SignInPage.java deleted file mode 100644 index 56c16e7..0000000 --- a/src/main/java/com/mavlushechka/a1qa/pages/SignInPage.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.mavlushechka.a1qa.pages; - -import aquality.selenium.browser.AqualityServices; -import aquality.selenium.elements.interfaces.IButton; -import aquality.selenium.elements.interfaces.ITextBox; -import org.openqa.selenium.By; - -public class SignInPage extends BaseForm { - - private final ITextBox passwordTextBox = AqualityServices.getElementFactory().getTextBox( - By.xpath("//input[contains(@name, 'password')]"), "Password" - ); - private final IButton continueButton = AqualityServices.getElementFactory().getButton( - By.xpath("//*[contains(@class, 'vkc__EnterPasswordNoUserInfo__buttonWrap')]//button[contains(@class, 'vkuiButton')]"), "Continue" - ); - - - public SignInPage() { - super( - AqualityServices.getElementFactory().getLabel(By.xpath("//form[contains(@class, 'vkc__EnterPasswordNoUserInfo__content')]"), - "Password form"), "Sign in" - ); - } - - public void performAuthorization(String password) { - passwordTextBox.clearAndType(password); - continueButton.click(); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/project/constants/Attachment.java b/src/main/java/com/mavlushechka/a1qa/project/constants/Attachment.java new file mode 100644 index 0000000..ada25e8 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/constants/Attachment.java @@ -0,0 +1,7 @@ +package com.mavlushechka.a1qa.project.constants; + +public enum Attachment { + + PHOTO + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/constants/VkApiMethod.java b/src/main/java/com/mavlushechka/a1qa/project/constants/VkApiMethod.java new file mode 100644 index 0000000..c751bca --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/constants/VkApiMethod.java @@ -0,0 +1,14 @@ +package com.mavlushechka.a1qa.project.constants; + +public enum VkApiMethod { + + WALL_GET_LIKES("wall.getLikes"), WALL_POST("wall.post"), WALL_EDIT("wall.edit"), WALL_DELETE("wall.delete"), + WALL_CREATE_COMMENT("wall.createComment"), USERS_GET("users.get"); + + public final String name; + + VkApiMethod(String name) { + this.name = name; + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/models/Attachment.java b/src/main/java/com/mavlushechka/a1qa/project/models/Attachment.java new file mode 100644 index 0000000..0350d11 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/models/Attachment.java @@ -0,0 +1,10 @@ +package com.mavlushechka.a1qa.project.models; + +public record Attachment(com.mavlushechka.a1qa.project.constants.Attachment attachment, int ownerId, int mediaId) { + + @Override + public String toString() { + return attachment.name().toLowerCase() + ownerId + "_" + mediaId; + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/models/Comment.java b/src/main/java/com/mavlushechka/a1qa/project/models/Comment.java new file mode 100644 index 0000000..bbbdc0f --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/models/Comment.java @@ -0,0 +1,4 @@ +package com.mavlushechka.a1qa.project.models; + +public record Comment(int id, User user, Post post, String message) { +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/models/Liker.java b/src/main/java/com/mavlushechka/a1qa/project/models/Liker.java new file mode 100644 index 0000000..7f84eba --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/models/Liker.java @@ -0,0 +1,22 @@ +package com.mavlushechka.a1qa.project.models; + +public class Liker { + + private final int uid; + private final int copied; + + + public Liker(int uid, int copied) { + this.uid = uid; + this.copied = copied; + } + + public int getUid() { + return uid; + } + + public int getCopied() { + return copied; + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/models/Post.java b/src/main/java/com/mavlushechka/a1qa/project/models/Post.java new file mode 100644 index 0000000..e7c97b4 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/models/Post.java @@ -0,0 +1,4 @@ +package com.mavlushechka.a1qa.project.models; + +public record Post(int id, User owner, String message, Attachment attachment) { +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/models/User.java b/src/main/java/com/mavlushechka/a1qa/project/models/User.java new file mode 100644 index 0000000..b0089e8 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/models/User.java @@ -0,0 +1,46 @@ +package com.mavlushechka.a1qa.project.models; + +import com.google.gson.annotations.SerializedName; + +public class User { + + private final int id; + @SerializedName("first_name") + private final String firstName; + @SerializedName("last_name") + private final String lastName; + @SerializedName("can_access_closed") + private final boolean canAccessClosed; + @SerializedName("is_closed") + private final boolean isClosed; + + + public User(int id, String firstName, String lastName, boolean canAccessClosed, boolean isClosed) { + this.id = id; + this.firstName = firstName; + this.lastName = lastName; + this.canAccessClosed = canAccessClosed; + this.isClosed = isClosed; + } + + public int getId() { + return id; + } + + public String getFirstName() { + return firstName; + } + + public String getLastName() { + return lastName; + } + + public boolean isCanAccessClosed() { + return canAccessClosed; + } + + public boolean isClosed() { + return isClosed; + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/pages/CommentForm.java b/src/main/java/com/mavlushechka/a1qa/project/pages/CommentForm.java new file mode 100644 index 0000000..228e34d --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/pages/CommentForm.java @@ -0,0 +1,29 @@ +package com.mavlushechka.a1qa.project.pages; + +import aquality.selenium.browser.AqualityServices; +import aquality.selenium.elements.interfaces.ILabel; +import com.mavlushechka.a1qa.framework.pages.BaseForm; +import com.mavlushechka.a1qa.project.models.Comment; +import org.openqa.selenium.By; + +import java.util.Objects; + +public class CommentForm extends BaseForm { + + private final ILabel commentLabel; + private final ILabel commentText; + + + public CommentForm(Comment comment) { + super(AqualityServices.getElementFactory().getLabel(By.id("post" + comment.user().getId() + "_" + comment.id()), "Comment"), "Comment form"); + String commentXpath = "//*[@id='" + "post" + comment.user().getId() + "_" + comment.id() + "']"; + commentLabel = AqualityServices.getElementFactory().getLabel(By.xpath(commentXpath), "Comment"); + commentText = AqualityServices.getElementFactory().getLabel(By.xpath(commentXpath + "//*[contains(@class, 'wall_reply_text')]"), "Comment"); + } + + public boolean containsComment(Comment comment) { + return Integer.parseInt(commentLabel.getAttribute("data-answering-id")) == comment.user().getId() + && Objects.equals(commentText.getText(), comment.message()); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/pages/CommentsForm.java b/src/main/java/com/mavlushechka/a1qa/project/pages/CommentsForm.java new file mode 100644 index 0000000..4c022a6 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/pages/CommentsForm.java @@ -0,0 +1,33 @@ +package com.mavlushechka.a1qa.project.pages; + +import aquality.selenium.browser.AqualityServices; +import aquality.selenium.elements.interfaces.IButton; +import com.mavlushechka.a1qa.framework.pages.BaseForm; +import com.mavlushechka.a1qa.project.models.Comment; +import com.mavlushechka.a1qa.project.models.Post; +import org.openqa.selenium.By; + +public class CommentsForm extends BaseForm { + + private final IButton nextCommentsButton; + + + public CommentsForm(Post post) { + super(AqualityServices.getElementFactory().getLabel(By.id("replies_wrap" + post.owner().getId() + "_" + post.id()), "Comments"), + "Comments form"); + nextCommentsButton = AqualityServices.getElementFactory().getButton( + By.xpath("//*[@id='" + "replies_wrap" + post.owner().getId() + "_" + post.id() + "']//*[contains(@class, 'replies_next')]"), + "Next comments" + ); + } + + public boolean containsComment(Comment comment) { + CommentForm commentForm = new CommentForm(comment); + + if (nextCommentsButton.getElement().isDisplayed()) { + nextCommentsButton.click(); + } + return commentForm.containsComment(comment); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/pages/FeedPage.java b/src/main/java/com/mavlushechka/a1qa/project/pages/FeedPage.java new file mode 100644 index 0000000..abc0f91 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/pages/FeedPage.java @@ -0,0 +1,20 @@ +package com.mavlushechka.a1qa.project.pages; + +import aquality.selenium.browser.AqualityServices; +import com.mavlushechka.a1qa.framework.pages.BaseForm; +import org.openqa.selenium.By; + +public class FeedPage extends BaseForm { + + private final SideBarForm sideBarForm = new SideBarForm(); + + + public FeedPage() { + super(AqualityServices.getElementFactory().getLabel(By.id("main_feed"), "Main feed"), "Feed"); + } + + public void clickMyProfileButton() { + sideBarForm.clickMyProfileButton(); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/pages/HomePage.java b/src/main/java/com/mavlushechka/a1qa/project/pages/HomePage.java new file mode 100644 index 0000000..a4ab95c --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/pages/HomePage.java @@ -0,0 +1,26 @@ +package com.mavlushechka.a1qa.project.pages; + +import aquality.selenium.browser.AqualityServices; +import aquality.selenium.elements.interfaces.IButton; +import aquality.selenium.elements.interfaces.ITextBox; +import com.mavlushechka.a1qa.framework.pages.BaseForm; +import org.openqa.selenium.By; + +public class HomePage extends BaseForm { + + private final ITextBox phoneOrEmailTextBox = AqualityServices.getElementFactory().getTextBox(By.id("index_email"), "Phone or email"); + private final IButton signInButton = AqualityServices.getElementFactory().getButton( + By.xpath("//button[contains(@class, 'VkIdForm__signInButton')]"),"Sign in" + ); + + + public HomePage() { + super(AqualityServices.getElementFactory().getLabel(By.xpath("//*[contains(@class, 'IndexPageContent')]"), "Index page content"), "Home"); + } + + public void performAuthorization(String phoneOrEmail) { + phoneOrEmailTextBox.clearAndType(phoneOrEmail); + signInButton.click(); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/pages/PostForm.java b/src/main/java/com/mavlushechka/a1qa/project/pages/PostForm.java new file mode 100644 index 0000000..a3f8972 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/pages/PostForm.java @@ -0,0 +1,68 @@ +package com.mavlushechka.a1qa.project.pages; + +import aquality.selenium.browser.AqualityServices; +import aquality.selenium.elements.interfaces.IButton; +import aquality.selenium.elements.interfaces.ILabel; +import com.mavlushechka.a1qa.framework.pages.BaseForm; +import com.mavlushechka.a1qa.project.models.Comment; +import com.mavlushechka.a1qa.project.models.Post; +import org.openqa.selenium.By; + +import java.util.Objects; + +public class PostForm extends BaseForm { + + private final ILabel authorLabel; + private final ILabel textLabel; + private final ILabel imageLabel; + private final IButton likeButton; + + + public PostForm(Post post) { + super(AqualityServices.getElementFactory().getLabel(By.id("post" + post.owner().getId() + "_" + post.id()), "Post"), "Post form"); + String postXpath = "//*[@id='" + "post" + post.owner().getId() + "_" + post.id() + "']"; + authorLabel = AqualityServices.getElementFactory().getLabel( + By.xpath(postXpath + "//*[contains(@class, 'post_author')]//a[contains(@class, 'author')]"), "Post author" + ); + textLabel = AqualityServices.getElementFactory().getLabel(By.xpath(postXpath + "//*[contains(@class, 'wall_post_text')]"), "Post text"); + imageLabel = AqualityServices.getElementFactory().getLabel( + By.xpath(postXpath + "//*[contains(@class, 'page_post_thumb_wrap')]"), "Post image" + ); + likeButton = AqualityServices.getElementFactory().getButton(By.xpath(postXpath + "//*[@data-reaction-set-id='reactions']"), "Like"); + } + + public boolean containsPost(Post post) { + boolean containsPost = Objects.equals(authorLabel.getText(), post.owner().getFirstName() + " " + post.owner().getLastName()) + && Objects.equals(textLabel.getText(), post.message()); + + if (post.attachment() != null) { + containsPost &= Objects.equals(post.attachment().toString(), imageLabel.getAttribute("href").split("vk.com/")[1]); + } else { + containsPost &= !imageLabel.state().isDisplayed(); + } + + return containsPost; + } + + public boolean containsComment(Comment comment) { + return new CommentsForm(comment.post()).containsComment(comment); + } + + public void clickLikeButton() { + likeButton.getElement().click(); + } + + public void waitForUpdate() { + String text = textLabel.getText(); + AqualityServices.getConditionalWait().waitFor(() -> !Objects.equals(textLabel.getText(), text)); + } + + public void waitForDelete() { + AqualityServices.getConditionalWait().waitFor(() -> !postExists()); + } + + public boolean postExists() { + return authorLabel.state().isDisplayed(); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/pages/ProfilePage.java b/src/main/java/com/mavlushechka/a1qa/project/pages/ProfilePage.java new file mode 100644 index 0000000..ae99f22 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/pages/ProfilePage.java @@ -0,0 +1,42 @@ +package com.mavlushechka.a1qa.project.pages; + +import aquality.selenium.browser.AqualityServices; +import com.mavlushechka.a1qa.framework.pages.BaseForm; +import com.mavlushechka.a1qa.project.models.Comment; +import com.mavlushechka.a1qa.project.models.Post; +import org.openqa.selenium.By; + +public class ProfilePage extends BaseForm { + + private final ProfileWallForm profileWallForm = new ProfileWallForm(); + + + public ProfilePage() { + super(AqualityServices.getElementFactory().getLabel(By.id("profile"), "Profile"), "Profile"); + } + + public boolean containsPost(Post post) { + return profileWallForm.containsPost(post); + } + + public boolean containsComment(Comment comment) { + return profileWallForm.containsComment(comment); + } + + public boolean notContainsPost(Post post) { + return profileWallForm.notContainsPost(post); + } + + public void clickPostLikeButton(Post post) { + profileWallForm.clickPostLikeButton(post); + } + + public void waitForPostUpdate(Post post) { + profileWallForm.waitForPostUpdate(post); + } + + public void waitForPostDelete(Post post) { + profileWallForm.waitForPostDelete(post); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/pages/ProfileWallForm.java b/src/main/java/com/mavlushechka/a1qa/project/pages/ProfileWallForm.java new file mode 100644 index 0000000..120e30f --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/pages/ProfileWallForm.java @@ -0,0 +1,44 @@ +package com.mavlushechka.a1qa.project.pages; + +import aquality.selenium.browser.AqualityServices; +import com.mavlushechka.a1qa.framework.pages.BaseForm; +import com.mavlushechka.a1qa.project.models.Comment; +import com.mavlushechka.a1qa.project.models.Post; +import org.openqa.selenium.By; + +public class ProfileWallForm extends BaseForm { + + public ProfileWallForm() { + super(AqualityServices.getElementFactory().getLabel(By.id("profile_wall"), "Profile wall"), "Profile wall form"); + } + + public boolean containsPost(Post post) { + PostForm postForm = new PostForm(post); + + if (!postForm.isOpened()) { + return false; + } + return postForm.containsPost(post); + } + + public boolean notContainsPost(Post post) { + return !new PostForm(post).postExists(); + } + + public boolean containsComment(Comment comment) { + return new PostForm(comment.post()).containsComment(comment); + } + + public void clickPostLikeButton(Post post) { + new PostForm(post).clickLikeButton(); + } + + public void waitForPostUpdate(Post post) { + new PostForm(post).waitForUpdate(); + } + + public void waitForPostDelete(Post post) { + new PostForm(post).waitForDelete(); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/pages/SideBarForm.java b/src/main/java/com/mavlushechka/a1qa/project/pages/SideBarForm.java new file mode 100644 index 0000000..01973ec --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/pages/SideBarForm.java @@ -0,0 +1,21 @@ +package com.mavlushechka.a1qa.project.pages; + +import aquality.selenium.browser.AqualityServices; +import aquality.selenium.elements.interfaces.IButton; +import com.mavlushechka.a1qa.framework.pages.BaseForm; +import org.openqa.selenium.By; + +public class SideBarForm extends BaseForm { + + private final IButton myProfileButton = AqualityServices.getElementFactory().getButton(By.id("l_pr"), "My profile"); + + + public SideBarForm() { + super(AqualityServices.getElementFactory().getLabel(By.id("side_bar"), "Side bar"), "Side bar form"); + } + + public void clickMyProfileButton() { + myProfileButton.click(); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/pages/SignInPage.java b/src/main/java/com/mavlushechka/a1qa/project/pages/SignInPage.java new file mode 100644 index 0000000..872f87f --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/pages/SignInPage.java @@ -0,0 +1,31 @@ +package com.mavlushechka.a1qa.project.pages; + +import aquality.selenium.browser.AqualityServices; +import aquality.selenium.elements.interfaces.IButton; +import aquality.selenium.elements.interfaces.ITextBox; +import com.mavlushechka.a1qa.framework.pages.BaseForm; +import org.openqa.selenium.By; + +public class SignInPage extends BaseForm { + + private final ITextBox passwordTextBox = AqualityServices.getElementFactory().getTextBox( + By.xpath("//input[contains(@name, 'password')]"), "Password" + ); + private final IButton continueButton = AqualityServices.getElementFactory().getButton( + By.xpath("//*[contains(@class, 'vkc__EnterPasswordNoUserInfo__buttonWrap')]//button[contains(@class, 'vkuiButton')]"), "Continue" + ); + + + public SignInPage() { + super( + AqualityServices.getElementFactory().getLabel(By.xpath("//form[contains(@class, 'vkc__EnterPasswordNoUserInfo__content')]"), + "Password form"), "Sign in" + ); + } + + public void performAuthorization(String password) { + passwordTextBox.clearAndType(password); + continueButton.click(); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/project/utils/VkApiUtils.java b/src/main/java/com/mavlushechka/a1qa/project/utils/VkApiUtils.java new file mode 100644 index 0000000..a5cd439 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/project/utils/VkApiUtils.java @@ -0,0 +1,68 @@ +package com.mavlushechka.a1qa.project.utils; + +import com.mavlushechka.a1qa.project.constants.VkApiMethod; +import com.mavlushechka.a1qa.framework.utils.JsonParser; +import com.mavlushechka.a1qa.framework.utils.UrlConnectionManager; +import com.mavlushechka.a1qa.project.models.Liker; +import com.mavlushechka.a1qa.project.models.Post; +import com.mavlushechka.a1qa.project.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(VkApiMethod.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(VkApiMethod.WALL_POST.name, "message=" + message))) + .getJSONObject("response").getInt("post_id"); + } + + public static void editPost(Post post, Post editedPost) throws IOException { + UrlConnectionManager.get( + url.formatted( + VkApiMethod.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(VkApiMethod.WALL_DELETE.name, "post_id=" + post.id())); + } + + public static int createComment(int postId, String message) throws IOException { + return new JSONObject(UrlConnectionManager.get( + url.formatted( + VkApiMethod.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(VkApiMethod.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; + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/utils/DoubleUtils.java b/src/main/java/com/mavlushechka/a1qa/utils/DoubleUtils.java deleted file mode 100644 index d68b18c..0000000 --- a/src/main/java/com/mavlushechka/a1qa/utils/DoubleUtils.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.mavlushechka.a1qa.utils; - -public class DoubleUtils { - - public static double getPercentageOf(double number, double percentage) { - return number / 100 * percentage; - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/utils/FileParser.java b/src/main/java/com/mavlushechka/a1qa/utils/FileParser.java deleted file mode 100644 index 7fd626f..0000000 --- a/src/main/java/com/mavlushechka/a1qa/utils/FileParser.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.mavlushechka.a1qa.utils; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; - -public class FileParser { - - public static String parse(String filename) { - StringBuilder stringBuilder = new StringBuilder(); - - try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filename))) { - while (bufferedReader.ready()) { - stringBuilder.append(bufferedReader.readLine()); - } - } catch (IOException ioException) { - throw new IllegalArgumentException("Cannot find required file."); - } - return stringBuilder.toString(); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/utils/HttpUrlConnectionFactory.java b/src/main/java/com/mavlushechka/a1qa/utils/HttpUrlConnectionFactory.java deleted file mode 100644 index 25d3a90..0000000 --- a/src/main/java/com/mavlushechka/a1qa/utils/HttpUrlConnectionFactory.java +++ /dev/null @@ -1,25 +0,0 @@ -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/IntegerUtils.java b/src/main/java/com/mavlushechka/a1qa/utils/IntegerUtils.java deleted file mode 100644 index 37f3eb8..0000000 --- a/src/main/java/com/mavlushechka/a1qa/utils/IntegerUtils.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mavlushechka.a1qa.utils; - -import java.util.OptionalInt; -import java.util.Random; - -public class IntegerUtils { - - private IntegerUtils() { - } - - public static int getRandomNumber(int min, int max) { - OptionalInt randomNumber = new Random().ints(min, max).findFirst(); - - if (randomNumber.isPresent()) { - return randomNumber.getAsInt(); - } - LoggerUtils.error("Incorrect min and max arguments."); - throw new IllegalArgumentException("Incorrect min and max arguments."); - } - -} 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 bbcc732..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/LoggerUtils.java b/src/main/java/com/mavlushechka/a1qa/utils/LoggerUtils.java deleted file mode 100644 index 2498f87..0000000 --- a/src/main/java/com/mavlushechka/a1qa/utils/LoggerUtils.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.mavlushechka.a1qa.utils; - -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.config.ConfigurationSource; -import org.apache.logging.log4j.core.config.Configurator; -import org.apache.logging.log4j.core.config.xml.XmlConfiguration; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; - -public class LoggerUtils { - - private final static File CONFIGURATION_FILE = new File("src/main/resources/log4j2.xml"); - private static Logger logger; - private static int step = 0; - - - private LoggerUtils() { - } - - public static void initialize() { - try { - Configurator.initialize(new XmlConfiguration(null, new ConfigurationSource(new FileInputStream(CONFIGURATION_FILE)))); - } catch (IOException ioException) { - throw new RuntimeException(ioException); - } - 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); - } - - public static void error(String text) { - logger.log(Level.ERROR, text); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/utils/StringUtils.java b/src/main/java/com/mavlushechka/a1qa/utils/StringUtils.java deleted file mode 100644 index 854d7cc..0000000 --- a/src/main/java/com/mavlushechka/a1qa/utils/StringUtils.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.mavlushechka.a1qa.utils; - -import java.util.Random; - -public class StringUtils { - - private StringUtils() { - } - - public static String convertToConstantCase(String text) { - StringBuilder stringBuilder = new StringBuilder(); - String[] words = text.split(" "); - - for (int i = 0; i < words.length; i++) { - stringBuilder.append(words[i].toUpperCase()); - if (i != words.length - 1) { - stringBuilder.append("_"); - } - } - - return stringBuilder.toString(); - } - - public static String capitalizeFirstLetter(String text) { - return text.substring(0, 1).toUpperCase() + text.substring(1); - } - - public static int removeNonDigits(String text) { - return Integer.parseInt(text.replaceAll("[^0-9]+", "")); - } - - public static String generateRandomText(int lettersLowerBound, int lettersUpperBound, int length) { - return new Random().ints(lettersLowerBound, lettersUpperBound + 1) - .limit(length) - .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) - .toString(); - } - - public static String replaceByStars(String text) { - return "*".repeat(text.length()); - } - -} 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 7ea092c..0000000 --- a/src/main/java/com/mavlushechka/a1qa/utils/UrlConnectionManager.java +++ /dev/null @@ -1,50 +0,0 @@ -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 deleted file mode 100644 index 8d90898..0000000 --- a/src/main/java/com/mavlushechka/a1qa/utils/VkApiUtils.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.mavlushechka.a1qa.utils; - -import com.mavlushechka.a1qa.constants.VkApiMethod; -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(VkApiMethod.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(VkApiMethod.WALL_POST.name, "message=" + message))) - .getJSONObject("response").getInt("post_id"); - } - - public static void editPost(Post post, Post editedPost) throws IOException { - UrlConnectionManager.get( - url.formatted( - VkApiMethod.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(VkApiMethod.WALL_DELETE.name, "post_id=" + post.id())); - } - - public static int createComment(int postId, String message) throws IOException { - return new JSONObject(UrlConnectionManager.get( - url.formatted( - VkApiMethod.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(VkApiMethod.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