|
5 | 5 | from crowdin_api.api_resources.ai.enums import ( |
6 | 6 | AIPromptAction, |
7 | 7 | AiPromptFineTuningJobStatus, |
| 8 | + AiRequestLogSourceAction, |
| 9 | + AiRequestLogStatus, |
8 | 10 | AIProviderType, |
9 | 11 | AiReportFormat, |
10 | 12 | AiToolType, |
@@ -1132,6 +1134,90 @@ def test_download_ai_report(self, m_request, base_absolut_url): |
1132 | 1134 | path=f"users/{user_id}/ai/reports/{ai_report_id}/download", |
1133 | 1135 | ) |
1134 | 1136 |
|
| 1137 | + def test_get_ai_request_logs_path(self, base_absolut_url): |
| 1138 | + resource = self.get_resource(base_absolut_url) |
| 1139 | + assert resource.get_ai_request_logs_path(1) == "users/1/ai/request-logs" |
| 1140 | + |
| 1141 | + @pytest.mark.parametrize( |
| 1142 | + "incoming_data, request_params", |
| 1143 | + ( |
| 1144 | + ( |
| 1145 | + {}, |
| 1146 | + { |
| 1147 | + "requestId": None, |
| 1148 | + "projectId": None, |
| 1149 | + "userId": None, |
| 1150 | + "aiProviderId": None, |
| 1151 | + "model": None, |
| 1152 | + "sourceAction": None, |
| 1153 | + "promptAction": None, |
| 1154 | + "statuses": None, |
| 1155 | + "systemCredentials": None, |
| 1156 | + "isAutoTriggered": None, |
| 1157 | + "tokenName": None, |
| 1158 | + "oauthClientId": None, |
| 1159 | + "createdAfter": None, |
| 1160 | + "createdBefore": None, |
| 1161 | + "limit": 25, |
| 1162 | + "offset": 0, |
| 1163 | + }, |
| 1164 | + ), |
| 1165 | + ( |
| 1166 | + { |
| 1167 | + "request_id": "9d3b1c4e-2f3a-4b5c-8d6e-7f8a9b0c1d2e", |
| 1168 | + "project_id": 8, |
| 1169 | + "request_user_id": 42, |
| 1170 | + "ai_provider_id": 3, |
| 1171 | + "model": "gpt-5.6-sol", |
| 1172 | + "source_action": AiRequestLogSourceAction.AI_GATEWAY, |
| 1173 | + "prompt_action": "pre_translate", |
| 1174 | + "statuses": [AiRequestLogStatus.PENDING, AiRequestLogStatus.SUCCESS], |
| 1175 | + "system_credentials": True, |
| 1176 | + "is_auto_triggered": False, |
| 1177 | + "token_name": "CI token", |
| 1178 | + "oauth_client_id": "gpbccUFxAKZDrLm5Nq8t", |
| 1179 | + "created_after": datetime(2026, 1, 1, tzinfo=timezone.utc), |
| 1180 | + "created_before": datetime(2026, 1, 2, tzinfo=timezone.utc), |
| 1181 | + "limit": 10, |
| 1182 | + "offset": 20, |
| 1183 | + }, |
| 1184 | + { |
| 1185 | + "requestId": "9d3b1c4e-2f3a-4b5c-8d6e-7f8a9b0c1d2e", |
| 1186 | + "projectId": 8, |
| 1187 | + "userId": 42, |
| 1188 | + "aiProviderId": 3, |
| 1189 | + "model": "gpt-5.6-sol", |
| 1190 | + "sourceAction": AiRequestLogSourceAction.AI_GATEWAY, |
| 1191 | + "promptAction": "pre_translate", |
| 1192 | + "statuses": "pending,success", |
| 1193 | + "systemCredentials": True, |
| 1194 | + "isAutoTriggered": False, |
| 1195 | + "tokenName": "CI token", |
| 1196 | + "oauthClientId": "gpbccUFxAKZDrLm5Nq8t", |
| 1197 | + "createdAfter": datetime(2026, 1, 1, tzinfo=timezone.utc), |
| 1198 | + "createdBefore": datetime(2026, 1, 2, tzinfo=timezone.utc), |
| 1199 | + "limit": 10, |
| 1200 | + "offset": 20, |
| 1201 | + }, |
| 1202 | + ), |
| 1203 | + ), |
| 1204 | + ) |
| 1205 | + @mock.patch("crowdin_api.requester.APIRequester.request") |
| 1206 | + def test_list_ai_request_logs( |
| 1207 | + self, m_request, incoming_data, request_params, base_absolut_url |
| 1208 | + ): |
| 1209 | + m_request.return_value = "response" |
| 1210 | + |
| 1211 | + user_id = 1 |
| 1212 | + resource = self.get_resource(base_absolut_url) |
| 1213 | + assert resource.list_ai_request_logs(user_id, **incoming_data) == "response" |
| 1214 | + |
| 1215 | + m_request.assert_called_once_with( |
| 1216 | + method="get", |
| 1217 | + path=resource.get_ai_request_logs_path(user_id), |
| 1218 | + params=request_params, |
| 1219 | + ) |
| 1220 | + |
1135 | 1221 | @mock.patch("crowdin_api.requester.APIRequester.request") |
1136 | 1222 | def test_get_ai_settings(self, m_request, base_absolut_url): |
1137 | 1223 | m_request.return_value = "response" |
@@ -2594,6 +2680,89 @@ def test_download_ai_report(self, m_request, base_absolut_url): |
2594 | 2680 | path=f"ai/reports/{ai_report_id}/download", |
2595 | 2681 | ) |
2596 | 2682 |
|
| 2683 | + def test_get_ai_request_logs_path(self, base_absolut_url): |
| 2684 | + resource = self.get_resource(base_absolut_url) |
| 2685 | + assert resource.get_ai_request_logs_path() == "ai/request-logs" |
| 2686 | + |
| 2687 | + @pytest.mark.parametrize( |
| 2688 | + "incoming_data, request_params", |
| 2689 | + ( |
| 2690 | + ( |
| 2691 | + {}, |
| 2692 | + { |
| 2693 | + "requestId": None, |
| 2694 | + "projectId": None, |
| 2695 | + "userId": None, |
| 2696 | + "aiProviderId": None, |
| 2697 | + "model": None, |
| 2698 | + "sourceAction": None, |
| 2699 | + "promptAction": None, |
| 2700 | + "statuses": None, |
| 2701 | + "systemCredentials": None, |
| 2702 | + "isAutoTriggered": None, |
| 2703 | + "tokenName": None, |
| 2704 | + "oauthClientId": None, |
| 2705 | + "createdAfter": None, |
| 2706 | + "createdBefore": None, |
| 2707 | + "limit": 25, |
| 2708 | + "offset": 0, |
| 2709 | + }, |
| 2710 | + ), |
| 2711 | + ( |
| 2712 | + { |
| 2713 | + "request_id": "9d3b1c4e-2f3a-4b5c-8d6e-7f8a9b0c1d2e", |
| 2714 | + "project_id": 8, |
| 2715 | + "request_user_id": 42, |
| 2716 | + "ai_provider_id": 3, |
| 2717 | + "model": "gpt-5.6-sol", |
| 2718 | + "source_action": AiRequestLogSourceAction.AI_GATEWAY, |
| 2719 | + "prompt_action": "pre_translate", |
| 2720 | + "statuses": [AiRequestLogStatus.PENDING, AiRequestLogStatus.SUCCESS], |
| 2721 | + "system_credentials": True, |
| 2722 | + "is_auto_triggered": False, |
| 2723 | + "token_name": "CI token", |
| 2724 | + "oauth_client_id": "gpbccUFxAKZDrLm5Nq8t", |
| 2725 | + "created_after": datetime(2026, 1, 1, tzinfo=timezone.utc), |
| 2726 | + "created_before": datetime(2026, 1, 2, tzinfo=timezone.utc), |
| 2727 | + "limit": 10, |
| 2728 | + "offset": 20, |
| 2729 | + }, |
| 2730 | + { |
| 2731 | + "requestId": "9d3b1c4e-2f3a-4b5c-8d6e-7f8a9b0c1d2e", |
| 2732 | + "projectId": 8, |
| 2733 | + "userId": 42, |
| 2734 | + "aiProviderId": 3, |
| 2735 | + "model": "gpt-5.6-sol", |
| 2736 | + "sourceAction": AiRequestLogSourceAction.AI_GATEWAY, |
| 2737 | + "promptAction": "pre_translate", |
| 2738 | + "statuses": "pending,success", |
| 2739 | + "systemCredentials": True, |
| 2740 | + "isAutoTriggered": False, |
| 2741 | + "tokenName": "CI token", |
| 2742 | + "oauthClientId": "gpbccUFxAKZDrLm5Nq8t", |
| 2743 | + "createdAfter": datetime(2026, 1, 1, tzinfo=timezone.utc), |
| 2744 | + "createdBefore": datetime(2026, 1, 2, tzinfo=timezone.utc), |
| 2745 | + "limit": 10, |
| 2746 | + "offset": 20, |
| 2747 | + }, |
| 2748 | + ), |
| 2749 | + ), |
| 2750 | + ) |
| 2751 | + @mock.patch("crowdin_api.requester.APIRequester.request") |
| 2752 | + def test_list_ai_request_logs( |
| 2753 | + self, m_request, incoming_data, request_params, base_absolut_url |
| 2754 | + ): |
| 2755 | + m_request.return_value = "response" |
| 2756 | + |
| 2757 | + resource = self.get_resource(base_absolut_url) |
| 2758 | + assert resource.list_ai_request_logs(**incoming_data) == "response" |
| 2759 | + |
| 2760 | + m_request.assert_called_once_with( |
| 2761 | + method="get", |
| 2762 | + path=resource.get_ai_request_logs_path(), |
| 2763 | + params=request_params, |
| 2764 | + ) |
| 2765 | + |
2597 | 2766 | @mock.patch("crowdin_api.requester.APIRequester.request") |
2598 | 2767 | def test_get_ai_settings(self, m_request, base_absolut_url): |
2599 | 2768 | m_request.return_value = "response" |
|
0 commit comments