def test_data_source_columns(self): """ Report Builder should create a data source that includes columns for all possible aggregations, so that if the user switches between a list report and a summary report the data source has all the required columns (FB 268655) """ 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"}, {"property": "/data/last_name", "display_text": "last name"}, {"property": "/data/children", "display_text": "children"} ]""", }) self.assertTrue(builder_form.is_valid()) with patch('corehq.apps.userreports.tasks.delete_data_source_task'): data_source_config_id = builder_form.create_temp_data_source( '*****@*****.**') data_source = DataSourceConfiguration.get(data_source_config_id) indicators = sorted([(ind['column_id'], ind['type']) for ind in data_source.configured_indicators]) expected_indicators = [ ('count', 'boolean'), ('data_children_25bd0e0d', 'expression'), # "children" should have 2 columns because it is ('data_children_25bd0e0d_decimal', 'expression'), # numeric ('data_dob_b6293169', 'expression'), ('data_first_name_ac8c51a7', 'expression'), ('data_last_name_ce36e9e1', 'expression'), ('data_state_6e36b993', 'choice_list'), ('data_state_6e36b993', 'expression'), ('deviceID_a7307e7d', 'expression'), ('timeEnd_09f40526', 'expression'), ('timeStart_c5a1ba73', 'expression'), ('userID_41e1d44e', 'expression'), ('username_ea02198f', 'expression'), ] self.assertEqual(indicators, expected_indicators)