Пример #1
0
class DirectoryTopicFilterTest(TestCase):
    def setUp(self):
        self.directory = DirectoryPageFactory()
        # set up topics
        pf = TopicFactory(title='Press Freedom')
        irs = TopicFactory(title='IRS')
        pf.save()
        irs.save()
        # set up instances that are children of the directory and have those topics
        self.pf_instance = DirectoryEntryFactory(parent=self.directory)
        self.pf_instance.topics.add(pf)
        self.pf_instance.save()

        self.irs_instance = DirectoryEntryFactory(parent=self.directory)
        self.irs_instance.topics.add(irs)
        self.irs_instance.save()
        self.topic_filter = {'topics': pf}

    def test_topic_filtered_for_is_in_queryset(self):
        filtered_instances = self.directory.get_instances(
            filters=self.topic_filter)
        self.assertIn(self.pf_instance, filtered_instances)

    def test_topic_not_filtered_for_is_not_in_queryset(self):
        filtered_instances = self.directory.get_instances(
            filters=self.topic_filter)
        self.assertNotIn(self.irs_instance, filtered_instances)
Пример #2
0
    def handle(self, *args, **options):
        number_of_instances = options['number_of_instances']

        home_page = HomePage.objects.get(slug='home')
        directory = DirectoryPage.objects.first()
        if not directory:
            directory = DirectoryPageFactory(parent=home_page, title="Directory")
            directory.save()
        for i in range(number_of_instances):
            instance = DirectoryEntryFactory(parent=directory)
            if i % 3 == 0:
                scan = ScanResultFactory(
                    securedrop=instance,
                    landing_page_url=instance.landing_page_url,
                    no_failures=True,
                )
            elif i % 3 == 1:
                scan = ScanResultFactory(
                    securedrop=instance,
                    landing_page_url=instance.landing_page_url,
                    severe_warning=True,
                )
            else:
                scan = ScanResultFactory(
                    securedrop=instance,
                    landing_page_url=instance.landing_page_url,
                    moderate_warning=True,
                )
            scan.save()
            instance.save()
Пример #3
0
class DirectoryCountryFilterTest(TestCase):
    def setUp(self):
        self.directory = DirectoryPageFactory()
        # set up countries
        mexico = CountryFactory(title='Mexico')
        azerbaijan = CountryFactory(title='Azerbaijan')
        mexico.save()
        azerbaijan.save()
        # set up instances that are children of the directory and have those countries
        self.mexico_instance = DirectoryEntryFactory(parent=self.directory)
        self.mexico_instance.countries.add(mexico)
        self.mexico_instance.save()

        self.azerbaijan_instance = DirectoryEntryFactory(parent=self.directory)
        self.azerbaijan_instance.countries.add(azerbaijan)
        self.azerbaijan_instance.save()
        self.country_filter = {'countries': mexico}

    def test_country_filtered_for_is_in_queryset(self):
        filtered_instances = self.directory.get_instances(
            filters=self.country_filter)
        self.assertIn(self.mexico_instance, filtered_instances)

    def test_country_not_filtered_for_is_not_in_queryset(self):
        filtered_instances = self.directory.get_instances(
            filters=self.country_filter)
        self.assertNotIn(self.azerbaijan_instance, filtered_instances)
Пример #4
0
 def setUp(self):
     self.directory = DirectoryPageFactory()
     self.best_instance = DirectoryEntryFactory(title="Best Instansce",
                                                parent=self.directory)
     self.worst_instance = DirectoryEntryFactory(title="Worst Instance",
                                                 parent=self.directory)
     self.search_filter = {'title__icontains': 'best'}
Пример #5
0
class DirectoryLanguageFilterTest(TestCase):
    def setUp(self):
        self.directory = DirectoryPageFactory()
        # set up languages
        spanish = LanguageFactory(title='Spanish')
        chinese = LanguageFactory(title='Chinese')
        spanish.save()
        chinese.save()
        # set up instances that are children of the directory and have those languages
        self.spanish_instance = DirectoryEntryFactory(parent=self.directory)
        self.spanish_instance.languages.add(spanish)
        self.spanish_instance.save()

        self.chinese_instance = DirectoryEntryFactory(parent=self.directory)
        self.chinese_instance.languages.add(chinese)
        self.chinese_instance.save()
        self.lang_filter = {'languages': spanish}

    def test_language_filtered_for_is_in_queryset(self):
        filtered_instances = self.directory.get_instances(
            filters=self.lang_filter)
        self.assertIn(self.spanish_instance, filtered_instances)

    def test_langauge_not_filtered_for_is_not_in_queryset(self):
        filtered_instances = self.directory.get_instances(
            filters=self.lang_filter)
        self.assertNotIn(self.chinese_instance, filtered_instances)
Пример #6
0
 def setUp(self):
     self.title = 'Awesome'
     self.body = 'Cool'
     self.source_warning = 'Alert'
     self.directory = DirectoryPageFactory(
         title=self.title,
         body=RichText(self.body),
         source_warning=self.source_warning)
     self.search_content = self.directory.get_search_content()
Пример #7
0
class DirectoryMultipleFiltersTest(TestCase):
    def setUp(self):
        self.directory = DirectoryPageFactory()
        # set up languages
        spanish = LanguageFactory(title='Spanish')
        chinese = LanguageFactory(title='Chinese')
        spanish.save()
        chinese.save()
        # set up countries
        mexico = CountryFactory(title='Mexico')
        azerbaijan = CountryFactory(title='Azerbaijan')
        mexico.save()
        azerbaijan.save()
        # set up topics
        pf = TopicFactory(title='Press Freedom')
        irs = TopicFactory(title='IRS')
        pf.save()
        irs.save()
        # set up instances that are children of the directory and have multiple categories
        self.sp_mx_instance = DirectoryEntryFactory(parent=self.directory)
        self.sp_mx_instance.languages.add(spanish)
        self.sp_mx_instance.countries.add(mexico)
        self.sp_mx_instance.save()

        self.az_pf_instance = DirectoryEntryFactory(parent=self.directory)
        self.az_pf_instance.countries.add(azerbaijan)
        self.az_pf_instance.topics.add(pf)
        self.az_pf_instance.save()

        self.other_instance = DirectoryEntryFactory(parent=self.directory)
        self.other_instance.languages.add(spanish)
        self.other_instance.topics.add(pf)
        self.other_instance.save()

        # filters
        self.lang_country_filter = {
            'languages': spanish,
            'countries': mexico
        }

        self.country_topic_filter = {
            'countries': azerbaijan,
            'topics': pf
        }

    def test_country_and_language_filter(self):
        filtered_instances = self.directory.get_instances(filters=self.lang_country_filter)
        self.assertIn(self.sp_mx_instance, filtered_instances)
        self.assertNotIn(self.other_instance, filtered_instances)

    def test_country_and_topic_filter(self):
        filtered_instances = self.directory.get_instances(filters=self.country_topic_filter)
        self.assertIn(self.az_pf_instance, filtered_instances)
        self.assertNotIn(self.other_instance, filtered_instances)
Пример #8
0
class DirectoryFilterTest(TestCase):
    def setUp(self):
        self.directory = DirectoryPageFactory()
        self.child = DirectoryEntryFactory(parent=self.directory)
        self.not_child = DirectoryEntryFactory(parent=None)

    def test_directory_returns_its_children(self):
        filtered_instances = self.directory.get_instances()
        self.assertIn(self.child, filtered_instances)

    def test_directory_does_not_return_instances_that_are_not_children(self):
        filtered_instances = self.directory.get_instances()
        self.assertNotIn(self.not_child, filtered_instances)
    def setUpTestData(cls):
        turn_on_instance_management()
        turn_on_instance_scanning()

        cls.site = Site.objects.get()
        cls.directory = DirectoryPageFactory(parent=cls.site.root_page, )
        User = get_user_model()
        cls.email = '*****@*****.**'
        cls.password = '******'
        cls.user = User.objects.create_user(username='******',
                                            password=cls.password,
                                            email=cls.email,
                                            is_active=True)
        cls.recipient_group = Group.objects.create(name='Recipient group')
        EmailAddress.objects.create(user=cls.user,
                                    email=cls.email,
                                    verified=True)
        cls.device = TOTPDevice.objects.create(
            user=cls.user,
            confirmed=True,
            key='2a2bbba1092ffdd25a328ad1a0a5f5d61d7aacc4',
            step=30,
            t0=int(time() - (30 * 3)),
            digits=6,
            tolerance=0,
            drift=0,
        )
Пример #10
0
    def setUp(self):
        self.directory = DirectoryPageFactory()
        # set up languages
        spanish = LanguageFactory(title='Spanish')
        chinese = LanguageFactory(title='Chinese')
        spanish.save()
        chinese.save()
        # set up instances that are children of the directory and have those languages
        self.spanish_instance = DirectoryEntryFactory(parent=self.directory)
        self.spanish_instance.languages.add(spanish)
        self.spanish_instance.save()

        self.chinese_instance = DirectoryEntryFactory(parent=self.directory)
        self.chinese_instance.languages.add(chinese)
        self.chinese_instance.save()
        self.lang_filter = {'languages': spanish}
Пример #11
0
    def setUp(self):
        self.directory = DirectoryPageFactory()
        # set up countries
        mexico = CountryFactory(title='Mexico')
        azerbaijan = CountryFactory(title='Azerbaijan')
        mexico.save()
        azerbaijan.save()
        # set up instances that are children of the directory and have those countries
        self.mexico_instance = DirectoryEntryFactory(parent=self.directory)
        self.mexico_instance.countries.add(mexico)
        self.mexico_instance.save()

        self.azerbaijan_instance = DirectoryEntryFactory(parent=self.directory)
        self.azerbaijan_instance.countries.add(azerbaijan)
        self.azerbaijan_instance.save()
        self.country_filter = {'countries': mexico}
Пример #12
0
    def setUp(self):
        self.directory = DirectoryPageFactory()
        # set up topics
        pf = TopicFactory(title='Press Freedom')
        irs = TopicFactory(title='IRS')
        pf.save()
        irs.save()
        # set up instances that are children of the directory and have those topics
        self.pf_instance = DirectoryEntryFactory(parent=self.directory)
        self.pf_instance.topics.add(pf)
        self.pf_instance.save()

        self.irs_instance = DirectoryEntryFactory(parent=self.directory)
        self.irs_instance.topics.add(irs)
        self.irs_instance.save()
        self.topic_filter = {'topics': pf}
Пример #13
0
    def setUpTestData(cls):
        turn_on_instance_management()
        turn_on_instance_scanning()

        cls.directory = DirectoryPageFactory(
            parent=Site.objects.get().root_page,
            scanner_form_text='Scanner form',
            org_details_form_text='Org form text')
Пример #14
0
class DirectorySearchFilterTest(TestCase):
    def setUp(self):
        self.directory = DirectoryPageFactory()
        self.best_instance = DirectoryEntryFactory(title="Best Instansce",
                                                   parent=self.directory)
        self.worst_instance = DirectoryEntryFactory(title="Worst Instance",
                                                    parent=self.directory)
        self.search_filter = {'title__icontains': 'best'}

    def test_title_searched_is_in_queryset(self):
        filtered_instances = self.directory.get_instances(
            filters=self.search_filter)
        self.assertIn(self.best_instance, filtered_instances)

    def test_title_not_searched_is_not_in_queryset(self):
        filtered_instances = self.directory.get_instances(
            filters=self.search_filter)
        self.assertNotIn(self.worst_instance, filtered_instances)
Пример #15
0
class FiltersFromQueryDictTest(TestCase):
    def setUp(self):
        self.directory = DirectoryPageFactory()

    def test_correct_search_term_returned_from_querydict(self):
        search_term = "Amet"
        querydict = QueryDict('search={}'.format(search_term))
        filters = self.directory.filters_from_querydict(querydict)
        self.assertEqual(filters['title__icontains'], search_term)

    def test_correct_language_returned_from_querydict(self):
        georgian = LanguageFactory(title="Georgian")
        georgian.save()
        querydict = QueryDict('language={}'.format(georgian.id))
        filters = self.directory.filters_from_querydict(querydict)
        self.assertEqual(filters['languages'], georgian)

    def test_correct_country_returned_from_querydict(self):
        honduras = CountryFactory(title="Honduras")
        honduras.save()
        querydict = QueryDict('country={}'.format(honduras.id))
        filters = self.directory.filters_from_querydict(querydict)
        self.assertEqual(filters['countries'], honduras)

    def test_correct_topic_returned_from_querydict(self):
        sports = TopicFactory(title="sports")
        sports.save()
        querydict = QueryDict('topic={}'.format(sports.id))
        filters = self.directory.filters_from_querydict(querydict)
        self.assertEqual(filters['topics'], sports)

    def test_non_int_id_does_not_break_filters(self):
        querydict = QueryDict('topic=foo')
        filters = self.directory.filters_from_querydict(querydict)
        self.assertEqual({}, filters)

    def test_invalid_id_does_not_break_filters(self):
        querydict = QueryDict('language=100000')
        filters = self.directory.filters_from_querydict(querydict)
        self.assertEqual({}, filters)

    def test_multiple_filters_returned_from_querydict(self):
        search_term = "Amet"
        afrikaans = LanguageFactory(title="Afrikaans")
        afrikaans.save()
        thailand = CountryFactory(title="Country")
        thailand.save()
        scotus = TopicFactory(title="SCOTUS")
        scotus.save()
        querydict = QueryDict(
            'search={}&language={}&topic={}&country={}'.format(
                search_term, afrikaans.id, scotus.id, thailand.id))
        filters = self.directory.filters_from_querydict(querydict)
        self.assertEqual(filters['title__icontains'], search_term)
        self.assertEqual(filters['topics'], scotus)
        self.assertEqual(filters['countries'], thailand)
        self.assertEqual(filters['languages'], afrikaans)
Пример #16
0
    def handle(self, *args, **options):
        if options['delete']:
            Menu.objects.filter(slug='main').delete()

        if not Menu.objects.filter(slug='main').exists():
            main = Menu.objects.create(name='Main Menu', slug='main')

            home_page = HomePage.objects.get(slug='home')

            if BlogIndexPage.objects.first():
                blog_index_page = BlogIndexPage.objects.first()
            else:
                blog_index_page = BlogIndexPageFactory(parent=home_page,
                                                       title="News")

            if DirectoryPage.objects.first():
                directory = DirectoryPage.objects.first()
            else:
                directory = DirectoryPageFactory(parent=home_page,
                                                 title="Directory")

            if MarketingIndexPage.objects.first():
                marketing = MarketingIndexPage.objects.first()
            else:
                marketing = MarketingPageFactory(parent=home_page,
                                                 title="Features")

            MenuItem.objects.bulk_create([
                MenuItem(text='Overview',
                         link_page=marketing,
                         menu=main,
                         sort_order=1),
                MenuItem(text='News',
                         link_page=blog_index_page,
                         menu=main,
                         sort_order=2),
                MenuItem(text='Instance Directory',
                         link_page=directory,
                         menu=main,
                         sort_order=3),
                MenuItem(
                    text='Contribute',
                    link_url='#',
                    menu=main,
                    sort_order=4,
                ),
                MenuItem(
                    text='Support',
                    link_url='#',
                    menu=main,
                    sort_order=5,
                ),
            ])
Пример #17
0
    def setUp(self):
        site = Site.objects.get()
        self.entry = DirectoryEntryFactory(parent=DirectoryPageFactory(
            parent=site.root_page))
        self.result = ScanResultFactory(
            securedrop=self.entry,
            landing_page_url=self.entry.landing_page_url,
            moderate_warning=True,
        )
        self.result.save()
        self.entry.save()

        self.client = Client()
Пример #18
0
    def setUp(self):
        User = get_user_model()
        self.client = Client()
        self.username = "******"
        self.email = "*****@*****.**"
        self.password = "******"
        self.user = User.objects.create_user(username=self.username, email=self.email, password=self.password, is_active=True)

        self.site = Site.objects.get()
        self.directory = DirectoryPageFactory(
            parent=self.site.root_page,
        )

        self.unowned_sd_page = DirectoryEntryFactory()
        self.unowned_sd_page.save()
        self.user_owned_sd_page = DirectoryEntryFactory()
        self.user_owned_sd_page.save()
        SecuredropOwner(owner=self.user, page=self.user_owned_sd_page).save()

        # Create a verified email address object for this user via allauth
        EmailAddress.objects.create(user=self.user, email=self.email, verified=True)

        # Create a device with pre-determined parameters to allow 2FA
        # token verification.  Numbers copied from django_otp unit
        # tests.
        device = TOTPDevice.objects.create(
            user=self.user,
            confirmed=True,
            key='2a2bbba1092ffdd25a328ad1a0a5f5d61d7aacc4',
            step=30,
            t0=int(time() - (30 * 3)),
            digits=6,
            tolerance=0,
            drift=0,
        )
        self.client.post(
            reverse('account_login'),
            {'login': self.email, 'password': self.password},
        )
        self.client.post(
            reverse('two-factor-authenticate'),
            # The token below corresponds to the parameters on the
            # device just created.
            {'otp_device': device.id, 'otp_token': '154567'},
        )
Пример #19
0
 def setUp(self):
     User = get_user_model()
     self.client = Client()
     self.username = "******"
     self.email = "*****@*****.**"
     self.password = "******"
     self.user = User.objects.create_user(username=self.username, email=self.email, password=self.password, is_active=True)
     self.user.save()
     # Create a verified email address object for this user via allauth
     EmailAddress.objects.create(user=self.user, email=self.email, verified=True)
     # Setup pages. Site is needed for valid urls.
     site = Site.objects.get()
     directory = DirectoryPageFactory(parent=site.root_page)
     self.unowned_sd_page = DirectoryEntryFactory(live=True, parent=directory)
     self.unowned_sd_page.save()
     self.user_owned_sd_page = DirectoryEntryFactory(live=True, parent=directory)
     self.user_owned_sd_page.save()
     SecuredropOwner(owner=self.user, page=self.user_owned_sd_page).save()
Пример #20
0
class TestDirectoryPage(TestCase):
    def setUp(self):
        self.title = 'Awesome'
        self.body = 'Cool'
        self.source_warning = 'Alert'
        self.directory = DirectoryPageFactory(
            title=self.title,
            body=RichText(self.body),
            source_warning=self.source_warning)
        self.search_content = self.directory.get_search_content()

    def test_get_search_content_indexes_title(self):
        self.assertIn(self.title, self.search_content.text)

    def test_get_search_content_indexes_body(self):
        self.assertIn(self.body, self.search_content.text)

    def test_get_search_content_indexes_source_warning(self):
        self.assertIn(self.source_warning, self.search_content.text)
Пример #21
0
 def setUpTestData(self):
     site = Site.objects.get(is_default_site=True)
     self.directory_settings = DirectorySettings.for_site(site)
     self.directory = DirectoryPageFactory(parent=site.root_page)
     self.securedrop_page = DirectoryEntryFactory(parent=self.directory)
     self.result = ScanResultFactory(securedrop=self.securedrop_page)
Пример #22
0
 def setUp(self):
     site = Site.objects.get()
     self.entry = DirectoryEntryFactory(parent=DirectoryPageFactory(
         parent=site.root_page))
 def setUpTestData(cls):
     cls.directory = DirectoryPageFactory()
     cls.securedrop_page = DirectoryEntryFactory(parent=cls.directory)
Пример #24
0
 def setUp(self):
     self.directory = DirectoryPageFactory()
     self.child = DirectoryEntryFactory(parent=self.directory)
     self.not_child = DirectoryEntryFactory(parent=None)
Пример #25
0
class DirectorySettingsTestCase(TestCase):
    @classmethod
    def setUpTestData(self):
        site = Site.objects.get(is_default_site=True)
        self.directory_settings = DirectorySettings.for_site(site)
        self.directory = DirectoryPageFactory(parent=site.root_page)
        self.securedrop_page = DirectoryEntryFactory(parent=self.directory)
        self.result = ScanResultFactory(securedrop=self.securedrop_page)

    def test_scan_disabled_hides_directory_scan_results(self):
        self.directory_settings.show_scan_results = False
        self.directory_settings.save()

        response = self.client.get(self.directory.url)
        soup = BeautifulSoup(response.content, 'html.parser')
        grades = soup.find_all(class_='instance-table__grade-column')

        self.assertEqual(len(grades), 0)

    def test_scan_enabled_shows_directory_scan_results(self):
        self.directory_settings.show_scan_results = True
        self.directory_settings.save()

        response = self.client.get(self.directory.url)
        soup = BeautifulSoup(response.content, 'html.parser')
        grades = soup.find_all(class_='instance-table__grade-column')

        self.assertEqual(len(grades), 1)

    def test_scan_disabled_hides_detail_scan_results(self):
        self.directory_settings.show_scan_results = False
        self.directory_settings.save()

        response = self.client.get(self.securedrop_page.url)
        soup = BeautifulSoup(response.content, 'html.parser')
        grade = soup.find_all(class_='security_grade')
        result = soup.find_all(class_='scan-result')

        self.assertEqual(len(grade), 0)
        self.assertEqual(len(result), 0)

    def test_scan_enabled_shows_detail_scan_results(self):
        self.directory_settings.show_scan_results = True
        self.directory_settings.save()

        response = self.client.get(self.securedrop_page.url)
        soup = BeautifulSoup(response.content, 'html.parser')
        grade = soup.find_all(class_='security_grade')
        result = soup.find_all(class_='scan-result')

        self.assertEqual(len(grade), 1)
        self.assertEqual(len(result), 1)

    def test_management_disabled_hides_call_to_action(self):
        self.directory_settings.allow_directory_management = False
        self.directory_settings.save()

        # We add a trailing `?` to account for the optional trailing slash
        scan_url_re = '{}{}?'.format(
            self.directory.url, self.directory.reverse_subpage('scan_view'))
        response = self.client.get(self.directory.url)
        soup = BeautifulSoup(response.content, 'html.parser')
        scan_links = soup.find_all(href=re.compile(scan_url_re))

        self.assertEqual(len(scan_links), 0)

    def test_management_enabled_shows_call_to_action(self):
        self.directory_settings.allow_directory_management = True
        self.directory_settings.save()

        # We add a trailing `?` to account for the optional trailing slash
        scan_url_re = '{}{}?'.format(
            self.directory.url, self.directory.reverse_subpage('scan_view'))
        response = self.client.get(self.directory.url)
        soup = BeautifulSoup(response.content, 'html.parser')
        scan_links = soup.find_all(href=re.compile(scan_url_re))

        self.assertTrue(len(scan_links) > 0)

    def test_management_enabled_shows_footer_login(self):
        self.directory_settings.allow_directory_management = True
        self.directory_settings.save()
        response = self.client.get(self.directory.url)
        soup = BeautifulSoup(response.content, 'html.parser')
        login_links = soup.find_all(class_='footer-main__admin-link',
                                    href=reverse('account_login'))
        self.assertTrue(len(login_links) > 0)

    def test_management_disabled_hides_footer_login(self):
        self.directory_settings.allow_directory_management = False
        self.directory_settings.save()
        response = self.client.get(self.directory.url)
        soup = BeautifulSoup(response.content, 'html.parser')
        login_links = soup.find_all(class_='footer-main__admin-link',
                                    href=reverse('account_login'))
        self.assertEqual(len(login_links), 0)

    def test_management_disabled_causes_404s(self):
        """
        Test that all the relevant paths return 404s is directory management is
        disabled. A test for when directory management is enabled is not
        included here, since the tests for proper behavior there is included
        in the apps that define those views.
        """

        self.directory_settings.allow_directory_management = False
        self.directory_settings.save()

        self.assertEqual(
            self.client.get(reverse('dashboard')).status_code, 404)
        self.assertEqual(
            self.client.get(reverse('securedroppage_add')).status_code, 404)
        self.assertEqual(
            self.client.get(
                reverse('securedroppage_edit',
                        args=[self.securedrop_page.slug])).status_code, 404)
        self.assertEqual(
            self.client.get('{}{}'.format(
                self.directory.url,
                self.directory.reverse_subpage('scan_view'))).status_code, 404)
Пример #26
0
 def setUp(self):
     self.directory = DirectoryPageFactory()