Coverage for gws-app/gws/plugin/model_field/geometry/_test.py: 0%

70 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-17 01:37 +0200

1import gws.config 

2import gws.base.feature 

3import gws.base.shape 

4import gws.test.util as u 

5import gws.gis.crs 

6 

7 

8@u.fixture(scope='module') 

9def root(): 

10 u.pg.create('geometry_table', {'id': 'int primary key', 'geom': 'geometry(Point, 4326)'}) 

11 

12 cfg = ''' 

13 models+ { 

14 uid "GEOMETRY_MODEL" type "postgres" tableName "geometry_table" 

15 fields+ { name "id" type "integer" } 

16 fields+ {  

17 name "geom"  

18 type geometry  

19 geometryType "Point"  

20 crs "EPSG:4326"  

21 } 

22 } 

23 ''' 

24 

25 yield u.gws_root(cfg) 

26 

27 

28def test_create_geometry(root: gws.Root): 

29 mc = u.model_context() 

30 

31 model = u.cast(gws.Model, root.get('GEOMETRY_MODEL')) 

32 

33 point1 = gws.base.shape.from_xy(1, 2, gws.gis.crs.WGS84) 

34 point2 = gws.base.shape.from_xy(2, 3, gws.gis.crs.WGS84) 

35 

36 f = u.feature(model, id=1, geom=point1) 

37 model.create_feature(f, mc) 

38 

39 f = u.feature(model, id=2, geom=point2) 

40 model.create_feature(f, mc) 

41 

42 features = model.get_features([1,2], mc) 

43 

44 geom = features[0].get('geom') 

45 

46 shape = gws.base.shape.from_wkb_hex(geom.to_ewkb_hex()) 

47 assert shape.to_props().get('crs') == 'EPSG:4326' 

48 assert shape.to_props().get('geometry').get('type') == 'Point' 

49 assert shape.to_props().get('geometry').get('coordinates') == (1.0, 2.0) 

50 

51 

52 geom = features[1].get('geom') 

53 

54 shape = gws.base.shape.from_wkb_hex(geom.to_ewkb_hex()) 

55 assert shape.to_props().get('crs') == 'EPSG:4326' 

56 assert shape.to_props().get('geometry').get('type') == 'Point' 

57 assert shape.to_props().get('geometry').get('coordinates') == (2.0, 3.0) 

58 

59 

60def test_read_geometry(root: gws.Root): 

61 mc = u.model_context() 

62 

63 model = u.cast(gws.Model, root.get('GEOMETRY_MODEL')) 

64 

65 point_wkb = '0101000000000000000000F03F0000000000000040' # WKB for POINT(1 2) 

66 u.pg.insert('geometry_table', [{'id': 1, 'geom': point_wkb}]) 

67 

68 features = model.get_features([1], mc) 

69 assert len(features) == 1 

70 

71 geom = features[0].get('geom') 

72 shape = gws.base.shape.from_wkb_hex(geom.to_ewkb_hex()) 

73 assert shape.to_props().get('crs') == 'EPSG:4326' 

74 assert shape.to_props().get('geometry').get('type') == 'Point' 

75 assert shape.to_props().get('geometry').get('coordinates') == (1.0, 2.0) 

76 

77 

78def test_update_geometry(root: gws.Root): 

79 mc = u.model_context() 

80 

81 model = u.cast(gws.Model, root.get('GEOMETRY_MODEL')) 

82 

83 point_wkb = '0101000000000000000000F03F0000000000000040' # WKB for POINT(1 2) 

84 point2_wkb = '0101000000000000000000F03F0000000000000040' # WKB for POINT(1 2) 

85 u.pg.insert('geometry_table', [{'id': 1, 'geom': point_wkb}, {'id': 2, 'geom': point2_wkb}]) 

86 

87 point = gws.base.shape.from_xy(3, 4, gws.gis.crs.WGS84) 

88 

89 f = u.feature(model, id=2, geom=point) 

90 model.update_feature(f, mc) 

91 

92 rows = u.pg.rows('SELECT id, geom FROM geometry_table ORDER BY id') 

93 point_ewkb = '0101000020E6100000000000000000F03F0000000000000040' 

94 point2_ewkb = '0101000020E610000000000000000008400000000000001040' 

95 assert rows == [ 

96 (1, point_ewkb), (2, point2_ewkb) 

97 ] 

98 

99 

100def test_delete_geometry(root: gws.Root): 

101 mc = u.model_context() 

102 

103 point_wkb = '0101000000000000000000F03F0000000000000040' # WKB for POINT(1 2) 

104 point2_wkb = '0101000000000000000000F03F0000000000000040' # WKB for POINT(1 2) 

105 u.pg.insert('geometry_table', [{'id': 1, 'geom': point_wkb}, {'id': 2, 'geom': point2_wkb}]) 

106 

107 model = u.cast(gws.Model, root.get('GEOMETRY_MODEL')) 

108 

109 f = u.feature(model, id=1) 

110 model.delete_feature(f, mc) 

111 

112 rows = u.pg.rows('SELECT id, geom FROM geometry_table ORDER BY id') 

113 point2_ewkb = '0101000020E6100000000000000000F03F0000000000000040' 

114 assert rows == [(2, point2_ewkb)] 

115 

116 f = u.feature(model, id=2) 

117 model.delete_feature(f, mc) 

118 

119 rows = u.pg.rows('SELECT id, geom FROM geometry_table ORDER BY id') 

120 assert rows == []