summaryrefslogtreecommitdiff
path: root/src/test/java/com/mavlushechka/a1qa/project/TestCase1.java
blob: 70a80d18a96420e55b88b7b297044df659b1e2dc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.mavlushechka.a1qa.project;

import aquality.selenium.browser.AqualityServices;
import com.mavlushechka.a1qa.framework.BaseTest;
import com.mavlushechka.a1qa.framework.driverUtils.BrowserUtils;
import com.mavlushechka.a1qa.framework.utils.JsonParser;
import com.mavlushechka.a1qa.framework.utils.StringUtils;
import com.mavlushechka.a1qa.project.models.User;
import com.mavlushechka.a1qa.project.pages.AddProjectPage;
import com.mavlushechka.a1qa.project.pages.ProjectsPage;
import com.mavlushechka.a1qa.project.pages.TestsPage;
import com.mavlushechka.a1qa.framework.utils.Collections;
import com.mavlushechka.a1qa.project.utils.SiteApiUtils;
import org.openqa.selenium.Cookie;
import org.testng.Assert;
import org.testng.annotations.Test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.function.Supplier;

public class TestCase1 extends BaseTest {

    @Test
    public void test1() throws IOException {
        AqualityServices.getLogger().info("Step 1:", "Query the api to retrieve the token according to the variant number.");
        int variant = Integer.parseInt(JsonParser.parseData("testData", "variant"));
        String token = SiteApiUtils.generateToken(variant);
        Assert.assertNotEquals(token, null, "The token is null.");

        ProjectsPage projectsPage = new ProjectsPage();
        AqualityServices.getLogger().info("Step 2:", "Go to the website. Complete the necessary authorisation."
                + "Transfer the token (parameter token) generated in step 1 using a cookie. Refresh the page.");
        BrowserUtils.performAuthorization(JsonParser.convertToObject(JsonParser.parseObject("testData", "user"), User.class), JsonParser.parseData("config", "browser.url") + "/web/projects");
        Assert.assertTrue(projectsPage.state().waitForDisplayed(), "The %s page is not opened.".formatted(projectsPage.getName()));
        AqualityServices.getBrowser().getDriver().manage().addCookie(new Cookie("token", token));
        AqualityServices.getBrowser().refresh();
        Assert.assertEquals(projectsPage.getVersion(), variant, "The variant is not correct.");

        String projectName = JsonParser.parseData("testData", "projectName");
        AqualityServices.getLogger().info("Step 3:", "Go to the Nexage project page. Query the api to get a list of tests in JSON/XML format.");
        projectsPage.openProject(projectName);
        TestsPage testsPage = new TestsPage();
        Assert.assertTrue(testsPage.state().waitForDisplayed(), "The %s page is not opened.".formatted(testsPage.getName()));
        List<com.mavlushechka.a1qa.project.models.Test> allRunningTestsOnSite = testsPage.getAllRunningTests();
        Assert.assertTrue(Collections.isSortedDescending(allRunningTestsOnSite), "Tests are not sorted in descending order.");
        Object[] objectsOfAllRunningTestsReceivedByApi = JsonParser.convertArray(
                SiteApiUtils.getTestsJson(projectsPage.getProjectId(projectName)),
                com.mavlushechka.a1qa.project.models.Test.class
        );
        ArrayList<com.mavlushechka.a1qa.project.models.Test> allRunningTestsReceivedByApi = new ArrayList<>();
        for (Object object : objectsOfAllRunningTestsReceivedByApi) {
            allRunningTestsReceivedByApi.add((com.mavlushechka.a1qa.project.models.Test) object);
        }
        Assert.assertTrue(allRunningTestsReceivedByApi.containsAll(allRunningTestsOnSite),
                "All running tests received by API not contains all running tests on site.");

        AqualityServices.getLogger().info("Step 4:", "Return to the previous page in the browser (project page). Press +Add. Enter the project name, and save."
                + "Call the closePopUp() js-method to close the add project window. Refresh the page.");
        AqualityServices.getBrowser().goBack();
        projectsPage.clickOnAddButton();
        AqualityServices.getBrowser().tabs().switchToLastTab();
        AddProjectPage addProjectPage = new AddProjectPage();
        Supplier<String> randomTextGenerator = () -> StringUtils.generateRandomText(
                Integer.parseInt(JsonParser.parseData("config", "randomTextGenerator.lettersLowerBound")),
                Integer.parseInt(JsonParser.parseData("config", "randomTextGenerator.lettersUpperBound")),
                Integer.parseInt(JsonParser.parseData("config", "randomTextGenerator.length"))
        );
        String randomProjectName = randomTextGenerator.get();
        addProjectPage.saveProject(randomProjectName);
        Assert.assertTrue(addProjectPage.isProjectSaved(randomProjectName), "The project is not saved.");
        String currentTabHandle = AqualityServices.getBrowser().tabs().getCurrentTabHandle();
        AqualityServices.getBrowser().tabs().closeTab();
        Assert.assertFalse(AqualityServices.getBrowser().tabs().getTabHandles().contains(currentTabHandle), "The tab is not closed.");
        AqualityServices.getBrowser().tabs().switchToLastTab();
        AqualityServices.getBrowser().refresh();
        Assert.assertTrue(projectsPage.getProjects().contains(randomProjectName), "The project is not saved.");

        AqualityServices.getLogger().info("Step 5:", "Go to the created project page. Add test via API (along with log and screenshot of current page).");
        projectsPage.openProject(randomProjectName);
        com.mavlushechka.a1qa.project.models.Test newTest = new com.mavlushechka.a1qa.project.models.Test(randomTextGenerator.get(), randomTextGenerator.get(), null, null, null, null);
        int testId = SiteApiUtils.putTest(
                randomTextGenerator.get(), randomProjectName, newTest, randomTextGenerator.get()
        );
        Assert.assertTrue(testsPage.getAllRunningTests().stream().anyMatch(test -> Objects.equals(test.name(), newTest.name())), "The test is not added.");
        SiteApiUtils.putLogToTest(testId, randomTextGenerator.get());
        SiteApiUtils.putAttachmentToTest(testId, AqualityServices.getBrowser().getScreenshot(), "image/png");
    }

}