-
Notifications
You must be signed in to change notification settings - Fork 43
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
test: added multi paste and delete paste scenarios, added info about …
…testing to the documentation
- Loading branch information
Showing
10 changed files
with
216 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
from typing import Generator | ||
import pytest | ||
import subprocess | ||
import sys | ||
import logging | ||
from playwright.sync_api import Page | ||
from test.e2e.env_config import PORT | ||
from test.e2e.pageobjects.create_paste_page import CreatePastePage | ||
|
||
log = logging.getLogger(__name__) | ||
|
||
|
||
@pytest.fixture(scope="session", autouse=True) | ||
def application() -> Generator[None, None, None]: | ||
# Before All | ||
log.info(f"Starting Pinnwand application on port {PORT}") | ||
proc = subprocess.Popen( | ||
[sys.executable, "-m", "pinnwand", "http", "--port", str(PORT)] | ||
) | ||
yield | ||
# After All | ||
log.info("Terminating Pinnwand application") | ||
proc.terminate() | ||
|
||
|
||
@pytest.fixture | ||
def create_paste_page(page: Page) -> CreatePastePage: | ||
create_paste_page = CreatePastePage(page) | ||
create_paste_page.open() | ||
create_paste_page.should_be_opened() | ||
return create_paste_page |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,13 +1,29 @@ | ||
from playwright.sync_api import Locator, expect | ||
from playwright.sync_api import Page, Locator, expect | ||
import logging | ||
|
||
log = logging.getLogger(__name__) | ||
|
||
|
||
class BasePage: | ||
def __init__(self, locator: Locator, name) -> None: | ||
def __init__(self, page: Page, locator: Locator, name) -> None: | ||
self.page = page | ||
self.page_locator = locator | ||
self.page_name = name | ||
|
||
def open(self, paste_url): | ||
log.info(f"Opening page at {paste_url}") | ||
self.page.goto(paste_url) | ||
|
||
def current_url(self): | ||
return self.page.url | ||
|
||
# Expectations | ||
def should_be_opened(self): | ||
expect( | ||
self.page_locator, f"{self.page_name} was not opened" | ||
).to_be_visible() | ||
|
||
def should_have_title(self, title): | ||
expect( | ||
self.page, f"{self.page_name} had incorrect title" | ||
).to_have_title(title) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
from test.e2e.pageobjects.base_page import BasePage | ||
from playwright.sync_api import Page, expect | ||
import logging | ||
|
||
|
||
class ErrorPage(BasePage): | ||
def __init__(self, page: Page) -> None: | ||
super().__init__(page, page.locator("article"), "Error Page") | ||
self.error_code = self.page_locator.locator("h1") | ||
self.error_description = self.page_locator.locator("p") | ||
self.page = page | ||
|
||
# Expectations | ||
def should_have_error_text(self, code, description): | ||
expect( | ||
self.error_code, | ||
f"Error code displayed on {self.page_name} was incorrect", | ||
).to_have_text(code) | ||
expect( | ||
self.error_description, | ||
f"Error description displayed on {self.page_name} was incorrect", | ||
).to_have_text(description) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
from playwright.sync_api import Page, Playwright | ||
import logging | ||
from test.e2e.env_config import is_headless | ||
|
||
log = logging.getLogger(__name__) | ||
|
||
|
||
class BrowserManager: | ||
def __init__(self, playwright: Playwright) -> None: | ||
self.playwright = playwright | ||
|
||
def create_new_context(self) -> Page: | ||
log.info("creating new browser context") | ||
browser = self.playwright.chromium.launch(headless=is_headless()) | ||
context = browser.new_context() | ||
return context.new_page() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,54 @@ | ||
from playwright.sync_api import Page | ||
import string | ||
from playwright.sync_api import Page, Playwright | ||
import pytest | ||
from test.e2e.pageobjects.create_paste_page import CreatePastePage | ||
from test.e2e.pageobjects.view_paste_page import ViewPastePage | ||
import pytest | ||
from test.e2e.env_config import application | ||
from test.e2e.playwright.browser_manager import BrowserManager | ||
from test.e2e.conftest import create_paste_page | ||
|
||
|
||
@pytest.mark.e2e | ||
def test_create_paste(page: Page): | ||
create_paste_page = CreatePastePage(page) | ||
create_paste_page.open() | ||
create_paste_page.should_be_opened() | ||
def test_create_single_paste( | ||
page: Page, playwright: Playwright, create_paste_page: CreatePastePage | ||
): | ||
create_paste_page.should_have_title("Create new paste") | ||
|
||
paste_text = string.ascii_letters + string.digits | ||
create_paste_page.type_paste(paste_text) | ||
create_paste_page.should_have_value_in_paste_input(paste_text) | ||
pasted_text = create_paste_page.paste_random_text() | ||
create_paste_page.click_submit() | ||
|
||
view_paste_page = ViewPastePage(page) | ||
view_paste_page.should_be_opened() | ||
view_paste_page.should_have_pasted_text(pasted_text) | ||
|
||
paste_url = view_paste_page.current_url() | ||
reopen_created_paste(playwright, paste_url) | ||
|
||
|
||
@pytest.mark.e2e | ||
def test_create_multi_paste( | ||
page: Page, playwright: Playwright, create_paste_page: CreatePastePage | ||
): | ||
first_pasted_text = create_paste_page.paste_random_text(paste_number=0) | ||
create_paste_page.click_add_another_file_button() | ||
|
||
second_pasted_text = create_paste_page.paste_random_text(paste_number=1) | ||
create_paste_page.click_add_another_file_button() | ||
|
||
third_pasted_text = create_paste_page.paste_random_text(paste_number=2) | ||
|
||
create_paste_page.click_submit() | ||
|
||
view_paste_page = ViewPastePage(page) | ||
view_paste_page.should_be_opened() | ||
view_paste_page.should_have_pasted_text(paste_text) | ||
view_paste_page.should_have_pasted_text(first_pasted_text, paste_number=0) | ||
view_paste_page.should_have_pasted_text(second_pasted_text, paste_number=1) | ||
view_paste_page.should_have_pasted_text(third_pasted_text, paste_number=2) | ||
|
||
paste_url = view_paste_page.current_url() | ||
reopen_created_paste(playwright, paste_url) | ||
|
||
|
||
def reopen_created_paste(playwright, paste_url): | ||
new_page = BrowserManager(playwright).create_new_context() | ||
new_view_paste_page = ViewPastePage(new_page) | ||
new_view_paste_page.open(paste_url) | ||
new_view_paste_page.should_be_opened() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
from playwright.sync_api import Page, Playwright | ||
import pytest | ||
from test.e2e.pageobjects.create_paste_page import CreatePastePage | ||
from test.e2e.pageobjects.view_paste_page import ViewPastePage | ||
from test.e2e.pageobjects.error_page import ErrorPage | ||
from test.e2e.conftest import create_paste_page | ||
|
||
|
||
@pytest.mark.e2e | ||
def test_delete_single_paste( | ||
page: Page, playwright: Playwright, create_paste_page: CreatePastePage | ||
): | ||
create_paste_page.paste_random_text() | ||
create_paste_page.click_submit() | ||
|
||
view_paste_page = ViewPastePage(page) | ||
paste_url = view_paste_page.current_url() | ||
view_paste_page.click_remove_now_button() | ||
create_paste_page.should_be_opened() | ||
create_paste_page.should_have_no_value_in_paste_input() | ||
|
||
error_page = ErrorPage(page) | ||
error_page.open(paste_url) | ||
error_page.should_be_opened() | ||
error_page.should_have_title("error") | ||
error_page.should_have_error_text("404", "That page does not exist") |