11import datetime
2-
2+ import pytest
33from test .integration .helpers import (
44 get_test_label ,
55)
6-
7- import pytest
8-
6+ from test .integration .conftest import get_region
97from linode_api4 .objects import (
108 Image ,
119 ImageShareGroup ,
10+ ImageShareGroupImagesToAdd ,
11+ ImageShareGroupImageToAdd ,
12+ ImageShareGroupImageToUpdate ,
1213 ImageShareGroupMemberToAdd ,
14+ ImageShareGroupMemberToUpdate ,
1315 ImageShareGroupToken ,
1416)
1517
@@ -29,22 +31,40 @@ def wait_for_image_status(test_linode_client, image_id, expected_status, timeout
2931 )
3032
3133
32- @pytest .fixture (scope = "function" )
33- def create_image_id (test_linode_client , linode_for_legacy_interface_tests ):
34- # TODO: list disks by linode_for_legacy_interface_tests.id
35- create_image = test_linode_client .images .create (disks [0 ], label = "linode-api4python-test-image-sharing-image" )
34+ @pytest .fixture (scope = "class" )
35+ def sample_linode (test_linode_client , e2e_test_firewall ):
36+ client = test_linode_client
37+ region = get_region (client , {"Linodes" , "Cloud Firewall" }, site_type = "core" )
38+ label = get_test_label (length = 8 )
39+
40+ linode_instance , password = client .linode .instance_create (
41+ "g6-nanode-1" ,
42+ region ,
43+ image = "linode/debian12" ,
44+ label = label + "_modlinode" ,
45+ )
46+ yield linode_instance
47+ linode_instance .delete ()
48+
49+
50+ @pytest .fixture (scope = "class" )
51+ def create_image_id (test_linode_client , sample_linode ):
52+ create_image = test_linode_client .images .create (sample_linode .disks [0 ],
53+ label = "linode-api4python-test-image-sharing-image" )
3654 wait_for_image_status (test_linode_client , create_image .id , "available" )
3755 yield create_image .id
56+ create_image .delete ()
3857
3958
4059@pytest .fixture (scope = "function" )
4160def share_group_id (test_linode_client ):
4261 group_label = get_test_label (8 ) + "_sharegroup_api4_test"
43- response = test_linode_client .sharegroups .create_sharegroup (
62+ group = test_linode_client .sharegroups .create_sharegroup (
4463 label = group_label ,
4564 description = "Test api4python" ,
4665 )
47- yield response .id
66+ yield group .id
67+ group .delete ()
4868
4969
5070def test_get_share_groups (test_linode_client ):
@@ -66,45 +86,71 @@ def test_get_share_groups(test_linode_client):
6686
6787def test_add_update_remove_share_group (test_linode_client ):
6888 group_label = get_test_label (8 ) + "_sharegroup_api4_test"
69- response_create = test_linode_client .sharegroups .create_sharegroup (
89+ share_group = test_linode_client .sharegroups .create_sharegroup (
7090 label = group_label ,
7191 description = "Test api4python create" ,
7292 )
73- assert response_create .api_endpoint == '/images/sharegroups/{id}'
74- assert response_create .id > 0
75- assert response_create .description == 'Test api4python create'
76- assert isinstance (response_create .images_count , int )
77- assert response_create .is_suspended == False
78- assert response_create .label == group_label
79- assert isinstance (response_create .members_count , int )
80- assert response_create .uuid != ''
81- assert isinstance (response_create .created , datetime .date )
82- assert not response_create .updated
83- assert not response_create .expiry
84-
85- # TODO: update sharegroup label or description
86-
87- response_get = test_linode_client .load (ImageShareGroup , response_create .id )
88- assert response_get .id == response_create .id
89- assert response_get .description == 'Test api4python create'
90-
91- response_create .delete ()
93+ assert share_group .api_endpoint == '/images/sharegroups/{id}'
94+ assert share_group .id > 0
95+ assert share_group .description == 'Test api4python create'
96+ assert isinstance (share_group .images_count , int )
97+ assert share_group .is_suspended == False
98+ assert share_group .label == group_label
99+ assert isinstance (share_group .members_count , int )
100+ assert share_group .uuid != ''
101+ assert isinstance (share_group .created , datetime .date )
102+ assert not share_group .updated
103+ assert not share_group .expiry
104+
105+ load_share_group = test_linode_client .load (ImageShareGroup , share_group .id )
106+ assert load_share_group .id == share_group .id
107+ assert load_share_group .description == 'Test api4python create'
108+
109+ load_share_group .label = 'Updated Sharegroup Label'
110+ load_share_group .description = 'Test update description'
111+ load_share_group .save ()
112+ load_share_group_after_update = test_linode_client .load (ImageShareGroup , share_group .id )
113+ assert load_share_group_after_update .id == share_group .id
114+ assert load_share_group_after_update .label == 'Updated Sharegroup Label'
115+ assert load_share_group_after_update .description == 'Test update description'
116+
117+ share_group .delete ()
92118 with pytest .raises (RuntimeError ) as err :
93- test_linode_client .load (ImageShareGroup , response_create .id )
119+ test_linode_client .load (ImageShareGroup , share_group .id )
94120 assert "[404] Not found" in str (err .value )
95121
96122
97- def test_create_and_list_share_groups_by_image_id (test_linode_client , create_image_id ):
98- group_label = get_test_label (8 ) + "_sharegroup_api4_test"
99- response_create_share_group = test_linode_client .sharegroups .create_sharegroup (
100- label = group_label ,
101- description = "Test api4python create" ,
123+ def test_add_get_update_revoke_image_to_share_group (test_linode_client , create_image_id , share_group_id ):
124+ share_group = test_linode_client .load (ImageShareGroup , share_group_id )
125+ add_image_response = share_group .add_images (
126+ ImageShareGroupImagesToAdd (
127+ images = [
128+ ImageShareGroupImageToAdd (id = create_image_id ),
129+ ]
130+ )
102131 )
132+ assert 0 < len (add_image_response )
133+ assert add_image_response [0 ].image_sharing .shared_by .sharegroup_id == share_group .id
134+ assert add_image_response [0 ].image_sharing .shared_by .source_image_id == create_image_id
135+
136+ get_response = share_group .get_image_shares ()
137+ assert 0 < len (get_response )
138+ assert get_response [0 ].image_sharing .shared_by .sharegroup_id == share_group .id
139+ assert get_response [0 ].image_sharing .shared_by .source_image_id == create_image_id
140+ assert get_response [0 ].description == ""
141+
142+ update_response = share_group .update_image_share (
143+ ImageShareGroupImageToUpdate (image_share_id = get_response [0 ].id , description = "Description update" )
144+ )
145+ assert update_response .description == "Description update"
103146
104- response_create_share_group .sharegroups_by_image_id (image_id = create_image_id )
105- # TODO: Add assertions
147+ share_groups_by_image_id_response = test_linode_client .sharegroups .sharegroups_by_image_id (create_image_id )
148+ assert 0 < len (share_groups_by_image_id_response .lists )
149+ assert share_groups_by_image_id_response .lists [0 ][0 ].id == share_group .id
106150
107- response_create_share_group .delete ()
151+ share_group .revoke_image_share (get_response [0 ].id )
152+ get_after_revoke_response = share_group .get_image_shares ()
153+ assert len (get_after_revoke_response ) == 0
108154
109155
110156def test_list_tokens (test_linode_client ):
@@ -143,5 +189,29 @@ def test_try_to_add_member_invalid_token(test_linode_client, share_group_id):
143189 )
144190 )
145191 assert "[500] Invalid token format" in str (err .value )
146- share_group .delete ()
147192
193+
194+ def test_list_share_group_members (test_linode_client , share_group_id ):
195+ share_group = test_linode_client .load (ImageShareGroup , share_group_id )
196+ response = share_group .get_members ()
197+ assert 0 == len (response )
198+
199+
200+ def test_try_to_get_update_revoke_share_group_member_by_invalid_token (test_linode_client , share_group_id ):
201+ share_group = test_linode_client .load (ImageShareGroup , share_group_id )
202+ with pytest .raises (RuntimeError ) as err :
203+ share_group .get_member ("notExistingToken" )
204+ assert "[404] Not found" in str (err .value )
205+
206+ with pytest .raises (RuntimeError ) as err :
207+ share_group .update_member (
208+ ImageShareGroupMemberToUpdate (
209+ token_uuid = "notExistingToken" ,
210+ label = "Update Member" ,
211+ )
212+ )
213+ assert "[404] Not found" in str (err .value )
214+
215+ with pytest .raises (RuntimeError ) as err :
216+ share_group .remove_member ("notExistingToken" )
217+ assert "[404] Not found" in str (err .value )
0 commit comments