def links(self):
        """Return a dictionary of the action names as keys and their API documentation links as values"""
        results = {}
        unique_action_names = set()
        # unique_action_names will be in the InfrastructureModification block for any given policy.
        # So if it shows up in ResourceExposure, it will also be in InfrastructureModification
        # Or if it shows up in DataExfiltration or PrivilegeEscalation, it will also be in InfrastructureModification
        # Let's create a set of unique_action_names that are in InfrastructureModification
        # First, let's get them from ManagedPolicyDetails
        # Then, the inline policies from GroupDetails, RoleDetails, and UserDetails
        unique_action_names.update(
            self.group_detail_list.all_infrastructure_modification_actions_by_inline_policies
        )
        unique_action_names.update(
            self.role_detail_list.all_infrastructure_modification_actions_by_inline_policies
        )
        unique_action_names.update(
            self.user_detail_list.all_infrastructure_modification_actions_by_inline_policies
        )
        unique_action_names.update(
            self.policies.all_infrastructure_modification_actions
        )

        unique_action_names = sorted(unique_action_names)
        all_action_links = get_all_action_links()

        for action in unique_action_names:
            if action in all_action_links:
                results[action] = all_action_links[action]
        return results
 def test_get_all_links(self):
     """querying.actions.get_all_action_links"""
     results = get_all_action_links()
     self.assertTrue(len(results.keys()) > 8000)