Beispiel #1
0
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)
Beispiel #2
0
 def setUp(self):
     self.workspace = Workspace(__file__)
Beispiel #3
0
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]
Beispiel #4
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)
Beispiel #5
0
 def setUp(self):
     self.workspace = Workspace(__file__)
Beispiel #6
0
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)
Beispiel #7
0
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]