Skip to content

Commit c117264

Browse files
committed
Add tests.
1 parent 9131f40 commit c117264

File tree

1 file changed

+137
-14
lines changed

1 file changed

+137
-14
lines changed

tests/test_qb.py

Lines changed: 137 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -515,18 +515,13 @@ def test_qb_computed_02(self):
515515
self.assertEqual(res.name, "Alice")
516516
self.assertEqual(res.nickname, "Little Alice")
517517

518-
@tb.xfail_unimplemented('''
519-
Needs casts. Issue #672.
520-
Medium priority.
521-
(We might do different syntax and need to change the test.)
522-
''')
523518
def test_qb_computed_03(self):
524519
from models.orm_qb import default, std
525520

526521
res = self.client.get(
527522
default.User.select(
528523
name=True,
529-
nickname=lambda u: u.name + std.str(std.len(u.name)),
524+
nickname=lambda u: u.name + std.str.cast(std.len(u.name)),
530525
).filter(name="Alice")
531526
)
532527
self.assertEqual(res.name, "Alice")
@@ -895,11 +890,8 @@ def test_qb_filter_13(self):
895890
dana = default.User.filter(name="Dana")
896891
res = self.client.get(
897892
default.UserGroup.filter(
898-
lambda g: std.count(
899-
std.distinct(
900-
std.union(g.users, dana)
901-
)
902-
) == 3
893+
lambda g: std.count(std.distinct(std.union(g.users, dana)))
894+
== 3
903895
)
904896
)
905897
self.assertEqual(res.name, "green")
@@ -1423,9 +1415,9 @@ def test_qb_update_04(self):
14231415
# Add Alice to the group
14241416
self.client.query(
14251417
default.UserGroup.filter(name="blue").update(
1426-
users=lambda g: std.assert_distinct(std.union(
1427-
g.users, default.User.filter(name="Alice")
1428-
))
1418+
users=lambda g: std.assert_distinct(
1419+
std.union(g.users, default.User.filter(name="Alice"))
1420+
)
14291421
)
14301422
)
14311423

@@ -1539,3 +1531,134 @@ def test_qb_enum_edit_02(self):
15391531

15401532
self.assertEqual(e.color, default.Color.Violet)
15411533
self.assertEqual(e.name, "red")
1534+
1535+
def test_qb_cast_scalar_01(self):
1536+
# scalar to scalar
1537+
from models.orm import std
1538+
1539+
result = self.client.get(std.str.cast(std.int64(1)))
1540+
self.assertEqual(result, "1")
1541+
1542+
def test_qb_cast_scalar_02(self):
1543+
# enum to scalar
1544+
from models.orm import default, std
1545+
1546+
result = self.client.get(std.str.cast(default.Color.Red))
1547+
self.assertEqual(result, "Red")
1548+
1549+
def test_qb_cast_scalar_03(self):
1550+
# scalar to enum
1551+
from models.orm import default, std
1552+
1553+
result = self.client.get(default.Color.cast(std.str("Red")))
1554+
self.assertEqual(result, default.Color.Red)
1555+
1556+
def test_qb_cast_array_01(self):
1557+
# array[scalar] to array[scalar]
1558+
from models.orm import std
1559+
1560+
result = self.client.get(
1561+
std.array[std.str].cast(
1562+
std.array[std.int64](
1563+
[std.int64(1), std.int64(2), std.int64(3)]
1564+
)
1565+
)
1566+
)
1567+
self.assertEqual(result, ["1", "2", "3"])
1568+
1569+
def test_qb_cast_array_02(self):
1570+
# array[enum] to array[scalar]
1571+
from models.orm import default, std
1572+
1573+
result = self.client.get(
1574+
std.array[std.str].cast(
1575+
std.array[default.Color](
1576+
[
1577+
default.Color.Red,
1578+
default.Color.Green,
1579+
default.Color.Blue,
1580+
]
1581+
)
1582+
)
1583+
)
1584+
self.assertEqual(result, ["Red", "Green", "Blue"])
1585+
1586+
def test_qb_cast_array_03(self):
1587+
# array[scalar] to array[enum]
1588+
from models.orm import default, std
1589+
1590+
result = self.client.get(
1591+
std.array[default.Color].cast(
1592+
std.array[std.str](
1593+
[std.str("Red"), std.str("Green"), std.str("Blue")]
1594+
)
1595+
)
1596+
)
1597+
self.assertEqual(
1598+
result,
1599+
[default.Color.Red, default.Color.Green, default.Color.Blue],
1600+
)
1601+
1602+
def test_qb_cast_array_04(self):
1603+
# array[tuple] to array[tuple]
1604+
from models.orm import default, std
1605+
1606+
result = self.client.get(
1607+
std.array[std.tuple[std.int64, default.Color]].cast(
1608+
std.array[std.tuple[std.str, std.str]](
1609+
[
1610+
std.tuple[std.str, std.str](
1611+
[std.str("1"), std.str("Red")]
1612+
),
1613+
std.tuple[std.str, std.str](
1614+
[std.str("2"), std.str("Green")]
1615+
),
1616+
std.tuple[std.str, std.str](
1617+
[std.str("3"), std.str("Blue")]
1618+
),
1619+
]
1620+
)
1621+
)
1622+
)
1623+
self.assertEqual(
1624+
result,
1625+
[
1626+
(1, default.Color.Red),
1627+
(2, default.Color.Green),
1628+
(3, default.Color.Blue),
1629+
],
1630+
)
1631+
1632+
def test_qb_cast_tuple_01(self):
1633+
# unnamed tuple to unnamed tuple
1634+
from models.orm import default, std
1635+
1636+
result = self.client.get(
1637+
std.tuple[
1638+
std.int64, default.Color, std.str, std.array[std.int64]
1639+
].cast(
1640+
std.tuple[std.str, std.str, default.Color, std.array[std.str]](
1641+
(
1642+
std.str("1"),
1643+
std.str("Red"),
1644+
default.Color.Green,
1645+
std.array[std.str](
1646+
[std.str("2"), std.str("3"), std.str("4")]
1647+
),
1648+
)
1649+
)
1650+
)
1651+
)
1652+
self.assertEqual(result, (1, default.Color.Red, "Green", [2, 3, 4]))
1653+
1654+
def test_qb_cast_range_01(self):
1655+
# range to range
1656+
from gel.datatypes import range as _range
1657+
from models.orm import std
1658+
1659+
result = self.client.get(
1660+
std.range[std.int64].cast(
1661+
std.range[std.int32](std.int32(1), std.int32(9))
1662+
)
1663+
)
1664+
self.assertEqual(result, _range.Range(std.int64(1), std.int64(9)))

0 commit comments

Comments
 (0)