Files
Baradb/clients/python/tests/test_query_builder.py
dimgigov ae2e07e626 feat(clients): professional clients with tests, CI/CD, and examples
- Python: pyproject.toml, pytest suite (unit + integration), README, examples
- JavaScript: package.json, TypeScript definitions, node:test suite, README, examples
- Nim: integration tests, examples, README, improved nimble tasks
- Rust: fixed nodelay/localhost IPv6 bug, integration tests, examples, README
- Added GitHub Actions CI for all 4 clients against Docker server
- Added docker-compose.test.yml for local integration testing
- Added .gitignore for each client
2026-05-08 00:18:34 +03:00

110 lines
3.3 KiB
Python

"""
Unit tests for QueryBuilder — no running server required.
"""
import pytest
from baradb import Client, QueryBuilder
class TestQueryBuilder:
def test_simple_select(self):
client = Client()
qb = QueryBuilder(client)
sql = qb.select("name", "age").from_("users").build()
assert sql == "SELECT name, age FROM users"
def test_select_all(self):
client = Client()
qb = QueryBuilder(client)
sql = qb.from_("users").build()
assert sql == "SELECT * FROM users"
def test_where_single(self):
client = Client()
qb = QueryBuilder(client)
sql = qb.select("name").from_("users").where("age > 18").build()
assert sql == "SELECT name FROM users WHERE age > 18"
def test_where_multiple(self):
client = Client()
qb = QueryBuilder(client)
sql = (
qb.select("name")
.from_("users")
.where("age > 18")
.where("active = true")
.build()
)
assert sql == "SELECT name FROM users WHERE age > 18 AND active = true"
def test_join(self):
client = Client()
qb = QueryBuilder(client)
sql = (
qb.select("u.name", "o.total")
.from_("users u")
.join("orders o", "u.id = o.user_id")
.build()
)
assert "JOIN orders o ON u.id = o.user_id" in sql
def test_left_join(self):
client = Client()
qb = QueryBuilder(client)
sql = (
qb.select("u.name", "o.total")
.from_("users u")
.left_join("orders o", "u.id = o.user_id")
.build()
)
assert "LEFT JOIN orders o ON u.id = o.user_id" in sql
def test_group_by_having(self):
client = Client()
qb = QueryBuilder(client)
sql = (
qb.select("dept", "count(*)")
.from_("employees")
.group_by("dept")
.having("count(*) > 5")
.build()
)
assert "GROUP BY dept" in sql
assert "HAVING count(*) > 5" in sql
def test_order_by(self):
client = Client()
qb = QueryBuilder(client)
sql = qb.select("name").from_("users").order_by("name", "DESC").build()
assert "ORDER BY name DESC" in sql
def test_limit_offset(self):
client = Client()
qb = QueryBuilder(client)
sql = qb.select("name").from_("users").limit(10).offset(5).build()
assert "LIMIT 10" in sql
assert "OFFSET 5" in sql
def test_full_complex_query(self):
client = Client()
qb = QueryBuilder(client)
sql = (
qb.select("u.name", "count(*) as cnt")
.from_("users u")
.left_join("orders o", "u.id = o.user_id")
.where("u.age > 18")
.group_by("u.name")
.having("cnt > 3")
.order_by("cnt", "DESC")
.limit(50)
.build()
)
assert sql.startswith("SELECT")
assert "FROM users u" in sql
assert "LEFT JOIN orders o ON u.id = o.user_id" in sql
assert "WHERE u.age > 18" in sql
assert "GROUP BY u.name" in sql
assert "HAVING cnt > 3" in sql
assert "ORDER BY cnt DESC" in sql
assert "LIMIT 50" in sql