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
« 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
8@u.fixture(scope='module')
9def root():
10 u.pg.create('geometry_table', {'id': 'int primary key', 'geom': 'geometry(Point, 4326)'})
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 '''
25 yield u.gws_root(cfg)
28def test_create_geometry(root: gws.Root):
29 mc = u.model_context()
31 model = u.cast(gws.Model, root.get('GEOMETRY_MODEL'))
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)
36 f = u.feature(model, id=1, geom=point1)
37 model.create_feature(f, mc)
39 f = u.feature(model, id=2, geom=point2)
40 model.create_feature(f, mc)
42 features = model.get_features([1,2], mc)
44 geom = features[0].get('geom')
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)
52 geom = features[1].get('geom')
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)
60def test_read_geometry(root: gws.Root):
61 mc = u.model_context()
63 model = u.cast(gws.Model, root.get('GEOMETRY_MODEL'))
65 point_wkb = '0101000000000000000000F03F0000000000000040' # WKB for POINT(1 2)
66 u.pg.insert('geometry_table', [{'id': 1, 'geom': point_wkb}])
68 features = model.get_features([1], mc)
69 assert len(features) == 1
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)
78def test_update_geometry(root: gws.Root):
79 mc = u.model_context()
81 model = u.cast(gws.Model, root.get('GEOMETRY_MODEL'))
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}])
87 point = gws.base.shape.from_xy(3, 4, gws.gis.crs.WGS84)
89 f = u.feature(model, id=2, geom=point)
90 model.update_feature(f, mc)
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 ]
100def test_delete_geometry(root: gws.Root):
101 mc = u.model_context()
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}])
107 model = u.cast(gws.Model, root.get('GEOMETRY_MODEL'))
109 f = u.feature(model, id=1)
110 model.delete_feature(f, mc)
112 rows = u.pg.rows('SELECT id, geom FROM geometry_table ORDER BY id')
113 point2_ewkb = '0101000020E6100000000000000000F03F0000000000000040'
114 assert rows == [(2, point2_ewkb)]
116 f = u.feature(model, id=2)
117 model.delete_feature(f, mc)
119 rows = u.pg.rows('SELECT id, geom FROM geometry_table ORDER BY id')
120 assert rows == []