def test_content_is_properly_linked(self, browser):
        page = create(Builder('content page')
                      .having(subject=['Airport']))

        view = SubjectListingView().visit()
        view.get_links_for('Airport').first.click()
        self.assertEquals(page.absolute_url(), browser.url)
    def test_non_alphabetic_subjects_are_listed_under_number_sign(self, browser):
        create(Builder('content page')
               .having(subject=['3D',
                                '_X']))

        view = SubjectListingView().visit()
        view.click_letter('#')
        self.assertEquals(['3D', '_X'], view.subjects)
    def test_navigating_in_letter_index(self, browser):
        create(Builder('content page')
               .having(subject=['building application',
                                'crafting',
                                'manufactoring']))
        view = SubjectListingView().visit()

        self.assertEquals('B', view.current_letter)
        view.click_letter('C')
        self.assertEquals('C', view.current_letter)
    def test_lists_only_content_pages_by_default(self, browser):
        create(Builder('content page')
               .titled('A page')
               .having(subject=['budget']))

        create(Builder('news')
               .titled('A news')
               .having(subject=['budget']))

        view = SubjectListingView().visit()
        self.assertEquals(['A page'],
                          view.get_links_for('budget', text_only=True))
    def test_content_links_with_umlauts_are_ordered_correctly(self, browser):
        create(Builder('content page')
               .titled('G\xc3\xa4rtnerei')
               .having(subject=['Garten']))

        create(Builder('content page')
               .titled('Gr\xc3\xbcnfl\xc3\xa4chen')
               .having(subject=['Garten']))

        view = SubjectListingView().visit()
        self.assertEquals(['G\xc3\xa4rtnerei'.decode('utf-8'),
                           'Gr\xc3\xbcnfl\xc3\xa4chen'.decode('utf-8')],
                          view.get_links_for('Garten', text_only=True))
    def test_content_links_are_ordered_alphabetically(self, browser):
        create(Builder('content page')
               .titled('Foo')
               .having(subject=['Airport']))
        create(Builder('content page')
               .titled('Bar')
               .having(subject=['Airport']))
        create(Builder('content page')
               .titled('BAZ')
               .having(subject=['Airport']))

        view = SubjectListingView().visit()
        self.assertEquals(['Bar', 'BAZ', 'Foo'],
                          view.get_links_for('Airport', text_only=True))
    def test_listed_types_are_configurable_in_registry(self, browser):
        registry = getUtility(IRegistry)
        registry['ftw.contentpage.subjectlisting.portal_types'] = [
            u'ContentPage',
            u'News']

        create(Builder('content page')
               .titled('A page')
               .having(subject=['budget']))

        create(Builder('news')
               .titled('A news')
               .having(subject=['budget']))

        view = SubjectListingView().visit()
        self.assertEquals(['A news', 'A page'],
                          view.get_links_for('budget', text_only=True))
    def test_only_content_of_current_is_listed(self, browser):
        create(Builder('content page')
               .having(subject=['building application',
                                'budget',
                                'crafting']))

        create(Builder('content page')
               .having(subject=['crafting']))

        view = SubjectListingView().visit()
        self.assertEquals('B', view.current_letter)
        self.assertEquals(['budget', 'building application'],
                          view.subjects)

        view.click_letter('C')
        self.assertEquals(['crafting'],
                          view.subjects)
    def test_letters_assumes_subject_filter(self, browser):
        create(Builder('content page')
               .titled('A page')
               .having(subject=['budget', 'finance', 'money']))

        create(Builder('content page')
               .titled('A page')
               .having(subject=['finance', 'earn']))

        view = SubjectListingView().visit()
        self.assertEquals(['B', 'E', 'F', 'M'], view.linked_letters)

        view = SubjectListingView().visit_with_subject_filter('budget')
        self.assertEquals(['F', 'M'], view.linked_letters)

        view.click_letter('M')

        self.assertEquals(['F', 'M'], view.linked_letters)