Skip to content

Commit

Permalink
Merge pull request #4 from tierratelematics/action_performed_fallback
Browse files Browse the repository at this point in the history
Support fallback page classes in action_performed
  • Loading branch information
neg3ntropy committed Oct 30, 2017
2 parents f794fd9 + c172122 commit 68df83e
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 10 deletions.
2 changes: 1 addition & 1 deletion CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Changelog
0.1.1 (unreleased)
==================

- Nothing changed yet.
- support fallback page classes in action_performed


0.1.0 (2017-10-12)
Expand Down
21 changes: 14 additions & 7 deletions pypom_navigation/navigation.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def visit_page(self, page_id, **kwargs):
class
"""
page_url = urljoin(self.skin_base_url, self.get_page_url(page_id))
page_instance = self._page_instance(page_id, **kwargs)
page_instance = self._page_instance(page_id=page_id, **kwargs)
page_instance.driver.visit(page_url)
page_instance.wait_for_page_to_load()
self.setPage(page_instance, page_id=page_id)
Expand All @@ -50,17 +50,24 @@ def update_page(self, page_id, **kwargs):
""" Update the wrapped page with the appropriate instance
mapped to the passed page_id
"""
page_instance = self._page_instance(page_id, **kwargs)
page_instance = self._page_instance(page_id=page_id, **kwargs)
page_instance.wait_for_page_to_load()
self.setPage(page_instance, page_id=page_id)
return page_instance

def action_performed(self, action, **kwargs):
def action_performed(self, action, fallback=None, **kwargs):
""" Update the wrapped page with the appropriate instance
referenced by the given action on the current page
"""
page_id = self.page_mappings[self.page_id]['actions'][action]
return self.update_page(page_id, **kwargs)
page_mapping = self.page_mappings[self.page_id]
page_id = page_mapping.get('actions', {}).get(action)
if page_id:
return self.update_page(page_id, **kwargs)
else:
page_instance = self._page_instance(fallback=fallback, **kwargs)
page_instance.wait_for_page_to_load()
self.setPage(page_instance)
return page_instance

def get_page_url(self, page_id):
""" Return the page url for the current wrapped page """
Expand All @@ -83,6 +90,6 @@ def get_page_class(self, page_id=None, fallback=None):
page_id=page_id,
fallback=fallback)

def _page_instance(self, page_id, **kwargs):
page_class = self.get_page_class(page_id=page_id)
def _page_instance(self, page_id=None, fallback=None, **kwargs):
page_class = self.get_page_class(page_id=page_id, fallback=fallback)
return page_class(self.page.driver, **kwargs)
26 changes: 24 additions & 2 deletions tests/test_navigation.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import pytest
from mock import MagicMock


@pytest.fixture
def page_instance():
from mock import MagicMock
return MagicMock()


Expand Down Expand Up @@ -37,7 +37,6 @@ def page_mappings():

@pytest.fixture
def default_page_class():
from mock import MagicMock
return MagicMock()


Expand Down Expand Up @@ -94,6 +93,29 @@ def test_action_performed(navigation, page_instance, default_page_class):
assert default_page_class.return_value.navigation is navigation


def test_action_performed_no_action_mapped(navigation, page_instance, default_page_class):
""" Test visit page """
navigation.setPage(page_instance, 'AnotherPage')
default_page = navigation.action_performed('unknown')
assert navigation.page is default_page
assert navigation.page_id is None
assert default_page.wait_for_page_to_load.assert_called_once() is None
assert default_page_class.assert_called_once_with(page_instance.driver) is None
assert default_page_class.return_value.navigation is navigation


def test_action_performed_fallback(navigation, page_instance, default_page_class):
""" Test visit page """
navigation.setPage(page_instance, 'AnotherPage')
fallback_class = MagicMock()
fallback_page = navigation.action_performed('unknown', fallback=fallback_class)
assert navigation.page is fallback_page
assert navigation.page_id is None
assert fallback_page.wait_for_page_to_load.assert_called_once() is None
assert fallback_class.assert_called_once_with(page_instance.driver) is None
assert fallback_class.return_value.navigation is navigation


def test_get_credentials(navigation):
""" Test get credentials """
assert navigation.get_credentials('Administrator') == ('admin', 'pwd')

0 comments on commit 68df83e

Please sign in to comment.