Skip to content

Commit

Permalink
Merge pull request #186 from jrusz/ClipboardCopy
Browse files Browse the repository at this point in the history
Add ClipboardCopy
  • Loading branch information
digitronik authored Jul 10, 2023
2 parents 013b5f9 + 5b031b4 commit e8deb57
Show file tree
Hide file tree
Showing 4 changed files with 94 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/widgetastic_patternfly4/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from .chipgroup import ChipGroupToolbarCategory
from .chipgroup import ChipReadOnlyError
from .chipgroup import StandAloneChipGroup
from .clipboardcopy import ClipboardCopy
from .contextselector import ContextSelector
from .descriptionlist import DescriptionList
from .donutchart import DonutChart
Expand Down Expand Up @@ -80,6 +81,7 @@
"CardForCardGroup",
"CardCheckBox",
"CategoryChipGroup",
"ClipboardCopy",
"ColumnNotExpandable",
"CompactPagination",
"CompoundExpandableTable",
Expand Down
41 changes: 41 additions & 0 deletions src/widgetastic_patternfly4/clipboardcopy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from widgetastic.utils import ParametrizedLocator
from widgetastic.widget import TextInput
from widgetastic.widget import View

from widgetastic_patternfly4.button import Button


class BaseClipboardCopy:
BUTTON_LOC = ".//button[contains(@class, 'pf-c-button pf-m-control')]"
TEXT_LOC = ".//input[contains(@class, 'pf-c-form-control')]"

@property
def is_editable(self):
if self.browser.get_attribute("readonly", self.text):
return False
else:
return True

def __init__(self, parent, locator=None, logger=None):
super().__init__(parent, logger=logger)
if locator:
self.locator = locator
else:
self.locator = self.DEFAULT_LOCATOR


class ClipboardCopy(BaseClipboardCopy, View):
ROOT = ParametrizedLocator("{@locator}")
DEFAULT_LOCATOR = ".//div[contains(@class,'pf-c-clipboard-copy')]"

text = TextInput(locator=BaseClipboardCopy.TEXT_LOC)
button = Button(locator=BaseClipboardCopy.BUTTON_LOC)

def read(self):
return self.text.value

def fill(self, value):
return self.text.fill(value)

def copy(self):
self.button.click()
5 changes: 5 additions & 0 deletions src/widgetastic_patternfly4/ouia.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from widgetastic_patternfly4.breadcrumb import BaseBreadCrumb
from widgetastic_patternfly4.button import BaseButton
from widgetastic_patternfly4.card import BaseCard
from widgetastic_patternfly4.clipboardcopy import BaseClipboardCopy
from widgetastic_patternfly4.contextselector import BaseContextSelector
from widgetastic_patternfly4.dropdown import BaseDropdown
from widgetastic_patternfly4.dropdown import BaseGroupDropdown
Expand Down Expand Up @@ -150,3 +151,7 @@ class Text(BaseOuiaText):

class TextInput(BaseOuiaTextInput):
OUIA_COMPONENT_TYPE = "PF4/TextInput"


class clipboardcopy(BaseClipboardCopy, OUIAGenericWidget):
OUIA_COMPONENT_TYPE = "PF4/ClipboardCopy"
46 changes: 46 additions & 0 deletions testing/test_clipboardcopy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import pytest
from widgetastic.widget import View

from widgetastic_patternfly4 import ClipboardCopy

TESTING_PAGE_URL = "https://patternfly-react.surge.sh/components/clipboard-copy"


@pytest.fixture
def view(browser):
class TestView(View):
ROOT = ".//div[@id='ws-react-c-clipboard-copy-basic']"
clipboardEditable = ClipboardCopy(locator="//div[@id='ws-react-c-clipboard-copy-basic']")
clipboardReadOnly = ClipboardCopy(
locator="//div[@id='ws-react-c-clipboard-copy-read-only']"
)

return TestView(browser)


def test_clipboardcopy_displayed(view):
assert view.clipboardEditable.is_displayed


def test_clipboardcopy_is_editable(view):
assert view.clipboardEditable.is_editable


def test_clipboardcopy_is_read_only(view):
assert view.clipboardReadOnly.is_editable is False


def test_clipboardcopy_text(view):
assert view.clipboardEditable.read() == "This is editable"

assert view.clipboardEditable.fill("Test")
assert view.clipboardEditable.read() == "Test"

assert view.clipboardReadOnly.read() == "This is read-only"


def test_clipboardcopy_copy(view):
assert view.clipboardEditable.button.is_displayed
assert view.clipboardReadOnly.button.is_displayed
view.clipboardReadOnly.copy()
view.clipboardEditable.copy()

0 comments on commit e8deb57

Please sign in to comment.