def testDataSource(self): """ Confirm that data sources for reports with multiselects use "choice_list" indicators for mselect questions. """ builder_form = ConfigureListReportForm( self.domain, "My Report", self.app._id, "form", self.form.unique_id, data={ 'user_filters': '[]', 'default_filters': '[]', 'columns': '[' ' {"property": "/data/first_name", "display_text": "first name", "calculation": "Group By"},' ' {"property": "/data/state", "display_text": "state", "calculation": "Count Per Choice"}' ']', }) self.assertTrue(builder_form.is_valid()) report = builder_form.create_report() data_source = report.config mselect_indicators = [ i for i in data_source.configured_indicators if i["type"] == "choice_list" ] self.assertEqual(len(mselect_indicators), 1) mselect_indicator = mselect_indicators[0] self.assertEqual(set(mselect_indicator['choices']), {'MA', 'MN', 'VT'})
def test_data_source_exclusivity(self): """ Report builder reports based on the same form/case_type should have different data sources (they were previously sharing them) """ # Make report builder_form = ConfigureListReportForm( self.domain, "Report one", self.app._id, "form", self.form.unique_id, existing_report=None, data={ 'user_filters': '[]', 'default_filters': '[]', 'columns': '[{"property": "/data/first_name", "display_text": "first name", "calculation": "Group By"}]', }) self.assertTrue(builder_form.is_valid()) report_one = builder_form.create_report() # Make another report builder_form = ConfigureListReportForm( self.domain, "Report two", self.app._id, "form", self.form.unique_id, existing_report=None, data={ 'user_filters': '[]', 'default_filters': '[]', 'columns': '[{"property": "/data/first_name", "display_text": "first name", "calculation": "Group By"}]', }) self.assertTrue(builder_form.is_valid()) report_two = builder_form.create_report() self.assertNotEqual(report_one.config_id, report_two.config_id)
def test_data_source_exclusivity(self): """ Report builder reports based on the same form/case_type should have different data sources (they were previously sharing them) """ # Make report builder_form = ConfigureListReportForm( "Report one", self.app._id, "form", self.form.unique_id, existing_report=None, data={ 'user_filters': '[]', 'default_filters': '[]', 'columns': '[{"property": "/data/first_name", "display_text": "first name"}]', } ) self.assertTrue(builder_form.is_valid()) report_one = builder_form.create_report() # Make another report builder_form = ConfigureListReportForm( "Report two", self.app._id, "form", self.form.unique_id, existing_report=None, data={ 'user_filters': '[]', 'default_filters': '[]', 'columns': '[{"property": "/data/first_name", "display_text": "first name"}]', } ) self.assertTrue(builder_form.is_valid()) report_two = builder_form.create_report() self.assertNotEqual(report_one.config_id, report_two.config_id)
def test_updating_report_that_shares_data_source(self): """ If a report builder builder report shares a data source with another report, then editing the report builder report should result in a new data source being created for the report. """ # Make report builder_form = ConfigureListReportForm( self.domain, "Test Report", self.app._id, "form", self.form.unique_id, existing_report=None, data={ 'user_filters': '[]', 'default_filters': '[]', 'columns': '[{"property": "/data/first_name", "display_text": "first name", "calculation":"Group By"}]', }) self.assertTrue(builder_form.is_valid()) report = builder_form.create_report() # Make another report that references the same data source report_two = ReportConfiguration(domain="domain", config_id=report.config_id) report_two.save() # Make an edit to the first report builder report builder_form = ConfigureListReportForm( self.domain, "Test Report", self.app._id, "form", self.form.unique_id, existing_report=report, data={ 'user_filters': '[]', 'default_filters': '[]', 'columns': '[{"property": "/data/first_name", "display_text": "first name", "calculation": "Group By"}]', }) self.assertTrue(builder_form.is_valid()) report = builder_form.update_report() self.assertNotEqual(report.config_id, report_two.config_id)
def test_updating_report_that_shares_data_source(self): """ If a report builder builder report shares a data source with another report, then editing the report builder report should result in a new data source being created for the report. """ # Make report builder_form = ConfigureListReportForm( "Test Report", self.app._id, "form", self.form.unique_id, existing_report=None, data={ 'user_filters': '[]', 'default_filters': '[]', 'columns': '[{"property": "/data/first_name", "display_text": "first name"}]', } ) self.assertTrue(builder_form.is_valid()) report = builder_form.create_report() # Make another report that references the same data source report_two = ReportConfiguration( domain="domain", config_id=report.config_id ) report_two.save() # Make an edit to the first report builder report builder_form = ConfigureListReportForm( "Test Report", self.app._id, "form", self.form.unique_id, existing_report=report, data={ 'user_filters': '[]', 'default_filters': '[]', 'columns': '[{"property": "/data/first_name", "display_text": "first name"}]', } ) self.assertTrue(builder_form.is_valid()) report = builder_form.update_report() self.assertNotEqual(report.config_id, report_two.config_id)
def test_updating_out_of_date_report(self): """ Test that editing a report for an outdated data source creates a new data source. Data sources are tied to app version. """ # Make report builder_form = ConfigureListReportForm( "Test Report", self.app._id, "form", self.form.unique_id, existing_report=None, data={ 'filters': '[]', 'columns': '[]', } ) self.assertTrue(builder_form.is_valid()) report = builder_form.create_report() first_data_source_id = report.config_id # Bump version of app by saving it self.app.save() # Modify the report builder_form = ConfigureListReportForm( "Test Report", self.app._id, "form", self.form.unique_id, existing_report=report, data={ 'filters': '[]', 'columns': '[]' } ) self.assertTrue(builder_form.is_valid()) report = builder_form.update_report() second_data_source_id = report.config_id self.assertNotEqual(first_data_source_id, second_data_source_id)
def testDataSource(self): """ Confirm that data sources for reports with multiselects use "choice_list" indicators for mselect questions. """ builder_form = ConfigureListReportForm( "My Report", self.app._id, "form", self.form.unique_id, data={ 'user_filters': '[]', 'default_filters': '[]', 'columns': '[{"property": "/data/first_name", "display_text": "first name"}]', } ) self.assertTrue(builder_form.is_valid()) report = builder_form.create_report() data_source = report.config mselect_indicators = [i for i in data_source.configured_indicators if i["type"] == "choice_list"] self.assertEqual(len(mselect_indicators), 1) mselect_indicator = mselect_indicators[0] self.assertEqual(set(mselect_indicator['choices']), {'MA', 'MN', 'VT'})
def test_updating_out_of_date_report(self): """ Test that editing a report for an outdated data source creates a new data source. Data sources are tied to app version. """ # Make report builder_form = ConfigureListReportForm("Test Report", self.app._id, "form", self.form.unique_id, existing_report=None, data={ 'filters': '[]', 'columns': '[]', }) self.assertTrue(builder_form.is_valid()) report = builder_form.create_report() first_data_source_id = report.config_id # Bump version of app by saving it self.app.save() # Modify the report builder_form = ConfigureListReportForm("Test Report", self.app._id, "form", self.form.unique_id, existing_report=report, data={ 'filters': '[]', 'columns': '[]' }) self.assertTrue(builder_form.is_valid()) report = builder_form.update_report() second_data_source_id = report.config_id self.assertNotEqual(first_data_source_id, second_data_source_id)