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

41 statements  

« prev     ^ index     » next       coverage.py v7.11.0, created at 2025-10-16 23:09 +0200

1import gws.base.shape 

2import gws.test.util as u 

3import gws.lib.crs 

4 

5 

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

7def model(): 

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

9 

10 cfg = """ 

11 models+ { 

12 uid "GEOMETRY_MODEL" type "postgres" tableName "geometry_table" 

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

14 fields+ {  

15 name "geom"  

16 type geometry  

17 geometryType "Point"  

18 crs "EPSG:4326"  

19 } 

20 } 

21 """ 

22 

23 root = u.gws_root(cfg) 

24 yield u.cast(gws.Model, root.get('GEOMETRY_MODEL')) 

25 

26 

27def test_create(model: gws.Model): 

28 mc = u.model_context() 

29 

30 point1 = gws.base.shape.from_xy(11, 22, gws.lib.crs.WGS84) 

31 point2 = gws.base.shape.from_xy(33, 44, gws.lib.crs.WGS84) 

32 

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

34 model.create_feature(f, mc) 

35 

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

37 model.create_feature(f, mc) 

38 

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

40 

41 shape = gws.u.require(features[0].shape()) 

42 assert shape.to_ewkt(trim=True) == 'SRID=4326;POINT(11 22)' 

43 

44 shape = gws.u.require(features[1].shape()) 

45 assert shape.to_ewkt(trim=True) == 'SRID=4326;POINT(33 44)' 

46 

47 

48def test_read(model: gws.Model): 

49 mc = u.model_context() 

50 

51 point1 = gws.base.shape.from_xy(123, 456, gws.lib.crs.WGS84) 

52 u.pg.insert('geometry_table', [{'id': 1, 'geom': point1.to_ewkb_hex()}]) 

53 

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

55 assert len(features) == 1 

56 

57 shape = gws.u.require(features[0].shape()) 

58 assert shape.to_ewkt(trim=True) == 'SRID=4326;POINT(123 456)' 

59 

60 

61def test_update(model: gws.Model): 

62 mc = u.model_context() 

63 

64 point1 = gws.base.shape.from_xy(11, 22, gws.lib.crs.WGS84) 

65 point2 = gws.base.shape.from_xy(77, 99, gws.lib.crs.WGS84) 

66 

67 f = u.feature(model, id=99, geom=point1) 

68 model.create_feature(f, mc) 

69 

70 f = u.feature(model, id=99, geom=point2) 

71 model.update_feature(f, mc) 

72 

73 features = model.get_features([99], mc) 

74 

75 shape = gws.u.require(features[0].shape()) 

76 assert shape.to_ewkt(trim=True) == 'SRID=4326;POINT(77 99)'