Coverage for gws-app/gws/base/edit/_test/action_test.py: 100%

39 statements  

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

1import gws 

2import gws.test.util as u 

3 

4 

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

6def root(): 

7 u.pg.create('plain', {'id': 'int primary key', 'name': 'text', 'g': 'geometry(point,3857)'}) 

8 u.pg.insert('plain', [ 

9 dict(id=1, name='a11', g=u.ewkb('POINT(10 100)')), 

10 dict(id=2, name='a22', g=u.ewkb('POINT(20 200)')), 

11 dict(id=3, name='a33', g=u.ewkb('POINT(30 300)')), 

12 ]) 

13 

14 cfg = ''' 

15 permissions.all "allow all" 

16 

17 models+ { 

18 uid "PLAIN" type "postgres" tableName "plain" 

19 } 

20 actions+ { 

21 type 'edit' 

22 } 

23 projects+ { 

24 uid "A" 

25 templates+ { 

26 subject "feature.title" 

27 type "html" 

28 text "--{id}/{name}--" 

29 } 

30 models+ { 

31 uid "MODEL_PLAIN" 

32 type "postgres" 

33 tableName "plain" 

34 isEditable true 

35 fields+ { name "id" type "integer" isPrimaryKey true } 

36 fields+ { name "name" type "text" } 

37 fields+ { name "g" type "geometry" } 

38 } 

39 } 

40 ''' 

41 

42 yield u.gws_root(cfg) 

43 

44 

45def test_get_models(root: gws.Root): 

46 res = u.http.api(root, 'editGetModels', dict(projectUid='A')) 

47 ms = res.json['models'] 

48 assert ms[0]['uid'] == 'MODEL_PLAIN' 

49 assert len(ms[0]['fields']) == 3 

50 

51 

52def test_get_feature(root: gws.Root): 

53 res = u.http.api(root, 'editGetFeature', dict(projectUid='A', modelUid='MODEL_PLAIN', featureUid='2')) 

54 props = res.json['feature'] 

55 assert props['attributes']['id'] == 2 

56 assert props['attributes']['name'] == 'a22' 

57 

58 

59def test_write_feature(root: gws.Root): 

60 res = u.http.api(root, 'editGetFeature', dict(projectUid='A', modelUid='MODEL_PLAIN', featureUid='2')) 

61 props = res.json['feature'] 

62 props['attributes']['name'] = 'a22-new' 

63 

64 res = u.http.api(root, 'editWriteFeature', dict(projectUid='A', modelUid='MODEL_PLAIN', feature=props)) 

65 assert res.status_code == 200 

66 

67 assert u.pg.rows('SELECT id,name FROM plain ORDER BY id') == [ 

68 (1, 'a11'), 

69 (2, 'a22-new'), 

70 (3, 'a33'), 

71 ] 

72 

73 

74def test_create_feature(root: gws.Root): 

75 res = u.http.api(root, 'editGetFeature', dict(projectUid='A', modelUid='MODEL_PLAIN', featureUid='2')) 

76 props = res.json['feature'] 

77 props['attributes'] = {'id': 777, 'name': 'NEW_NAME'} 

78 props['isNew'] = True 

79 

80 res = u.http.api(root, 'editWriteFeature', dict(projectUid='A', modelUid='MODEL_PLAIN', feature=props)) 

81 assert res.status_code == 200 

82 

83 assert u.pg.rows('SELECT id,name FROM plain WHERE id=777') == [ 

84 (777, 'NEW_NAME'), 

85 ] 

86 

87 

88def test_delete_feature(root: gws.Root): 

89 res = u.http.api(root, 'editGetFeature', dict(projectUid='A', modelUid='MODEL_PLAIN', featureUid='2')) 

90 props = res.json['feature'] 

91 

92 res = u.http.api(root, 'editDeleteFeature', dict(projectUid='A', modelUid='MODEL_PLAIN', feature=props)) 

93 assert res.status_code == 200 

94 

95 assert u.pg.rows('SELECT id,name FROM plain WHERE id=2') == []