Files
SQLmem/tests/test_parser.py

44 lines
1.3 KiB
Python

import pytest
from sqlmem.exceptions import ReadOnlyError, UnsupportedQueryError
from sqlmem.parser import parse
def test_simple_select():
result = parse("SELECT name, email FROM users WHERE status = 'active'")
assert result.table == "users"
# WHERE columns are also extracted — needed for in-memory SQLite filtering
assert {"name", "email"}.issubset(set(result.columns))
assert "status" in result.columns
def test_multiple_columns():
result = parse("SELECT a, b, c FROM orders")
assert result.table == "orders"
assert set(result.columns) == {"a", "b", "c"}
def test_insert_raises_readonly():
with pytest.raises(ReadOnlyError):
parse("INSERT INTO users (name) VALUES ('alice')")
def test_update_raises_readonly():
with pytest.raises(ReadOnlyError):
parse("UPDATE users SET name = 'bob' WHERE id = 1")
def test_delete_raises_readonly():
with pytest.raises(ReadOnlyError):
parse("DELETE FROM users WHERE id = 1")
def test_wildcard_raises_unsupported():
with pytest.raises(UnsupportedQueryError):
parse("SELECT * FROM users")
def test_join_raises_unsupported():
with pytest.raises(UnsupportedQueryError):
parse("SELECT a.name, b.title FROM users a JOIN orders b ON a.id = b.user_id")