Esempio n. 1
0
    def test_report_fixtures_provider_with_cloudcare(self):
        """
        ReportFixturesProvider should iterate only allowed apps if sync is from cloudcare
        """
        from corehq.apps.userreports.reports.data_source import ConfigurableReportDataSource
        role = UserRole(
            domain=self.domain,
            permissions=Permissions(
                view_web_apps=False,
                view_web_apps_list=[self.app1._id]
            ),
            name='WebApp Restricted'
        )
        role.save()
        self.user._couch_user.set_role(self.domain, role.get_qualified_id())

        with patch.object(ConfigurableReportDataSource, 'get_data') as get_data_mock:
            get_data_mock.return_value = self.rows
            with mock_sql_backend():
                with mock_datasource_config():
                    fixtures = call_fixture_generator(
                        report_fixture_generator,
                        self.user,
                        device_id="WebAppsLogin|[email protected]"
                    )
        reports = fixtures[0].findall('.//report')
        self.assertEqual(len(reports), 1)
        self.assertEqual(reports[0].attrib.get('id'), '123456')
Esempio n. 2
0
    def setUpClass(cls):
        super(ReportFiltersSuiteTest, cls).setUpClass()
        delete_all_users()
        cls.report_id = '7b97e8b53d00d43ca126b10093215a9d'
        cls.report_config_uuid = 'a98c812873986df34fd1b4ceb45e6164ae9cc664'
        cls.domain = 'report-filter-test-domain'
        cls.user = create_restore_user(
            domain=cls.domain,
            username='******',
        )
        update_toggle_cache(MOBILE_UCR.slug, cls.domain, True, NAMESPACE_DOMAIN)

        report_configuration = cls.make_report_config(cls.domain, cls.report_id)
        cls.report_configs_by_id = {
            cls.report_id: report_configuration
        }
        cls.app = Application.new_app(cls.domain, "Report Filter Test App")
        module = cls.app.add_module(ReportModule.new_module("Report Module", 'en'))
        module.report_configs.append(
            ReportAppConfig(
                report_id=cls.report_id,
                header={},
                description="",
                complete_graph_configs={
                    '7451243209119342931': GraphConfiguration(
                        graph_type="bar",
                        series=[GraphSeries(
                            config={},
                            locale_specific_config={},
                            data_path="",
                            x_function="",
                            y_function="",
                        )],
                    )
                },
                filters={
                    'computed_owner_name_40cc88a0_1': MobileSelectFilter(),
                    'fav_fruit_abc123_1': MobileSelectFilter()
                },
                uuid=cls.report_config_uuid,
            )
        )
        with mock_report_configurations(cls.report_configs_by_id):
            cls.suite = cls.app.create_suite()
        cls.data = [
            {'color_94ec39e6': 'red', 'count': 2, 'computed_owner_name_40cc88a0': 'cory', 'fav_fruit_abc123': 'c'},
            {'color_94ec39e6': 'black', 'count': 1, 'computed_owner_name_40cc88a0': 'ctsims', 'fav_fruit_abc123': 'b'},
            {'color_94ec39e6': 'red', 'count': 3, 'computed_owner_name_40cc88a0': 'daniel', 'fav_fruit_abc123': 'b'},
        ]
        with mock_report_data(cls.data):
            with mock_report_configuration_get(cls.report_configs_by_id):
                with mock.patch('corehq.apps.app_manager.fixtures.mobile_ucr.get_apps_in_domain',
                                lambda domain, include_remote: [cls.app]):
                    with mock_sql_backend():
                        with mock_datasource_config():
                            fixture, = call_fixture_generator(report_fixture_generator, cls.user)
        cls.fixture = ElementTree.tostring(fixture)
Esempio n. 3
0
 def test_report_fixtures_provider_with_app(self):
     """
     ReportFixturesProvider should not iterate all apps if app given
     """
     from corehq.apps.userreports.reports.data_source import ConfigurableReportDataSource
     with patch.object(ConfigurableReportDataSource, 'get_data') as get_data_mock:
         get_data_mock.return_value = self.rows
         with mock_sql_backend():
             with mock_datasource_config():
                 fixtures = call_fixture_generator(report_fixture_generator, self.user, app=self.app1)
     reports = fixtures[0].findall('.//report')
     self.assertEqual(len(reports), 1)
     self.assertEqual(reports[0].attrib.get('id'), '123456')
Esempio n. 4
0
    def test_user_restore(self):
        from casexml.apps.phone.tests.utils import MockDevice
        from casexml.apps.case.xml import V3
        from corehq.apps.userreports.reports.data_source import ConfigurableReportDataSource

        with patch.object(ConfigurableReportDataSource, 'get_data') as get_data_mock:
            get_data_mock.return_value = self.rows
            with mock_sql_backend():
                with mock_datasource_config():
                    device = MockDevice(self.domain_obj, self.user)
                    restore = device.sync(version=V3).payload
                    self.assertIn('<fixture id="commcare:reports"', restore)
                    self.assertIn('report_id="{id}"'.format(id=self.report_config1._id), restore)
                    self.assertIn('report_id="{id}"'.format(id=self.report_config2._id), restore)
    def test_report_fixtures_provider_with_app(self):
        """
        ReportFixturesProvider should not iterate all apps if app given
        """
        from corehq.apps.userreports.reports.data_source import ConfigurableReportDataSource

        with patch.object(ConfigurableReportDataSource, "get_data") as get_data_mock:
            get_data_mock.return_value = self.rows
            with mock_sql_backend():
                with mock_datasource_config():
                    fixtures = report_fixture_generator(self.user, "2.0", None, app=self.app1)
        reports = fixtures[0].findall(".//report")
        self.assertEqual(len(reports), 1)
        self.assertEqual(reports[0].attrib.get("id"), "123456")
Esempio n. 6
0
 def test_report_fixtures_provider_without_app(self):
     """
     ReportFixturesProvider should iterate all apps if app not given
     """
     from corehq.apps.userreports.reports.data_source import ConfigurableReportDataSource
     with patch.object(ConfigurableReportDataSource,
                       'get_data') as get_data_mock:
         get_data_mock.return_value = self.rows
         with mock_sql_backend():
             with mock_datasource_config():
                 fixtures = report_fixture_generator(self.user, '2.0', None)
     reports = fixtures[0].findall('.//report')
     self.assertEqual(len(reports), 2)
     report_ids = {r.attrib.get('id') for r in reports}
     self.assertEqual(report_ids, {'123456', 'abcdef'})
Esempio n. 7
0
 def test_group_by_missing_from_columns(self):
     report_config = ReportConfiguration(domain='somedomain',
                                         config_id='someconfig',
                                         aggregation_columns=['doc_id'],
                                         columns=[{
                                             "type": "field",
                                             "field": "somefield",
                                             "format": "default",
                                             "aggregation": "sum"
                                         }],
                                         filters=[],
                                         configured_charts=[])
     data_source = ReportFactory.from_spec(report_config)
     with mock_sql_backend():
         with mock_datasource_config():
             self.assertEqual(['doc_id'], data_source.group_by)
Esempio n. 8
0
    def setUpClass(cls):
        delete_all_users()
        cls.report_id = '7b97e8b53d00d43ca126b10093215a9d'
        cls.report_config_uuid = 'a98c812873986df34fd1b4ceb45e6164ae9cc664'
        cls.domain = 'report-filter-test-domain'
        cls.user = create_restore_user(
            domain=cls.domain,
            username='******',
        )
        update_toggle_cache(MOBILE_UCR.slug, cls.domain, True, NAMESPACE_DOMAIN)

        report_configuration = cls.make_report_config(cls.domain, cls.report_id)
        cls.report_configs_by_id = {
            cls.report_id: report_configuration
        }
        cls.app = Application.new_app(cls.domain, "Report Filter Test App")
        module = cls.app.add_module(ReportModule.new_module("Report Module", 'en'))
        module.report_configs.append(
            ReportAppConfig(
                report_id=cls.report_id,
                header={},
                description="",
                graph_configs={
                    '7451243209119342931': ReportGraphConfig(
                        series_configs={'count': {}}
                    )
                },
                filters={'computed_owner_name_40cc88a0_1': MobileSelectFilter()},
                uuid=cls.report_config_uuid,
            )
        )
        with mock_report_configurations(cls.report_configs_by_id):
            cls.suite = cls.app.create_suite()
        cls.data = [
            {'color_94ec39e6': 'red', 'count': 2, 'computed_owner_name_40cc88a0': 'cory'},
            {'color_94ec39e6': 'black', 'count': 1, 'computed_owner_name_40cc88a0': 'ctsims'},
            {'color_94ec39e6': 'red', 'count': 3, 'computed_owner_name_40cc88a0': 'daniel'},
        ]
        with mock_report_data(cls.data):
            with mock_report_configuration_get(cls.report_configs_by_id):
                with mock.patch('corehq.apps.app_manager.fixtures.mobile_ucr.get_apps_in_domain',
                                lambda domain, include_remote: [cls.app]):
                    with mock_sql_backend():
                        with mock_datasource_config():
                            fixture, = report_fixture_generator(cls.user, '2.0')
        cls.fixture = ElementTree.tostring(fixture)
Esempio n. 9
0
 def test_group_by_missing_from_columns(self):
     report_config = ReportConfiguration(
         domain='somedomain',
         config_id='someconfig',
         aggregation_columns=['doc_id'],
         columns=[{
             "type": "field",
             "field": "somefield",
             "format": "default",
             "aggregation": "sum"
         }],
         filters=[],
         configured_charts=[]
     )
     data_source = ReportFactory.from_spec(report_config)
     with mock_sql_backend():
         with mock_datasource_config():
             self.assertEqual(['doc_id'], data_source.group_by)