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

1import gws 

2import gws.test.util as u 

3 

4 

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'}) 

10 

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 } 

28  

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 } 

35  

36 ''' 

37 

38 yield u.gws_root(cfg) 

39 

40 

41def test_find_depth(root: gws.Root): 

42 mc = u.model_context(maxDepth=1) 

43 

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 ]) 

61 

62 ma = u.cast(gws.Model, root.get('A')) 

63 fs = ma.get_features([1, 2, 3], mc) 

64 

65 assert [f.get('sa') for f in fs] == ['a1', 'a2', 'a3'] 

66 

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')] == [] 

70 

71 

72def test_update(root: gws.Root): 

73 mc = u.model_context(maxDepth=1) 

74 

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 ]) 

91 

92 ma = u.cast(gws.Model, root.get('A')) 

93 mb = u.cast(gws.Model, root.get('B')) 

94 

95 f = u.feature(ma, id=1, linked=[ 

96 u.feature(mb, id=4), 

97 u.feature(mb, id=6), 

98 ]) 

99 

100 ma.update_feature(f, mc) 

101 

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 ] 

108 

109 

110def test_create(root: gws.Root): 

111 mc = u.model_context(maxDepth=1) 

112 

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 ]) 

127 

128 ma = u.cast(gws.Model, root.get('A')) 

129 mb = u.cast(gws.Model, root.get('B')) 

130 

131 f = u.feature(ma, id=9, ka=99, linked=[ 

132 u.feature(mb, id=4), 

133 u.feature(mb, id=5), 

134 ]) 

135 

136 ma.create_feature(f, mc) 

137 

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 ] 

144 

145 

146def test_create_related(root: gws.Root): 

147 mc = u.model_context(maxDepth=1) 

148 

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 ]) 

162 

163 ma = u.cast(gws.Model, root.get('A')) 

164 mb = u.cast(gws.Model, root.get('B')) 

165 

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 ] 

171 

172 mb.create_feature(b_f, mc) 

173 

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 ]