77from linkedapi import (
88 AcceptInvitationParams ,
99 ArrayWorkflowMapper ,
10+ FeedPost ,
1011 FetchPersonParams ,
1112 Invitation ,
1213 LinkedApi ,
1314 LinkedApiConfig ,
15+ RetrieveFeedParams ,
1416 VoidWorkflowMapper ,
1517)
1618
@@ -38,6 +40,7 @@ def test_linked_api_exposes_all_predefined_operations() -> None:
3840 "retrieve_pending_requests" ,
3941 "retrieve_invitations" ,
4042 "retrieve_connections" ,
43+ "retrieve_feed" ,
4144 "remove_connection" ,
4245 "send_message" ,
4346 "sync_conversation" ,
@@ -60,7 +63,7 @@ def test_linked_api_exposes_all_predefined_operations() -> None:
6063 assert hasattr (operation , "execute" )
6164 assert hasattr (operation , "result" )
6265 assert hasattr (operation , "cancel" )
63- assert len (linkedapi .operations ) == 35
66+ assert len (linkedapi .operations ) == 36
6467
6568
6669def test_operation_mappers_match_node_contract () -> None :
@@ -82,6 +85,8 @@ def test_operation_mappers_match_node_contract() -> None:
8285 assert linkedapi .ignore_invitation .mapper .action_type == "st.ignoreInvitation"
8386 assert isinstance (linkedapi .retrieve_invitations .mapper , ArrayWorkflowMapper )
8487 assert linkedapi .retrieve_invitations .mapper .base_action_type == "st.retrieveInvitations"
88+ assert isinstance (linkedapi .retrieve_feed .mapper , ArrayWorkflowMapper )
89+ assert linkedapi .retrieve_feed .mapper .base_action_type == "st.retrieveFeed"
8590 assert isinstance (linkedapi .sync_inbox .mapper , VoidWorkflowMapper )
8691 assert linkedapi .sync_inbox .mapper .action_type == "st.syncInbox"
8792 assert isinstance (linkedapi .nv_sync_inbox .mapper , VoidWorkflowMapper )
@@ -92,6 +97,33 @@ def test_operation_mappers_match_node_contract() -> None:
9297 assert linkedapi .nv_manage_conversation .mapper .action_type == "nv.manageConversation"
9398
9499
100+ def test_retrieve_feed_maps_params_and_feed_context () -> None :
101+ linkedapi = LinkedApi (LinkedApiConfig (linked_api_token = "x" , identification_token = "y" ))
102+
103+ request = linkedapi .retrieve_feed .mapper .map_request (RetrieveFeedParams (limit = 25 ))
104+ response = linkedapi .retrieve_feed .mapper .map_response (
105+ {
106+ "actionType" : "st.retrieveFeed" ,
107+ "success" : True ,
108+ "data" : [
109+ {
110+ "url" : "https://www.linkedin.com/feed/update/urn:li:activity:1" ,
111+ "feedContext" : "Example Person reacted to this" ,
112+ }
113+ ],
114+ }
115+ )
116+
117+ assert request == {"actionType" : "st.retrieveFeed" , "limit" : 25 }
118+ assert response .data is not None
119+ assert isinstance (response .data [0 ], FeedPost )
120+ assert response .data [0 ].feed_context == "Example Person reacted to this"
121+
122+ for invalid_limit in (0 , 101 ):
123+ with pytest .raises (ValidationError ):
124+ RetrieveFeedParams (limit = invalid_limit )
125+
126+
95127def test_invitation_params_require_the_matching_target_url () -> None :
96128 params = AcceptInvitationParams (
97129 invitation_type = "companyFollow" ,
0 commit comments