Skip to content

Commit 87e3688

Browse files
NightMarcherNightMarcher
authored andcommitted
test: init by unittest and pytest
1 parent 13fc7fd commit 87e3688

File tree

6 files changed

+88
-7
lines changed

6 files changed

+88
-7
lines changed

Pipfile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[[source]]
2-
url = "https://pypi.org/simple"
2+
url = "https://pypi.tuna.tsinghua.edu.cn"
33
verify_ssl = true
44
name = "pypi"
55

@@ -12,8 +12,9 @@ autopep8 = "*"
1212
cryptography = "*"
1313
faker = "*"
1414
fastapi = "*"
15-
uvicorn = "*"
15+
pytest = "*"
1616
tortoise-orm = "*"
17+
uvicorn = "*"
1718

1819
[requires]
1920
python_version = "3.7"

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# fastapi-efficient-sql
22

3-
Installed by `pip install fastapi-efficient-sql`
3+
Installed as package by `pip install fastapi-efficient-sql`
4+
5+
Install developing requirements by `pipenv install --skip-lock --dev`
6+
7+
Run unittest by `pytest -sv`
48

59
## Some preparations before using efficient sql
610
```python

fastapi_esql/utils/metaclass.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33

44
class Singleton(ABCMeta):
55
"""
6-
Singleton metaclass, using by:
7-
8-
>>> class Parent(BaseClass, metaclass=Singleton):pass
9-
>>> class Child(Parent):pass
6+
Singleton metaclass
107
"""
118
def __init__(self, *args, **kwargs):
129
self.__instance = None

tests/__init__.py

Whitespace-only changes.

tests/test_metaclass.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from unittest import TestCase
2+
3+
from fastapi_esql import Singleton
4+
5+
6+
class Parent(metaclass=Singleton):
7+
pass
8+
9+
10+
class Child(Parent):
11+
pass
12+
13+
14+
class TestSingleton(TestCase):
15+
16+
def test_inheritance(self):
17+
c0, c1 = Child(), Child()
18+
print(id(c0), id(c1))
19+
assert c0 is c1
20+
21+
def test_parent_and_child(self):
22+
p0, p1 = Parent(), Parent()
23+
c = Child()
24+
print(id(p0), id(p0), id(c))
25+
assert p0 is p1
26+
assert p0 is not c

tests/test_sqlizer.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
from datetime import datetime
2+
from unittest import TestCase
3+
4+
from fastapi_esql import Cases, RawSQL, SQLizer
5+
6+
7+
class TestRawSQL(TestCase):
8+
9+
def test_init(self):
10+
s = "sql statement"
11+
raw_sql = RawSQL(s)
12+
assert raw_sql.sql == s
13+
14+
15+
class TestCases(TestCase):
16+
17+
mapping = {0: "No", 1: "Yes"}
18+
19+
def test_default(self):
20+
cases = Cases("is_ok", self.mapping, "Unknown")
21+
assert cases.sql == "CASE is_ok WHEN 0 THEN 'No' WHEN 1 THEN 'Yes' ELSE 'Unknown' END"
22+
23+
def test_no_default(self):
24+
cases = Cases("is_ok", self.mapping)
25+
assert cases.sql == "CASE is_ok WHEN 0 THEN 'No' WHEN 1 THEN 'Yes' END"
26+
27+
28+
class TestSQLizer(TestCase):
29+
30+
def test_resolve_orders(self):
31+
orders = SQLizer.resolve_orders(["-created_at", "name"])
32+
assert orders == "created_at DESC, name ASC"
33+
34+
def test_sqlize_value(self):
35+
assert SQLizer.sqlize_value(None) == "NULL"
36+
37+
raw_sql = RawSQL("statement")
38+
assert SQLizer.sqlize_value(raw_sql) == raw_sql.sql
39+
cases = Cases("is_ok", {0: "No", 1: "Yes"})
40+
assert SQLizer.sqlize_value(cases) == cases.sql
41+
42+
assert SQLizer.sqlize_value(1024) == "1024"
43+
assert SQLizer.sqlize_value(0.125) == "0.125"
44+
assert SQLizer.sqlize_value(True) == "True"
45+
46+
assert (
47+
SQLizer.sqlize_value({"gender": 0, "name": "羊淑兰"}, to_json=True)
48+
== """CAST('{"gender": 0, "name": "羊淑兰"}' AS JSON)"""
49+
)
50+
assert SQLizer.sqlize_value([1, 2, 4]) == "'[1, 2, 4]'"
51+
assert SQLizer.sqlize_value(("a", "b", "c")) == """'["a", "b", "c"]'"""
52+
53+
assert SQLizer.sqlize_value(datetime(2023, 1, 1, 12, 30)) == "'2023-01-01 12:30:00'"

0 commit comments

Comments
 (0)