class TestPatch(unittest2.TestCase): def setUp(self): self.workspace = Workspace(__file__) def tearDown(self): self.workspace.tearDown() def test_basic(self): patch = self.workspace.filename('patch.diff') with open(patch, 'w') as fout: fout.write("@@,NAME,DIGIT\n" "->,two,2->22\n") patchsql([self.workspace.number_db, '--table', 'sheet', '--patch', patch]) catsql([self.workspace.number_db, "--json", self.workspace.output_file, '--NAME', 'two']) result = self.workspace.output_json() self.assertEquals(len(result['results']), 1) self.assertEquals(result['results'][0]['DIGIT'], 22) def test_from_file_pair(self): f1 = self.workspace.filename('f1.csv') f2 = self.workspace.filename('f2.csv') with open(f1, 'w') as fout: fout.write("NAME,DIGIT\n" "two,2\n") with open(f2, 'w') as fout: fout.write("NAME,DIGIT\n" "two,22\n") patchsql([self.workspace.number_db, '--table', 'sheet', '--follow', f1, f2, '--quiet']) catsql([self.workspace.number_db, "--json", self.workspace.output_file, '--NAME', 'two']) result = self.workspace.output_json() self.assertEquals(len(result['results']), 1) self.assertEquals(result['results'][0]['DIGIT'], 22) @mock.patch('catsql.main.call', editor_call) def test_integrated(self): catsql([self.workspace.number_db, '--edit', '--quiet']) catsql([self.workspace.number_db, "--json", self.workspace.output_file, '--NAME', 'two']) result = self.workspace.output_json() self.assertEquals(len(result['results']), 1) self.assertEquals(result['results'][0]['DIGIT'], 22)
def setUp(self): self.workspace = Workspace(__file__)
class TestCommands(unittest2.TestCase): def setUp(self): self.workspace = Workspace(__file__) def tearDown(self): self.workspace.tearDown() def test_basic(self): catsql([self.workspace.number_db, "--output", self.workspace.output_file]) assert self.workspace.output_lines() == 8 def test_csv_output(self): catsql([self.workspace.number_db, "--output", self.workspace.output_file, "--csv"]) assert self.workspace.output_lines() == 6 assert len(self.workspace.output_rows()) == 5 def test_column_value(self): catsql([self.workspace.number_db, "--NAME", "one", "--output", self.workspace.output_file, "--csv"]) assert self.workspace.output_lines() == 2 result = self.workspace.output_rows() assert len(result) == 1 result = result[0] assert result['NAME'] == 'one' assert result['DIGIT'] == '1' def test_row_condition(self): catsql([self.workspace.number_db, "--sql", "NAME = 'one' or NAME = 'two'", "--output", self.workspace.output_file, "--csv"]) result = self.workspace.output_rows() assert len(result) == 2 assert result[0]['NAME'] == 'one' assert result[1]['NAME'] == 'two' def test_grep(self): catsql([self.workspace.number_db, "--grep", "three", "--output", self.workspace.output_file, "--csv"]) result = self.workspace.output_rows() assert len(result) == 1 assert result[0]['DIGIT'] == '3' def test_json_basic(self): catsql([self.workspace.number_db, "--json", self.workspace.output_file]) result = self.workspace.output_json() assert result['count'] == 5 def test_json_filtered(self): catsql([self.workspace.number_db, "--column", "DIGIT", "--json", self.workspace.output_file]) result = self.workspace.output_json() assert result['count'] == 5 def test_types(self): catsql([self.workspace.number_db, "--types", "--json", self.workspace.output_file]) result = self.workspace.output_json() assert result['results'][0]['DIGIT'] == 'INTEGER' def test_sqlite_basic(self): catsql([self.workspace.number_db, "--sqlite", self.workspace.output_file_sql]) catsql([self.workspace.output_file_sql, "--json", self.workspace.output_file]) result = self.workspace.output_json() assert result['count'] == 5 def test_terse_kv(self): catsql([self.workspace.number_db, "--terse", "--value", "DIGIT=4", "--json", self.workspace.output_file]) result = self.workspace.output_json() assert result['count'] == 1 assert 'NAME' in result['results'][0] assert 'DIGIT' not in result['results'][0] def test_terse_direct(self): catsql([self.workspace.number_db, "--terse", "--DIGIT", "4", "--json", self.workspace.output_file]) result = self.workspace.output_json() assert result['count'] == 1 assert 'NAME' in result['results'][0] assert 'DIGIT' not in result['results'][0]
class TestLibrary(unittest.TestCase): def setUp(self): self.workspace = Workspace(__file__) def tearDown(self): self.workspace.tearDown() def test_order(self): q = catsql.connect(self.workspace.number_db) q.order(['NAME']) self.assertEquals(len(q), 1) self.assertEquals(q.rows[0].NAME, 'five') def test_order_asc(self): q = catsql.connect(self.workspace.number_db) q.order(['NAME+']) self.assertEquals(q.rows[0].NAME, 'five') def test_order_desc(self): q = catsql.connect(self.workspace.number_db) q.order(['NAME-']) self.assertEquals(q.rows[0].NAME, 'two') def test_limit(self): q = catsql.connect(self.workspace.number_db) q.limit(2) self.assertEquals(len(q), 1) self.assertEquals(len(q.rows.all()), 2) def test_grep(self): q = catsql.connect(self.workspace.number_db) q.grep('wo') self.assertEquals(len(q), 1) self.assertEquals(len(q.rows.all()), 1) self.assertEquals(q.row.NAME, 'two') def test_where_sql(self): q = catsql.connect(self.workspace.number_db) q.where_sql('DIGIT = 2') self.assertEquals(len(q), 1) self.assertEquals(len(q[0]['rows'].all()), 1) self.assertEquals(q.row.NAME, 'two') def test_where_sqls(self): q = catsql.connect(self.workspace.number_db) q.where_sqls(['DIGIT > 2', 'NAME like "%o%"']) self.assertEquals(len(q), 1) self.assertEquals(len(q[0]['rows'].all()), 1) self.assertEquals(q.row.DIGIT, 4) def test_where_kv(self): q = catsql.connect(self.workspace.number_db) q.where_kv({'DIGIT': 4}) self.assertEquals(len(q), 1) self.assertEquals(len(q[0]['rows'].all()), 1) self.assertEquals(q.row.DIGIT, 4) def test_where_kv_with_expansion(self): q = catsql.connect(self.workspace.number_db) digits = [ { 'DIGIT': 2, }, { 'DIGIT': 3 } ] fname = self.workspace.filename('digit.txt') json.dump(digits, open(fname, 'w')) q.where_kv_with_expansion({'DIGIT': '@{}'.format(fname)}) q.order(['DIGIT']) self.assertEquals(len(q), 1) self.assertEquals(len(q.rows.all()), 2) self.assertEquals(q.rows[0].DIGIT, 2) self.assertEquals(q.rows[1].DIGIT, 3) def test_distinct(self): self.workspace.numbers(self.workspace.number_file) # add duplicates q = catsql.connect(self.workspace.number_db) self.assertEquals(len(q), 1) self.assertEquals(len(q.rows.all()), 10) q.distinct() self.assertEquals(len(q.rows.all()), 5) def test_connect_column(self): q = catsql.connect(self.workspace.number_db, columns=['NAME']) q.order() self.assertEquals(len(q), 1) self.assertEquals(len(q.rows.all()), 5) self.assertEquals(q.rows[0].NAME, 'five') with self.assertRaises(AttributeError): print(q.rows[0].DIGIT) def test_connect_table(self): self.workspace.numbers(self.workspace.number_file, 'more') q = catsql.connect(self.workspace.number_db) self.assertEquals(len(q), 2) q = catsql.connect(self.workspace.number_db, tables=['more']) self.assertEquals(len(q), 1) def test_where_kv_multiple_tables(self): self.workspace.add_product_table() q = catsql.connect(self.workspace.number_db) q.where_kv({'CODE': '.'}) self.assertEquals(len(q), 1) def test_where_kv_with_expansion_multiple_tables(self): self.workspace.add_product_table() q = catsql.connect(self.workspace.number_db) codes = [ { 'CODE': '.', }, { 'CODE': '..' } ] fname = self.workspace.filename('code.txt') json.dump(codes, open(fname, 'w')) q.where_kv_with_expansion({'CODE': '@{}'.format(fname)}) q.order(['CODE']) self.assertEquals(len(q), 1) self.assertEquals(len(q.rows.all()), 2) def test_where_sql_multiple_tables(self): self.workspace.add_product_table() q = catsql.connect(self.workspace.number_db) q.where_sql('CODE = "."') self.assertEquals(len(q), 1)
class TestLibrary(unittest2.TestCase): def setUp(self): self.workspace = Workspace(__file__) def tearDown(self): self.workspace.tearDown() def test_order(self): q = catsql.connect(self.workspace.number_db) q.order(['NAME']) self.assertEquals(len(q), 1) self.assertEquals(q.rows[0].NAME, 'five') def test_order_asc(self): q = catsql.connect(self.workspace.number_db) q.order(['NAME+']) self.assertEquals(q.rows[0].NAME, 'five') def test_order_desc(self): q = catsql.connect(self.workspace.number_db) q.order(['NAME-']) self.assertEquals(q.rows[0].NAME, 'two') def test_limit(self): q = catsql.connect(self.workspace.number_db) q.limit(2) self.assertEquals(len(q), 1) self.assertEquals(len(q.rows.all()), 2) def test_grep(self): q = catsql.connect(self.workspace.number_db) q.grep('wo') self.assertEquals(len(q), 1) self.assertEquals(len(q.rows.all()), 1) self.assertEquals(q.row.NAME, 'two') def test_where_sql(self): q = catsql.connect(self.workspace.number_db) q.where_sql('DIGIT = 2') self.assertEquals(len(q), 1) self.assertEquals(len(q[0]['rows'].all()), 1) self.assertEquals(q.row.NAME, 'two') def test_where_sqls(self): q = catsql.connect(self.workspace.number_db) q.where_sqls(['DIGIT > 2', 'NAME like "%o%"']) self.assertEquals(len(q), 1) self.assertEquals(len(q[0]['rows'].all()), 1) self.assertEquals(q.row.DIGIT, 4) def test_where_kv(self): q = catsql.connect(self.workspace.number_db) q.where_kv({'DIGIT': 4}) self.assertEquals(len(q), 1) self.assertEquals(len(q[0]['rows'].all()), 1) self.assertEquals(q.row.DIGIT, 4) def test_where_kv_with_expansion(self): q = catsql.connect(self.workspace.number_db) digits = [ { 'DIGIT': 2, }, { 'DIGIT': 3 } ] fname = self.workspace.filename('digit.txt') json.dump(digits, open(fname, 'w')) q.where_kv_with_expansion({'DIGIT': '@{}'.format(fname)}) q.order(['DIGIT']) self.assertEquals(len(q), 1) self.assertEquals(len(q.rows.all()), 2) self.assertEquals(q.rows[0].DIGIT, 2) self.assertEquals(q.rows[1].DIGIT, 3) def test_distinct(self): self.workspace.numbers(self.workspace.number_file) # add duplicates q = catsql.connect(self.workspace.number_db) self.assertEquals(len(q), 1) self.assertEquals(len(q.rows.all()), 10) q.distinct() self.assertEquals(len(q.rows.all()), 5) def test_connect_column(self): q = catsql.connect(self.workspace.number_db, columns=['NAME']) q.order() self.assertEquals(len(q), 1) self.assertEquals(len(q.rows.all()), 5) self.assertEquals(q.rows[0].NAME, 'five') with self.assertRaises(AttributeError): print(q.rows[0].DIGIT) def test_connect_table(self): self.workspace.numbers(self.workspace.number_file, 'more') q = catsql.connect(self.workspace.number_db) self.assertEquals(len(q), 2) q = catsql.connect(self.workspace.number_db, tables=['more']) self.assertEquals(len(q), 1) def test_where_kv_multiple_tables(self): self.workspace.add_product_table() q = catsql.connect(self.workspace.number_db) q.where_kv({'CODE': '.'}) self.assertEquals(len(q), 1) def test_where_kv_with_expansion_multiple_tables(self): self.workspace.add_product_table() q = catsql.connect(self.workspace.number_db) codes = [ { 'CODE': '.', }, { 'CODE': '..' } ] fname = self.workspace.filename('code.txt') json.dump(codes, open(fname, 'w')) q.where_kv_with_expansion({'CODE': '@{}'.format(fname)}) q.order(['CODE']) self.assertEquals(len(q), 1) self.assertEquals(len(q.rows.all()), 2) def test_where_sql_multiple_tables(self): self.workspace.add_product_table() q = catsql.connect(self.workspace.number_db) q.where_sql('CODE = "."') self.assertEquals(len(q), 1)
class TestCommands(unittest.TestCase): def setUp(self): self.workspace = Workspace(__file__) def tearDown(self): self.workspace.tearDown() def test_basic(self): catsql( [self.workspace.number_db, "--output", self.workspace.output_file]) assert self.workspace.output_lines() == 8 def test_csv_output(self): catsql([ self.workspace.number_db, "--output", self.workspace.output_file, "--csv" ]) assert self.workspace.output_lines() == 6 assert len(self.workspace.output_rows()) == 5 def test_column_value(self): catsql([ self.workspace.number_db, "--NAME", "one", "--output", self.workspace.output_file, "--csv" ]) assert self.workspace.output_lines() == 2 result = self.workspace.output_rows() assert len(result) == 1 result = result[0] assert result['NAME'] == 'one' assert result['DIGIT'] == '1' def test_row_condition(self): catsql([ self.workspace.number_db, "--sql", "NAME = 'one' or NAME = 'two'", "--output", self.workspace.output_file, "--csv" ]) result = self.workspace.output_rows() assert len(result) == 2 assert result[0]['NAME'] == 'one' assert result[1]['NAME'] == 'two' def test_grep(self): catsql([ self.workspace.number_db, "--grep", "three", "--output", self.workspace.output_file, "--csv" ]) result = self.workspace.output_rows() assert len(result) == 1 assert result[0]['DIGIT'] == '3' def test_json_basic(self): catsql( [self.workspace.number_db, "--json", self.workspace.output_file]) result = self.workspace.output_json() assert result['count'] == 5 def test_json_filtered(self): catsql([ self.workspace.number_db, "--column", "DIGIT", "--json", self.workspace.output_file ]) result = self.workspace.output_json() assert result['count'] == 5 def test_types(self): catsql([ self.workspace.number_db, "--types", "--json", self.workspace.output_file ]) result = self.workspace.output_json() assert result['results'][0]['DIGIT'] == 'INTEGER' def test_sqlite_basic(self): catsql([ self.workspace.number_db, "--sqlite", self.workspace.output_file_sql ]) catsql([ self.workspace.output_file_sql, "--json", self.workspace.output_file ]) result = self.workspace.output_json() assert result['count'] == 5 def test_excel_basic(self): catsql([ self.workspace.number_db, "--excel", self.workspace.output_file_excel ]) result = self.workspace.output_excel() assert len(list(result.active)) == 5 + 1 def test_terse_kv(self): catsql([ self.workspace.number_db, "--terse", "--value", "DIGIT=4", "--json", self.workspace.output_file ]) result = self.workspace.output_json() assert result['count'] == 1 assert 'NAME' in result['results'][0] assert 'DIGIT' not in result['results'][0] def test_terse_direct(self): catsql([ self.workspace.number_db, "--terse", "--DIGIT", "4", "--json", self.workspace.output_file ]) result = self.workspace.output_json() assert result['count'] == 1 assert 'NAME' in result['results'][0] assert 'DIGIT' not in result['results'][0]