diff --git a/mrchecker-framework-modules/mrchecker-playwright-module/src/main/java/com/capgemini/mrchecker/playwright/core/base/properties/PropertiesPlaywright.java b/mrchecker-framework-modules/mrchecker-playwright-module/src/main/java/com/capgemini/mrchecker/playwright/core/base/properties/PropertiesPlaywright.java index 0976bc49..e100dcbf 100644 --- a/mrchecker-framework-modules/mrchecker-playwright-module/src/main/java/com/capgemini/mrchecker/playwright/core/base/properties/PropertiesPlaywright.java +++ b/mrchecker-framework-modules/mrchecker-playwright-module/src/main/java/com/capgemini/mrchecker/playwright/core/base/properties/PropertiesPlaywright.java @@ -6,70 +6,71 @@ import com.microsoft.playwright.options.Proxy; public class PropertiesPlaywright { - private Proxy proxy; - private String channel; - private String browsersPath = "./lib/playwright"; - private int skipBrowserDownload = 0; - private boolean allowStaticPage = false; - private DriverCloseLevel driverCloseLevel = DriverCloseLevel.CLASS; - - @Inject(optional = true) - @SuppressWarnings("unused") - private void setProxy(@Named("playwright.browser.proxy") String proxy) { - this.proxy = new Proxy(proxy); - } - - public Proxy getProxy() { - return proxy; - } - - @Inject(optional = true) - @SuppressWarnings("unused") - private void setChannel(@Named("playwright.browser.channel") String channel) { - this.channel = channel; - } - - public String getChannel() { - return channel; - } - - @Inject(optional = true) - @SuppressWarnings("unused") - private void setBrowsersPath(@Named("playwright.browser.downloadPath") String browsersPath) { - this.browsersPath = browsersPath; - } - - public String getBrowsersPath() { - return browsersPath; - } - - @Inject(optional = true) - @SuppressWarnings("unused") - private void setSkipBrowserDownload(@Named("playwright.browser.skipDownload") int value) { - this.skipBrowserDownload = value; - } - - public int getSkipBrowserDownload() { - return skipBrowserDownload; - } - - @Inject(optional = true) - @SuppressWarnings("unused") - private void setAllowStaticPage(@Named("playwright.allowStaticPage") boolean value) { - this.allowStaticPage = value; - } - - public boolean getAllowStaticPage() { - return allowStaticPage; - } - - @Inject(optional = true) - @SuppressWarnings("unused") - private void setDriverCloseLevel(@Named("playwright.driverCloseLevel") String level) { - driverCloseLevel = DriverCloseLevel.fromText(level); - } - - public DriverCloseLevel getDriverCloseLevel() { - return driverCloseLevel; - } + private Proxy proxy; + private String channel; + private String browsersPath = "./lib/playwright"; + private int skipBrowserDownload = 0; + private boolean allowStaticPage = false; + private DriverCloseLevel driverCloseLevel = DriverCloseLevel.CLASS; + + @Inject(optional = true) + @SuppressWarnings("unused") + private void setProxy(@Named("playwright.browser.proxy") String proxy) { + if (!proxy.isEmpty()) + this.proxy = new Proxy(proxy); + } + + public Proxy getProxy() { + return proxy; + } + + @Inject(optional = true) + @SuppressWarnings("unused") + private void setChannel(@Named("playwright.browser.channel") String channel) { + this.channel = channel; + } + + public String getChannel() { + return channel; + } + + @Inject(optional = true) + @SuppressWarnings("unused") + private void setBrowsersPath(@Named("playwright.browser.downloadPath") String browsersPath) { + this.browsersPath = browsersPath; + } + + public String getBrowsersPath() { + return browsersPath; + } + + @Inject(optional = true) + @SuppressWarnings("unused") + private void setSkipBrowserDownload(@Named("playwright.browser.skipDownload") int value) { + this.skipBrowserDownload = value; + } + + public int getSkipBrowserDownload() { + return skipBrowserDownload; + } + + @Inject(optional = true) + @SuppressWarnings("unused") + private void setAllowStaticPage(@Named("playwright.allowStaticPage") boolean value) { + this.allowStaticPage = value; + } + + public boolean getAllowStaticPage() { + return allowStaticPage; + } + + @Inject(optional = true) + @SuppressWarnings("unused") + private void setDriverCloseLevel(@Named("playwright.driverCloseLevel") String level) { + driverCloseLevel = DriverCloseLevel.fromText(level); + } + + public DriverCloseLevel getDriverCloseLevel() { + return driverCloseLevel; + } } \ No newline at end of file diff --git a/mrchecker-framework-modules/mrchecker-playwright-module/src/main/java/com/capgemini/mrchecker/playwright/core/pages/TestPage.java b/mrchecker-framework-modules/mrchecker-playwright-module/src/main/java/com/capgemini/mrchecker/playwright/core/pages/TestPage.java new file mode 100644 index 00000000..ff9e9149 --- /dev/null +++ b/mrchecker-framework-modules/mrchecker-playwright-module/src/main/java/com/capgemini/mrchecker/playwright/core/pages/TestPage.java @@ -0,0 +1,20 @@ +package com.capgemini.mrchecker.playwright.core.pages; + +import com.capgemini.mrchecker.playwright.core.BasePage; + +public class TestPage extends BasePage { + @Override + public boolean isLoaded() { + return true; + } + + @Override + public void load() { + loadPage("https://google.com/"); + } + + @Override + public String pageTitle() { + return getActualPageTitle(); + } +} diff --git a/mrchecker-framework-modules/mrchecker-playwright-module/src/resources/settings.properties b/mrchecker-framework-modules/mrchecker-playwright-module/src/resources/settings.properties index 7017ace2..d10f6bb3 100644 --- a/mrchecker-framework-modules/mrchecker-playwright-module/src/resources/settings.properties +++ b/mrchecker-framework-modules/mrchecker-playwright-module/src/resources/settings.properties @@ -3,4 +3,4 @@ playwright.browser.channel= playwright.browser.downloadPath=./lib/playwright playwright.browser.skipDownload=0 playwright.allowStaticPage=false -playwright.driverCloseLevel=class \ No newline at end of file +playwright.driverCloseLevel=class diff --git a/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/core/newDrivers/DriverManagerTest.java b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/core/newDrivers/DriverManagerTest.java new file mode 100644 index 00000000..af97e562 --- /dev/null +++ b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/core/newDrivers/DriverManagerTest.java @@ -0,0 +1,43 @@ +package com.capgemini.mrchecker.playwright.core.newDrivers; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +import org.junit.jupiter.api.*; + +import com.capgemini.mrchecker.playwright.core.base.properties.PropertiesPlaywright; +import com.capgemini.mrchecker.playwright.tags.UnitTest; +import com.capgemini.mrchecker.test.core.base.properties.PropertiesSettingsModule; +import com.google.inject.Guice; + +@UnitTest +public class DriverManagerTest { + private DriverManager driverManager; + + @BeforeAll + public static void setUpBeforeClass() { + } + + @AfterAll + public static void tearDownAfterClass() { + } + + @BeforeEach + public void setUp() { + PropertiesPlaywright propertiesPlaywright = Guice.createInjector(PropertiesSettingsModule.init()) + .getInstance(PropertiesPlaywright.class); + + driverManager = new DriverManager(propertiesPlaywright); + driverManager.start(); + } + + @AfterEach + public void tearDown() { + driverManager.stop(); + } + + @Test + public void shouldDriverBeCreated() { + assertTrue(DriverManager.wasDriverCreated(), "Driver was not created"); + } + +} diff --git a/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/tags/UnitTest.java b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/tags/UnitTest.java new file mode 100644 index 00000000..e130b74a --- /dev/null +++ b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/tags/UnitTest.java @@ -0,0 +1,14 @@ +package com.capgemini.mrchecker.playwright.tags; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.junit.jupiter.api.Tag; + +@Target(ElementType.TYPE) +@Retention(RetentionPolicy.RUNTIME) +@Tag("UnitTest") +public @interface UnitTest { +} diff --git a/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/unit/BasePageTest.java b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/unit/BasePageTest.java new file mode 100644 index 00000000..c33b8d87 --- /dev/null +++ b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/unit/BasePageTest.java @@ -0,0 +1,20 @@ +package com.capgemini.mrchecker.playwright.unit; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import com.capgemini.mrchecker.playwright.core.pages.TestPage; +import com.capgemini.mrchecker.playwright.tags.UnitTest; +import com.capgemini.mrchecker.test.core.BaseTest; +import com.capgemini.mrchecker.test.core.utils.PageFactory; + +@UnitTest +class BasePageTest extends BaseTest { + + @Test + void testGetPageTitle() { + TestPage testPage = PageFactory.getPageInstance(TestPage.class); + testPage.load(); + Assertions.assertEquals("Google", testPage.pageTitle(), "Wrong page title"); + } +} diff --git a/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/unit/DefaultDriverBrowserTest.java b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/unit/DefaultDriverBrowserTest.java new file mode 100644 index 00000000..905f41d0 --- /dev/null +++ b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/unit/DefaultDriverBrowserTest.java @@ -0,0 +1,44 @@ +package com.capgemini.mrchecker.playwright.unit; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.*; +import org.junit.jupiter.api.parallel.ResourceLock; + +import com.capgemini.mrchecker.playwright.core.newDrivers.DriverManager; +import com.capgemini.mrchecker.playwright.core.pages.TestPage; +import com.capgemini.mrchecker.playwright.tags.UnitTest; +import com.capgemini.mrchecker.test.core.utils.PageFactory; + +@UnitTest +@ResourceLock(value = "SingleThread") +public class DefaultDriverBrowserTest { + @BeforeAll + public static void setUpBeforeClass() { + } + + @AfterAll + public static void tearDownAfterClass() { + } + + @BeforeEach + public void setUp() { + + } + + @AfterEach + public void tearDown() { + } + + @Test + public void testParameterGetChrome() { + TestPage testPage = PageFactory.getPageInstance(TestPage.class); + testPage.load(); + String driverName = DriverManager.getDriver() + .browser() + .browserType() + .name(); + assertEquals("chromium", driverName, "Wrong browser name"); + } + +} diff --git a/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/unit/NewPlaywrightBrowsersTest.java b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/unit/NewPlaywrightBrowsersTest.java new file mode 100644 index 00000000..4233888a --- /dev/null +++ b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/unit/NewPlaywrightBrowsersTest.java @@ -0,0 +1,39 @@ +package com.capgemini.mrchecker.playwright.unit; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +import com.capgemini.mrchecker.playwright.core.newDrivers.NewPlaywright; +import com.capgemini.mrchecker.playwright.tags.UnitTest; +import com.microsoft.playwright.Browser; +import com.microsoft.playwright.Playwright; + +@UnitTest +public class NewPlaywrightBrowsersTest { + private final NewPlaywright playwright = new NewPlaywright(Playwright.create()); + + @Test + public void shouldBrowserNameBeFirefox() { + Browser browser = playwright.firefox() + .launch(); + assertEquals("firefox", browser.browserType() + .name(), "Wrong browser name"); + } + + @Test + public void shouldBrowserNameBeChromium() { + Browser browser = playwright.chromium() + .launch(); + assertEquals("chromium", browser.browserType() + .name(), "Wrong browser name"); + } + + @Test + public void shouldBrowserNameBeWebkit() { + Browser browser = playwright.webkit() + .launch(); + assertEquals("webkit", browser.browserType() + .name(), "Wrong browser name"); + } +} diff --git a/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/unit/base/runtime/RuntimeParametersTest.java b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/unit/base/runtime/RuntimeParametersTest.java new file mode 100644 index 00000000..f774277a --- /dev/null +++ b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/java/com/capgemini/mrchecker/playwright/unit/base/runtime/RuntimeParametersTest.java @@ -0,0 +1,174 @@ +package com.capgemini.mrchecker.playwright.unit.base.runtime; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.core.Is.is; +import static org.hamcrest.core.IsEqual.equalTo; +import static org.hamcrest.core.IsInstanceOf.instanceOf; +import static org.hamcrest.core.IsNull.nullValue; +import static org.junit.Assert.fail; + +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.function.Consumer; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.parallel.ResourceLock; + +import com.capgemini.mrchecker.playwright.core.base.runtime.RuntimeParametersPlaywright; + +@ResourceLock(value = "SingleThread") +public class RuntimeParametersTest { + + private static final Map STARTUP_PARAMETERS_VALUES = new LinkedHashMap() { + { + put("browser", "chromedriver"); + put("browserVersion", "11.0"); + put("seleniumGrid", "something"); + put("os", "linux"); + put("browserOptions", + "headless;window-size=1200x600;testEquals=FirstEquals=SecondEquals;--testMe;acceptInsecureCerts=true;maxInstances=3"); + put("headless", "false"); + } + }; + + public static final String DEFAULT_BROWSER_VALUE = "chrome"; + public static final String BROWSER_OPTIONS_TEST_KEY = "browserOptionsTestKey"; + + @BeforeEach + public void setUp() { + STARTUP_PARAMETERS_VALUES.forEach(System::setProperty); + refreshAllParameters(); + } + + @AfterEach + public void tearDown() { + STARTUP_PARAMETERS_VALUES.forEach((k, v) -> System.clearProperty(k)); + refreshAllParameters(); + } + + private static void refreshAllParameters() { + doForEachParam(RuntimeParametersPlaywright::refreshParameterValue); + } + + private static void doForEachParam(Consumer applyFunction) { + Arrays.stream(RuntimeParametersPlaywright.values()) + .forEach(applyFunction); + } + + @Test + public void shouldGetAllStartupProperties() { + doForEachParam((e) -> assertThat(e.toString() + " failed!", e.getValue(), is(equalTo(STARTUP_PARAMETERS_VALUES.get(e.getKey()))))); + } + + @Test + public void shouldGetReturnOriginBrowserValue() { + System.setProperty("browser", STARTUP_PARAMETERS_VALUES.get("browser")); + + refreshAllParameters(); + String browserValue = RuntimeParametersPlaywright.BROWSER.getValue(); + + assertThat(browserValue, is(equalTo(STARTUP_PARAMETERS_VALUES.get(RuntimeParametersPlaywright.BROWSER.getKey())))); + } + + @Test + public void shouldGetReturnDefaultBrowserValue() { + Arrays.stream(new String[] { "", "null" }) + .forEach((s) -> { + System.setProperty("browser", s); + + refreshAllParameters(); + String browserValue = RuntimeParametersPlaywright.BROWSER.getValue(); + + assertThat("Failed for '" + s + "'!", browserValue, is(equalTo(DEFAULT_BROWSER_VALUE))); + }); + } + + @Test + public void shouldGetReturnDefaultBrowserValueWhenNoSystemProperty() { + System.clearProperty("browser"); + + refreshAllParameters(); + String browserValue = RuntimeParametersPlaywright.BROWSER.getValue(); + + assertThat(browserValue, is(equalTo(DEFAULT_BROWSER_VALUE))); + } + + @Test + public void shouldBrowserOptionBeBoolean() { + shouldBrowserOptionBeOfClass("true", Boolean.class); + } + + @Test + public void shouldBrowserOptionBeInteger() { + shouldBrowserOptionBeOfClass("123", Integer.class); + } + + @Test + public void shouldBrowserOptionBeIntegerFloat() { + shouldBrowserOptionBeOfClass("123.321", Float.class); + } + + @Test + public void shouldBrowserOptionBeIntegerString() { + shouldBrowserOptionBeOfClass("blue", String.class); + } + + private void shouldBrowserOptionBeOfClass(String value, Class clazz) { + System.setProperty("browserOptions", BROWSER_OPTIONS_TEST_KEY + "=" + value); + + refreshAllParameters(); + Map browserOptionsValues = RuntimeParametersPlaywright.BROWSER_OPTIONS.getValues(); + Object optionValue = browserOptionsValues.get(BROWSER_OPTIONS_TEST_KEY); + + assertThat(optionValue, is(instanceOf(clazz))); + } + + @Test + public void shouldGetProperBrowserOptionsValuesSize() { + final String[] browserOptions = STARTUP_PARAMETERS_VALUES.get(RuntimeParametersPlaywright.BROWSER_OPTIONS.getKey()) + .split(";"); + + int browserOptionsCount = RuntimeParametersPlaywright.BROWSER_OPTIONS.getValues() + .size(); + + assertThat(browserOptionsCount, is(equalTo(browserOptions.length))); + } + + @Test + public void shouldGetProperBrowserOptionsValuesContents() { + final String[] browserOptions = STARTUP_PARAMETERS_VALUES.get(RuntimeParametersPlaywright.BROWSER_OPTIONS.getKey()) + .split(";"); + + Map browserOptionsValues = RuntimeParametersPlaywright.BROWSER_OPTIONS.getValues(); + + browserOptionsValues.forEach((key, value) -> { + try { + String browserOption = Arrays.stream(browserOptions) + .filter(s -> s.startsWith(key)) + .findFirst() + .orElseThrow(Exception::new); + + assertThat(browserOption.endsWith(value.toString()), is(equalTo(true))); + } catch (Exception e) { + fail(key + " does NOT exist"); + } + }); + } + + @Test + public void shouldGetProperBrowserOptionsValuesBeNull() { + Map browserOptionsValues = RuntimeParametersPlaywright.BROWSER.getValues(); + + assertThat(browserOptionsValues, is(nullValue())); + } + + @Test + public void shouldToStringReturnKeyValue() { + String toStringValue = RuntimeParametersPlaywright.BROWSER.toString(); + + assertThat(toStringValue, is(equalTo("browser=" + STARTUP_PARAMETERS_VALUES.get("browser")))); + } +} diff --git a/mrchecker-framework-modules/mrchecker-playwright-module/src/test/resources/allure.properties b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/resources/allure.properties new file mode 100644 index 00000000..80b02dde --- /dev/null +++ b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/resources/allure.properties @@ -0,0 +1 @@ +allure.results.directory=target/allure-results diff --git a/mrchecker-framework-modules/mrchecker-playwright-module/src/test/resources/junit-platform.properties b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/resources/junit-platform.properties new file mode 100644 index 00000000..301a809c --- /dev/null +++ b/mrchecker-framework-modules/mrchecker-playwright-module/src/test/resources/junit-platform.properties @@ -0,0 +1,10 @@ +junit.jupiter.extensions.autodetection.enabled=true +junit.jupiter.execution.parallel.enabled=true +#junit.jupiter.execution.parallel.mode.default=concurrent +junit.jupiter.execution.parallel.mode.default=same_thread +junit.jupiter.execution.parallel.mode.classes.default=concurrent +#junit.jupiter.execution.parallel.mode.classes.default=same_thread +junit.jupiter.execution.parallel.config.strategy=dynamic +junit.jupiter.execution.parallel.config.dynamic.factor=1 +cucumber.ansi-colors.disabled=false +cucumber.publish.quiet=true