Skip to content

Commit 7afa03c

Browse files
committed
Tests.
1 parent f3dc2b6 commit 7afa03c

File tree

3 files changed

+188
-12
lines changed

3 files changed

+188
-12
lines changed

tests/dbsetup/orm_qb.edgeql

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -277,23 +277,37 @@ insert Inh_AXA {
277277
axa := 10002,
278278
};
279279

280+
insert Link_Inh_A { n := -1 };
281+
insert Link_Inh_A2 { n := -2 };
282+
insert Link_Inh_A3 { n := -3 };
283+
280284
insert Link_Inh_A {
281285
n := 1,
282286
l := assert_exists((select Inh_A filter .a = 1 limit 1)),
283287
};
284-
insert Link_Inh_A {
288+
insert Link_Inh_A2 {
285289
n := 4,
286290
l := assert_exists((select Inh_AB filter .a = 4 limit 1)),
287291
};
288-
insert Link_Inh_A {
292+
insert Link_Inh_A2 {
289293
n := 7,
290294
l := assert_exists((select Inh_AC filter .a = 7 limit 1)),
291295
};
292-
insert Link_Inh_A {
296+
insert Link_Inh_A3 {
293297
n := 13,
294298
l := assert_exists((select Inh_ABC filter .a = 13 limit 1)),
295299
};
296-
insert Link_Inh_A {
300+
insert Link_Inh_A3 {
297301
n := 17,
298302
l := assert_exists((select Inh_AB_AC filter .a = 17 limit 1)),
299303
};
304+
305+
insert Link_Inh_AB { n := -1 };
306+
insert Link_Inh_AB {
307+
n := 1004,
308+
l := assert_exists((select Inh_AB filter .a = 4 limit 1)),
309+
};
310+
insert Link_Inh_AB {
311+
n := 1017,
312+
l := assert_exists((select Inh_AB_AC filter .a = 17 limit 1)),
313+
};

tests/dbsetup/orm_qb.gel

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,14 @@ type Link_Inh_A {
617617
on target delete allow;
618618
};
619619
};
620+
type Link_Inh_A2 extending Link_Inh_A;
621+
type Link_Inh_A3 extending Link_Inh_A2;
622+
type Link_Inh_AB {
623+
n: int64;
624+
l: Inh_AB {
625+
on target delete allow;
626+
};
627+
};
620628

621629
function Read_Inh_A(x: Inh_A) -> int64 using (x.a ?? -1);
622630
function Read_Inh_A_Overload(x: Inh_A) -> int64 using (x.a ?? -1);

tests/test_qb.py

Lines changed: 162 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1788,33 +1788,54 @@ def test_qb_is_type_basic_09(self):
17881788
(
17891789
default.Link_Inh_A,
17901790
{
1791-
"n": 1,
1791+
"n": -1,
1792+
"l": None,
1793+
},
1794+
),
1795+
(
1796+
default.Link_Inh_A2,
1797+
{
1798+
"n": -2,
1799+
"l": None,
1800+
},
1801+
),
1802+
(
1803+
default.Link_Inh_A3,
1804+
{
1805+
"n": -3,
17921806
"l": None,
17931807
},
17941808
),
17951809
(
17961810
default.Link_Inh_A,
1811+
{
1812+
"n": 1,
1813+
"l": None,
1814+
},
1815+
),
1816+
(
1817+
default.Link_Inh_A2,
17971818
{
17981819
"n": 4,
17991820
"l": possible_targets[4],
18001821
},
18011822
),
18021823
(
1803-
default.Link_Inh_A,
1824+
default.Link_Inh_A2,
18041825
{
18051826
"n": 7,
18061827
"l": None,
18071828
},
18081829
),
18091830
(
1810-
default.Link_Inh_A,
1831+
default.Link_Inh_A3,
18111832
{
18121833
"n": 13,
18131834
"l": possible_targets[13],
18141835
},
18151836
),
18161837
(
1817-
default.Link_Inh_A,
1838+
default.Link_Inh_A3,
18181839
{
18191840
"n": 17,
18201841
"l": possible_targets[17],
@@ -1851,33 +1872,54 @@ def test_qb_is_type_basic_10(self):
18511872
(
18521873
default.Link_Inh_A,
18531874
{
1854-
"n": 1,
1875+
"n": -1,
1876+
"l": None,
1877+
},
1878+
),
1879+
(
1880+
default.Link_Inh_A2,
1881+
{
1882+
"n": -2,
1883+
"l": None,
1884+
},
1885+
),
1886+
(
1887+
default.Link_Inh_A3,
1888+
{
1889+
"n": -3,
18551890
"l": None,
18561891
},
18571892
),
18581893
(
18591894
default.Link_Inh_A,
1895+
{
1896+
"n": 1,
1897+
"l": None,
1898+
},
1899+
),
1900+
(
1901+
default.Link_Inh_A2,
18601902
{
18611903
"n": 4,
18621904
"l": possible_targets[4],
18631905
},
18641906
),
18651907
(
1866-
default.Link_Inh_A,
1908+
default.Link_Inh_A2,
18671909
{
18681910
"n": 7,
18691911
"l": None,
18701912
},
18711913
),
18721914
(
1873-
default.Link_Inh_A,
1915+
default.Link_Inh_A3,
18741916
{
18751917
"n": 13,
18761918
"l": possible_targets[13],
18771919
},
18781920
),
18791921
(
1880-
default.Link_Inh_A,
1922+
default.Link_Inh_A3,
18811923
{
18821924
"n": 17,
18831925
"l": possible_targets[17],
@@ -2101,6 +2143,118 @@ def test_qb_is_type_as_function_arg_03(self):
21012143
)
21022144
self.assertEqual(sorted(result), [6, 13, 20])
21032145

2146+
def test_qb_backlinks_01(self):
2147+
from models.orm_qb import default
2148+
2149+
inh_a_objs = self.client.query(default.Inh_A.select(a=True))
2150+
possible_targets = {obj.a: obj for obj in inh_a_objs}
2151+
2152+
query = default.Inh_A.__backlinks__.l.is_(default.Link_Inh_A).select(
2153+
n=True, l=True
2154+
)
2155+
result = self.client.query(query)
2156+
2157+
self._assertObjectsWithFields(
2158+
result,
2159+
"n",
2160+
[
2161+
(
2162+
default.Link_Inh_A,
2163+
{
2164+
"n": 1,
2165+
"l": possible_targets[1],
2166+
},
2167+
),
2168+
(
2169+
default.Link_Inh_A2,
2170+
{
2171+
"n": 4,
2172+
"l": possible_targets[4],
2173+
},
2174+
),
2175+
(
2176+
default.Link_Inh_A2,
2177+
{
2178+
"n": 7,
2179+
"l": possible_targets[7],
2180+
},
2181+
),
2182+
(
2183+
default.Link_Inh_A3,
2184+
{
2185+
"n": 13,
2186+
"l": possible_targets[13],
2187+
},
2188+
),
2189+
(
2190+
default.Link_Inh_A3,
2191+
{
2192+
"n": 17,
2193+
"l": possible_targets[17],
2194+
},
2195+
),
2196+
],
2197+
)
2198+
2199+
def test_qb_backlinks_02(self):
2200+
# Two unrelated links with the same name
2201+
from models.orm_qb import default
2202+
2203+
inh_a_objs = self.client.query(default.Inh_A.select(a=True))
2204+
possible_targets = {obj.a: obj for obj in inh_a_objs}
2205+
2206+
query_a = default.Inh_AB.__backlinks__.l.is_(default.Link_Inh_A).select(
2207+
n=True, l=True
2208+
)
2209+
result_a = self.client.query(query_a)
2210+
2211+
self._assertObjectsWithFields(
2212+
result_a,
2213+
"n",
2214+
[
2215+
(
2216+
default.Link_Inh_A2,
2217+
{
2218+
"n": 4,
2219+
"l": possible_targets[4],
2220+
},
2221+
),
2222+
(
2223+
default.Link_Inh_A3,
2224+
{
2225+
"n": 17,
2226+
"l": possible_targets[17],
2227+
},
2228+
),
2229+
],
2230+
)
2231+
2232+
query_ab = default.Inh_AB.__backlinks__.l.is_(default.Link_Inh_AB).select(
2233+
n=True, l=True
2234+
)
2235+
result_ab = self.client.query(query_ab)
2236+
2237+
self._assertObjectsWithFields(
2238+
result_ab,
2239+
"n",
2240+
[
2241+
(
2242+
default.Link_Inh_AB,
2243+
{
2244+
"n": 1004,
2245+
"l": possible_targets[4],
2246+
},
2247+
),
2248+
(
2249+
default.Link_Inh_AB,
2250+
{
2251+
"n": 1017,
2252+
"l": possible_targets[17],
2253+
},
2254+
),
2255+
],
2256+
)
2257+
21042258

21052259
class TestQueryBuilderModify(tb.ModelTestCase):
21062260
"""This test suite is for data manipulation using QB."""

0 commit comments

Comments
 (0)