class SQLReport(BaseReport): """ Report to be used with raw SQL's. E.g.:: class SalesReport(SQLReport): query = 'SELECT * FROM sales' report = SalesReport() report.process() print(report.output_filepaths) # --> Files with all rows from sales table. """ query = None """Raw report query.""" query_params = [] """Params to be evaluated with query.""" outputs = (outputs.TSVOutput(), ) """Outputs list, default TSV.""" db_alias = None """Database alias from django config to be used with queries""" @property def dataset(self): return datasets.SQLDataset(self.query, self.query_params, self.db_alias)
def test_context_manager_must_close_file(self): with outputs.TSVOutput() as output: output.out(('Alisson', 38)) self.assertFalse(self.open_result_mocked.close.called) self.assertTrue(self.open_result_mocked.close.called)
def test_filepath_must_be_a_tsv_file(self): with outputs.TSVOutput() as output: output.out(('Alisson', 38)) extension = output.filepath.split('.')[-1] self.assertEqual(extension, 'tsv')
def test_out_must_write_correct_data_in_csv_writer(self): with outputs.TSVOutput() as output: output.header(('Name', 'Age')) for item in self.iterable_object: output.out(item) output.footer(('test footer', )) expected_calls = [ mock.call(['Name', 'Age']), mock.call(['Alisson', '38']), mock.call(['Joao', '13']), mock.call(['test footer']), ] self.assertEqual(self.writer.writerow.mock_calls, expected_calls)
def test_process_with_dataset_with_ordered_dict_must_write_data_into_a_file( self): iterable_object = [ OrderedDict([('name', 'Alisson'), ('age', 38)]), OrderedDict([('name', 'Joao'), ('age', 13)]), ] with outputs.TSVOutput() as output: output.header(('Name', 'Age')) for item in iterable_object: output.out(item) output.footer(('test footer', )) expected_calls = [ mock.call(['Name', 'Age']), mock.call(['Alisson', '38']), mock.call(['Joao', '13']), mock.call(['test footer']), ] self.assertEqual(self.writer.writerow.mock_calls, expected_calls)
def test_out_must_call_open_with_correct_parameters(self): with outputs.TSVOutput() as output: output.out(('Alisson', 38)) filename = output.filepath self.open_mocked.assert_called_once_with(filename, 'w+')