Skip to content

Commit 2a4bab9

Browse files
committed
refactor: move persistence tests to dedicated files
- Created separate test files for each persistence implementation: * memory_test.py for InMemoryTables tests * json_test.py for FileSystemJsonTables tests * jsonl_test.py for FileSystemJsonLTables tests * extended_test.py for ExtendedTables tests * base_test.py for shared FsTablesTest base class - Cleaned up tables_test.py to only contain core table/column tests - Fixed circular import issues by removing persistence imports from tables.py - Updated import statements across the codebase to use persistence module - All 178 tests continue to pass with improved organization
1 parent 268c391 commit 2a4bab9

11 files changed

Lines changed: 775 additions & 745 deletions

File tree

abstra_json_sql/apply.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
from .infer import infer_expression
33
from .parser import parse_expression
44
from .lexer import scan
5-
from .tables import ITablesSnapshot, Table, ExtendedTables, Column
5+
from .tables import ITablesSnapshot, Table, Column
6+
from .persistence import ExtendedTables
67
from .field_name import field_name, expression_name
78
from .ast import (
89
Delete,

abstra_json_sql/cli.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from pathlib import Path
2-
from .tables import FileSystemJsonLTables, Column, ColumnType, Table
2+
from .tables import Column, ColumnType, Table
3+
from .persistence import FileSystemJsonLTables
34
from .eval import eval_sql
45
from argparse import ArgumentParser
56
from csv import DictWriter

abstra_json_sql/eval_test.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from unittest import TestCase
22
from .eval import eval_sql
3-
from .tables import InMemoryTables, Table, Column, ColumnType
3+
from .tables import Table, Column, ColumnType
4+
from .persistence import InMemoryTables
45

56

67
class TestEvalSQL(TestCase):
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from unittest import TestCase
2+
from tempfile import mkdtemp
3+
from shutil import rmtree
4+
from pathlib import Path
5+
from ..tables import Column, ColumnType, Table
6+
from .json import FileSystemJsonTables
7+
from .jsonl import FileSystemJsonLTables
8+
9+
10+
class FsTablesTest(TestCase):
11+
def setUp(self):
12+
self.path = Path(mkdtemp())
13+
self.path.mkdir(parents=True, exist_ok=True)
14+
15+
# Create test table using the new UUID-based system
16+
test_table = Table(
17+
name="test_table",
18+
columns=[
19+
Column(name="id", type=ColumnType.int),
20+
Column(name="name", type=ColumnType.string),
21+
],
22+
data=[],
23+
)
24+
25+
# For FileSystemJsonTables
26+
tables_json = FileSystemJsonTables(workdir=self.path)
27+
tables_json.add_table(test_table)
28+
29+
# For FileSystemJsonLTables
30+
test_table_l = Table(
31+
name="test_table",
32+
columns=[
33+
Column(name="id", type=ColumnType.int),
34+
Column(name="name", type=ColumnType.string),
35+
],
36+
data=[],
37+
)
38+
tables_jsonl = FileSystemJsonLTables(workdir=self.path)
39+
tables_jsonl.add_table(test_table_l)
40+
41+
def tearDown(self):
42+
rmtree(self.path)
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
import pytest
2+
from ..tables import Column, ColumnType, Table
3+
from .memory import InMemoryTables
4+
from .extended import ExtendedTables
5+
6+
7+
class TestExtendedTables:
8+
@pytest.fixture
9+
def base_tables(self):
10+
return InMemoryTables(tables=[])
11+
12+
@pytest.fixture
13+
def extra_table(self):
14+
return Table(
15+
name="extra",
16+
columns=[Column(name="id", type=ColumnType.int)],
17+
data=[{"id": 1}],
18+
)
19+
20+
def test_extended_tables_creation(self, base_tables, extra_table):
21+
extended = ExtendedTables(base_tables, [extra_table])
22+
assert extended.snapshot == base_tables
23+
assert len(extended.extra_tables) == 1
24+
25+
def test_get_table_from_base(self, base_tables, extra_table):
26+
base_table = Table(
27+
name="base", columns=[Column(name="id", type=ColumnType.int)], data=[]
28+
)
29+
base_tables.add_table(base_table)
30+
31+
extended = ExtendedTables(base_tables, [extra_table])
32+
retrieved = extended.get_table("base")
33+
assert retrieved is not None
34+
assert retrieved.name == "base"
35+
36+
def test_get_table_from_extra(self, base_tables, extra_table):
37+
extended = ExtendedTables(base_tables, [extra_table])
38+
retrieved = extended.get_table("extra")
39+
assert retrieved is not None
40+
assert retrieved.name == "extra"
41+
42+
def test_get_nonexistent_table(self, base_tables, extra_table):
43+
extended = ExtendedTables(base_tables, [extra_table])
44+
assert extended.get_table("nonexistent") is None
45+
46+
def test_add_table(self, base_tables, extra_table):
47+
extended = ExtendedTables(base_tables, [extra_table])
48+
new_table = Table(
49+
name="new", columns=[Column(name="id", type=ColumnType.int)], data=[]
50+
)
51+
extended.add_table(new_table)
52+
53+
assert len(extended.extra_tables) == 2
54+
assert extended.get_table("new") is not None
55+
56+
def test_remove_table(self, base_tables, extra_table):
57+
extended = ExtendedTables(base_tables, [extra_table])
58+
extended.remove_table("extra")
59+
60+
assert len(extended.extra_tables) == 0
61+
assert extended.get_table("extra") is None
62+
63+
def test_insert_extra_table(self, base_tables, extra_table):
64+
extended = ExtendedTables(base_tables, [extra_table])
65+
extended.insert("extra", {"id": 2})
66+
67+
table = extended.get_table("extra")
68+
assert len(table.data) == 2
69+
70+
def test_update_extra_table(self, base_tables, extra_table):
71+
extended = ExtendedTables(base_tables, [extra_table])
72+
extended.update("extra", 0, {"id": 999})
73+
74+
table = extended.get_table("extra")
75+
assert table.data[0]["id"] == 999
76+
77+
def test_delete_extra_table(self, base_tables, extra_table):
78+
extended = ExtendedTables(base_tables, [extra_table])
79+
extended.delete("extra", [0])
80+
81+
table = extended.get_table("extra")
82+
assert len(table.data) == 0
83+
84+
85+
if __name__ == "__main__":
86+
pytest.main([__file__, "-v"])

0 commit comments

Comments
 (0)