diff options
author | Mavlushechka <mavlushechka@gmail.com> | 2022-10-07 23:46:46 +0500 |
---|---|---|
committer | Mavlushechka <mavlushechka@gmail.com> | 2022-10-07 23:46:46 +0500 |
commit | f8501d374dbd39a66078bad11384ea241848acc6 (patch) | |
tree | 41deb41375982e3db1d4071117dcf22377145ab8 /src/main/java/com/mavlushechka/a1qa | |
parent | 4495c73482a9fb3bdb87a75816974602e833278e (diff) |
Solve 1st test case
Diffstat (limited to 'src/main/java/com/mavlushechka/a1qa')
42 files changed, 503 insertions, 682 deletions
diff --git a/src/main/java/com/mavlushechka/a1qa/constants/Browser.java b/src/main/java/com/mavlushechka/a1qa/constants/Attachment.java index 3a9a99c..a011430 100644 --- a/src/main/java/com/mavlushechka/a1qa/constants/Browser.java +++ b/src/main/java/com/mavlushechka/a1qa/constants/Attachment.java @@ -1,7 +1,7 @@ package com.mavlushechka.a1qa.constants; -public enum Browser { +public enum Attachment { - CHROME, FIREFOX + PHOTO } diff --git a/src/main/java/com/mavlushechka/a1qa/constants/Endpoint.java b/src/main/java/com/mavlushechka/a1qa/constants/Endpoint.java deleted file mode 100644 index a43547f..0000000 --- a/src/main/java/com/mavlushechka/a1qa/constants/Endpoint.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.mavlushechka.a1qa.constants; - -public enum Endpoint { - - POSTS("/posts"), USERS("/users"); - - public final String spec; - - - Endpoint(String spec) { - this.spec = spec; - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/constants/Method.java b/src/main/java/com/mavlushechka/a1qa/constants/Method.java new file mode 100644 index 0000000..221f98b --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/constants/Method.java @@ -0,0 +1,14 @@ +package com.mavlushechka.a1qa.constants; + +public enum Method { + + 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; + + Method(String name) { + this.name = name; + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/driverUtils/ActionUtils.java b/src/main/java/com/mavlushechka/a1qa/driverUtils/ActionUtils.java deleted file mode 100644 index bd7b85b..0000000 --- a/src/main/java/com/mavlushechka/a1qa/driverUtils/ActionUtils.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mavlushechka.a1qa.driverUtils; - -import org.openqa.selenium.Point; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.interactions.Actions; - -public class ActionUtils { - - private ActionUtils() { - } - - public static void dragAndDrop(WebElement element, Point currentPoint, Point expectedPoint) { - new Actions(WebDriverSingleton.getInstance()) - .moveToElement(element, currentPoint.x, currentPoint.y) - .click() - .dragAndDropBy(element, expectedPoint.x, expectedPoint.y) - .build() - .perform(); - } - - public static void scrollTo(WebElement webElement) { - new Actions(WebDriverSingleton.getInstance()).moveToElement(webElement); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/driverUtils/AlertUtils.java b/src/main/java/com/mavlushechka/a1qa/driverUtils/AlertUtils.java deleted file mode 100644 index 8095365..0000000 --- a/src/main/java/com/mavlushechka/a1qa/driverUtils/AlertUtils.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.mavlushechka.a1qa.driverUtils; - -import org.openqa.selenium.Alert; -import org.openqa.selenium.support.ui.ExpectedConditions; - -public class AlertUtils { - - private AlertUtils() { - } - - public static boolean isAlertPresent() { - return ExpectedConditions.alertIsPresent().apply(WebDriverSingleton.getInstance()) != null; - } - - public static String getAlertText() { - return findAlert().getText(); - } - - public static void sendKeysToAlert(String keysToSend) { - findAlert().sendKeys(keysToSend); - } - - public static void acceptAlert() { - findAlert().accept(); - } - - private static Alert findAlert() { - return WebDriverWaitFactory.createWebDriverWait().until(ExpectedConditions.alertIsPresent()); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/driverUtils/FrameUtils.java b/src/main/java/com/mavlushechka/a1qa/driverUtils/FrameUtils.java deleted file mode 100644 index d270cae..0000000 --- a/src/main/java/com/mavlushechka/a1qa/driverUtils/FrameUtils.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.mavlushechka.a1qa.driverUtils; - -public class FrameUtils { - - private FrameUtils() { - } - - public static void switchToFrame(String nameOrId) { - WebDriverSingleton.getInstance().switchTo().frame(nameOrId); - } - - public static void switchToFrame(int index) { - WebDriverSingleton.getInstance().switchTo().frame(index); - } - - public static void switchToDefaultContent() { - WebDriverSingleton.getInstance().switchTo().defaultContent(); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/driverUtils/HttpURLConnectionFactory.java b/src/main/java/com/mavlushechka/a1qa/driverUtils/HttpURLConnectionFactory.java deleted file mode 100644 index 13145c4..0000000 --- a/src/main/java/com/mavlushechka/a1qa/driverUtils/HttpURLConnectionFactory.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.mavlushechka.a1qa.driverUtils; - -import com.mavlushechka.a1qa.constants.RequestMethod; -import com.mavlushechka.a1qa.utils.JSONParser; - -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(JSONParser.parseData("config", "browser.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/driverUtils/WebDriverFactory.java b/src/main/java/com/mavlushechka/a1qa/driverUtils/WebDriverFactory.java deleted file mode 100644 index 7fde704..0000000 --- a/src/main/java/com/mavlushechka/a1qa/driverUtils/WebDriverFactory.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.mavlushechka.a1qa.driverUtils; - -import com.mavlushechka.a1qa.constants.Browser; -import com.mavlushechka.a1qa.utils.JSONParser; -import com.mavlushechka.a1qa.utils.LoggerUtils; -import com.mavlushechka.a1qa.utils.StringUtils; -import io.github.bonigarcia.wdm.WebDriverManager; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.chrome.ChromeDriver; -import org.openqa.selenium.chrome.ChromeOptions; -import org.openqa.selenium.firefox.FirefoxDriver; -import org.openqa.selenium.firefox.FirefoxOptions; - -public class WebDriverFactory { - - private WebDriverFactory() { - } - - protected static WebDriver createWebDriver() { - switch (Browser.valueOf(StringUtils.convertToConstantCase(JSONParser.parseData("config", "browser.name")))) { - case CHROME -> { - LoggerUtils.info("Creating ChromeDriver."); - return createChromeDriver(); - } - case FIREFOX -> { - LoggerUtils.info("Creating FirefoxDriver."); - return createFirefoxDriver(); - } - default -> { - LoggerUtils.error("Incorrect browser name."); - throw new IllegalStateException("Incorrect browser name."); - } - } - } - - private static ChromeDriver createChromeDriver() { - ChromeOptions chromeOptions = new ChromeOptions(); - - WebDriverManager.chromedriver().setup(); - if (Boolean.parseBoolean(JSONParser.parseData("config", "browser.isIncognito"))) { - LoggerUtils.info("Turning on Chrome incognito mode."); - chromeOptions.addArguments("--incognito"); - } - if (Boolean.parseBoolean(JSONParser.parseData("config", "browser.isKiosk"))) { - LoggerUtils.info("Turning on Chrome kiosk mode."); - chromeOptions.addArguments("--kiosk"); - } - return new ChromeDriver(chromeOptions); - } - - private static FirefoxDriver createFirefoxDriver() { - FirefoxOptions firefoxOptions = new FirefoxOptions(); - - WebDriverManager.firefoxdriver().setup(); - if (Boolean.parseBoolean(JSONParser.parseData("config", "browser.isIncognito"))) { - LoggerUtils.info("Turning on Firefox incognito mode."); - firefoxOptions.addArguments("--private"); - } - if (Boolean.parseBoolean(JSONParser.parseData("config", "browser.isKiosk"))) { - LoggerUtils.info("Turning on Firefox kiosk mode."); - firefoxOptions.addArguments("--kiosk"); - } - return new FirefoxDriver(firefoxOptions); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/driverUtils/WebDriverSingleton.java b/src/main/java/com/mavlushechka/a1qa/driverUtils/WebDriverSingleton.java deleted file mode 100644 index e363ae7..0000000 --- a/src/main/java/com/mavlushechka/a1qa/driverUtils/WebDriverSingleton.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.mavlushechka.a1qa.driverUtils; - -import org.openqa.selenium.WebDriver; - -public class WebDriverSingleton { - - private static WebDriver instance; - - - private WebDriverSingleton() { - } - - public static WebDriver getInstance() { - if (instance == null) { - instance = WebDriverFactory.createWebDriver(); - } - - return instance; - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/driverUtils/WebDriverUtils.java b/src/main/java/com/mavlushechka/a1qa/driverUtils/WebDriverUtils.java deleted file mode 100644 index a95717a..0000000 --- a/src/main/java/com/mavlushechka/a1qa/driverUtils/WebDriverUtils.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.mavlushechka.a1qa.driverUtils; - -import org.openqa.selenium.WebDriver; - -public class WebDriverUtils { - - private final static WebDriver webDriver = WebDriverSingleton.getInstance(); - - - private WebDriverUtils() { - } - - public static void goToAddress(String address) { - webDriver.get(address); - } - - public static int getWindowHandlesCount() { - return webDriver.getWindowHandles().size(); - } - - public static void switchToWindowHandle(int index) { - webDriver.switchTo().window(webDriver.getWindowHandles().toArray()[index].toString()); - } - - public static void close() { - webDriver.close(); - } - - public static void quit() { - webDriver.quit(); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/driverUtils/WebDriverWaitFactory.java b/src/main/java/com/mavlushechka/a1qa/driverUtils/WebDriverWaitFactory.java deleted file mode 100644 index 9a9ac91..0000000 --- a/src/main/java/com/mavlushechka/a1qa/driverUtils/WebDriverWaitFactory.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.mavlushechka.a1qa.driverUtils; - -import com.mavlushechka.a1qa.utils.JSONParser; -import org.openqa.selenium.support.ui.WebDriverWait; - -import java.time.Duration; - -public class WebDriverWaitFactory { - - private WebDriverWaitFactory() { - } - - public static WebDriverWait createWebDriverWait() { - return new WebDriverWait(WebDriverSingleton.getInstance(), Duration.ofSeconds(Integer.parseInt(JSONParser.parseData("config", "webDriverWait.durationOfSeconds")))); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java b/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java deleted file mode 100644 index 6f40af6..0000000 --- a/src/main/java/com/mavlushechka/a1qa/elements/BaseElement.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.mavlushechka.a1qa.elements; - -import com.mavlushechka.a1qa.driverUtils.ActionUtils; -import com.mavlushechka.a1qa.driverUtils.WebDriverSingleton; -import com.mavlushechka.a1qa.driverUtils.WebDriverWaitFactory; -import com.mavlushechka.a1qa.utils.LoggerUtils; -import org.openqa.selenium.By; -import org.openqa.selenium.Dimension; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.ui.ExpectedConditions; - -public abstract class BaseElement { - - private final By locator; - private final String name; - - - public BaseElement(By locator, String name) { - this.locator = locator; - this.name = name; - } - - public void click() { - WebElement webElement = find(); - - scrollTo(); - LoggerUtils.info("Clicking on the \"" + name + "\" element."); - webElement.click(); - } - - public String getText() { - WebElement webElement = find(); - - LoggerUtils.info("Getting text of the \"" + name + "\" element."); - return webElement.getText(); - } - - public boolean isEnabled() { - WebElement webElement = find(); - - LoggerUtils.info("Getting state of the \"" + name + "\" element."); - return webElement.isEnabled(); - } - - public boolean isVisible() { - LoggerUtils.info("Getting visibility of the \"" + name + "\" element."); - return WebDriverWaitFactory.createWebDriverWait().until(ExpectedConditions.visibilityOfElementLocated(locator)).isDisplayed(); - } - - public boolean isInvisible() { - LoggerUtils.info("Getting invisibility of the \"" + name + "\" element."); - return WebDriverWaitFactory.createWebDriverWait().until(ExpectedConditions.invisibilityOfElementLocated(locator)); - } - - public String getName() { - return name; - } - - public Dimension getDimension() { - WebElement webElement = find(); - - LoggerUtils.info("Getting dimension of the \"" + name + "\" element."); - return webElement.getSize(); - } - - public String getAttributeValue(String attribute) { - WebElement webElement = find(); - - LoggerUtils.info("Getting \"" + attribute + "\" attribute of the \"" + name + "\" element."); - return webElement.getAttribute(attribute); - } - - protected WebElement find() { - isVisible(); - LoggerUtils.info("Finding the \"" + name + "\" element."); - return WebDriverSingleton.getInstance().findElement(locator); - } - - protected void scrollTo() { - WebElement webElement = find(); - - LoggerUtils.info("Scrolling to the \"" + name + "\" element."); - ActionUtils.scrollTo(webElement); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/elements/Button.java b/src/main/java/com/mavlushechka/a1qa/elements/Button.java deleted file mode 100644 index d68b5f6..0000000 --- a/src/main/java/com/mavlushechka/a1qa/elements/Button.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.mavlushechka.a1qa.elements; - -import org.openqa.selenium.By; - -public class Button extends BaseElement { - - public Button(By locator, String name) { - super(locator, name); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/elements/Field.java b/src/main/java/com/mavlushechka/a1qa/elements/Field.java deleted file mode 100644 index 99cd41d..0000000 --- a/src/main/java/com/mavlushechka/a1qa/elements/Field.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.mavlushechka.a1qa.elements; - -import com.mavlushechka.a1qa.utils.LoggerUtils; -import com.mavlushechka.a1qa.utils.StringUtils; -import org.openqa.selenium.By; -import org.openqa.selenium.WebElement; - -public class Field extends BaseElement { - - public Field(By locator, String name) { - super(locator, name); - } - - public void sendKeys(String keys) { - sendKeys(keys, false); - } - - public void sendKeys(String keys, boolean isSecret) { - WebElement field = find(); - - LoggerUtils.info("Entering \"" + (isSecret ? StringUtils.replaceByStars(keys) : keys) + "\" keys to the \"" + getName() + "\" field."); - field.sendKeys(keys); - } - - public void clear() { - WebElement field = find(); - - LoggerUtils.info("Clearing the \"" + getName() + "\" field."); - field.clear(); - } - - public String getValue() { - return find().getAttribute("value"); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/elements/Label.java b/src/main/java/com/mavlushechka/a1qa/elements/Label.java deleted file mode 100644 index a822f63..0000000 --- a/src/main/java/com/mavlushechka/a1qa/elements/Label.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.mavlushechka.a1qa.elements; - -import org.openqa.selenium.By; - -public class Label extends BaseElement { - - public Label(By locator, String name) { - super(locator, name); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/elements/Slider.java b/src/main/java/com/mavlushechka/a1qa/elements/Slider.java deleted file mode 100644 index 45c1e69..0000000 --- a/src/main/java/com/mavlushechka/a1qa/elements/Slider.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.mavlushechka.a1qa.elements; - -import com.mavlushechka.a1qa.driverUtils.ActionUtils; -import com.mavlushechka.a1qa.utils.DoubleUtils; -import com.mavlushechka.a1qa.utils.LoggerUtils; -import org.openqa.selenium.By; -import org.openqa.selenium.Point; -import org.openqa.selenium.WebElement; - -public class Slider extends BaseElement { - - public Slider(By locator, String name) { - super(locator, name); - } - - public void slideTo(int percentage) { - WebElement slider = find(); - Point currentPoint = new Point((int) Math.round(DoubleUtils.getPercentageOf(slider.getSize().getWidth(), getValue())-getDimension().width/2.0), 0); - Point expectedPoint = new Point((int) Math.round(DoubleUtils.getPercentageOf(slider.getSize().getWidth(), percentage)-getDimension().width/2.0), 0); - - LoggerUtils.info("Sliding on the \"" + getName() + "\" element."); - ActionUtils.dragAndDrop(slider, currentPoint, expectedPoint); - } - - public int getValue() { - return Integer.parseInt(find().getAttribute("value")); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/models/Address.java b/src/main/java/com/mavlushechka/a1qa/models/Address.java deleted file mode 100644 index ca2da32..0000000 --- a/src/main/java/com/mavlushechka/a1qa/models/Address.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.mavlushechka.a1qa.models; - -import java.util.Objects; - -public class Address { - - public final String street; - public final String suite; - public final String city; - public final String zipcode; - public final Geo geo; - - - public Address(String street, String suite, String city, String zipcode, Geo geo) { - this.street = street; - this.suite = suite; - this.city = city; - this.zipcode = zipcode; - this.geo = geo; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Address address = (Address) o; - return Objects.equals(street, address.street) && Objects.equals(suite, address.suite) && Objects.equals(city, address.city) && Objects.equals(zipcode, address.zipcode) && Objects.equals(geo, address.geo); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/models/Attachment.java b/src/main/java/com/mavlushechka/a1qa/models/Attachment.java new file mode 100644 index 0000000..a05ee71 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/models/Attachment.java @@ -0,0 +1,10 @@ +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 new file mode 100644 index 0000000..b8de1e0 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/models/Comment.java @@ -0,0 +1,4 @@ +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/Company.java b/src/main/java/com/mavlushechka/a1qa/models/Company.java deleted file mode 100644 index 3a1a448..0000000 --- a/src/main/java/com/mavlushechka/a1qa/models/Company.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.mavlushechka.a1qa.models; - -import java.util.Objects; - -public class Company { - - public final String name; - public final String catchPhrase; - public final String bs; - - - public Company(String name, String catchPhrase, String bs) { - this.name = name; - this.catchPhrase = catchPhrase; - this.bs = bs; - } - - @Override - public boolean equals(Object object) { - if (this == object) return true; - if (object == null || getClass() != object.getClass()) return false; - Company company = (Company) object; - return Objects.equals(name, company.name) && Objects.equals(catchPhrase, company.catchPhrase) && Objects.equals(bs, company.bs); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/models/Geo.java b/src/main/java/com/mavlushechka/a1qa/models/Geo.java deleted file mode 100644 index 4a514da..0000000 --- a/src/main/java/com/mavlushechka/a1qa/models/Geo.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.mavlushechka.a1qa.models; - -import java.util.Objects; - -public class Geo { - - public final String lat; - public final String lng; - - - public Geo(String lat, String lng) { - this.lat = lat; - this.lng = lng; - } - - @Override - public boolean equals(Object object) { - if (this == object) return true; - if (object == null || getClass() != object.getClass()) return false; - Geo geo = (Geo) object; - return Objects.equals(lat, geo.lat) && Objects.equals(lng, geo.lng); - } - -} diff --git a/src/main/java/com/mavlushechka/a1qa/models/Liker.java b/src/main/java/com/mavlushechka/a1qa/models/Liker.java new file mode 100644 index 0000000..045852f --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/models/Liker.java @@ -0,0 +1,22 @@ +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 index c936a71..9cf8474 100644 --- a/src/main/java/com/mavlushechka/a1qa/models/Post.java +++ b/src/main/java/com/mavlushechka/a1qa/models/Post.java @@ -1,41 +1,4 @@ package com.mavlushechka.a1qa.models; -import java.util.Objects; - -public class Post implements Comparable<Post> { - - public final String id; - public final String title; - public final String body; - public final String userId; - - - public Post(String id, String title, String body, String userId) { - this.id = id; - this.title = title; - this.body = body; - this.userId = userId; - } - - @Override - public int compareTo(Post post) { - int thisId = Integer.parseInt(id); - int otherId = Integer.parseInt(post.id); - - return Integer.compare(thisId, otherId); - } - - @Override - public boolean equals(Object object) { - if (this == object) return true; - if (object == null || getClass() != object.getClass()) return false; - Post post = (Post) object; - return Objects.equals(id, post.id) && Objects.equals(title, post.title) && Objects.equals(body, post.body) && Objects.equals(userId, post.userId); - } - - @Override - public int hashCode() { - return Objects.hash(id, title, body, userId); - } - +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 index ac13c82..c9bb3ff 100644 --- a/src/main/java/com/mavlushechka/a1qa/models/User.java +++ b/src/main/java/com/mavlushechka/a1qa/models/User.java @@ -1,50 +1,46 @@ package com.mavlushechka.a1qa.models; -import java.util.Objects; +import com.google.gson.annotations.SerializedName; public class User { - public final String id; - public final String name; - public final String username; - public final String email; - public final Address address; - public final String phone; - public final String website; - public final Company company; + 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(String id, String name, String username, String email, Address address, String phone, String website, Company company) { + public User(int id, String firstName, String lastName, boolean canAccessClosed, boolean isClosed) { this.id = id; - this.name = name; - this.username = username; - this.email = email; - this.address = address; - this.phone = phone; - this.website = website; - this.company = company; + this.firstName = firstName; + this.lastName = lastName; + this.canAccessClosed = canAccessClosed; + this.isClosed = isClosed; } - @Override - public boolean equals(Object object) { - if (this == object) return true; - if (object == null || getClass() != object.getClass()) return false; - User user = (User) object; - return Objects.equals(id, user.id) && Objects.equals(name, user.name) && Objects.equals(username, user.username) && Objects.equals(email, user.email) && Objects.equals(address, user.address) && Objects.equals(phone, user.phone) && Objects.equals(website, user.website) && Objects.equals(company, user.company); + public int getId() { + return id; } - @Override - public String toString() { - return "User{" + - "id='" + id + '\'' + - ", name='" + name + '\'' + - ", username='" + username + '\'' + - ", email='" + email + '\'' + - ", address=" + address + - ", phone='" + phone + '\'' + - ", website='" + website + '\'' + - ", company=" + company + - '}'; + 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 index 3ac855a..8ed6026 100644 --- a/src/main/java/com/mavlushechka/a1qa/pages/BaseForm.java +++ b/src/main/java/com/mavlushechka/a1qa/pages/BaseForm.java @@ -1,20 +1,21 @@ package com.mavlushechka.a1qa.pages; -import com.mavlushechka.a1qa.elements.BaseElement; +import aquality.selenium.elements.interfaces.IElement; +import aquality.selenium.elements.interfaces.ILabel; public abstract class BaseForm { - protected final BaseElement uniqueElement; - protected final String name; + private final IElement uniqueElement; + private final String name; - public BaseForm(BaseElement uniqueElement, String name) { + public BaseForm(ILabel uniqueElement, String name) { this.uniqueElement = uniqueElement; this.name = name; } public boolean isOpened() { - return uniqueElement.isVisible(); + return uniqueElement.getElement().isDisplayed(); } public String getName() { diff --git a/src/main/java/com/mavlushechka/a1qa/pages/CommentForm.java b/src/main/java/com/mavlushechka/a1qa/pages/CommentForm.java new file mode 100644 index 0000000..d087336 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/pages/CommentForm.java @@ -0,0 +1,28 @@ +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 contains(Comment comment) { + return Objects.equals(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 new file mode 100644 index 0000000..4ae6a01 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/pages/CommentsForm.java @@ -0,0 +1,32 @@ +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 contains(Comment comment) { + CommentForm commentForm = new CommentForm(comment); + + if (nextCommentsButton.getElement().isDisplayed()) { + nextCommentsButton.click(); + } + return commentForm.contains(comment); + } + +} diff --git a/src/main/java/com/mavlushechka/a1qa/pages/FeedPage.java b/src/main/java/com/mavlushechka/a1qa/pages/FeedPage.java new file mode 100644 index 0000000..bebecc1 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/pages/FeedPage.java @@ -0,0 +1,19 @@ +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 new file mode 100644 index 0000000..20339f8 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/pages/HomePage.java @@ -0,0 +1,25 @@ +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 new file mode 100644 index 0000000..dc5f8b0 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/pages/PostForm.java @@ -0,0 +1,67 @@ +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 contains(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 contains(Comment comment) { + return new CommentsForm(comment.post()).contains(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(this::notExists); + } + + public boolean notExists() { + 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 new file mode 100644 index 0000000..816517d --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/pages/ProfilePage.java @@ -0,0 +1,41 @@ +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 contains(Post post) { + return profileWallForm.contains(post); + } + + public boolean contains(Comment comment) { + return profileWallForm.contains(comment); + } + + public boolean notContains(Post post) { + return profileWallForm.notContains(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 new file mode 100644 index 0000000..d8ddc37 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/pages/ProfileWallForm.java @@ -0,0 +1,43 @@ +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 contains(Post post) { + PostForm postForm = new PostForm(post); + + if (!postForm.isOpened()) { + return false; + } + return postForm.contains(post); + } + + public boolean notContains(Post post) { + return new PostForm(post).notExists(); + } + + public boolean contains(Comment comment) { + return new PostForm(comment.post()).contains(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 new file mode 100644 index 0000000..8df8c3d --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/pages/SideBarForm.java @@ -0,0 +1,20 @@ +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 new file mode 100644 index 0000000..56c16e7 --- /dev/null +++ b/src/main/java/com/mavlushechka/a1qa/pages/SignInPage.java @@ -0,0 +1,30 @@ +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/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/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<Post> 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<User> getUsers() throws IOException { - return getObjects(usersSpec, User.class); - } - - public static int getUsersResponseCode(RequestMethod requestMethod) throws IOException { - return URLConnectionManager.getResponseCode(usersSpec, requestMethod); - } - - private static <T> List<T> getObjects(String spec, Class<T> classOfObject) throws IOException { - Object[] objects = JSONParser.convertArray(URLConnectionManager.get(spec), classOfObject); - ArrayList<T> 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 index 67595f9..bbcc732 100644 --- a/src/main/java/com/mavlushechka/a1qa/utils/JSONParser.java +++ b/src/main/java/com/mavlushechka/a1qa/utils/JsonParser.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import java.util.Map; import java.util.TreeMap; -public class JSONParser { +public class JsonParser { private final static TreeMap<String, JSONObject> parsedJSON = new TreeMap<>(); @@ -43,7 +43,7 @@ public class JSONParser { return new Gson().fromJson(json, classToConvert); } - public static <T> String convertToJSON(T object) { + public static <T> String convertToJson(T object) { return new Gson().toJson(object); } @@ -71,11 +71,11 @@ public class JSONParser { 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()); + 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++) { + 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("[\\[\\]]", "")); @@ -86,9 +86,9 @@ public class JSONParser { } } if (isObject) { - return jsonObject.getJSONObject(keys[keys.length-1]).toString(); + return jsonObject.getJSONObject(keys[keys.length - 1]).toString(); } - return jsonObject.getString(keys[keys.length-1]); + 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<Post> 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 index c6c9fae..7ea092c 100644 --- a/src/main/java/com/mavlushechka/a1qa/utils/URLConnectionManager.java +++ b/src/main/java/com/mavlushechka/a1qa/utils/UrlConnectionManager.java @@ -1,7 +1,6 @@ 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; @@ -9,12 +8,14 @@ import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; -public class URLConnectionManager { +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()))) { + try (BufferedReader bufferedReader = new BufferedReader( + new InputStreamReader(HttpUrlConnectionFactory.createHttpUrlConnection(spec, RequestMethod.GET, false).getInputStream())) + ) { String inputLine; while ((inputLine = bufferedReader.readLine()) != null) { @@ -25,14 +26,14 @@ public class URLConnectionManager { } public static String post(String spec, String content) throws IOException { - HttpURLConnection httpURLConnection = HttpURLConnectionFactory.createHttpURLConnection(spec, RequestMethod.POST, true); + HttpURLConnection httpUrlConnection = HttpUrlConnectionFactory.createHttpUrlConnection(spec, RequestMethod.POST, true); StringBuilder stringBuilder = new StringBuilder(); - try (DataOutputStream dataOutputStream = new DataOutputStream(httpURLConnection.getOutputStream())) { + try (DataOutputStream dataOutputStream = new DataOutputStream(httpUrlConnection.getOutputStream())) { dataOutputStream.writeBytes(content); dataOutputStream.flush(); } - try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()))) { + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpUrlConnection.getInputStream()))) { String inputLine; while ((inputLine = bufferedReader.readLine()) != null) { @@ -43,7 +44,7 @@ public class URLConnectionManager { } public static int getResponseCode(String spec, RequestMethod requestMethod) throws IOException { - return HttpURLConnectionFactory.createHttpURLConnection(spec, requestMethod, false).getResponseCode(); + 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; + } + +} |