Skip to content

Commit

Permalink
Merge pull request #244 from 4teamwork/mba/drop-splinter
Browse files Browse the repository at this point in the history
Rewrite tests using "ftw.testbrowser".
  • Loading branch information
jone committed Jun 23, 2017
2 parents 0c69b94 + eb0cffb commit f28c820
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 75 deletions.
3 changes: 2 additions & 1 deletion docs/HISTORY.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ Changelog
1.16.2 (unreleased)
-------------------

- Nothing changed yet.
- Rewrite tests using "ftw.testbrowser", drop dependency on "ftw.testing[splinter]".
[mbaechtold]


1.16.1 (2017-06-21)
Expand Down
4 changes: 2 additions & 2 deletions ftw/contentpage/testing.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from ftw.builder.session import BuilderSession
from ftw.builder.testing import BUILDER_LAYER
from ftw.builder.testing import set_builder_session_factory
from ftw.testing import FunctionalSplinterTesting
from ftw.testing.layer import ComponentRegistryLayer
from plone.app.testing import applyProfile
from plone.app.testing import FunctionalTesting
from plone.app.testing import IntegrationTesting
from plone.app.testing import PLONE_FIXTURE
from plone.app.testing import PloneSandboxLayer
Expand Down Expand Up @@ -88,7 +88,7 @@ def setUpPloneSite(self, portal):
login(portal, TEST_USER_NAME)


class FunctionalBrowserlayerTesting(FunctionalSplinterTesting):
class FunctionalBrowserlayerTesting(FunctionalTesting):
"""Support browserlayer"""

def setUpEnvironment(self, portal):
Expand Down
55 changes: 32 additions & 23 deletions ftw/contentpage/tests/pages.py
Original file line number Diff line number Diff line change
@@ -1,45 +1,50 @@
from ftw.testing import browser
from ftw.testing.pages import Plone
from ftw.testbrowser import browser as default_browser
from plone import api

INDEX_XPATH = '//*[contains(concat(" ", normalize-space(@class), " "), ' + \
'" letter-index ")]'


class SubjectListingView(Plone):
class SubjectListingView(object):

def __init__(self, browser=default_browser):
self.browser = browser
self.portal = api.portal.get()

def visit(self):
self.visit_portal('@@subject-listing')
self.assert_body_class('template-subject-listing')
self.browser.visit(self.portal, view='@@subject-listing')
assert 'template-subject-listing' in self.browser.css('body').first.classes, \
'Expected class is not available on the body-tag'
return self

@property
def current_letter(self):
return map(self._item_to_text,
browser().find_by_css('.letter-index .current'))[0]
self.browser.css('.letter-index .current'))[0]

@property
def linked_letters(self):
return map(self._item_to_text,
browser().find_by_css('.letter-index a'))
self.browser.css('.letter-index a'))

@property
def mimetype_images(self):
return browser().find_by_css('.subject-mimetype-icon')
return self.browser.css('.subject-mimetype-icon')

def click_letter(self, letter):
xpath = INDEX_XPATH + '//a[normalize-space(text())="%s"]' % letter
elements = browser().find_by_xpath(xpath)
elements = self.browser.xpath(xpath)
if len(elements) == 0:
raise Exception('Letter-link for "%s" not found' % letter)
elements.click()
elements.first.click()

@property
def subjects(self):
subjects = browser().find_by_css('.subject')
subjects = self.browser.css('.subject')
return map(self._item_to_text, subjects)

def get_links_for(self, subject, text_only=False):
links = browser().find_by_xpath(
links = self.browser.xpath(
'//td[normalize-space(text())="%s"]/..//a' % subject)

if text_only:
Expand All @@ -48,40 +53,44 @@ def get_links_for(self, subject, text_only=False):
return links

def _item_to_text(self, item):
return self.normalize_whitespace(item.text.strip())
return item.text

def visit_with_subject_filter(self, value):
self.visit_portal('@@subject-listing?subject_filter={0}'.format(value))
self.assert_body_class('template-subject-listing')
self.browser.visit(self.portal.absolute_url() + '/@@subject-listing?subject_filter={0}'.format(value))
assert 'template-subject-listing' in self.browser.css('body').first.classes, \
'Expected class is not available on the body-tag'
return self


class AuthoritiesView(Plone):
class AuthoritiesView(object):

def __init__(self, browser=default_browser):
self.browser = browser

def visit_on(self, page):
return self.visit(page, 'authorities_view')
return self.browser.visit(page, view='authorities_view')

@property
def link_labels(self):
return map(self._item_to_text, browser().find_by_css('#authorities a'))
return map(self._item_to_text, self.browser.css('#authorities a'))

@property
def link_labels_per_column(self):
columns = []
for column in browser().find_by_css('#authorities .listing-column'):
for column in self.browser.css('#authorities .listing-column'):
columns.append(map(self._item_to_text,
column.find_by_css('a')))
column.css('a')))
return columns

def link_url(self, label):
links = browser().find_by_xpath(
links = self.browser.xpath(
'//*[@id="authorities"]//a[normalize-space(text())="%s"]' % label.strip())

assert len(links) > 0, 'Link with text "%s" not found' % label.strip()
assert len(links) == 1, 'More than one link with text "%s" found' % (
label.strip())

return links[0]['href']
return links.first.attrib['href']

def _item_to_text(self, item):
return self.normalize_whitespace(item.text.strip())
return item.text
32 changes: 17 additions & 15 deletions ftw/contentpage/tests/test_authorities_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@
from ftw.builder import create
from ftw.contentpage.browser import authorities
from ftw.contentpage.interfaces import IAuthority
from ftw.contentpage.testing import FTW_CONTENTPAGE_FUNCTIONAL_TESTING
from ftw.contentpage.tests import FunctionalTestCase
from ftw.contentpage.tests.pages import AuthoritiesView
from ftw.testbrowser import browsing
from ftw.testing import MockTestCase
from plone.app.testing import setRoles
from plone.app.testing import TEST_USER_ID
from unittest2 import TestCase
import transaction


Expand Down Expand Up @@ -74,15 +72,14 @@ def test_make_treeish(self):
])


class TestTreeView(TestCase):

layer = FTW_CONTENTPAGE_FUNCTIONAL_TESTING
class TestTreeView(FunctionalTestCase):

def setUp(self):
self.portal = self.layer['portal']
setRoles(self.portal, TEST_USER_ID, ['Manager'])
super(TestTreeView, self).setUp()
self.grant('Manager')

def test_only_first_two_levels_visible(self):
@browsing
def test_only_first_two_levels_visible(self, browser):
container = create(Builder('content page'))

first = create(Builder('content page')
Expand All @@ -103,7 +100,8 @@ def test_only_first_two_levels_visible(self):
AuthoritiesView().visit_on(container)
self.assertEquals(['First', 'Second'], AuthoritiesView().link_labels)

def test_view_has_two_columns(self):
@browsing
def test_view_has_two_columns(self, browser):
container = create(Builder('content page'))

create(Builder('content page')
Expand All @@ -120,7 +118,8 @@ def test_view_has_two_columns(self):
self.assertEquals([['One'], ['Two']],
AuthoritiesView().link_labels_per_column)

def test_only_pages_with_orgunit_marker_interface_are_displayed(self):
@browsing
def test_only_pages_with_orgunit_marker_interface_are_displayed(self, browser):
container = create(Builder('content page'))

create(Builder('content page')
Expand All @@ -136,7 +135,8 @@ def test_only_pages_with_orgunit_marker_interface_are_displayed(self):
self.assertEquals(['With IAuthority'],
AuthoritiesView().link_labels)

def test_pages_are_linked_properly(self):
@browsing
def test_pages_are_linked_properly(self, browser):
container = create(Builder('content page'))

foo = create(Builder('content page')
Expand All @@ -157,7 +157,8 @@ def test_pages_are_linked_properly(self):
[AuthoritiesView().link_url('Foo'),
AuthoritiesView().link_url('Bar')])

def test_column_balancing_can_be_changed_with_property(self):
@browsing
def test_column_balancing_can_be_changed_with_property(self, browser):
container = create(Builder('content page'))

create(Builder('content page')
Expand Down Expand Up @@ -192,7 +193,8 @@ def test_column_balancing_can_be_changed_with_property(self):
['Two', 'Three', 'Four']],
AuthoritiesView().link_labels_per_column)

def test_pages_excluded_from_navigation_are_not_shown(self):
@browsing
def test_pages_excluded_from_navigation_are_not_shown(self, browser):
container = create(Builder('content page'))

create(Builder('content page')
Expand Down
Loading

0 comments on commit f28c820

Please sign in to comment.