@@ -47,7 +47,6 @@ def async_skills_client():
4747
4848
4949class TestGenaiSkills :
50- """Tests the Genai Skills client."""
5150
5251 mock_get_skill_response = {
5352 "name" : "projects/test-project/locations/test-location/skills/test-skill" ,
@@ -219,7 +218,8 @@ def test_create_skill(self, skills_client):
219218 config = {"local_path" : tmpdir , "wait_for_completion" : True },
220219 )
221220
222- # Verify requests using robust assert_has_calls matching mock.ANY for base64 zipped Filesystem
221+ # Verify requests using robust assert_has_calls matching
222+ # mock.ANY for base64 zipped Filesystem
223223 request_mock .assert_has_calls (
224224 [
225225 mock .call (
@@ -896,3 +896,121 @@ async def test_delete_skill_async(self, async_skills_client):
896896 ),
897897 ]
898898 )
899+
900+ def test_get_skill_revision (self , skills_client ):
901+ revision_name = "projects/test-project/locations/test-location/skills/test-skill/revisions/rev-1"
902+ mock_response = {
903+ "name" : revision_name ,
904+ "state" : "ACTIVE" ,
905+ }
906+
907+ with mock .patch .object (
908+ skills_client ._api_client , "request" , autospec = True
909+ ) as request_mock :
910+ request_mock .return_value = genai_types .HttpResponse (
911+ body = json .dumps (mock_response )
912+ )
913+
914+ revision = skills_client .revisions .get (name = revision_name )
915+
916+ assert isinstance (revision , genai .types .SkillRevision )
917+ assert revision .name == revision_name
918+ assert revision .state == "ACTIVE"
919+
920+ request_mock .assert_called_once_with (
921+ "get" ,
922+ revision_name ,
923+ {"_url" : {"name" : revision_name }},
924+ None ,
925+ )
926+
927+ @pytest .mark .asyncio
928+ async def test_get_skill_revision_async (self , async_skills_client ):
929+ revision_name = "projects/test-project/locations/test-location/skills/test-skill/revisions/rev-1"
930+ mock_response = {
931+ "name" : revision_name ,
932+ "state" : "ACTIVE" ,
933+ }
934+
935+ with mock .patch .object (
936+ async_skills_client ._api_client , "async_request" , autospec = True
937+ ) as request_mock :
938+ request_mock .return_value = genai_types .HttpResponse (
939+ body = json .dumps (mock_response )
940+ )
941+
942+ revision = await async_skills_client .revisions .get (name = revision_name )
943+
944+ assert isinstance (revision , genai .types .SkillRevision )
945+ assert revision .name == revision_name
946+ assert revision .state == "ACTIVE"
947+
948+ request_mock .assert_called_once_with (
949+ "get" ,
950+ revision_name ,
951+ {"_url" : {"name" : revision_name }},
952+ None ,
953+ )
954+
955+ def test_list_skill_revisions (self , skills_client ):
956+ skill_name = "projects/test-project/locations/test-location/skills/test-skill"
957+ mock_response = {
958+ "skillRevisions" : [
959+ {
960+ "name" : f"{ skill_name } /revisions/rev-1" ,
961+ "state" : "ACTIVE" ,
962+ }
963+ ]
964+ }
965+
966+ with mock .patch .object (
967+ skills_client ._api_client , "request" , autospec = True
968+ ) as request_mock :
969+ request_mock .return_value = genai_types .HttpResponse (
970+ body = json .dumps (mock_response )
971+ )
972+
973+ response = skills_client .revisions .list (name = skill_name )
974+
975+ assert isinstance (response , genai .types .ListSkillRevisionsResponse )
976+ assert len (response .skill_revisions ) == 1
977+ assert response .skill_revisions [0 ].name == f"{ skill_name } /revisions/rev-1"
978+
979+ request_mock .assert_called_once_with (
980+ "get" ,
981+ f"{ skill_name } /revisions" ,
982+ {"_url" : {"name" : skill_name }},
983+ None ,
984+ )
985+
986+ @pytest .mark .asyncio
987+ async def test_list_skill_revisions_async (self , async_skills_client ):
988+ skill_name = "projects/test-project/locations/test-location/skills/test-skill"
989+ mock_response = {
990+ "skillRevisions" : [
991+ {
992+ "name" : f"{ skill_name } /revisions/rev-1" ,
993+ "state" : "ACTIVE" ,
994+ }
995+ ]
996+ }
997+
998+ with mock .patch .object (
999+ async_skills_client ._api_client , "async_request" , autospec = True
1000+ ) as request_mock :
1001+ request_mock .return_value = genai_types .HttpResponse (
1002+ body = json .dumps (mock_response )
1003+ )
1004+
1005+ response = await async_skills_client .revisions .list (name = skill_name )
1006+
1007+ assert isinstance (response , genai .types .ListSkillRevisionsResponse )
1008+ assert len (response .skill_revisions ) == 1
1009+ assert response .skill_revisions [0 ].name == f"{ skill_name } /revisions/rev-1"
1010+
1011+ request_mock .assert_called_once_with (
1012+ "get" ,
1013+ f"{ skill_name } /revisions" ,
1014+ {"_url" : {"name" : skill_name }},
1015+ None ,
1016+ )
0 commit comments