Coverage for gws-app/gws/plugin/model_field/related_linked_feature_list/_test.py: 0%
51 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
1import gws
2import gws.test.util as u
5@u.fixture(scope='module')
6def root():
7 u.pg.create('a', {'id': 'int primary key', 'ka': 'int', 'sa': 'text'})
8 u.pg.create('b', {'id': 'int primary key', 'kb': 'int', 'sb': 'text'})
9 u.pg.create('x', {'xa': 'int', 'xb': 'int'})
11 cfg = '''
12 models+ {
13 uid "A" type "postgres" tableName "a"
14 fields+ { name "id" type "integer" }
15 fields+ { name "ka" type "integer" }
16 fields+ { name "sa" type "text" }
17 fields+ {
18 name "linked"
19 type relatedLinkedFeatureList
20 fromColumn "ka"
21 toModel "B"
22 toColumn "kb"
23 linkTableName "x"
24 linkFromColumn "xa"
25 linkToColumn "xb"
26 }
27 }
29 models+ {
30 uid "B" type "postgres" tableName "b"
31 fields+ { name "id" type "integer" }
32 fields+ { name "kb" type "integer" }
33 fields+ { name "sb" type "text" }
34 }
36 '''
38 yield u.gws_root(cfg)
41def test_find_depth(root: gws.Root):
42 mc = u.model_context(maxDepth=1)
44 u.pg.insert('a', [
45 {'id': 1, 'ka': 11, 'sa': 'a1'},
46 {'id': 2, 'ka': 22, 'sa': 'a2'},
47 {'id': 3, 'ka': 33, 'sa': 'a3'},
48 ])
49 u.pg.insert('b', [
50 {'id': 4, 'kb': 400, 'sb': 'b4'},
51 {'id': 5, 'kb': 500, 'sb': 'b5'},
52 {'id': 6, 'kb': 600, 'sb': 'b6'},
53 ])
54 u.pg.insert('x', [
55 {'xa': 11, 'xb': 400},
56 {'xa': 11, 'xb': 500},
57 {'xa': 11, 'xb': 600},
58 {'xa': 22, 'xb': 400},
59 {'xa': 22, 'xb': 500},
60 ])
62 ma = u.cast(gws.Model, root.get('A'))
63 fs = ma.get_features([1, 2, 3], mc)
65 assert [f.get('sa') for f in fs] == ['a1', 'a2', 'a3']
67 assert [c.get('sb') for c in fs[0].get('linked')] == ['b4', 'b5', 'b6']
68 assert [c.get('sb') for c in fs[1].get('linked')] == ['b4', 'b5']
69 assert [c.get('sb') for c in fs[2].get('linked')] == []
72def test_update(root: gws.Root):
73 mc = u.model_context(maxDepth=1)
75 u.pg.insert('a', [
76 {'id': 1, 'ka': 11, 'sa': 'a1'},
77 {'id': 2, 'ka': 22, 'sa': 'a2'},
78 {'id': 3, 'ka': 33, 'sa': 'a3'},
79 ])
80 u.pg.insert('b', [
81 {'id': 4, 'kb': 400, 'sb': 'b4'},
82 {'id': 5, 'kb': 500, 'sb': 'b5'},
83 {'id': 6, 'kb': 600, 'sb': 'b6'},
84 ])
85 u.pg.insert('x', [
86 {'xa': 11, 'xb': 400},
87 {'xa': 11, 'xb': 500},
88 {'xa': 22, 'xb': 400},
89 {'xa': 22, 'xb': 500},
90 ])
92 ma = u.cast(gws.Model, root.get('A'))
93 mb = u.cast(gws.Model, root.get('B'))
95 f = u.feature(ma, id=1, linked=[
96 u.feature(mb, id=4),
97 u.feature(mb, id=6),
98 ])
100 ma.update_feature(f, mc)
102 assert u.pg.rows('SELECT xa,xb FROM x ORDER BY xa,xb') == [
103 (11, 400),
104 (11, 600),
105 (22, 400),
106 (22, 500),
107 ]
110def test_create(root: gws.Root):
111 mc = u.model_context(maxDepth=1)
113 u.pg.insert('a', [
114 {'id': 1, 'ka': 11, 'sa': 'a1'},
115 {'id': 2, 'ka': 22, 'sa': 'a2'},
116 {'id': 3, 'ka': 33, 'sa': 'a3'},
117 ])
118 u.pg.insert('b', [
119 {'id': 4, 'kb': 400, 'sb': 'b4'},
120 {'id': 5, 'kb': 500, 'sb': 'b5'},
121 {'id': 6, 'kb': 600, 'sb': 'b6'},
122 ])
123 u.pg.insert('x', [
124 {'xa': 11, 'xb': 400},
125 {'xa': 22, 'xb': 500},
126 ])
128 ma = u.cast(gws.Model, root.get('A'))
129 mb = u.cast(gws.Model, root.get('B'))
131 f = u.feature(ma, id=9, ka=99, linked=[
132 u.feature(mb, id=4),
133 u.feature(mb, id=5),
134 ])
136 ma.create_feature(f, mc)
138 assert u.pg.rows('SELECT xa,xb FROM x ORDER BY xa,xb') == [
139 (11, 400),
140 (22, 500),
141 (99, 400),
142 (99, 500),
143 ]
146def test_create_related(root: gws.Root):
147 mc = u.model_context(maxDepth=1)
149 u.pg.insert('a', [
150 {'id': 1, 'ka': 11, 'sa': 'a1'},
151 {'id': 2, 'ka': 22, 'sa': 'a2'},
152 {'id': 3, 'ka': 33, 'sa': 'a3'},
153 ])
154 u.pg.insert('b', [
155 {'id': 4, 'kb': 400, 'sb': 'b4'},
156 {'id': 5, 'kb': 500, 'sb': 'b5'},
157 ])
158 u.pg.insert('x', [
159 {'xa': 11, 'xb': 400},
160 {'xa': 11, 'xb': 500},
161 ])
163 ma = u.cast(gws.Model, root.get('A'))
164 mb = u.cast(gws.Model, root.get('B'))
166 b_f = u.feature(mb, id=9, kb=999)
167 b_f.createWithFeatures = [
168 u.feature(ma, id=1),
169 u.feature(ma, id=2),
170 ]
172 mb.create_feature(b_f, mc)
174 assert u.pg.rows('SELECT xa,xb FROM x ORDER BY xa,xb') == [
175 (11, 400),
176 (11, 500),
177 (11, 999),
178 (22, 999),
179 ]