lucius-mcp 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- lucius_mcp-0.1.0.dist-info/METADATA +269 -0
- lucius_mcp-0.1.0.dist-info/RECORD +1433 -0
- lucius_mcp-0.1.0.dist-info/WHEEL +4 -0
- lucius_mcp-0.1.0.dist-info/entry_points.txt +2 -0
- lucius_mcp-0.1.0.dist-info/licenses/LICENSE +201 -0
- src/__init__.py +0 -0
- src/client/__init__.py +59 -0
- src/client/client.py +1203 -0
- src/client/exceptions.py +61 -0
- src/client/generated/README.md +878 -0
- src/client/generated/__init__.py +1438 -0
- src/client/generated/api/__init__.py +17 -0
- src/client/generated/api/launch_controller_api.py +8330 -0
- src/client/generated/api/launch_search_controller_api.py +644 -0
- src/client/generated/api/shared_step_attachment_controller_api.py +1734 -0
- src/client/generated/api/shared_step_controller_api.py +1949 -0
- src/client/generated/api/shared_step_scenario_controller_api.py +2597 -0
- src/client/generated/api/test_case_attachment_controller_api.py +1734 -0
- src/client/generated/api/test_case_bulk_controller_api.py +5341 -0
- src/client/generated/api/test_case_controller_api.py +3926 -0
- src/client/generated/api/test_case_custom_field_controller_api.py +863 -0
- src/client/generated/api/test_case_overview_controller_api.py +294 -0
- src/client/generated/api/test_case_scenario_controller_api.py +3054 -0
- src/client/generated/api/test_case_search_controller_api.py +678 -0
- src/client/generated/api/test_case_tag_controller_api.py +581 -0
- src/client/generated/api_client.py +807 -0
- src/client/generated/api_response.py +21 -0
- src/client/generated/configuration.py +573 -0
- src/client/generated/docs/AccessGroupBulkDto.md +29 -0
- src/client/generated/docs/AccessGroupCreateDto.md +31 -0
- src/client/generated/docs/AccessGroupDto.md +33 -0
- src/client/generated/docs/AccessGroupPaDto.md +33 -0
- src/client/generated/docs/AccessGroupPatchDto.md +31 -0
- src/client/generated/docs/AccessGroupProjectAccessDto.md +30 -0
- src/client/generated/docs/AccessGroupProjectsAddDto.md +29 -0
- src/client/generated/docs/AccessGroupUserDto.md +29 -0
- src/client/generated/docs/AccessGroupUsersAddDto.md +29 -0
- src/client/generated/docs/AllowedRoleDto.md +12 -0
- src/client/generated/docs/AnalyticAutomationTrendDto.md +33 -0
- src/client/generated/docs/AnalyticDto.md +38 -0
- src/client/generated/docs/AnalyticInterval.md +16 -0
- src/client/generated/docs/AnalyticLaunchDurationHistogramDto.md +34 -0
- src/client/generated/docs/AnalyticMuteTrendDto.md +30 -0
- src/client/generated/docs/AnalyticTcAutomationCountDto.md +30 -0
- src/client/generated/docs/AnalyticTcStatusCountDto.md +32 -0
- src/client/generated/docs/AnalyticTrByStatusTrendDto.md +33 -0
- src/client/generated/docs/AqlValidateResponseDto.md +30 -0
- src/client/generated/docs/AssignRequestDto.md +29 -0
- src/client/generated/docs/AsyncJobDto.md +33 -0
- src/client/generated/docs/AsyncJobStatusDto.md +18 -0
- src/client/generated/docs/AsyncJobStepDto.md +35 -0
- src/client/generated/docs/AsyncJobStepStatusDto.md +16 -0
- src/client/generated/docs/AsyncJobWithStepsDto.md +34 -0
- src/client/generated/docs/AttachmentRow.md +33 -0
- src/client/generated/docs/AttachmentStepDto.md +29 -0
- src/client/generated/docs/Attrs.md +29 -0
- src/client/generated/docs/AuditActionTypeDto.md +14 -0
- src/client/generated/docs/BlobStorageStats.md +31 -0
- src/client/generated/docs/BlobStorageUpdateStats.md +33 -0
- src/client/generated/docs/BodyStepDto.md +30 -0
- src/client/generated/docs/BoldMark.md +28 -0
- src/client/generated/docs/BusinessMetricDto.md +30 -0
- src/client/generated/docs/CategoryCreateDto.md +32 -0
- src/client/generated/docs/CategoryDto.md +37 -0
- src/client/generated/docs/CategoryMatcherCreateDto.md +33 -0
- src/client/generated/docs/CategoryMatcherDto.md +38 -0
- src/client/generated/docs/CategoryMatcherPatchDto.md +32 -0
- src/client/generated/docs/CategoryPatchDto.md +31 -0
- src/client/generated/docs/CfvMergeToExistingGlobalValueDto.md +30 -0
- src/client/generated/docs/CfvMergeToNewGlobalValueDto.md +32 -0
- src/client/generated/docs/Ci.md +30 -0
- src/client/generated/docs/CleanerSchemaCreateDto.md +32 -0
- src/client/generated/docs/CleanerSchemaDto.md +37 -0
- src/client/generated/docs/CleanerSchemaPatchDto.md +31 -0
- src/client/generated/docs/CleanerSchemaTargetDto.md +14 -0
- src/client/generated/docs/CodeBlockDocumentNode.md +30 -0
- src/client/generated/docs/CodeMark.md +28 -0
- src/client/generated/docs/CommentCreateDto.md +30 -0
- src/client/generated/docs/CommentDto.md +38 -0
- src/client/generated/docs/CommentPatchDto.md +29 -0
- src/client/generated/docs/CreateLaunchEvent.md +32 -0
- src/client/generated/docs/CsvImportOptions.md +33 -0
- src/client/generated/docs/CustomFieldBulkAddToProjectsDto.md +30 -0
- src/client/generated/docs/CustomFieldBulkArchiveDto.md +30 -0
- src/client/generated/docs/CustomFieldCreateDto.md +31 -0
- src/client/generated/docs/CustomFieldDto.md +39 -0
- src/client/generated/docs/CustomFieldExportFieldMapping.md +32 -0
- src/client/generated/docs/CustomFieldImportFieldMapping.md +31 -0
- src/client/generated/docs/CustomFieldMergeDto.md +30 -0
- src/client/generated/docs/CustomFieldPatchDto.md +32 -0
- src/client/generated/docs/CustomFieldProjectCountDto.md +30 -0
- src/client/generated/docs/CustomFieldProjectDto.md +40 -0
- src/client/generated/docs/CustomFieldProjectPatchDto.md +31 -0
- src/client/generated/docs/CustomFieldProjectWithValuesDto.md +30 -0
- src/client/generated/docs/CustomFieldRawDto.md +35 -0
- src/client/generated/docs/CustomFieldSchemaCountDto.md +30 -0
- src/client/generated/docs/CustomFieldSchemaCreateDto.md +31 -0
- src/client/generated/docs/CustomFieldSchemaDto.md +36 -0
- src/client/generated/docs/CustomFieldSchemaPatchDto.md +30 -0
- src/client/generated/docs/CustomFieldValueBulkDeleteDto.md +30 -0
- src/client/generated/docs/CustomFieldValueBulkMergeDto.md +33 -0
- src/client/generated/docs/CustomFieldValueDto.md +30 -0
- src/client/generated/docs/CustomFieldValuePatchDto.md +31 -0
- src/client/generated/docs/CustomFieldValueProjectCreateDto.md +32 -0
- src/client/generated/docs/CustomFieldValueProjectMergeByIdDto.md +29 -0
- src/client/generated/docs/CustomFieldValueProjectMergeByNameDto.md +32 -0
- src/client/generated/docs/CustomFieldValueProjectPatchDto.md +31 -0
- src/client/generated/docs/CustomFieldValueProjectRenameDto.md +30 -0
- src/client/generated/docs/CustomFieldValueWithCfDto.md +32 -0
- src/client/generated/docs/CustomFieldValueWithTcCountDto.md +33 -0
- src/client/generated/docs/CustomFieldWithValuesDto.md +30 -0
- src/client/generated/docs/DashboardCopyDto.md +31 -0
- src/client/generated/docs/DashboardCreateDto.md +31 -0
- src/client/generated/docs/DashboardDragAndDropDto.md +30 -0
- src/client/generated/docs/DashboardDto.md +34 -0
- src/client/generated/docs/DashboardOverviewDto.md +35 -0
- src/client/generated/docs/DashboardPatchDto.md +29 -0
- src/client/generated/docs/DashboardUpdateDto.md +30 -0
- src/client/generated/docs/DefaultCustomFieldValueDto.md +31 -0
- src/client/generated/docs/DefaultTextMarkupDocument.md +29 -0
- src/client/generated/docs/DefaultTextMarkupDocumentAllOfContent.md +31 -0
- src/client/generated/docs/DefaultWebhookSettings.md +30 -0
- src/client/generated/docs/DefaultWebhookSettingsAllOfSubjects.md +31 -0
- src/client/generated/docs/DefectBulkDto.md +30 -0
- src/client/generated/docs/DefectCountRowDto.md +33 -0
- src/client/generated/docs/DefectCreateDto.md +34 -0
- src/client/generated/docs/DefectDto.md +37 -0
- src/client/generated/docs/DefectIssueLinkDto.md +30 -0
- src/client/generated/docs/DefectMatcherCreateDto.md +32 -0
- src/client/generated/docs/DefectMatcherDto.md +37 -0
- src/client/generated/docs/DefectMatcherPatchDto.md +31 -0
- src/client/generated/docs/DefectOverviewDto.md +40 -0
- src/client/generated/docs/DefectPatchDto.md +31 -0
- src/client/generated/docs/DefectRowDto.md +32 -0
- src/client/generated/docs/DefectWebhook.md +29 -0
- src/client/generated/docs/DiffValueChangeBoolean.md +30 -0
- src/client/generated/docs/DiffValueChangeLong.md +30 -0
- src/client/generated/docs/DiffValueChangeSetLong.md +30 -0
- src/client/generated/docs/DiffValueChangeString.md +30 -0
- src/client/generated/docs/DocumentNode.md +29 -0
- src/client/generated/docs/EnvVarCreateDto.md +29 -0
- src/client/generated/docs/EnvVarDto.md +34 -0
- src/client/generated/docs/EnvVarMergeDto.md +30 -0
- src/client/generated/docs/EnvVarPatchDto.md +29 -0
- src/client/generated/docs/EnvVarSchemaCreateDto.md +31 -0
- src/client/generated/docs/EnvVarSchemaDto.md +36 -0
- src/client/generated/docs/EnvVarSchemaPatchDto.md +30 -0
- src/client/generated/docs/EnvVarValueCreateDto.md +30 -0
- src/client/generated/docs/EnvVarValueDto.md +31 -0
- src/client/generated/docs/EnvVarValuePatchDto.md +29 -0
- src/client/generated/docs/EnvironmentSetDto.md +29 -0
- src/client/generated/docs/EventType.md +16 -0
- src/client/generated/docs/EventTypeSettings.md +30 -0
- src/client/generated/docs/ExampleExportFieldMapping.md +33 -0
- src/client/generated/docs/ExpectedBodyStepDto.md +30 -0
- src/client/generated/docs/ExportFieldMappingTestCaseExportField.md +30 -0
- src/client/generated/docs/ExportFieldMappingTestResultExportField.md +30 -0
- src/client/generated/docs/ExportRequestDto.md +41 -0
- src/client/generated/docs/ExportStatus.md +14 -0
- src/client/generated/docs/ExportType.md +16 -0
- src/client/generated/docs/ExtFormField.md +33 -0
- src/client/generated/docs/ExtFormFieldCheckbox.md +30 -0
- src/client/generated/docs/ExtFormFieldComposite.md +30 -0
- src/client/generated/docs/ExtFormFieldExternalSelect.md +29 -0
- src/client/generated/docs/ExtFormFieldFormChoice.md +32 -0
- src/client/generated/docs/ExtFormFieldFormChoiceOption.md +30 -0
- src/client/generated/docs/ExtFormFieldList.md +30 -0
- src/client/generated/docs/ExtFormFieldNumber.md +31 -0
- src/client/generated/docs/ExtFormFieldOption.md +30 -0
- src/client/generated/docs/ExtFormFieldPassword.md +30 -0
- src/client/generated/docs/ExtFormFieldSelect.md +33 -0
- src/client/generated/docs/ExtFormFieldSlider.md +34 -0
- src/client/generated/docs/ExtFormFieldText.md +32 -0
- src/client/generated/docs/ExtFormFieldTextarea.md +31 -0
- src/client/generated/docs/ExtFormFieldUnknown.md +30 -0
- src/client/generated/docs/ExtIssueLink.md +33 -0
- src/client/generated/docs/ExtIssueType.md +30 -0
- src/client/generated/docs/ExtProject.md +31 -0
- src/client/generated/docs/ExtSelectValue.md +30 -0
- src/client/generated/docs/ExternalLinkDto.md +31 -0
- src/client/generated/docs/ExternalRunResponseDto.md +32 -0
- src/client/generated/docs/ExternalRunStartRequestDto.md +33 -0
- src/client/generated/docs/ExternalRunStopRequestDto.md +32 -0
- src/client/generated/docs/FileUploadResponseDto.md +29 -0
- src/client/generated/docs/FilterBaseSetDto.md +29 -0
- src/client/generated/docs/FilterCreateDto.md +34 -0
- src/client/generated/docs/FilterDto.md +40 -0
- src/client/generated/docs/FilterPatchDto.md +31 -0
- src/client/generated/docs/FilterTypeDto.md +14 -0
- src/client/generated/docs/FindAll29200Response.md +39 -0
- src/client/generated/docs/GlobalPermissionsDto.md +29 -0
- src/client/generated/docs/GlobalSettingsDto.md +29 -0
- src/client/generated/docs/GlobalSettingsProjectCreatePatchDto.md +29 -0
- src/client/generated/docs/GridPosDto.md +32 -0
- src/client/generated/docs/GroupBy.md +14 -0
- src/client/generated/docs/GroupNodeContext.md +30 -0
- src/client/generated/docs/IdAndNameOnlyDto.md +30 -0
- src/client/generated/docs/IdOnlyDto.md +29 -0
- src/client/generated/docs/ImportRequestDto.md +41 -0
- src/client/generated/docs/ImportRequestInfoDto.md +31 -0
- src/client/generated/docs/ImportRequestStateDto.md +16 -0
- src/client/generated/docs/ImportRequestTypeDto.md +10 -0
- src/client/generated/docs/IntegrationCreateDto.md +34 -0
- src/client/generated/docs/IntegrationDto.md +34 -0
- src/client/generated/docs/IntegrationExportCreateDto.md +39 -0
- src/client/generated/docs/IntegrationExportDto.md +42 -0
- src/client/generated/docs/IntegrationExportPatchDto.md +37 -0
- src/client/generated/docs/IntegrationFieldsFormDto.md +34 -0
- src/client/generated/docs/IntegrationFieldsFormDtoDefaultProjectFieldsInner.md +43 -0
- src/client/generated/docs/IntegrationInfoDto.md +33 -0
- src/client/generated/docs/IntegrationLinksFixedDto.md +29 -0
- src/client/generated/docs/IntegrationOperationTypeDto.md +30 -0
- src/client/generated/docs/IntegrationPatchDto.md +34 -0
- src/client/generated/docs/IntegrationRoutineTypeDto.md +16 -0
- src/client/generated/docs/IntegrationTypeDto.md +76 -0
- src/client/generated/docs/IntegrationValidateDto.md +32 -0
- src/client/generated/docs/IntegrationWebhookCreateDto.md +29 -0
- src/client/generated/docs/IntegrationWebhookDto.md +36 -0
- src/client/generated/docs/IntegrationWebhookLogDto.md +32 -0
- src/client/generated/docs/IntegrationWebhookPatchDto.md +29 -0
- src/client/generated/docs/IntegrationWebhookTokenDto.md +36 -0
- src/client/generated/docs/IssueCreateDto.md +30 -0
- src/client/generated/docs/IssueDto.md +37 -0
- src/client/generated/docs/IssueImportFieldMapping.md +31 -0
- src/client/generated/docs/IssueIntegrationExportFieldMapping.md +32 -0
- src/client/generated/docs/IssuePatchDto.md +29 -0
- src/client/generated/docs/IssueSchemaCreateDto.md +31 -0
- src/client/generated/docs/IssueSchemaDto.md +36 -0
- src/client/generated/docs/IssueSchemaPatchDto.md +30 -0
- src/client/generated/docs/IssueToCreateDto.md +32 -0
- src/client/generated/docs/ItalicMark.md +28 -0
- src/client/generated/docs/Job.md +33 -0
- src/client/generated/docs/JobCreateDto.md +32 -0
- src/client/generated/docs/JobDto.md +33 -0
- src/client/generated/docs/JobInfoDto.md +32 -0
- src/client/generated/docs/JobMapping.md +30 -0
- src/client/generated/docs/JobParameterDto.md +30 -0
- src/client/generated/docs/JobPatchDto.md +32 -0
- src/client/generated/docs/JobRerunRequestDto.md +29 -0
- src/client/generated/docs/JobRun.md +33 -0
- src/client/generated/docs/JobRunDto.md +41 -0
- src/client/generated/docs/JobRunRequestDto.md +35 -0
- src/client/generated/docs/JobRunStageDto.md +16 -0
- src/client/generated/docs/JobRunStatusDto.md +16 -0
- src/client/generated/docs/JobRunUploadInfoDto.md +29 -0
- src/client/generated/docs/JobTestCasesStatDto.md +30 -0
- src/client/generated/docs/Launch.md +32 -0
- src/client/generated/docs/LaunchCleanupRequest.md +31 -0
- src/client/generated/docs/LaunchCloseConfigDto.md +32 -0
- src/client/generated/docs/LaunchControllerApi.md +2025 -0
- src/client/generated/docs/LaunchCopyRqDto.md +34 -0
- src/client/generated/docs/LaunchCreateAndUploadDto.md +34 -0
- src/client/generated/docs/LaunchCreateDto.md +35 -0
- src/client/generated/docs/LaunchDiffCell.md +32 -0
- src/client/generated/docs/LaunchDiffMode.md +14 -0
- src/client/generated/docs/LaunchDiffRow.md +31 -0
- src/client/generated/docs/LaunchDiffStatusChangeDto.md +39 -0
- src/client/generated/docs/LaunchDiffTestResult.md +33 -0
- src/client/generated/docs/LaunchDiffTestResultDto.md +34 -0
- src/client/generated/docs/LaunchDto.md +39 -0
- src/client/generated/docs/LaunchExistingUploadDto.md +29 -0
- src/client/generated/docs/LaunchLiveDocConfigDto.md +30 -0
- src/client/generated/docs/LaunchMemberStatsDto.md +36 -0
- src/client/generated/docs/LaunchMergeDto.md +30 -0
- src/client/generated/docs/LaunchPatchDto.md +34 -0
- src/client/generated/docs/LaunchPdfOptions.md +38 -0
- src/client/generated/docs/LaunchPdfPart.md +24 -0
- src/client/generated/docs/LaunchPdfStructure.md +29 -0
- src/client/generated/docs/LaunchPreviewDto.md +45 -0
- src/client/generated/docs/LaunchProgressDto.md +29 -0
- src/client/generated/docs/LaunchRowDto.md +32 -0
- src/client/generated/docs/LaunchSearchControllerApi.md +152 -0
- src/client/generated/docs/LaunchTagCreateDto.md +29 -0
- src/client/generated/docs/LaunchTagDto.md +30 -0
- src/client/generated/docs/LaunchTagPatchDto.md +29 -0
- src/client/generated/docs/LaunchTestCasesAddDto.md +33 -0
- src/client/generated/docs/LaunchTestPlanAddDto.md +30 -0
- src/client/generated/docs/LaunchUploadResponseDto.md +31 -0
- src/client/generated/docs/LaunchVariableDto.md +30 -0
- src/client/generated/docs/LaunchWebhook.md +30 -0
- src/client/generated/docs/LineBreakParagraphNode.md +28 -0
- src/client/generated/docs/LinkExportFieldMapping.md +31 -0
- src/client/generated/docs/LinkImportFieldMapping.md +32 -0
- src/client/generated/docs/LinkMark.md +29 -0
- src/client/generated/docs/ListSelectionDto.md +30 -0
- src/client/generated/docs/ManualSessionRequestDto.md +30 -0
- src/client/generated/docs/Matcher.md +31 -0
- src/client/generated/docs/MemberCreateDto.md +30 -0
- src/client/generated/docs/MemberDto.md +31 -0
- src/client/generated/docs/MemberPatchDto.md +29 -0
- src/client/generated/docs/Metric.md +12 -0
- src/client/generated/docs/MfaGlobalSettingsDto.md +29 -0
- src/client/generated/docs/MfaGlobalSettingsPatchDto.md +29 -0
- src/client/generated/docs/MultiValueExportFieldMapping.md +31 -0
- src/client/generated/docs/MultiValueImportFieldMapping.md +30 -0
- src/client/generated/docs/MultiValueMapStringString.md +30 -0
- src/client/generated/docs/MuteCreateDto.md +32 -0
- src/client/generated/docs/MuteDto.md +38 -0
- src/client/generated/docs/NameOnlyDto.md +29 -0
- src/client/generated/docs/NodeType.md +12 -0
- src/client/generated/docs/NormalizedScenarioDto.md +34 -0
- src/client/generated/docs/NormalizedScenarioDtoAttachmentsValue.md +39 -0
- src/client/generated/docs/NormalizedScenarioStepDto.md +42 -0
- src/client/generated/docs/OrderedValueDtoString.md +30 -0
- src/client/generated/docs/PageAccessGroupDto.md +39 -0
- src/client/generated/docs/PageAccessGroupDtoSort.md +31 -0
- src/client/generated/docs/PageAccessGroupPaDto.md +39 -0
- src/client/generated/docs/PageAccessGroupUserDto.md +39 -0
- src/client/generated/docs/PageAsyncJobDto.md +39 -0
- src/client/generated/docs/PageCategoryDto.md +39 -0
- src/client/generated/docs/PageCategoryMatcherDto.md +39 -0
- src/client/generated/docs/PageCleanerSchemaDto.md +39 -0
- src/client/generated/docs/PageCommentDto.md +39 -0
- src/client/generated/docs/PageCustomFieldProjectDto.md +39 -0
- src/client/generated/docs/PageCustomFieldSchemaDto.md +39 -0
- src/client/generated/docs/PageCustomFieldValueWithTcCountDto.md +39 -0
- src/client/generated/docs/PageDashboardDto.md +39 -0
- src/client/generated/docs/PageDefectCountRowDto.md +39 -0
- src/client/generated/docs/PageDefectDto.md +39 -0
- src/client/generated/docs/PageDefectMatcherDto.md +39 -0
- src/client/generated/docs/PageDefectRowDto.md +39 -0
- src/client/generated/docs/PageEnvVarSchemaDto.md +39 -0
- src/client/generated/docs/PageExportRequestDto.md +39 -0
- src/client/generated/docs/PageFilterDto.md +39 -0
- src/client/generated/docs/PageIdAndNameOnlyDto.md +39 -0
- src/client/generated/docs/PageImportRequestDto.md +39 -0
- src/client/generated/docs/PageIntegrationDto.md +39 -0
- src/client/generated/docs/PageIntegrationExportDto.md +39 -0
- src/client/generated/docs/PageIntegrationInfoDto.md +39 -0
- src/client/generated/docs/PageIntegrationWebhookDto.md +39 -0
- src/client/generated/docs/PageIntegrationWebhookLogDto.md +39 -0
- src/client/generated/docs/PageIssueDto.md +39 -0
- src/client/generated/docs/PageIssueSchemaDto.md +39 -0
- src/client/generated/docs/PageJobDto.md +39 -0
- src/client/generated/docs/PageLaunchDiffRow.md +39 -0
- src/client/generated/docs/PageLaunchDto.md +39 -0
- src/client/generated/docs/PageLaunchMemberStatsDto.md +39 -0
- src/client/generated/docs/PageLaunchPreviewDto.md +39 -0
- src/client/generated/docs/PageLaunchRowDto.md +39 -0
- src/client/generated/docs/PageLaunchTagDto.md +39 -0
- src/client/generated/docs/PageLaunchVariableDto.md +39 -0
- src/client/generated/docs/PageMemberDto.md +39 -0
- src/client/generated/docs/PageMuteDto.md +39 -0
- src/client/generated/docs/PagePermissionSetDto.md +39 -0
- src/client/generated/docs/PageProjectCollaboratorAccessDto.md +39 -0
- src/client/generated/docs/PageProjectCollaboratorDto.md +39 -0
- src/client/generated/docs/PageProjectCustomFieldDto.md +39 -0
- src/client/generated/docs/PageProjectDto.md +39 -0
- src/client/generated/docs/PageProjectGroupAccessDto.md +39 -0
- src/client/generated/docs/PageProjectIntegrationDto.md +39 -0
- src/client/generated/docs/PageProjectSuggestDto.md +39 -0
- src/client/generated/docs/PageRoleSchemaDto.md +39 -0
- src/client/generated/docs/PageSharedStepAttachmentRowDto.md +39 -0
- src/client/generated/docs/PageSharedStepDto.md +39 -0
- src/client/generated/docs/PageStatisticWidgetItem.md +39 -0
- src/client/generated/docs/PageStatusDto.md +39 -0
- src/client/generated/docs/PageTemplateDto.md +39 -0
- src/client/generated/docs/PageTestCaseAttachmentRowDto.md +39 -0
- src/client/generated/docs/PageTestCaseAuditLogEntryDto.md +39 -0
- src/client/generated/docs/PageTestCaseDto.md +39 -0
- src/client/generated/docs/PageTestCaseExampleDto.md +39 -0
- src/client/generated/docs/PageTestCaseFlatDto.md +39 -0
- src/client/generated/docs/PageTestCaseRowDto.md +39 -0
- src/client/generated/docs/PageTestCaseTreeGroupDto.md +39 -0
- src/client/generated/docs/PageTestCaseTreeLeafDto.md +39 -0
- src/client/generated/docs/PageTestCaseTreeNodeDto.md +39 -0
- src/client/generated/docs/PageTestCaseTreeNodeDtoContentInner.md +43 -0
- src/client/generated/docs/PageTestFixtureResultAttachmentRowDto.md +39 -0
- src/client/generated/docs/PageTestKeySchemaDto.md +39 -0
- src/client/generated/docs/PageTestLayerDto.md +39 -0
- src/client/generated/docs/PageTestLayerSchemaDto.md +39 -0
- src/client/generated/docs/PageTestPlanDto.md +39 -0
- src/client/generated/docs/PageTestPlanRowDto.md +39 -0
- src/client/generated/docs/PageTestResultAttachmentRowDto.md +39 -0
- src/client/generated/docs/PageTestResultDefectMatchDto.md +39 -0
- src/client/generated/docs/PageTestResultDto.md +39 -0
- src/client/generated/docs/PageTestResultFlatDto.md +39 -0
- src/client/generated/docs/PageTestResultHistoryDto.md +39 -0
- src/client/generated/docs/PageTestResultRetriesRowDto.md +39 -0
- src/client/generated/docs/PageTestResultRowDto.md +39 -0
- src/client/generated/docs/PageTestResultTreeGroupDto.md +39 -0
- src/client/generated/docs/PageTestResultTreeLeafDto.md +39 -0
- src/client/generated/docs/PageTestResultTreeNodeDto.md +39 -0
- src/client/generated/docs/PageTestResultTreeNodeDtoContentInner.md +46 -0
- src/client/generated/docs/PageTreeDto.md +39 -0
- src/client/generated/docs/PageTreeDtoV2.md +39 -0
- src/client/generated/docs/PageTreePathDto.md +39 -0
- src/client/generated/docs/PageWebhookDto.md +39 -0
- src/client/generated/docs/PageWidgetDto.md +39 -0
- src/client/generated/docs/PageWorkflowDto.md +39 -0
- src/client/generated/docs/PageWorkflowSchemaDto.md +39 -0
- src/client/generated/docs/Pageable.md +34 -0
- src/client/generated/docs/ParagraphDocumentNode.md +30 -0
- src/client/generated/docs/ParagraphDocumentNodeAllOfContent.md +30 -0
- src/client/generated/docs/ParagraphNode.md +29 -0
- src/client/generated/docs/Parameter.md +30 -0
- src/client/generated/docs/ParameterValueDto.md +30 -0
- src/client/generated/docs/PermissionDto.md +16 -0
- src/client/generated/docs/PermissionSetCreateDto.md +30 -0
- src/client/generated/docs/PermissionSetDto.md +31 -0
- src/client/generated/docs/PermissionSetPatchDto.md +30 -0
- src/client/generated/docs/ProjectAccessCollaboratorAddDto.md +29 -0
- src/client/generated/docs/ProjectAccessGroupAddDto.md +29 -0
- src/client/generated/docs/ProjectCategoryAddDto.md +29 -0
- src/client/generated/docs/ProjectCategoryMatcherAddDto.md +29 -0
- src/client/generated/docs/ProjectCategoryMatcherRemoveDto.md +29 -0
- src/client/generated/docs/ProjectCategoryRemoveDto.md +29 -0
- src/client/generated/docs/ProjectCollaboratorAccessDto.md +35 -0
- src/client/generated/docs/ProjectCollaboratorDto.md +31 -0
- src/client/generated/docs/ProjectCreateDto.md +33 -0
- src/client/generated/docs/ProjectCustomFieldDto.md +39 -0
- src/client/generated/docs/ProjectDto.md +39 -0
- src/client/generated/docs/ProjectGroupAccessAddDto.md +30 -0
- src/client/generated/docs/ProjectGroupAccessDto.md +31 -0
- src/client/generated/docs/ProjectIntegrationCreateDto.md +32 -0
- src/client/generated/docs/ProjectIntegrationDto.md +36 -0
- src/client/generated/docs/ProjectIntegrationFieldsFormDto.md +34 -0
- src/client/generated/docs/ProjectIntegrationPatchDto.md +31 -0
- src/client/generated/docs/ProjectIntegrationValidateDto.md +31 -0
- src/client/generated/docs/ProjectMetricDto.md +33 -0
- src/client/generated/docs/ProjectPatchDto.md +33 -0
- src/client/generated/docs/ProjectPropertyCreateDto.md +31 -0
- src/client/generated/docs/ProjectPropertyDto.md +32 -0
- src/client/generated/docs/ProjectPropertyPatchDto.md +30 -0
- src/client/generated/docs/ProjectStatsDto.md +32 -0
- src/client/generated/docs/ProjectSuggestDto.md +32 -0
- src/client/generated/docs/ProjectSyncRequest.md +35 -0
- src/client/generated/docs/ProjectTestCaseCountDto.md +30 -0
- src/client/generated/docs/ResolveRequestV2Dto.md +36 -0
- src/client/generated/docs/Retry.md +31 -0
- src/client/generated/docs/RoleCreateDto.md +29 -0
- src/client/generated/docs/RoleDto.md +34 -0
- src/client/generated/docs/RoleExportFieldMapping.md +32 -0
- src/client/generated/docs/RoleImportFieldMapping.md +31 -0
- src/client/generated/docs/RolePatchDto.md +29 -0
- src/client/generated/docs/RoleSchemaCreateDto.md +31 -0
- src/client/generated/docs/RoleSchemaDto.md +36 -0
- src/client/generated/docs/RoleSchemaPatchDto.md +30 -0
- src/client/generated/docs/ScenarioExportFieldMapping.md +32 -0
- src/client/generated/docs/ScenarioStepCopyDto.md +31 -0
- src/client/generated/docs/ScenarioStepCreateDto.md +34 -0
- src/client/generated/docs/ScenarioStepCreatedResponseDto.md +30 -0
- src/client/generated/docs/ScenarioStepDto.md +29 -0
- src/client/generated/docs/ScenarioStepMoveDto.md +31 -0
- src/client/generated/docs/ScenarioStepPatchDto.md +33 -0
- src/client/generated/docs/SessionVariable.md +30 -0
- src/client/generated/docs/SharedStepAttachmentControllerApi.md +421 -0
- src/client/generated/docs/SharedStepAttachmentPatchDto.md +30 -0
- src/client/generated/docs/SharedStepAttachmentRowDto.md +33 -0
- src/client/generated/docs/SharedStepControllerApi.md +482 -0
- src/client/generated/docs/SharedStepCreateDto.md +30 -0
- src/client/generated/docs/SharedStepDto.md +39 -0
- src/client/generated/docs/SharedStepPatchDto.md +29 -0
- src/client/generated/docs/SharedStepScenarioControllerApi.md +635 -0
- src/client/generated/docs/SharedStepScenarioDto.md +29 -0
- src/client/generated/docs/SharedStepScenarioDtoStepsInner.md +33 -0
- src/client/generated/docs/SharedStepStepDto.md +29 -0
- src/client/generated/docs/StatisticDto.md +35 -0
- src/client/generated/docs/StatisticWidgetItem.md +31 -0
- src/client/generated/docs/Status.md +16 -0
- src/client/generated/docs/StatusCreateDto.md +30 -0
- src/client/generated/docs/StatusDto.md +35 -0
- src/client/generated/docs/StatusPatchDto.md +30 -0
- src/client/generated/docs/StrikeMark.md +28 -0
- src/client/generated/docs/TagImportFieldMapping.md +31 -0
- src/client/generated/docs/TemplateDto.md +32 -0
- src/client/generated/docs/TemplateOverviewDto.md +33 -0
- src/client/generated/docs/TestCaseAssociationDiff.md +29 -0
- src/client/generated/docs/TestCaseAttachmentControllerApi.md +421 -0
- src/client/generated/docs/TestCaseAttachmentPatchDto.md +30 -0
- src/client/generated/docs/TestCaseAttachmentRowDto.md +32 -0
- src/client/generated/docs/TestCaseAuditLogData.md +30 -0
- src/client/generated/docs/TestCaseAuditLogDataDiff.md +43 -0
- src/client/generated/docs/TestCaseAuditLogEntryDto.md +33 -0
- src/client/generated/docs/TestCaseBulkCfMoveStrategy.md +16 -0
- src/client/generated/docs/TestCaseBulkChangeProjectDtoV2.md +32 -0
- src/client/generated/docs/TestCaseBulkCloneDto.md +45 -0
- src/client/generated/docs/TestCaseBulkCloneDtoV2.md +45 -0
- src/client/generated/docs/TestCaseBulkControllerApi.md +1320 -0
- src/client/generated/docs/TestCaseBulkDragAndDropDto.md +30 -0
- src/client/generated/docs/TestCaseBulkDragAndDropDtoV2.md +30 -0
- src/client/generated/docs/TestCaseBulkDto.md +29 -0
- src/client/generated/docs/TestCaseBulkDtoV2.md +29 -0
- src/client/generated/docs/TestCaseBulkEntityIdsDto.md +30 -0
- src/client/generated/docs/TestCaseBulkEntityIdsDtoV2.md +30 -0
- src/client/generated/docs/TestCaseBulkExportCsvOptions.md +33 -0
- src/client/generated/docs/TestCaseBulkExportCsvOptionsMappingInner.md +39 -0
- src/client/generated/docs/TestCaseBulkExportPdfOptions.md +35 -0
- src/client/generated/docs/TestCaseBulkExternalLinkDto.md +30 -0
- src/client/generated/docs/TestCaseBulkIssueDto.md +30 -0
- src/client/generated/docs/TestCaseBulkLayerDto.md +30 -0
- src/client/generated/docs/TestCaseBulkMemberDto.md +30 -0
- src/client/generated/docs/TestCaseBulkMuteDto.md +30 -0
- src/client/generated/docs/TestCaseBulkNewCfvDto.md +30 -0
- src/client/generated/docs/TestCaseBulkProjectChangeDto.md +32 -0
- src/client/generated/docs/TestCaseBulkRunExistingLaunchDto.md +34 -0
- src/client/generated/docs/TestCaseBulkRunNewLaunchDto.md +37 -0
- src/client/generated/docs/TestCaseBulkStatusDto.md +31 -0
- src/client/generated/docs/TestCaseBulkTagDto.md +30 -0
- src/client/generated/docs/TestCaseBulkTestPlanCreateDto.md +31 -0
- src/client/generated/docs/TestCaseCfBulkDeltaDtoV2.md +30 -0
- src/client/generated/docs/TestCaseCfvBulkAddDto.md +30 -0
- src/client/generated/docs/TestCaseCloneRqDto.md +44 -0
- src/client/generated/docs/TestCaseControllerApi.md +934 -0
- src/client/generated/docs/TestCaseCountDto.md +29 -0
- src/client/generated/docs/TestCaseCreateV2Dto.md +45 -0
- src/client/generated/docs/TestCaseCsvExportOptions.md +33 -0
- src/client/generated/docs/TestCaseCsvImportOptions.md +37 -0
- src/client/generated/docs/TestCaseCsvImportOptionsMappingInner.md +37 -0
- src/client/generated/docs/TestCaseCsvPreviewOptions.md +38 -0
- src/client/generated/docs/TestCaseCustomFieldControllerApi.md +212 -0
- src/client/generated/docs/TestCaseDetachAutomationRqDto.md +31 -0
- src/client/generated/docs/TestCaseDiff.md +42 -0
- src/client/generated/docs/TestCaseDto.md +52 -0
- src/client/generated/docs/TestCaseExampleDto.md +31 -0
- src/client/generated/docs/TestCaseExportField.md +40 -0
- src/client/generated/docs/TestCaseExternalLinkBulkAddDto.md +30 -0
- src/client/generated/docs/TestCaseFlatDto.md +37 -0
- src/client/generated/docs/TestCaseFullTreeNodeDto.md +33 -0
- src/client/generated/docs/TestCaseImportDto.md +50 -0
- src/client/generated/docs/TestCaseImportField.md +38 -0
- src/client/generated/docs/TestCaseImportMapping.md +29 -0
- src/client/generated/docs/TestCaseInfo.md +30 -0
- src/client/generated/docs/TestCaseIssueBulkAddDto.md +30 -0
- src/client/generated/docs/TestCaseLastResultDto.md +33 -0
- src/client/generated/docs/TestCaseLayerBulkSetDto.md +30 -0
- src/client/generated/docs/TestCaseLightTreeNodeDto.md +32 -0
- src/client/generated/docs/TestCaseMemberBulkAddDto.md +30 -0
- src/client/generated/docs/TestCaseMuteBulkAddDto.md +30 -0
- src/client/generated/docs/TestCaseOverviewControllerApi.md +75 -0
- src/client/generated/docs/TestCaseOverviewDto.md +61 -0
- src/client/generated/docs/TestCaseParameterDto.md +29 -0
- src/client/generated/docs/TestCaseParameterValues.md +30 -0
- src/client/generated/docs/TestCasePatchV2Dto.md +44 -0
- src/client/generated/docs/TestCasePdfOptions.md +35 -0
- src/client/generated/docs/TestCasePdfPart.md +16 -0
- src/client/generated/docs/TestCaseRelationDto.md +31 -0
- src/client/generated/docs/TestCaseRelationTypeDto.md +22 -0
- src/client/generated/docs/TestCaseRowDto.md +33 -0
- src/client/generated/docs/TestCaseRunBulkExistingLaunchDto.md +34 -0
- src/client/generated/docs/TestCaseRunBulkNewLaunchDto.md +37 -0
- src/client/generated/docs/TestCaseRunByStats.md +32 -0
- src/client/generated/docs/TestCaseRunStatsRequestDto.md +30 -0
- src/client/generated/docs/TestCaseScenarioControllerApi.md +760 -0
- src/client/generated/docs/TestCaseScenarioDto.md +31 -0
- src/client/generated/docs/TestCaseScenarioStepDto.md +36 -0
- src/client/generated/docs/TestCaseScenarioV2Dto.md +29 -0
- src/client/generated/docs/TestCaseSearchControllerApi.md +156 -0
- src/client/generated/docs/TestCaseSelectionDtoV2.md +39 -0
- src/client/generated/docs/TestCaseStatusBulkSetDto.md +31 -0
- src/client/generated/docs/TestCaseStyle.md +12 -0
- src/client/generated/docs/TestCaseSyncFromTo.md +30 -0
- src/client/generated/docs/TestCaseSyncRqDto.md +41 -0
- src/client/generated/docs/TestCaseTagBulkAddDto.md +30 -0
- src/client/generated/docs/TestCaseTagControllerApi.md +144 -0
- src/client/generated/docs/TestCaseTestPlanBulkCreateDto.md +31 -0
- src/client/generated/docs/TestCaseTreeAllPathsDto.md +29 -0
- src/client/generated/docs/TestCaseTreeFilterCountDto.md +30 -0
- src/client/generated/docs/TestCaseTreeGroupAddDto.md +29 -0
- src/client/generated/docs/TestCaseTreeGroupDto.md +32 -0
- src/client/generated/docs/TestCaseTreeGroupRenameDto.md +29 -0
- src/client/generated/docs/TestCaseTreeLeafAddDto.md +29 -0
- src/client/generated/docs/TestCaseTreeLeafDto.md +37 -0
- src/client/generated/docs/TestCaseTreeLeafDtoV2.md +36 -0
- src/client/generated/docs/TestCaseTreeLeafRenameDto.md +29 -0
- src/client/generated/docs/TestCaseTreeNodeDto.md +31 -0
- src/client/generated/docs/TestCaseTreeRunStatRequestDto.md +40 -0
- src/client/generated/docs/TestCaseTreeSelectionDto.md +39 -0
- src/client/generated/docs/TestCaseTreeSelectionDtoV2.md +38 -0
- src/client/generated/docs/TestCaseType.md +12 -0
- src/client/generated/docs/TestCaseUpdateFieldDto.md +30 -0
- src/client/generated/docs/TestCaseUpdatePolicyDto.md +12 -0
- src/client/generated/docs/TestCaseUpdateSchemaCreateDto.md +31 -0
- src/client/generated/docs/TestCaseUpdateSchemaDto.md +32 -0
- src/client/generated/docs/TestCaseUpdateSchemaPatchDto.md +30 -0
- src/client/generated/docs/TestCaseVersionDto.md +34 -0
- src/client/generated/docs/TestCaseVersionPatchDto.md +30 -0
- src/client/generated/docs/TestCaseVersionRqDto.md +30 -0
- src/client/generated/docs/TestDurationCount.md +30 -0
- src/client/generated/docs/TestFixtureResultAttachmentPatchDto.md +30 -0
- src/client/generated/docs/TestFixtureResultAttachmentRowDto.md +29 -0
- src/client/generated/docs/TestFixtureResultTypeDto.md +12 -0
- src/client/generated/docs/TestFixtureResultV2Dto.md +38 -0
- src/client/generated/docs/TestKeyDto.md +32 -0
- src/client/generated/docs/TestKeyImportFieldMapping.md +31 -0
- src/client/generated/docs/TestKeySchemaCreateDto.md +31 -0
- src/client/generated/docs/TestKeySchemaDto.md +37 -0
- src/client/generated/docs/TestKeySchemaPatchDto.md +30 -0
- src/client/generated/docs/TestLayerCreateDto.md +29 -0
- src/client/generated/docs/TestLayerDto.md +34 -0
- src/client/generated/docs/TestLayerPatchDto.md +29 -0
- src/client/generated/docs/TestLayerSchemaCreateDto.md +31 -0
- src/client/generated/docs/TestLayerSchemaDto.md +36 -0
- src/client/generated/docs/TestLayerSchemaPatchDto.md +30 -0
- src/client/generated/docs/TestPlanAssignDto.md +31 -0
- src/client/generated/docs/TestPlanCreateDto.md +33 -0
- src/client/generated/docs/TestPlanDiffDto.md +30 -0
- src/client/generated/docs/TestPlanDto.md +39 -0
- src/client/generated/docs/TestPlanJobParametersDto.md +30 -0
- src/client/generated/docs/TestPlanJobStatDto.md +30 -0
- src/client/generated/docs/TestPlanMemberStatDto.md +32 -0
- src/client/generated/docs/TestPlanPatchDto.md +32 -0
- src/client/generated/docs/TestPlanRowDto.md +31 -0
- src/client/generated/docs/TestPlanRunRequestDto.md +33 -0
- src/client/generated/docs/TestPlanTreeSelectionDto.md +37 -0
- src/client/generated/docs/TestPlanWebhook.md +29 -0
- src/client/generated/docs/TestResultAttachmentPatchDto.md +30 -0
- src/client/generated/docs/TestResultAttachmentRowDto.md +31 -0
- src/client/generated/docs/TestResultAttachmentStepDto.md +34 -0
- src/client/generated/docs/TestResultAttachmentStepDtoAllOfAttachment.md +39 -0
- src/client/generated/docs/TestResultBodyStepDto.md +38 -0
- src/client/generated/docs/TestResultBulkAssignDto.md +30 -0
- src/client/generated/docs/TestResultBulkDto.md +29 -0
- src/client/generated/docs/TestResultBulkEntityIdsDto.md +30 -0
- src/client/generated/docs/TestResultBulkMuteDto.md +32 -0
- src/client/generated/docs/TestResultBulkRerunDto.md +32 -0
- src/client/generated/docs/TestResultBulkResolveDto.md +32 -0
- src/client/generated/docs/TestResultBulkTagDto.md +30 -0
- src/client/generated/docs/TestResultCreateV2Dto.md +49 -0
- src/client/generated/docs/TestResultCsvExportOptions.md +33 -0
- src/client/generated/docs/TestResultCsvExportOptionsMappingInner.md +39 -0
- src/client/generated/docs/TestResultDefectMatchDto.md +33 -0
- src/client/generated/docs/TestResultDefectMatcherDto.md +31 -0
- src/client/generated/docs/TestResultDto.md +69 -0
- src/client/generated/docs/TestResultExpectedBodyStepDto.md +36 -0
- src/client/generated/docs/TestResultExportField.md +52 -0
- src/client/generated/docs/TestResultFlatDto.md +43 -0
- src/client/generated/docs/TestResultGroupNode.md +32 -0
- src/client/generated/docs/TestResultHistoryDto.md +43 -0
- src/client/generated/docs/TestResultLeafNode.md +40 -0
- src/client/generated/docs/TestResultLinkDefectDto.md +29 -0
- src/client/generated/docs/TestResultMuteReason.md +31 -0
- src/client/generated/docs/TestResultNewDefectDto.md +33 -0
- src/client/generated/docs/TestResultParameterDto.md +32 -0
- src/client/generated/docs/TestResultPatchDto.md +39 -0
- src/client/generated/docs/TestResultRerunDto.md +29 -0
- src/client/generated/docs/TestResultRetriesRowDto.md +34 -0
- src/client/generated/docs/TestResultRowDto.md +34 -0
- src/client/generated/docs/TestResultScenarioDto.md +30 -0
- src/client/generated/docs/TestResultScenarioStepDto.md +45 -0
- src/client/generated/docs/TestResultScenarioStepParameter.md +32 -0
- src/client/generated/docs/TestResultScenarioV2Dto.md +29 -0
- src/client/generated/docs/TestResultScenarioV2DtoStepsInner.md +41 -0
- src/client/generated/docs/TestResultStatsDto.md +32 -0
- src/client/generated/docs/TestResultTree.md +35 -0
- src/client/generated/docs/TestResultTreeFilterCountDto.md +29 -0
- src/client/generated/docs/TestResultTreeGroupDto.md +32 -0
- src/client/generated/docs/TestResultTreeGroupDtoV2.md +30 -0
- src/client/generated/docs/TestResultTreeLeafDto.md +41 -0
- src/client/generated/docs/TestResultTreeLeafDtoV2.md +41 -0
- src/client/generated/docs/TestResultTreeNodeDto.md +31 -0
- src/client/generated/docs/TestResultTreeSelectionDto.md +38 -0
- src/client/generated/docs/TestSessionResponseDto.md +33 -0
- src/client/generated/docs/TestStatus.md +18 -0
- src/client/generated/docs/TestStatusCount.md +30 -0
- src/client/generated/docs/TestTagCreateDto.md +29 -0
- src/client/generated/docs/TestTagDto.md +30 -0
- src/client/generated/docs/TestTagPatchDto.md +29 -0
- src/client/generated/docs/TextColorMark.md +29 -0
- src/client/generated/docs/TextFillMark.md +29 -0
- src/client/generated/docs/TextMark.md +29 -0
- src/client/generated/docs/TextMarkupDocument.md +29 -0
- src/client/generated/docs/TextParagraphNode.md +30 -0
- src/client/generated/docs/TextParagraphNodeMarksInner.md +30 -0
- src/client/generated/docs/TrScenarioStepDto.md +29 -0
- src/client/generated/docs/TreeCreateDto.md +31 -0
- src/client/generated/docs/TreeCustomFieldProjectDto.md +33 -0
- src/client/generated/docs/TreeDto.md +36 -0
- src/client/generated/docs/TreeDtoV2.md +32 -0
- src/client/generated/docs/TreePatchDto.md +30 -0
- src/client/generated/docs/TreePathCreateDto.md +30 -0
- src/client/generated/docs/TreePathDto.md +32 -0
- src/client/generated/docs/TreePathItemDto.md +31 -0
- src/client/generated/docs/TreeSelectionDto.md +34 -0
- src/client/generated/docs/UnderlineMark.md +28 -0
- src/client/generated/docs/UploadAttachmentDto.md +33 -0
- src/client/generated/docs/UploadFixturesResultsDto.md +29 -0
- src/client/generated/docs/UploadLabelDto.md +30 -0
- src/client/generated/docs/UploadLinkDto.md +31 -0
- src/client/generated/docs/UploadParameterDto.md +33 -0
- src/client/generated/docs/UploadResultsDto.md +30 -0
- src/client/generated/docs/UploadResultsResponseDto.md +29 -0
- src/client/generated/docs/UploadTestCaseDto.md +37 -0
- src/client/generated/docs/UploadTestFixtureResultDto.md +37 -0
- src/client/generated/docs/UploadTestFixtureResultDtoStepsInner.md +39 -0
- src/client/generated/docs/UploadTestFixtureType.md +12 -0
- src/client/generated/docs/UploadTestResultAttachmentStepDto.md +33 -0
- src/client/generated/docs/UploadTestResultBodyStepDto.md +37 -0
- src/client/generated/docs/UploadTestResultDto.md +56 -0
- src/client/generated/docs/UploadTestResultExpectedBodyStepDto.md +35 -0
- src/client/generated/docs/UploadTestResultStepDto.md +29 -0
- src/client/generated/docs/UploadTestStatus.md +18 -0
- src/client/generated/docs/WebhookCreateDto.md +32 -0
- src/client/generated/docs/WebhookDto.md +39 -0
- src/client/generated/docs/WebhookPatchDto.md +31 -0
- src/client/generated/docs/WebhookSettings.md +29 -0
- src/client/generated/docs/WebhookSubject.md +30 -0
- src/client/generated/docs/WebhookValidateDto.md +32 -0
- src/client/generated/docs/WidgetCreateDto.md +33 -0
- src/client/generated/docs/WidgetCreateDtoOptions.md +42 -0
- src/client/generated/docs/WidgetDataDto.md +30 -0
- src/client/generated/docs/WidgetDto.md +38 -0
- src/client/generated/docs/WidgetOptions.md +29 -0
- src/client/generated/docs/WidgetOptionsAnalyticGraph.md +33 -0
- src/client/generated/docs/WidgetOptionsHavingSettableAql.md +30 -0
- src/client/generated/docs/WidgetOptionsLastLaunchPieChart.md +31 -0
- src/client/generated/docs/WidgetOptionsLaunchList.md +31 -0
- src/client/generated/docs/WidgetOptionsLaunchTrend.md +30 -0
- src/client/generated/docs/WidgetOptionsMarkdown.md +29 -0
- src/client/generated/docs/WidgetOptionsStatisticTrend.md +33 -0
- src/client/generated/docs/WidgetOptionsTcPieChart.md +33 -0
- src/client/generated/docs/WidgetOptionsTcTreeMap.md +32 -0
- src/client/generated/docs/WidgetOptionsTopTc.md +32 -0
- src/client/generated/docs/WidgetOptionsTrend.md +32 -0
- src/client/generated/docs/WidgetOptionsTrendV2.md +29 -0
- src/client/generated/docs/WidgetPatchDto.md +32 -0
- src/client/generated/docs/WidgetTypeDto.md +30 -0
- src/client/generated/docs/WorkflowCreateDto.md +30 -0
- src/client/generated/docs/WorkflowDto.md +35 -0
- src/client/generated/docs/WorkflowPatchDto.md +30 -0
- src/client/generated/docs/WorkflowRowDto.md +30 -0
- src/client/generated/docs/WorkflowSchemaCreateDto.md +31 -0
- src/client/generated/docs/WorkflowSchemaDto.md +36 -0
- src/client/generated/docs/WorkflowSchemaPatchDto.md +30 -0
- src/client/generated/exceptions.py +219 -0
- src/client/generated/models/__init__.py +699 -0
- src/client/generated/models/access_group_bulk_dto.py +91 -0
- src/client/generated/models/access_group_create_dto.py +108 -0
- src/client/generated/models/access_group_dto.py +103 -0
- src/client/generated/models/access_group_pa_dto.py +95 -0
- src/client/generated/models/access_group_patch_dto.py +107 -0
- src/client/generated/models/access_group_project_access_dto.py +89 -0
- src/client/generated/models/access_group_projects_add_dto.py +96 -0
- src/client/generated/models/access_group_user_dto.py +87 -0
- src/client/generated/models/access_group_users_add_dto.py +88 -0
- src/client/generated/models/allowed_role_dto.py +37 -0
- src/client/generated/models/analytic_automation_trend_dto.py +95 -0
- src/client/generated/models/analytic_dto.py +105 -0
- src/client/generated/models/analytic_interval.py +39 -0
- src/client/generated/models/analytic_launch_duration_histogram_dto.py +97 -0
- src/client/generated/models/analytic_mute_trend_dto.py +89 -0
- src/client/generated/models/analytic_tc_automation_count_dto.py +89 -0
- src/client/generated/models/analytic_tc_status_count_dto.py +93 -0
- src/client/generated/models/analytic_tr_by_status_trend_dto.py +95 -0
- src/client/generated/models/aql_validate_response_dto.py +89 -0
- src/client/generated/models/assign_request_dto.py +88 -0
- src/client/generated/models/async_job_dto.py +96 -0
- src/client/generated/models/async_job_status_dto.py +40 -0
- src/client/generated/models/async_job_step_dto.py +100 -0
- src/client/generated/models/async_job_step_status_dto.py +39 -0
- src/client/generated/models/async_job_with_steps_dto.py +106 -0
- src/client/generated/models/attachment_row.py +117 -0
- src/client/generated/models/attachment_step_dto.py +89 -0
- src/client/generated/models/attrs.py +87 -0
- src/client/generated/models/audit_action_type_dto.py +38 -0
- src/client/generated/models/blob_storage_stats.py +91 -0
- src/client/generated/models/blob_storage_update_stats.py +95 -0
- src/client/generated/models/body_step_dto.py +95 -0
- src/client/generated/models/bold_mark.py +87 -0
- src/client/generated/models/business_metric_dto.py +89 -0
- src/client/generated/models/category_create_dto.py +94 -0
- src/client/generated/models/category_dto.py +103 -0
- src/client/generated/models/category_matcher_create_dto.py +100 -0
- src/client/generated/models/category_matcher_dto.py +109 -0
- src/client/generated/models/category_matcher_patch_dto.py +97 -0
- src/client/generated/models/category_patch_dto.py +91 -0
- src/client/generated/models/cfv_merge_to_existing_global_value_dto.py +89 -0
- src/client/generated/models/cfv_merge_to_new_global_value_dto.py +94 -0
- src/client/generated/models/ci.py +89 -0
- src/client/generated/models/cleaner_schema_create_dto.py +95 -0
- src/client/generated/models/cleaner_schema_dto.py +105 -0
- src/client/generated/models/cleaner_schema_patch_dto.py +93 -0
- src/client/generated/models/cleaner_schema_target_dto.py +38 -0
- src/client/generated/models/code_block_document_node.py +103 -0
- src/client/generated/models/code_mark.py +87 -0
- src/client/generated/models/comment_create_dto.py +90 -0
- src/client/generated/models/comment_dto.py +105 -0
- src/client/generated/models/comment_patch_dto.py +87 -0
- src/client/generated/models/create_launch_event.py +93 -0
- src/client/generated/models/csv_import_options.py +95 -0
- src/client/generated/models/custom_field_bulk_add_to_projects_dto.py +89 -0
- src/client/generated/models/custom_field_bulk_archive_dto.py +89 -0
- src/client/generated/models/custom_field_create_dto.py +92 -0
- src/client/generated/models/custom_field_dto.py +107 -0
- src/client/generated/models/custom_field_export_field_mapping.py +98 -0
- src/client/generated/models/custom_field_import_field_mapping.py +94 -0
- src/client/generated/models/custom_field_merge_dto.py +89 -0
- src/client/generated/models/custom_field_patch_dto.py +93 -0
- src/client/generated/models/custom_field_project_count_dto.py +89 -0
- src/client/generated/models/custom_field_project_dto.py +113 -0
- src/client/generated/models/custom_field_project_patch_dto.py +91 -0
- src/client/generated/models/custom_field_project_with_values_dto.py +101 -0
- src/client/generated/models/custom_field_raw_dto.py +99 -0
- src/client/generated/models/custom_field_schema_count_dto.py +89 -0
- src/client/generated/models/custom_field_schema_create_dto.py +92 -0
- src/client/generated/models/custom_field_schema_dto.py +105 -0
- src/client/generated/models/custom_field_schema_patch_dto.py +89 -0
- src/client/generated/models/custom_field_value_bulk_delete_dto.py +89 -0
- src/client/generated/models/custom_field_value_bulk_merge_dto.py +96 -0
- src/client/generated/models/custom_field_value_dto.py +89 -0
- src/client/generated/models/custom_field_value_patch_dto.py +91 -0
- src/client/generated/models/custom_field_value_project_create_dto.py +98 -0
- src/client/generated/models/custom_field_value_project_merge_by_id_dto.py +87 -0
- src/client/generated/models/custom_field_value_project_merge_by_name_dto.py +94 -0
- src/client/generated/models/custom_field_value_project_patch_dto.py +91 -0
- src/client/generated/models/custom_field_value_project_rename_dto.py +90 -0
- src/client/generated/models/custom_field_value_with_cf_dto.py +97 -0
- src/client/generated/models/custom_field_value_with_tc_count_dto.py +99 -0
- src/client/generated/models/custom_field_with_values_dto.py +101 -0
- src/client/generated/models/dashboard_copy_dto.py +91 -0
- src/client/generated/models/dashboard_create_dto.py +91 -0
- src/client/generated/models/dashboard_drag_and_drop_dto.py +89 -0
- src/client/generated/models/dashboard_dto.py +97 -0
- src/client/generated/models/dashboard_overview_dto.py +107 -0
- src/client/generated/models/dashboard_patch_dto.py +87 -0
- src/client/generated/models/dashboard_update_dto.py +89 -0
- src/client/generated/models/default_custom_field_value_dto.py +91 -0
- src/client/generated/models/default_text_markup_document.py +97 -0
- src/client/generated/models/default_text_markup_document_all_of_content.py +140 -0
- src/client/generated/models/default_webhook_settings.py +100 -0
- src/client/generated/models/default_webhook_settings_all_of_subjects.py +151 -0
- src/client/generated/models/defect_bulk_dto.py +93 -0
- src/client/generated/models/defect_count_row_dto.py +99 -0
- src/client/generated/models/defect_create_dto.py +110 -0
- src/client/generated/models/defect_dto.py +107 -0
- src/client/generated/models/defect_issue_link_dto.py +90 -0
- src/client/generated/models/defect_matcher_create_dto.py +94 -0
- src/client/generated/models/defect_matcher_dto.py +103 -0
- src/client/generated/models/defect_matcher_patch_dto.py +91 -0
- src/client/generated/models/defect_overview_dto.py +120 -0
- src/client/generated/models/defect_patch_dto.py +91 -0
- src/client/generated/models/defect_row_dto.py +97 -0
- src/client/generated/models/defect_webhook.py +98 -0
- src/client/generated/models/diff_value_change_boolean.py +89 -0
- src/client/generated/models/diff_value_change_long.py +89 -0
- src/client/generated/models/diff_value_change_set_long.py +89 -0
- src/client/generated/models/diff_value_change_string.py +89 -0
- src/client/generated/models/document_node.py +110 -0
- src/client/generated/models/env_var_create_dto.py +88 -0
- src/client/generated/models/env_var_dto.py +97 -0
- src/client/generated/models/env_var_merge_dto.py +89 -0
- src/client/generated/models/env_var_patch_dto.py +87 -0
- src/client/generated/models/env_var_schema_create_dto.py +92 -0
- src/client/generated/models/env_var_schema_dto.py +105 -0
- src/client/generated/models/env_var_schema_patch_dto.py +89 -0
- src/client/generated/models/env_var_value_create_dto.py +94 -0
- src/client/generated/models/env_var_value_dto.py +95 -0
- src/client/generated/models/env_var_value_patch_dto.py +87 -0
- src/client/generated/models/environment_set_dto.py +95 -0
- src/client/generated/models/event_type.py +39 -0
- src/client/generated/models/event_type_settings.py +90 -0
- src/client/generated/models/example_export_field_mapping.py +100 -0
- src/client/generated/models/expected_body_step_dto.py +95 -0
- src/client/generated/models/export_field_mapping_test_case_export_field.py +90 -0
- src/client/generated/models/export_field_mapping_test_result_export_field.py +90 -0
- src/client/generated/models/export_request_dto.py +113 -0
- src/client/generated/models/export_status.py +38 -0
- src/client/generated/models/export_type.py +39 -0
- src/client/generated/models/ext_form_field.py +144 -0
- src/client/generated/models/ext_form_field_checkbox.py +95 -0
- src/client/generated/models/ext_form_field_composite.py +95 -0
- src/client/generated/models/ext_form_field_external_select.py +93 -0
- src/client/generated/models/ext_form_field_form_choice.py +107 -0
- src/client/generated/models/ext_form_field_form_choice_option.py +89 -0
- src/client/generated/models/ext_form_field_list.py +95 -0
- src/client/generated/models/ext_form_field_number.py +97 -0
- src/client/generated/models/ext_form_field_option.py +89 -0
- src/client/generated/models/ext_form_field_password.py +95 -0
- src/client/generated/models/ext_form_field_select.py +109 -0
- src/client/generated/models/ext_form_field_slider.py +103 -0
- src/client/generated/models/ext_form_field_text.py +99 -0
- src/client/generated/models/ext_form_field_textarea.py +97 -0
- src/client/generated/models/ext_form_field_unknown.py +95 -0
- src/client/generated/models/ext_issue_link.py +95 -0
- src/client/generated/models/ext_issue_type.py +89 -0
- src/client/generated/models/ext_project.py +91 -0
- src/client/generated/models/ext_select_value.py +89 -0
- src/client/generated/models/external_link_dto.py +91 -0
- src/client/generated/models/external_run_response_dto.py +93 -0
- src/client/generated/models/external_run_start_request_dto.py +111 -0
- src/client/generated/models/external_run_stop_request_dto.py +95 -0
- src/client/generated/models/file_upload_response_dto.py +87 -0
- src/client/generated/models/filter_base_set_dto.py +87 -0
- src/client/generated/models/filter_create_dto.py +98 -0
- src/client/generated/models/filter_dto.py +110 -0
- src/client/generated/models/filter_patch_dto.py +91 -0
- src/client/generated/models/filter_type_dto.py +38 -0
- src/client/generated/models/find_all29200_response.py +137 -0
- src/client/generated/models/global_permissions_dto.py +87 -0
- src/client/generated/models/global_settings_dto.py +88 -0
- src/client/generated/models/global_settings_project_create_patch_dto.py +88 -0
- src/client/generated/models/grid_pos_dto.py +93 -0
- src/client/generated/models/group_by.py +38 -0
- src/client/generated/models/group_node_context.py +89 -0
- src/client/generated/models/id_and_name_only_dto.py +89 -0
- src/client/generated/models/id_only_dto.py +87 -0
- src/client/generated/models/import_request_dto.py +113 -0
- src/client/generated/models/import_request_info_dto.py +106 -0
- src/client/generated/models/import_request_state_dto.py +39 -0
- src/client/generated/models/import_request_type_dto.py +36 -0
- src/client/generated/models/integration_create_dto.py +113 -0
- src/client/generated/models/integration_dto.py +101 -0
- src/client/generated/models/integration_export_create_dto.py +112 -0
- src/client/generated/models/integration_export_dto.py +118 -0
- src/client/generated/models/integration_export_patch_dto.py +108 -0
- src/client/generated/models/integration_fields_form_dto.py +119 -0
- src/client/generated/models/integration_fields_form_dto_default_project_fields_inner.py +277 -0
- src/client/generated/models/integration_info_dto.py +98 -0
- src/client/generated/models/integration_links_fixed_dto.py +87 -0
- src/client/generated/models/integration_operation_type_dto.py +46 -0
- src/client/generated/models/integration_patch_dto.py +112 -0
- src/client/generated/models/integration_routine_type_dto.py +39 -0
- src/client/generated/models/integration_type_dto.py +69 -0
- src/client/generated/models/integration_validate_dto.py +109 -0
- src/client/generated/models/integration_webhook_create_dto.py +87 -0
- src/client/generated/models/integration_webhook_dto.py +101 -0
- src/client/generated/models/integration_webhook_log_dto.py +93 -0
- src/client/generated/models/integration_webhook_patch_dto.py +87 -0
- src/client/generated/models/integration_webhook_token_dto.py +101 -0
- src/client/generated/models/issue_create_dto.py +90 -0
- src/client/generated/models/issue_dto.py +104 -0
- src/client/generated/models/issue_import_field_mapping.py +94 -0
- src/client/generated/models/issue_integration_export_field_mapping.py +98 -0
- src/client/generated/models/issue_patch_dto.py +87 -0
- src/client/generated/models/issue_schema_create_dto.py +92 -0
- src/client/generated/models/issue_schema_dto.py +101 -0
- src/client/generated/models/issue_schema_patch_dto.py +89 -0
- src/client/generated/models/issue_to_create_dto.py +98 -0
- src/client/generated/models/italic_mark.py +87 -0
- src/client/generated/models/job.py +103 -0
- src/client/generated/models/job_create_dto.py +93 -0
- src/client/generated/models/job_dto.py +104 -0
- src/client/generated/models/job_info_dto.py +94 -0
- src/client/generated/models/job_mapping.py +89 -0
- src/client/generated/models/job_parameter_dto.py +89 -0
- src/client/generated/models/job_patch_dto.py +101 -0
- src/client/generated/models/job_rerun_request_dto.py +87 -0
- src/client/generated/models/job_run.py +103 -0
- src/client/generated/models/job_run_dto.py +117 -0
- src/client/generated/models/job_run_request_dto.py +144 -0
- src/client/generated/models/job_run_stage_dto.py +39 -0
- src/client/generated/models/job_run_status_dto.py +39 -0
- src/client/generated/models/job_run_upload_info_dto.py +95 -0
- src/client/generated/models/job_test_cases_stat_dto.py +93 -0
- src/client/generated/models/launch.py +93 -0
- src/client/generated/models/launch_cleanup_request.py +94 -0
- src/client/generated/models/launch_close_config_dto.py +93 -0
- src/client/generated/models/launch_copy_rq_dto.py +129 -0
- src/client/generated/models/launch_create_and_upload_dto.py +130 -0
- src/client/generated/models/launch_create_dto.py +123 -0
- src/client/generated/models/launch_diff_cell.py +102 -0
- src/client/generated/models/launch_diff_mode.py +38 -0
- src/client/generated/models/launch_diff_row.py +99 -0
- src/client/generated/models/launch_diff_status_change_dto.py +108 -0
- src/client/generated/models/launch_diff_test_result.py +96 -0
- src/client/generated/models/launch_diff_test_result_dto.py +98 -0
- src/client/generated/models/launch_dto.py +131 -0
- src/client/generated/models/launch_existing_upload_dto.py +95 -0
- src/client/generated/models/launch_live_doc_config_dto.py +89 -0
- src/client/generated/models/launch_member_stats_dto.py +109 -0
- src/client/generated/models/launch_merge_dto.py +89 -0
- src/client/generated/models/launch_patch_dto.py +121 -0
- src/client/generated/models/launch_pdf_options.py +106 -0
- src/client/generated/models/launch_pdf_part.py +43 -0
- src/client/generated/models/launch_pdf_structure.py +88 -0
- src/client/generated/models/launch_preview_dto.py +167 -0
- src/client/generated/models/launch_progress_dto.py +87 -0
- src/client/generated/models/launch_row_dto.py +101 -0
- src/client/generated/models/launch_tag_create_dto.py +88 -0
- src/client/generated/models/launch_tag_dto.py +89 -0
- src/client/generated/models/launch_tag_patch_dto.py +87 -0
- src/client/generated/models/launch_test_cases_add_dto.py +123 -0
- src/client/generated/models/launch_test_plan_add_dto.py +97 -0
- src/client/generated/models/launch_upload_response_dto.py +91 -0
- src/client/generated/models/launch_variable_dto.py +89 -0
- src/client/generated/models/launch_webhook.py +100 -0
- src/client/generated/models/line_break_paragraph_node.py +87 -0
- src/client/generated/models/link_export_field_mapping.py +96 -0
- src/client/generated/models/link_import_field_mapping.py +96 -0
- src/client/generated/models/link_mark.py +93 -0
- src/client/generated/models/list_selection_dto.py +89 -0
- src/client/generated/models/manual_session_request_dto.py +97 -0
- src/client/generated/models/matcher.py +91 -0
- src/client/generated/models/member_create_dto.py +94 -0
- src/client/generated/models/member_dto.py +95 -0
- src/client/generated/models/member_patch_dto.py +87 -0
- src/client/generated/models/metric.py +37 -0
- src/client/generated/models/mfa_global_settings_dto.py +87 -0
- src/client/generated/models/mfa_global_settings_patch_dto.py +87 -0
- src/client/generated/models/multi_value_export_field_mapping.py +96 -0
- src/client/generated/models/multi_value_import_field_mapping.py +92 -0
- src/client/generated/models/multi_value_map_string_string.py +102 -0
- src/client/generated/models/mute_create_dto.py +101 -0
- src/client/generated/models/mute_dto.py +113 -0
- src/client/generated/models/name_only_dto.py +88 -0
- src/client/generated/models/node_type.py +37 -0
- src/client/generated/models/normalized_scenario_dto.py +162 -0
- src/client/generated/models/normalized_scenario_dto_attachments_value.py +154 -0
- src/client/generated/models/normalized_scenario_step_dto.py +117 -0
- src/client/generated/models/ordered_value_dto_string.py +89 -0
- src/client/generated/models/page_access_group_dto.py +123 -0
- src/client/generated/models/page_access_group_dto_sort.py +91 -0
- src/client/generated/models/page_access_group_pa_dto.py +123 -0
- src/client/generated/models/page_access_group_user_dto.py +123 -0
- src/client/generated/models/page_async_job_dto.py +123 -0
- src/client/generated/models/page_category_dto.py +123 -0
- src/client/generated/models/page_category_matcher_dto.py +123 -0
- src/client/generated/models/page_cleaner_schema_dto.py +123 -0
- src/client/generated/models/page_comment_dto.py +123 -0
- src/client/generated/models/page_custom_field_project_dto.py +123 -0
- src/client/generated/models/page_custom_field_schema_dto.py +123 -0
- src/client/generated/models/page_custom_field_value_with_tc_count_dto.py +123 -0
- src/client/generated/models/page_dashboard_dto.py +123 -0
- src/client/generated/models/page_defect_count_row_dto.py +123 -0
- src/client/generated/models/page_defect_dto.py +123 -0
- src/client/generated/models/page_defect_matcher_dto.py +123 -0
- src/client/generated/models/page_defect_row_dto.py +123 -0
- src/client/generated/models/page_env_var_schema_dto.py +123 -0
- src/client/generated/models/page_export_request_dto.py +123 -0
- src/client/generated/models/page_filter_dto.py +123 -0
- src/client/generated/models/page_id_and_name_only_dto.py +123 -0
- src/client/generated/models/page_import_request_dto.py +123 -0
- src/client/generated/models/page_integration_dto.py +123 -0
- src/client/generated/models/page_integration_export_dto.py +123 -0
- src/client/generated/models/page_integration_info_dto.py +123 -0
- src/client/generated/models/page_integration_webhook_dto.py +123 -0
- src/client/generated/models/page_integration_webhook_log_dto.py +123 -0
- src/client/generated/models/page_issue_dto.py +123 -0
- src/client/generated/models/page_issue_schema_dto.py +123 -0
- src/client/generated/models/page_job_dto.py +123 -0
- src/client/generated/models/page_launch_diff_row.py +123 -0
- src/client/generated/models/page_launch_dto.py +123 -0
- src/client/generated/models/page_launch_member_stats_dto.py +123 -0
- src/client/generated/models/page_launch_preview_dto.py +123 -0
- src/client/generated/models/page_launch_row_dto.py +123 -0
- src/client/generated/models/page_launch_tag_dto.py +123 -0
- src/client/generated/models/page_launch_variable_dto.py +123 -0
- src/client/generated/models/page_member_dto.py +123 -0
- src/client/generated/models/page_mute_dto.py +123 -0
- src/client/generated/models/page_permission_set_dto.py +123 -0
- src/client/generated/models/page_project_collaborator_access_dto.py +123 -0
- src/client/generated/models/page_project_collaborator_dto.py +123 -0
- src/client/generated/models/page_project_custom_field_dto.py +123 -0
- src/client/generated/models/page_project_dto.py +123 -0
- src/client/generated/models/page_project_group_access_dto.py +123 -0
- src/client/generated/models/page_project_integration_dto.py +123 -0
- src/client/generated/models/page_project_suggest_dto.py +123 -0
- src/client/generated/models/page_role_schema_dto.py +123 -0
- src/client/generated/models/page_shared_step_attachment_row_dto.py +123 -0
- src/client/generated/models/page_shared_step_dto.py +123 -0
- src/client/generated/models/page_statistic_widget_item.py +123 -0
- src/client/generated/models/page_status_dto.py +123 -0
- src/client/generated/models/page_template_dto.py +123 -0
- src/client/generated/models/page_test_case_attachment_row_dto.py +123 -0
- src/client/generated/models/page_test_case_audit_log_entry_dto.py +123 -0
- src/client/generated/models/page_test_case_dto.py +123 -0
- src/client/generated/models/page_test_case_example_dto.py +123 -0
- src/client/generated/models/page_test_case_flat_dto.py +123 -0
- src/client/generated/models/page_test_case_row_dto.py +123 -0
- src/client/generated/models/page_test_case_tree_group_dto.py +123 -0
- src/client/generated/models/page_test_case_tree_leaf_dto.py +123 -0
- src/client/generated/models/page_test_case_tree_node_dto.py +123 -0
- src/client/generated/models/page_test_case_tree_node_dto_content_inner.py +140 -0
- src/client/generated/models/page_test_fixture_result_attachment_row_dto.py +123 -0
- src/client/generated/models/page_test_key_schema_dto.py +123 -0
- src/client/generated/models/page_test_layer_dto.py +123 -0
- src/client/generated/models/page_test_layer_schema_dto.py +123 -0
- src/client/generated/models/page_test_plan_dto.py +123 -0
- src/client/generated/models/page_test_plan_row_dto.py +123 -0
- src/client/generated/models/page_test_result_attachment_row_dto.py +123 -0
- src/client/generated/models/page_test_result_defect_match_dto.py +123 -0
- src/client/generated/models/page_test_result_dto.py +123 -0
- src/client/generated/models/page_test_result_flat_dto.py +123 -0
- src/client/generated/models/page_test_result_history_dto.py +123 -0
- src/client/generated/models/page_test_result_retries_row_dto.py +123 -0
- src/client/generated/models/page_test_result_row_dto.py +123 -0
- src/client/generated/models/page_test_result_tree_group_dto.py +123 -0
- src/client/generated/models/page_test_result_tree_leaf_dto.py +123 -0
- src/client/generated/models/page_test_result_tree_node_dto.py +123 -0
- src/client/generated/models/page_test_result_tree_node_dto_content_inner.py +140 -0
- src/client/generated/models/page_tree_dto.py +123 -0
- src/client/generated/models/page_tree_dto_v2.py +123 -0
- src/client/generated/models/page_tree_path_dto.py +123 -0
- src/client/generated/models/page_webhook_dto.py +123 -0
- src/client/generated/models/page_widget_dto.py +123 -0
- src/client/generated/models/page_workflow_dto.py +123 -0
- src/client/generated/models/page_workflow_schema_dto.py +123 -0
- src/client/generated/models/pageable.py +101 -0
- src/client/generated/models/paragraph_document_node.py +103 -0
- src/client/generated/models/paragraph_document_node_all_of_content.py +137 -0
- src/client/generated/models/paragraph_node.py +107 -0
- src/client/generated/models/parameter.py +89 -0
- src/client/generated/models/parameter_value_dto.py +89 -0
- src/client/generated/models/permission_dto.py +39 -0
- src/client/generated/models/permission_set_create_dto.py +91 -0
- src/client/generated/models/permission_set_dto.py +92 -0
- src/client/generated/models/permission_set_patch_dto.py +90 -0
- src/client/generated/models/project_access_collaborator_add_dto.py +96 -0
- src/client/generated/models/project_access_group_add_dto.py +96 -0
- src/client/generated/models/project_category_add_dto.py +87 -0
- src/client/generated/models/project_category_matcher_add_dto.py +87 -0
- src/client/generated/models/project_category_matcher_remove_dto.py +87 -0
- src/client/generated/models/project_category_remove_dto.py +87 -0
- src/client/generated/models/project_collaborator_access_dto.py +107 -0
- src/client/generated/models/project_collaborator_dto.py +91 -0
- src/client/generated/models/project_create_dto.py +95 -0
- src/client/generated/models/project_custom_field_dto.py +107 -0
- src/client/generated/models/project_dto.py +107 -0
- src/client/generated/models/project_group_access_add_dto.py +89 -0
- src/client/generated/models/project_group_access_dto.py +95 -0
- src/client/generated/models/project_integration_create_dto.py +103 -0
- src/client/generated/models/project_integration_dto.py +110 -0
- src/client/generated/models/project_integration_fields_form_dto.py +112 -0
- src/client/generated/models/project_integration_patch_dto.py +101 -0
- src/client/generated/models/project_integration_validate_dto.py +101 -0
- src/client/generated/models/project_metric_dto.py +95 -0
- src/client/generated/models/project_patch_dto.py +95 -0
- src/client/generated/models/project_property_create_dto.py +92 -0
- src/client/generated/models/project_property_dto.py +93 -0
- src/client/generated/models/project_property_patch_dto.py +89 -0
- src/client/generated/models/project_stats_dto.py +93 -0
- src/client/generated/models/project_suggest_dto.py +93 -0
- src/client/generated/models/project_sync_request.py +104 -0
- src/client/generated/models/project_test_case_count_dto.py +89 -0
- src/client/generated/models/resolve_request_v2_dto.py +106 -0
- src/client/generated/models/retry.py +92 -0
- src/client/generated/models/role_create_dto.py +88 -0
- src/client/generated/models/role_dto.py +97 -0
- src/client/generated/models/role_export_field_mapping.py +98 -0
- src/client/generated/models/role_import_field_mapping.py +94 -0
- src/client/generated/models/role_patch_dto.py +87 -0
- src/client/generated/models/role_schema_create_dto.py +91 -0
- src/client/generated/models/role_schema_dto.py +105 -0
- src/client/generated/models/role_schema_patch_dto.py +89 -0
- src/client/generated/models/scenario_export_field_mapping.py +98 -0
- src/client/generated/models/scenario_step_copy_dto.py +91 -0
- src/client/generated/models/scenario_step_create_dto.py +101 -0
- src/client/generated/models/scenario_step_created_response_dto.py +93 -0
- src/client/generated/models/scenario_step_dto.py +116 -0
- src/client/generated/models/scenario_step_move_dto.py +91 -0
- src/client/generated/models/scenario_step_patch_dto.py +99 -0
- src/client/generated/models/session_variable.py +89 -0
- src/client/generated/models/shared_step_attachment_patch_dto.py +89 -0
- src/client/generated/models/shared_step_attachment_row_dto.py +95 -0
- src/client/generated/models/shared_step_create_dto.py +89 -0
- src/client/generated/models/shared_step_dto.py +107 -0
- src/client/generated/models/shared_step_patch_dto.py +87 -0
- src/client/generated/models/shared_step_scenario_dto.py +95 -0
- src/client/generated/models/shared_step_scenario_dto_steps_inner.py +165 -0
- src/client/generated/models/shared_step_step_dto.py +89 -0
- src/client/generated/models/statistic_dto.py +99 -0
- src/client/generated/models/statistic_widget_item.py +99 -0
- src/client/generated/models/status.py +39 -0
- src/client/generated/models/status_create_dto.py +90 -0
- src/client/generated/models/status_dto.py +99 -0
- src/client/generated/models/status_patch_dto.py +89 -0
- src/client/generated/models/strike_mark.py +87 -0
- src/client/generated/models/tag_import_field_mapping.py +94 -0
- src/client/generated/models/template_dto.py +93 -0
- src/client/generated/models/template_overview_dto.py +103 -0
- src/client/generated/models/test_case_association_diff.py +91 -0
- src/client/generated/models/test_case_attachment_patch_dto.py +89 -0
- src/client/generated/models/test_case_attachment_row_dto.py +99 -0
- src/client/generated/models/test_case_audit_log_data.py +93 -0
- src/client/generated/models/test_case_audit_log_data_diff.py +137 -0
- src/client/generated/models/test_case_audit_log_entry_dto.py +104 -0
- src/client/generated/models/test_case_bulk_cf_move_strategy.py +39 -0
- src/client/generated/models/test_case_bulk_change_project_dto_v2.py +98 -0
- src/client/generated/models/test_case_bulk_clone_dto.py +124 -0
- src/client/generated/models/test_case_bulk_clone_dto_v2.py +124 -0
- src/client/generated/models/test_case_bulk_drag_and_drop_dto.py +93 -0
- src/client/generated/models/test_case_bulk_drag_and_drop_dto_v2.py +93 -0
- src/client/generated/models/test_case_bulk_dto.py +91 -0
- src/client/generated/models/test_case_bulk_dto_v2.py +91 -0
- src/client/generated/models/test_case_bulk_entity_ids_dto.py +94 -0
- src/client/generated/models/test_case_bulk_entity_ids_dto_v2.py +94 -0
- src/client/generated/models/test_case_bulk_export_csv_options.py +107 -0
- src/client/generated/models/test_case_bulk_export_csv_options_mapping_inner.py +224 -0
- src/client/generated/models/test_case_bulk_export_pdf_options.py +104 -0
- src/client/generated/models/test_case_bulk_external_link_dto.py +102 -0
- src/client/generated/models/test_case_bulk_issue_dto.py +102 -0
- src/client/generated/models/test_case_bulk_layer_dto.py +93 -0
- src/client/generated/models/test_case_bulk_member_dto.py +102 -0
- src/client/generated/models/test_case_bulk_mute_dto.py +97 -0
- src/client/generated/models/test_case_bulk_new_cfv_dto.py +102 -0
- src/client/generated/models/test_case_bulk_project_change_dto.py +98 -0
- src/client/generated/models/test_case_bulk_run_existing_launch_dto.py +125 -0
- src/client/generated/models/test_case_bulk_run_new_launch_dto.py +156 -0
- src/client/generated/models/test_case_bulk_status_dto.py +95 -0
- src/client/generated/models/test_case_bulk_tag_dto.py +102 -0
- src/client/generated/models/test_case_bulk_test_plan_create_dto.py +100 -0
- src/client/generated/models/test_case_cf_bulk_delta_dto_v2.py +93 -0
- src/client/generated/models/test_case_cfv_bulk_add_dto.py +102 -0
- src/client/generated/models/test_case_clone_rq_dto.py +118 -0
- src/client/generated/models/test_case_count_dto.py +87 -0
- src/client/generated/models/test_case_create_v2_dto.py +155 -0
- src/client/generated/models/test_case_csv_export_options.py +107 -0
- src/client/generated/models/test_case_csv_import_options.py +111 -0
- src/client/generated/models/test_case_csv_import_options_mapping_inner.py +224 -0
- src/client/generated/models/test_case_csv_preview_options.py +113 -0
- src/client/generated/models/test_case_detach_automation_rq_dto.py +91 -0
- src/client/generated/models/test_case_diff.py +158 -0
- src/client/generated/models/test_case_dto.py +161 -0
- src/client/generated/models/test_case_example_dto.py +100 -0
- src/client/generated/models/test_case_export_field.py +51 -0
- src/client/generated/models/test_case_external_link_bulk_add_dto.py +102 -0
- src/client/generated/models/test_case_flat_dto.py +111 -0
- src/client/generated/models/test_case_full_tree_node_dto.py +99 -0
- src/client/generated/models/test_case_import_dto.py +209 -0
- src/client/generated/models/test_case_import_field.py +50 -0
- src/client/generated/models/test_case_import_mapping.py +126 -0
- src/client/generated/models/test_case_info.py +89 -0
- src/client/generated/models/test_case_issue_bulk_add_dto.py +102 -0
- src/client/generated/models/test_case_last_result_dto.py +96 -0
- src/client/generated/models/test_case_layer_bulk_set_dto.py +93 -0
- src/client/generated/models/test_case_light_tree_node_dto.py +98 -0
- src/client/generated/models/test_case_member_bulk_add_dto.py +102 -0
- src/client/generated/models/test_case_mute_bulk_add_dto.py +97 -0
- src/client/generated/models/test_case_overview_dto.py +232 -0
- src/client/generated/models/test_case_parameter_dto.py +87 -0
- src/client/generated/models/test_case_parameter_values.py +89 -0
- src/client/generated/models/test_case_patch_v2_dto.py +153 -0
- src/client/generated/models/test_case_pdf_options.py +104 -0
- src/client/generated/models/test_case_pdf_part.py +39 -0
- src/client/generated/models/test_case_relation_dto.py +96 -0
- src/client/generated/models/test_case_relation_type_dto.py +42 -0
- src/client/generated/models/test_case_row_dto.py +103 -0
- src/client/generated/models/test_case_run_bulk_existing_launch_dto.py +125 -0
- src/client/generated/models/test_case_run_bulk_new_launch_dto.py +156 -0
- src/client/generated/models/test_case_run_by_stats.py +93 -0
- src/client/generated/models/test_case_run_stats_request_dto.py +101 -0
- src/client/generated/models/test_case_scenario_dto.py +107 -0
- src/client/generated/models/test_case_scenario_step_dto.py +124 -0
- src/client/generated/models/test_case_scenario_v2_dto.py +95 -0
- src/client/generated/models/test_case_selection_dto_v2.py +107 -0
- src/client/generated/models/test_case_status_bulk_set_dto.py +95 -0
- src/client/generated/models/test_case_style.py +37 -0
- src/client/generated/models/test_case_sync_from_to.py +89 -0
- src/client/generated/models/test_case_sync_rq_dto.py +120 -0
- src/client/generated/models/test_case_tag_bulk_add_dto.py +102 -0
- src/client/generated/models/test_case_test_plan_bulk_create_dto.py +100 -0
- src/client/generated/models/test_case_tree_all_paths_dto.py +87 -0
- src/client/generated/models/test_case_tree_filter_count_dto.py +89 -0
- src/client/generated/models/test_case_tree_group_add_dto.py +88 -0
- src/client/generated/models/test_case_tree_group_dto.py +93 -0
- src/client/generated/models/test_case_tree_group_rename_dto.py +87 -0
- src/client/generated/models/test_case_tree_leaf_add_dto.py +88 -0
- src/client/generated/models/test_case_tree_leaf_dto.py +103 -0
- src/client/generated/models/test_case_tree_leaf_dto_v2.py +114 -0
- src/client/generated/models/test_case_tree_leaf_rename_dto.py +88 -0
- src/client/generated/models/test_case_tree_node_dto.py +113 -0
- src/client/generated/models/test_case_tree_run_stat_request_dto.py +117 -0
- src/client/generated/models/test_case_tree_selection_dto.py +107 -0
- src/client/generated/models/test_case_tree_selection_dto_v2.py +105 -0
- src/client/generated/models/test_case_type.py +37 -0
- src/client/generated/models/test_case_update_field_dto.py +46 -0
- src/client/generated/models/test_case_update_policy_dto.py +37 -0
- src/client/generated/models/test_case_update_schema_create_dto.py +93 -0
- src/client/generated/models/test_case_update_schema_dto.py +95 -0
- src/client/generated/models/test_case_update_schema_patch_dto.py +91 -0
- src/client/generated/models/test_case_version_dto.py +97 -0
- src/client/generated/models/test_case_version_patch_dto.py +89 -0
- src/client/generated/models/test_case_version_rq_dto.py +90 -0
- src/client/generated/models/test_duration_count.py +89 -0
- src/client/generated/models/test_fixture_result_attachment_patch_dto.py +89 -0
- src/client/generated/models/test_fixture_result_attachment_row_dto.py +93 -0
- src/client/generated/models/test_fixture_result_type_dto.py +37 -0
- src/client/generated/models/test_fixture_result_v2_dto.py +111 -0
- src/client/generated/models/test_key_dto.py +93 -0
- src/client/generated/models/test_key_import_field_mapping.py +94 -0
- src/client/generated/models/test_key_schema_create_dto.py +92 -0
- src/client/generated/models/test_key_schema_dto.py +103 -0
- src/client/generated/models/test_key_schema_patch_dto.py +89 -0
- src/client/generated/models/test_layer_create_dto.py +88 -0
- src/client/generated/models/test_layer_dto.py +97 -0
- src/client/generated/models/test_layer_patch_dto.py +87 -0
- src/client/generated/models/test_layer_schema_create_dto.py +92 -0
- src/client/generated/models/test_layer_schema_dto.py +105 -0
- src/client/generated/models/test_layer_schema_patch_dto.py +89 -0
- src/client/generated/models/test_plan_assign_dto.py +95 -0
- src/client/generated/models/test_plan_create_dto.py +100 -0
- src/client/generated/models/test_plan_diff_dto.py +89 -0
- src/client/generated/models/test_plan_dto.py +115 -0
- src/client/generated/models/test_plan_job_parameters_dto.py +97 -0
- src/client/generated/models/test_plan_job_stat_dto.py +93 -0
- src/client/generated/models/test_plan_member_stat_dto.py +93 -0
- src/client/generated/models/test_plan_patch_dto.py +97 -0
- src/client/generated/models/test_plan_row_dto.py +91 -0
- src/client/generated/models/test_plan_run_request_dto.py +128 -0
- src/client/generated/models/test_plan_tree_selection_dto.py +103 -0
- src/client/generated/models/test_plan_webhook.py +98 -0
- src/client/generated/models/test_result_attachment_patch_dto.py +89 -0
- src/client/generated/models/test_result_attachment_row_dto.py +97 -0
- src/client/generated/models/test_result_attachment_step_dto.py +104 -0
- src/client/generated/models/test_result_attachment_step_dto_all_of_attachment.py +154 -0
- src/client/generated/models/test_result_body_step_dto.py +120 -0
- src/client/generated/models/test_result_bulk_assign_dto.py +93 -0
- src/client/generated/models/test_result_bulk_dto.py +91 -0
- src/client/generated/models/test_result_bulk_entity_ids_dto.py +94 -0
- src/client/generated/models/test_result_bulk_mute_dto.py +105 -0
- src/client/generated/models/test_result_bulk_rerun_dto.py +97 -0
- src/client/generated/models/test_result_bulk_resolve_dto.py +98 -0
- src/client/generated/models/test_result_bulk_tag_dto.py +102 -0
- src/client/generated/models/test_result_create_v2_dto.py +164 -0
- src/client/generated/models/test_result_csv_export_options.py +107 -0
- src/client/generated/models/test_result_csv_export_options_mapping_inner.py +224 -0
- src/client/generated/models/test_result_defect_match_dto.py +96 -0
- src/client/generated/models/test_result_defect_matcher_dto.py +92 -0
- src/client/generated/models/test_result_dto.py +208 -0
- src/client/generated/models/test_result_expected_body_step_dto.py +108 -0
- src/client/generated/models/test_result_export_field.py +57 -0
- src/client/generated/models/test_result_flat_dto.py +116 -0
- src/client/generated/models/test_result_group_node.py +105 -0
- src/client/generated/models/test_result_history_dto.py +136 -0
- src/client/generated/models/test_result_leaf_node.py +110 -0
- src/client/generated/models/test_result_link_defect_dto.py +91 -0
- src/client/generated/models/test_result_mute_reason.py +99 -0
- src/client/generated/models/test_result_new_defect_dto.py +108 -0
- src/client/generated/models/test_result_parameter_dto.py +93 -0
- src/client/generated/models/test_result_patch_dto.py +143 -0
- src/client/generated/models/test_result_rerun_dto.py +87 -0
- src/client/generated/models/test_result_retries_row_dto.py +102 -0
- src/client/generated/models/test_result_row_dto.py +98 -0
- src/client/generated/models/test_result_scenario_dto.py +105 -0
- src/client/generated/models/test_result_scenario_step_dto.py +145 -0
- src/client/generated/models/test_result_scenario_step_parameter.py +93 -0
- src/client/generated/models/test_result_scenario_v2_dto.py +95 -0
- src/client/generated/models/test_result_scenario_v2_dto_steps_inner.py +154 -0
- src/client/generated/models/test_result_stats_dto.py +93 -0
- src/client/generated/models/test_result_tree.py +119 -0
- src/client/generated/models/test_result_tree_filter_count_dto.py +87 -0
- src/client/generated/models/test_result_tree_group_dto.py +97 -0
- src/client/generated/models/test_result_tree_group_dto_v2.py +98 -0
- src/client/generated/models/test_result_tree_leaf_dto.py +112 -0
- src/client/generated/models/test_result_tree_leaf_dto_v2.py +117 -0
- src/client/generated/models/test_result_tree_node_dto.py +113 -0
- src/client/generated/models/test_result_tree_selection_dto.py +105 -0
- src/client/generated/models/test_session_response_dto.py +95 -0
- src/client/generated/models/test_status.py +40 -0
- src/client/generated/models/test_status_count.py +90 -0
- src/client/generated/models/test_tag_create_dto.py +88 -0
- src/client/generated/models/test_tag_dto.py +89 -0
- src/client/generated/models/test_tag_patch_dto.py +87 -0
- src/client/generated/models/text_color_mark.py +93 -0
- src/client/generated/models/text_fill_mark.py +93 -0
- src/client/generated/models/text_mark.py +128 -0
- src/client/generated/models/text_markup_document.py +107 -0
- src/client/generated/models/text_paragraph_node.py +97 -0
- src/client/generated/models/text_paragraph_node_marks_inner.py +221 -0
- src/client/generated/models/tr_scenario_step_dto.py +113 -0
- src/client/generated/models/tree_create_dto.py +100 -0
- src/client/generated/models/tree_custom_field_project_dto.py +99 -0
- src/client/generated/models/tree_dto.py +109 -0
- src/client/generated/models/tree_dto_v2.py +101 -0
- src/client/generated/models/tree_patch_dto.py +97 -0
- src/client/generated/models/tree_path_create_dto.py +98 -0
- src/client/generated/models/tree_path_dto.py +101 -0
- src/client/generated/models/tree_path_item_dto.py +91 -0
- src/client/generated/models/tree_selection_dto.py +97 -0
- src/client/generated/models/underline_mark.py +87 -0
- src/client/generated/models/upload_attachment_dto.py +95 -0
- src/client/generated/models/upload_fixtures_results_dto.py +96 -0
- src/client/generated/models/upload_label_dto.py +89 -0
- src/client/generated/models/upload_link_dto.py +91 -0
- src/client/generated/models/upload_parameter_dto.py +95 -0
- src/client/generated/models/upload_results_dto.py +98 -0
- src/client/generated/models/upload_results_response_dto.py +87 -0
- src/client/generated/models/upload_test_case_dto.py +127 -0
- src/client/generated/models/upload_test_fixture_result_dto.py +113 -0
- src/client/generated/models/upload_test_fixture_result_dto_steps_inner.py +154 -0
- src/client/generated/models/upload_test_fixture_type.py +37 -0
- src/client/generated/models/upload_test_result_attachment_step_dto.py +102 -0
- src/client/generated/models/upload_test_result_body_step_dto.py +118 -0
- src/client/generated/models/upload_test_result_dto.py +182 -0
- src/client/generated/models/upload_test_result_expected_body_step_dto.py +106 -0
- src/client/generated/models/upload_test_result_step_dto.py +113 -0
- src/client/generated/models/upload_test_status.py +40 -0
- src/client/generated/models/webhook_create_dto.py +98 -0
- src/client/generated/models/webhook_dto.py +111 -0
- src/client/generated/models/webhook_patch_dto.py +95 -0
- src/client/generated/models/webhook_settings.py +107 -0
- src/client/generated/models/webhook_subject.py +122 -0
- src/client/generated/models/webhook_validate_dto.py +94 -0
- src/client/generated/models/widget_create_dto.py +105 -0
- src/client/generated/models/widget_create_dto_options.py +263 -0
- src/client/generated/models/widget_data_dto.py +94 -0
- src/client/generated/models/widget_dto.py +114 -0
- src/client/generated/models/widget_options.py +137 -0
- src/client/generated/models/widget_options_analytic_graph.py +99 -0
- src/client/generated/models/widget_options_having_settable_aql.py +99 -0
- src/client/generated/models/widget_options_last_launch_pie_chart.py +97 -0
- src/client/generated/models/widget_options_launch_list.py +97 -0
- src/client/generated/models/widget_options_launch_trend.py +95 -0
- src/client/generated/models/widget_options_markdown.py +89 -0
- src/client/generated/models/widget_options_statistic_trend.py +98 -0
- src/client/generated/models/widget_options_tc_pie_chart.py +98 -0
- src/client/generated/models/widget_options_tc_tree_map.py +99 -0
- src/client/generated/models/widget_options_top_tc.py +96 -0
- src/client/generated/models/widget_options_trend.py +96 -0
- src/client/generated/models/widget_options_trend_v2.py +89 -0
- src/client/generated/models/widget_patch_dto.py +102 -0
- src/client/generated/models/widget_type_dto.py +46 -0
- src/client/generated/models/workflow_create_dto.py +98 -0
- src/client/generated/models/workflow_dto.py +107 -0
- src/client/generated/models/workflow_patch_dto.py +97 -0
- src/client/generated/models/workflow_row_dto.py +89 -0
- src/client/generated/models/workflow_schema_create_dto.py +92 -0
- src/client/generated/models/workflow_schema_dto.py +106 -0
- src/client/generated/models/workflow_schema_patch_dto.py +90 -0
- src/client/generated/rest.py +199 -0
- src/client/refactor-hotspots.md +53 -0
- src/client/refactor-plan.md +78 -0
- src/main.py +95 -0
- src/services/__init__.py +1 -0
- src/services/attachment_service.py +104 -0
- src/services/search_service.py +230 -0
- src/services/shared_step_service.py +329 -0
- src/services/test_case_service.py +951 -0
- src/tools/__init__.py +41 -0
- src/tools/create_test_case.py +76 -0
- src/tools/delete_test_case.py +53 -0
- src/tools/link_shared_step.py +95 -0
- src/tools/search.py +348 -0
- src/tools/shared_steps.py +169 -0
- src/tools/unlink_shared_step.py +70 -0
- src/tools/update_test_case.py +125 -0
- src/utils/__init__.py +1 -0
- src/utils/auth.py +106 -0
- src/utils/config.py +36 -0
- src/utils/error.py +184 -0
- src/utils/logger.py +68 -0
- src/utils/schema_hint.py +58 -0
- src/version.py +3 -0
src/client/client.py
ADDED
|
@@ -0,0 +1,1203 @@
|
|
|
1
|
+
"""Async HTTP client for Allure TestOps API.
|
|
2
|
+
|
|
3
|
+
This module provides a high-level wrapper around the auto-generated Allure TestOps
|
|
4
|
+
client, adding features like token management, automatic refresh, and
|
|
5
|
+
standardized error handling.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import time
|
|
9
|
+
from collections.abc import Awaitable
|
|
10
|
+
from typing import Literal, TypeVar, cast, overload
|
|
11
|
+
|
|
12
|
+
import httpx
|
|
13
|
+
from pydantic import SecretStr
|
|
14
|
+
|
|
15
|
+
from src.client.exceptions import TestCaseNotFoundError
|
|
16
|
+
from src.utils.config import settings
|
|
17
|
+
from src.utils.logger import get_logger
|
|
18
|
+
|
|
19
|
+
from .exceptions import (
|
|
20
|
+
AllureAPIError,
|
|
21
|
+
AllureAuthError,
|
|
22
|
+
AllureNotFoundError,
|
|
23
|
+
AllureRateLimitError,
|
|
24
|
+
AllureValidationError,
|
|
25
|
+
)
|
|
26
|
+
from .generated.api.shared_step_attachment_controller_api import SharedStepAttachmentControllerApi
|
|
27
|
+
from .generated.api.shared_step_controller_api import SharedStepControllerApi
|
|
28
|
+
from .generated.api.shared_step_scenario_controller_api import SharedStepScenarioControllerApi
|
|
29
|
+
from .generated.api.test_case_attachment_controller_api import TestCaseAttachmentControllerApi
|
|
30
|
+
from .generated.api.test_case_controller_api import TestCaseControllerApi
|
|
31
|
+
from .generated.api.test_case_overview_controller_api import TestCaseOverviewControllerApi
|
|
32
|
+
from .generated.api.test_case_scenario_controller_api import TestCaseScenarioControllerApi
|
|
33
|
+
from .generated.api.test_case_search_controller_api import TestCaseSearchControllerApi
|
|
34
|
+
from .generated.api_client import ApiClient
|
|
35
|
+
from .generated.configuration import Configuration
|
|
36
|
+
from .generated.exceptions import ApiException
|
|
37
|
+
from .generated.models.attachment_step_dto import AttachmentStepDto
|
|
38
|
+
from .generated.models.body_step_dto import BodyStepDto
|
|
39
|
+
from .generated.models.custom_field_value_with_cf_dto import CustomFieldValueWithCfDto
|
|
40
|
+
from .generated.models.page_shared_step_dto import PageSharedStepDto
|
|
41
|
+
from .generated.models.page_test_case_dto import PageTestCaseDto
|
|
42
|
+
from .generated.models.scenario_step_create_dto import ScenarioStepCreateDto
|
|
43
|
+
from .generated.models.scenario_step_created_response_dto import ScenarioStepCreatedResponseDto
|
|
44
|
+
from .generated.models.shared_step_attachment_row_dto import SharedStepAttachmentRowDto
|
|
45
|
+
from .generated.models.shared_step_create_dto import SharedStepCreateDto
|
|
46
|
+
from .generated.models.shared_step_dto import SharedStepDto
|
|
47
|
+
from .generated.models.shared_step_patch_dto import SharedStepPatchDto
|
|
48
|
+
from .generated.models.shared_step_scenario_dto_steps_inner import SharedStepScenarioDtoStepsInner
|
|
49
|
+
from .generated.models.shared_step_step_dto import SharedStepStepDto
|
|
50
|
+
from .generated.models.test_case_attachment_row_dto import TestCaseAttachmentRowDto
|
|
51
|
+
from .generated.models.test_case_create_v2_dto import TestCaseCreateV2Dto
|
|
52
|
+
from .generated.models.test_case_dto import TestCaseDto
|
|
53
|
+
from .generated.models.test_case_overview_dto import TestCaseOverviewDto
|
|
54
|
+
from .generated.models.test_case_patch_v2_dto import TestCasePatchV2Dto
|
|
55
|
+
from .generated.models.test_case_row_dto import TestCaseRowDto
|
|
56
|
+
from .generated.models.test_case_scenario_dto import TestCaseScenarioDto
|
|
57
|
+
from .generated.models.test_case_scenario_v2_dto import TestCaseScenarioV2Dto
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# Subclasses to add missing fields to generated models
|
|
61
|
+
class TestCaseDtoWithCF(TestCaseDto):
|
|
62
|
+
"""Subclass to support custom_fields access."""
|
|
63
|
+
|
|
64
|
+
custom_fields: list[CustomFieldValueWithCfDto] | None = None
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class BodyStepDtoWithSteps(BodyStepDto):
|
|
68
|
+
"""Subclass to support nested steps and id."""
|
|
69
|
+
|
|
70
|
+
steps: list[SharedStepScenarioDtoStepsInner] | None = None
|
|
71
|
+
id: int | None = None
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class AttachmentStepDtoWithName(AttachmentStepDto):
|
|
75
|
+
"""Subclass to support name attribute and id."""
|
|
76
|
+
|
|
77
|
+
name: str | None = None
|
|
78
|
+
id: int | None = None
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class SharedStepStepDtoWithId(SharedStepStepDto):
|
|
82
|
+
"""Subclass to support id attribute."""
|
|
83
|
+
|
|
84
|
+
id: int | None = None
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
logger = get_logger(__name__)
|
|
88
|
+
|
|
89
|
+
T = TypeVar("T")
|
|
90
|
+
|
|
91
|
+
type ApiType = (
|
|
92
|
+
TestCaseControllerApi
|
|
93
|
+
| SharedStepControllerApi
|
|
94
|
+
| SharedStepAttachmentControllerApi
|
|
95
|
+
| TestCaseAttachmentControllerApi
|
|
96
|
+
| TestCaseScenarioControllerApi
|
|
97
|
+
| SharedStepScenarioControllerApi
|
|
98
|
+
| TestCaseOverviewControllerApi
|
|
99
|
+
| TestCaseSearchControllerApi
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
type NormalizedScenarioDict = dict[str, object]
|
|
103
|
+
|
|
104
|
+
type ScenarioStepsMap = dict[str, dict[str, object]]
|
|
105
|
+
|
|
106
|
+
type AttachmentsMap = dict[str, dict[str, object]]
|
|
107
|
+
|
|
108
|
+
# Export models for convenience
|
|
109
|
+
__all__ = [
|
|
110
|
+
"AllureClient",
|
|
111
|
+
"AttachmentStepDtoWithName",
|
|
112
|
+
"BodyStepDtoWithSteps",
|
|
113
|
+
"PageSharedStepDto",
|
|
114
|
+
"PageTestCaseDto",
|
|
115
|
+
"ScenarioStepCreateDto",
|
|
116
|
+
"ScenarioStepCreatedResponseDto",
|
|
117
|
+
"SharedStepAttachmentRowDto",
|
|
118
|
+
"SharedStepCreateDto",
|
|
119
|
+
"SharedStepDto",
|
|
120
|
+
"SharedStepPatchDto",
|
|
121
|
+
"SharedStepScenarioDtoStepsInner",
|
|
122
|
+
"SharedStepStepDtoWithId",
|
|
123
|
+
"TestCaseAttachmentRowDto",
|
|
124
|
+
"TestCaseCreateV2Dto",
|
|
125
|
+
"TestCaseDto",
|
|
126
|
+
"TestCaseDtoWithCF",
|
|
127
|
+
"TestCaseOverviewDto",
|
|
128
|
+
"TestCasePatchV2Dto",
|
|
129
|
+
"TestCaseRowDto",
|
|
130
|
+
"TestCaseScenarioDto",
|
|
131
|
+
"TestCaseScenarioV2Dto",
|
|
132
|
+
]
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
class AllureClient:
|
|
136
|
+
"""Async client for Allure TestOps API.
|
|
137
|
+
|
|
138
|
+
This client manages a session with the Allure TestOps API, handling
|
|
139
|
+
initial Bearer token exchange and automatic background renewal
|
|
140
|
+
before expiry.
|
|
141
|
+
|
|
142
|
+
Example:
|
|
143
|
+
```python
|
|
144
|
+
from pydantic import SecretStr
|
|
145
|
+
from src.client import AllureClient
|
|
146
|
+
|
|
147
|
+
async with AllureClient(
|
|
148
|
+
base_url="https://demo.testops.cloud",
|
|
149
|
+
token=SecretStr("your-api-token"),
|
|
150
|
+
project=0
|
|
151
|
+
) as client:
|
|
152
|
+
# client is initialized and authenticated
|
|
153
|
+
pass
|
|
154
|
+
```
|
|
155
|
+
"""
|
|
156
|
+
|
|
157
|
+
def __init__(
|
|
158
|
+
self,
|
|
159
|
+
base_url: str,
|
|
160
|
+
token: SecretStr,
|
|
161
|
+
project: int,
|
|
162
|
+
timeout: float = 30.0,
|
|
163
|
+
) -> None:
|
|
164
|
+
"""Initialize AllureClient.
|
|
165
|
+
|
|
166
|
+
Args:
|
|
167
|
+
base_url: Allure TestOps instance base URL
|
|
168
|
+
token: API token (will be exchanged for JWT Bearer token)
|
|
169
|
+
project: Target Allure TestOps project ID
|
|
170
|
+
timeout: Request timeout in seconds (default: 30.0)
|
|
171
|
+
"""
|
|
172
|
+
if not base_url.startswith(("http://", "https://")):
|
|
173
|
+
raise ValueError(f"Invalid base_url scheme: {base_url}. Must start with http:// or https://")
|
|
174
|
+
|
|
175
|
+
self._base_url = base_url.rstrip("/")
|
|
176
|
+
self._token = token
|
|
177
|
+
self._project = project
|
|
178
|
+
self._timeout = timeout
|
|
179
|
+
self._jwt_token: str | None = None
|
|
180
|
+
self._token_expires_at: float | None = None
|
|
181
|
+
self._csrf_token: str | None = None
|
|
182
|
+
|
|
183
|
+
# Generated client components
|
|
184
|
+
self._api_client: ApiClient | None = None
|
|
185
|
+
self._test_case_api: TestCaseControllerApi | None = None
|
|
186
|
+
self._shared_step_api: SharedStepControllerApi | None = None
|
|
187
|
+
self._shared_step_attachment_api: SharedStepAttachmentControllerApi | None = None
|
|
188
|
+
self._attachment_api: TestCaseAttachmentControllerApi | None = None
|
|
189
|
+
self._scenario_api: TestCaseScenarioControllerApi | None = None
|
|
190
|
+
self._shared_step_scenario_api: SharedStepScenarioControllerApi | None = None
|
|
191
|
+
self._overview_api: TestCaseOverviewControllerApi
|
|
192
|
+
self._search_api: TestCaseSearchControllerApi | None = None
|
|
193
|
+
self._is_entered = False
|
|
194
|
+
|
|
195
|
+
@classmethod
|
|
196
|
+
def from_env(cls, project: int | None = None, timeout: float = 30.0) -> AllureClient:
|
|
197
|
+
"""Initialize AllureClient from environment variables.
|
|
198
|
+
|
|
199
|
+
Expects:
|
|
200
|
+
ALLURE_ENDPOINT: The base URL of the Allure TestOps instance.
|
|
201
|
+
ALLURE_API_TOKEN: The API token for authentication.
|
|
202
|
+
ALLURE_PROJECT_ID: The target project ID.
|
|
203
|
+
|
|
204
|
+
Args:
|
|
205
|
+
project: Optional target Allure TestOps project ID to override the one from environment variables.
|
|
206
|
+
timeout: Request timeout in seconds (default: 30.0)
|
|
207
|
+
|
|
208
|
+
Returns:
|
|
209
|
+
An initialized AllureClient instance.
|
|
210
|
+
|
|
211
|
+
Raises:
|
|
212
|
+
KeyError: If required environment variables are missing.
|
|
213
|
+
ValueError: If settings validation fails.
|
|
214
|
+
"""
|
|
215
|
+
if not settings.ALLURE_ENDPOINT:
|
|
216
|
+
raise KeyError("ALLURE_ENDPOINT is not set in environment or config")
|
|
217
|
+
if not settings.ALLURE_API_TOKEN:
|
|
218
|
+
raise KeyError("ALLURE_API_TOKEN is not set in environment or config")
|
|
219
|
+
|
|
220
|
+
if not isinstance(settings.ALLURE_PROJECT_ID, int) or settings.ALLURE_PROJECT_ID <= 0:
|
|
221
|
+
raise ValueError("ALLURE_PROJECT_ID must be a positive integer")
|
|
222
|
+
|
|
223
|
+
if project:
|
|
224
|
+
p = project
|
|
225
|
+
else:
|
|
226
|
+
p = settings.ALLURE_PROJECT_ID
|
|
227
|
+
|
|
228
|
+
return cls(
|
|
229
|
+
base_url=settings.ALLURE_ENDPOINT,
|
|
230
|
+
token=settings.ALLURE_API_TOKEN,
|
|
231
|
+
project=p,
|
|
232
|
+
timeout=timeout,
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
def set_project(self, project: int) -> None:
|
|
236
|
+
self._project = project
|
|
237
|
+
|
|
238
|
+
def get_project(self) -> int:
|
|
239
|
+
return self._project
|
|
240
|
+
|
|
241
|
+
async def _get_jwt_token(self) -> str:
|
|
242
|
+
"""Exchange API token for a JWT Bearer token.
|
|
243
|
+
|
|
244
|
+
Uses a one-off httpx request to the auth endpoint since the
|
|
245
|
+
generated client is designed for use after authentication.
|
|
246
|
+
|
|
247
|
+
Returns:
|
|
248
|
+
The raw JWT access token string.
|
|
249
|
+
|
|
250
|
+
Raises:
|
|
251
|
+
AllureAuthError: If the token exchange fails due to invalid credentials.
|
|
252
|
+
AllureAPIError: If a connection or system error occurs.
|
|
253
|
+
"""
|
|
254
|
+
# We use a temporary httpx client for the initial token exchange
|
|
255
|
+
# because the generated client expects a valid access token.
|
|
256
|
+
async with httpx.AsyncClient(base_url=self._base_url, timeout=self._timeout) as temp_client:
|
|
257
|
+
try:
|
|
258
|
+
response = await temp_client.post(
|
|
259
|
+
"/api/uaa/oauth/token",
|
|
260
|
+
data={
|
|
261
|
+
"grant_type": "apitoken",
|
|
262
|
+
"scope": "openid",
|
|
263
|
+
"token": self._token.get_secret_value(),
|
|
264
|
+
},
|
|
265
|
+
headers={"Accept": "application/json"},
|
|
266
|
+
timeout=self._timeout * 2,
|
|
267
|
+
)
|
|
268
|
+
response.raise_for_status()
|
|
269
|
+
data = response.json()
|
|
270
|
+
access_token: str = data["access_token"]
|
|
271
|
+
expires_in: int = data.get("expires_in", 3600)
|
|
272
|
+
|
|
273
|
+
self._jwt_token = access_token
|
|
274
|
+
# Refresh 60 seconds before expiry
|
|
275
|
+
self._token_expires_at = time.time() + expires_in - 60
|
|
276
|
+
|
|
277
|
+
# Capture CSRF token if present (standard Spring Security/Angular convention)
|
|
278
|
+
self._csrf_token = response.cookies.get("XSRF-TOKEN")
|
|
279
|
+
|
|
280
|
+
return access_token
|
|
281
|
+
except httpx.HTTPStatusError as e:
|
|
282
|
+
raise AllureAuthError(
|
|
283
|
+
f"Token exchange failed: {e.response.text}",
|
|
284
|
+
status_code=e.response.status_code,
|
|
285
|
+
response_body=e.response.text,
|
|
286
|
+
) from e
|
|
287
|
+
except httpx.RequestError as e:
|
|
288
|
+
raise AllureAPIError(f"Token exchange request error: {e}") from e
|
|
289
|
+
|
|
290
|
+
async def _ensure_valid_token(self) -> None:
|
|
291
|
+
"""Ensure the session has a valid JWT token.
|
|
292
|
+
|
|
293
|
+
Checks the token expiration and triggers a refresh if it's missing
|
|
294
|
+
or about to expire (within 60 seconds). Also initializes or updates
|
|
295
|
+
the internal ApiClient and controllers.
|
|
296
|
+
"""
|
|
297
|
+
if self._token_expires_at is None or time.time() >= self._token_expires_at:
|
|
298
|
+
new_token = await self._get_jwt_token()
|
|
299
|
+
|
|
300
|
+
# Initialize or update ApiClient
|
|
301
|
+
if self._api_client is None:
|
|
302
|
+
config = Configuration(host=self._base_url, access_token=new_token, retries=3)
|
|
303
|
+
self._api_client = ApiClient(configuration=config)
|
|
304
|
+
# Set custom timeout on the underlying REST client if possible
|
|
305
|
+
# The generated client typically uses default timeout or per-request
|
|
306
|
+
else:
|
|
307
|
+
self._api_client.configuration.access_token = new_token
|
|
308
|
+
|
|
309
|
+
if self._api_client:
|
|
310
|
+
# Ensure Authorization header is set as generated client might not pick it up automatically
|
|
311
|
+
self._api_client.default_headers["Authorization"] = f"Bearer {new_token}"
|
|
312
|
+
|
|
313
|
+
# Inject CSRF token if available
|
|
314
|
+
if self._csrf_token and self._api_client:
|
|
315
|
+
# Cookie for standard session checks
|
|
316
|
+
self._api_client.cookie = f"XSRF-TOKEN={self._csrf_token}"
|
|
317
|
+
# Header for CSRF protection
|
|
318
|
+
self._api_client.default_headers["X-XSRF-TOKEN"] = self._csrf_token
|
|
319
|
+
|
|
320
|
+
# Re-initialize controllers
|
|
321
|
+
self._test_case_api = TestCaseControllerApi(self._api_client)
|
|
322
|
+
self._shared_step_api = SharedStepControllerApi(self._api_client)
|
|
323
|
+
self._shared_step_attachment_api = SharedStepAttachmentControllerApi(self._api_client)
|
|
324
|
+
self._attachment_api = TestCaseAttachmentControllerApi(self._api_client)
|
|
325
|
+
self._scenario_api = TestCaseScenarioControllerApi(self._api_client)
|
|
326
|
+
self._shared_step_scenario_api = SharedStepScenarioControllerApi(self._api_client)
|
|
327
|
+
self._overview_api = TestCaseOverviewControllerApi(self._api_client)
|
|
328
|
+
self._search_api = TestCaseSearchControllerApi(self._api_client)
|
|
329
|
+
|
|
330
|
+
@property
|
|
331
|
+
def api_client(self) -> ApiClient:
|
|
332
|
+
"""Get the underlying ApiClient instance.
|
|
333
|
+
|
|
334
|
+
Raises:
|
|
335
|
+
RuntimeError: If the client has not been initialized (entered with).
|
|
336
|
+
"""
|
|
337
|
+
if self._api_client is None:
|
|
338
|
+
raise RuntimeError("AllureClient must be used as an async context manager")
|
|
339
|
+
return self._api_client
|
|
340
|
+
|
|
341
|
+
async def __aenter__(self) -> AllureClient:
|
|
342
|
+
"""Initialize the client session within an async context.
|
|
343
|
+
|
|
344
|
+
Performs token exchange and prepares all generated API controllers.
|
|
345
|
+
|
|
346
|
+
Returns:
|
|
347
|
+
Self (authenticated and ready to use).
|
|
348
|
+
"""
|
|
349
|
+
await self._ensure_valid_token()
|
|
350
|
+
if self._api_client:
|
|
351
|
+
# Generate client's __aenter__ is untyped
|
|
352
|
+
await self._api_client.__aenter__() # type: ignore[no-untyped-call]
|
|
353
|
+
self._is_entered = True
|
|
354
|
+
return self
|
|
355
|
+
|
|
356
|
+
async def __aexit__(self, *args: object) -> None:
|
|
357
|
+
"""Cleanly close the client session and underlying HTTP transport."""
|
|
358
|
+
self._is_entered = False
|
|
359
|
+
if self._api_client:
|
|
360
|
+
# Generated client's __aexit__ is untyped
|
|
361
|
+
await self._api_client.__aexit__(*args) # type: ignore[no-untyped-call]
|
|
362
|
+
|
|
363
|
+
def _handle_api_exception(self, e: ApiException) -> None:
|
|
364
|
+
"""Map generated client exceptions to lucius-mcp custom exceptions.
|
|
365
|
+
|
|
366
|
+
Args:
|
|
367
|
+
e: The raw ApiException from the generated client.
|
|
368
|
+
|
|
369
|
+
Raises:
|
|
370
|
+
AllureNotFoundError: For 404 status.
|
|
371
|
+
AllureValidationError: For 400 status.
|
|
372
|
+
AllureAuthError: For 401/403 status.
|
|
373
|
+
AllureRateLimitError: For 429 status.
|
|
374
|
+
AllureAPIError: For all other non-success statuses.
|
|
375
|
+
"""
|
|
376
|
+
status = e.status
|
|
377
|
+
body = e.body if hasattr(e, "body") else str(e)
|
|
378
|
+
|
|
379
|
+
# Log the exception with traceback for debugging
|
|
380
|
+
logger.exception("API request failed with status %s", status)
|
|
381
|
+
|
|
382
|
+
if status == 404:
|
|
383
|
+
raise AllureNotFoundError(f"Resource not found: {body}", status_code=status, response_body=body) from e
|
|
384
|
+
if status == 400:
|
|
385
|
+
raise AllureValidationError(f"Validation error: {body}", status_code=status, response_body=body) from e
|
|
386
|
+
if status in (401, 403):
|
|
387
|
+
raise AllureAuthError(f"Authentication failed: {body}", status_code=status, response_body=body) from e
|
|
388
|
+
if status == 429:
|
|
389
|
+
raise AllureRateLimitError("Rate limit exceeded", status_code=status, response_body=body) from e
|
|
390
|
+
|
|
391
|
+
raise AllureAPIError(f"API request failed: {body}", status_code=status, response_body=body) from e
|
|
392
|
+
|
|
393
|
+
def _require_entered(self) -> None:
|
|
394
|
+
if not self._is_entered:
|
|
395
|
+
raise AllureAPIError("Client not initialized. Use 'async with AllureClient(...)'")
|
|
396
|
+
|
|
397
|
+
@staticmethod
|
|
398
|
+
def _raise_missing_api(api_name: str) -> None:
|
|
399
|
+
raise AllureAPIError(f"Internal error: {api_name} not initialized")
|
|
400
|
+
|
|
401
|
+
@overload
|
|
402
|
+
@overload
|
|
403
|
+
async def _get_api(
|
|
404
|
+
self, attr_name: Literal["_test_case_api"], *, error_name: str | None = None
|
|
405
|
+
) -> TestCaseControllerApi: ...
|
|
406
|
+
|
|
407
|
+
@overload
|
|
408
|
+
async def _get_api(
|
|
409
|
+
self, attr_name: Literal["_shared_step_api"], *, error_name: str | None = None
|
|
410
|
+
) -> SharedStepControllerApi: ...
|
|
411
|
+
|
|
412
|
+
@overload
|
|
413
|
+
async def _get_api(
|
|
414
|
+
self, attr_name: Literal["_shared_step_attachment_api"], *, error_name: str | None = None
|
|
415
|
+
) -> SharedStepAttachmentControllerApi: ...
|
|
416
|
+
|
|
417
|
+
@overload
|
|
418
|
+
async def _get_api(
|
|
419
|
+
self, attr_name: Literal["_attachment_api"], *, error_name: str | None = None
|
|
420
|
+
) -> TestCaseAttachmentControllerApi: ...
|
|
421
|
+
|
|
422
|
+
@overload
|
|
423
|
+
async def _get_api(
|
|
424
|
+
self, attr_name: Literal["_scenario_api"], *, error_name: str | None = None
|
|
425
|
+
) -> TestCaseScenarioControllerApi: ...
|
|
426
|
+
|
|
427
|
+
@overload
|
|
428
|
+
async def _get_api(
|
|
429
|
+
self, attr_name: Literal["_shared_step_scenario_api"], *, error_name: str | None = None
|
|
430
|
+
) -> SharedStepScenarioControllerApi: ...
|
|
431
|
+
|
|
432
|
+
@overload
|
|
433
|
+
async def _get_api(
|
|
434
|
+
self, attr_name: Literal["_overview_api"], *, error_name: str | None = None
|
|
435
|
+
) -> TestCaseOverviewControllerApi: ...
|
|
436
|
+
|
|
437
|
+
@overload
|
|
438
|
+
async def _get_api(
|
|
439
|
+
self, attr_name: Literal["_search_api"], *, error_name: str | None = None
|
|
440
|
+
) -> TestCaseSearchControllerApi: ...
|
|
441
|
+
|
|
442
|
+
async def _get_api(self, attr_name: str, *, error_name: str | None = None) -> ApiType:
|
|
443
|
+
self._require_entered()
|
|
444
|
+
await self._ensure_valid_token()
|
|
445
|
+
api = getattr(self, attr_name)
|
|
446
|
+
if api is None:
|
|
447
|
+
self._raise_missing_api(error_name or attr_name.lstrip("_"))
|
|
448
|
+
return cast(ApiType, api)
|
|
449
|
+
|
|
450
|
+
async def _call_api(self, coro: Awaitable[T]) -> T:
|
|
451
|
+
try:
|
|
452
|
+
return await coro
|
|
453
|
+
except ApiException as e:
|
|
454
|
+
self._handle_api_exception(e)
|
|
455
|
+
raise
|
|
456
|
+
|
|
457
|
+
async def _call_api_raw(self, coro: Awaitable[httpx.Response]) -> httpx.Response:
|
|
458
|
+
try:
|
|
459
|
+
return await coro
|
|
460
|
+
except ApiException as e:
|
|
461
|
+
self._handle_api_exception(e)
|
|
462
|
+
raise
|
|
463
|
+
|
|
464
|
+
@staticmethod
|
|
465
|
+
def _extract_response_data(response: httpx.Response) -> dict[str, object]:
|
|
466
|
+
if not 200 <= response.status_code <= 299:
|
|
467
|
+
raise ApiException(status=response.status_code, reason=response.reason_phrase, body=response.text)
|
|
468
|
+
data = response.json()
|
|
469
|
+
if isinstance(data, dict):
|
|
470
|
+
return data
|
|
471
|
+
raise ApiException(status=response.status_code, reason=response.reason_phrase, body=response.text)
|
|
472
|
+
|
|
473
|
+
async def _create_scenario_step_via_api(
|
|
474
|
+
self,
|
|
475
|
+
api: TestCaseScenarioControllerApi | SharedStepScenarioControllerApi,
|
|
476
|
+
step: ScenarioStepCreateDto,
|
|
477
|
+
*,
|
|
478
|
+
after_id: int | None = None,
|
|
479
|
+
with_expected_result: bool = False,
|
|
480
|
+
) -> ScenarioStepCreatedResponseDto:
|
|
481
|
+
if isinstance(api, TestCaseScenarioControllerApi):
|
|
482
|
+
response = await self._call_api_raw(
|
|
483
|
+
api.create15_without_preload_content(
|
|
484
|
+
scenario_step_create_dto=step,
|
|
485
|
+
after_id=after_id,
|
|
486
|
+
with_expected_result=with_expected_result,
|
|
487
|
+
_request_timeout=self._timeout,
|
|
488
|
+
)
|
|
489
|
+
)
|
|
490
|
+
else:
|
|
491
|
+
response = await self._call_api_raw(
|
|
492
|
+
api.create20_without_preload_content(
|
|
493
|
+
scenario_step_create_dto=step,
|
|
494
|
+
_request_timeout=self._timeout,
|
|
495
|
+
)
|
|
496
|
+
)
|
|
497
|
+
data = self._extract_response_data(response)
|
|
498
|
+
raw_created_step_id = data.get("createdStepId")
|
|
499
|
+
created_step_id = raw_created_step_id if isinstance(raw_created_step_id, int) else None
|
|
500
|
+
return ScenarioStepCreatedResponseDto.model_construct(
|
|
501
|
+
created_step_id=created_step_id,
|
|
502
|
+
)
|
|
503
|
+
|
|
504
|
+
@overload
|
|
505
|
+
async def _upload_attachment_via_api(
|
|
506
|
+
self,
|
|
507
|
+
api: TestCaseAttachmentControllerApi,
|
|
508
|
+
*,
|
|
509
|
+
test_case_id: int,
|
|
510
|
+
shared_step_id: None = None,
|
|
511
|
+
file_data: list[bytes | str | tuple[str, bytes]],
|
|
512
|
+
) -> list[TestCaseAttachmentRowDto]: ...
|
|
513
|
+
|
|
514
|
+
@overload
|
|
515
|
+
async def _upload_attachment_via_api(
|
|
516
|
+
self,
|
|
517
|
+
api: SharedStepAttachmentControllerApi,
|
|
518
|
+
*,
|
|
519
|
+
test_case_id: None = None,
|
|
520
|
+
shared_step_id: int,
|
|
521
|
+
file_data: list[bytes | str | tuple[str, bytes]],
|
|
522
|
+
) -> list[SharedStepAttachmentRowDto]: ...
|
|
523
|
+
|
|
524
|
+
async def _upload_attachment_via_api(
|
|
525
|
+
self,
|
|
526
|
+
api: TestCaseAttachmentControllerApi | SharedStepAttachmentControllerApi,
|
|
527
|
+
*,
|
|
528
|
+
test_case_id: int | None = None,
|
|
529
|
+
shared_step_id: int | None = None,
|
|
530
|
+
file_data: list[bytes | str | tuple[str, bytes]],
|
|
531
|
+
) -> list[TestCaseAttachmentRowDto] | list[SharedStepAttachmentRowDto]:
|
|
532
|
+
if isinstance(api, TestCaseAttachmentControllerApi):
|
|
533
|
+
if test_case_id is None:
|
|
534
|
+
raise AllureValidationError("test_case_id is required for test case attachment upload")
|
|
535
|
+
return await self._call_api(
|
|
536
|
+
api.create16(
|
|
537
|
+
test_case_id=test_case_id,
|
|
538
|
+
file=file_data,
|
|
539
|
+
_request_timeout=self._timeout,
|
|
540
|
+
)
|
|
541
|
+
)
|
|
542
|
+
if shared_step_id is None:
|
|
543
|
+
raise AllureValidationError("shared_step_id is required for shared step attachment upload")
|
|
544
|
+
return await self._call_api(
|
|
545
|
+
api.create21(
|
|
546
|
+
shared_step_id=shared_step_id,
|
|
547
|
+
file=file_data,
|
|
548
|
+
_request_timeout=self._timeout,
|
|
549
|
+
)
|
|
550
|
+
)
|
|
551
|
+
|
|
552
|
+
# ==========================================
|
|
553
|
+
# Test Case operations
|
|
554
|
+
# ==========================================
|
|
555
|
+
|
|
556
|
+
async def create_test_case(self, data: TestCaseCreateV2Dto) -> TestCaseOverviewDto:
|
|
557
|
+
"""Create a new test case in the specified project.
|
|
558
|
+
|
|
559
|
+
Args:
|
|
560
|
+
data: Test case definition (name, scenario, etc.).
|
|
561
|
+
|
|
562
|
+
Returns:
|
|
563
|
+
The created test case overview.
|
|
564
|
+
|
|
565
|
+
Raises:
|
|
566
|
+
AllureNotFoundError: If project doesn't exist.
|
|
567
|
+
AllureValidationError: If input data fails validation.
|
|
568
|
+
AllureAuthError: If unauthorized.
|
|
569
|
+
AllureAPIError: If the server returns an error.
|
|
570
|
+
"""
|
|
571
|
+
api = await self._get_api("_test_case_api")
|
|
572
|
+
|
|
573
|
+
# Ensure project_id is set in the body as required by the model
|
|
574
|
+
if hasattr(data, "project_id") and not data.project_id:
|
|
575
|
+
data.project_id = self._project
|
|
576
|
+
response = await self._call_api(api.create13(test_case_create_v2_dto=data, _request_timeout=self._timeout))
|
|
577
|
+
# Switch view from TestCaseDto to TestCaseOverviewDto
|
|
578
|
+
# Since fields are compatible (mostly optional), we can use model_dump/validate
|
|
579
|
+
return TestCaseOverviewDto.model_validate(response.model_dump())
|
|
580
|
+
|
|
581
|
+
@staticmethod
|
|
582
|
+
def _escape_rql_value(value: str) -> str:
|
|
583
|
+
return value.replace("\\", "\\\\").replace('"', '\\"')
|
|
584
|
+
|
|
585
|
+
@classmethod
|
|
586
|
+
def _build_rql_filters(cls, search: str | None, status: str | None, tags: list[str] | None) -> str:
|
|
587
|
+
parts: list[str] = []
|
|
588
|
+
if search:
|
|
589
|
+
parts.append(f'name~="{cls._escape_rql_value(search)}"')
|
|
590
|
+
if status:
|
|
591
|
+
parts.append(f'status="{cls._escape_rql_value(status)}"')
|
|
592
|
+
if tags:
|
|
593
|
+
for tag in tags:
|
|
594
|
+
parts.append(f'tag="{cls._escape_rql_value(tag)}"')
|
|
595
|
+
return " and ".join(parts)
|
|
596
|
+
|
|
597
|
+
async def list_test_cases(
|
|
598
|
+
self,
|
|
599
|
+
project_id: int,
|
|
600
|
+
page: int = 0,
|
|
601
|
+
size: int = 20,
|
|
602
|
+
search: str | None = None,
|
|
603
|
+
tags: list[str] | None = None,
|
|
604
|
+
status: str | None = None,
|
|
605
|
+
) -> PageTestCaseDto:
|
|
606
|
+
"""List test cases for a project.
|
|
607
|
+
|
|
608
|
+
Args:
|
|
609
|
+
project_id: Target project ID.
|
|
610
|
+
page: Zero-based page index.
|
|
611
|
+
size: Page size.
|
|
612
|
+
search: Optional name/description search.
|
|
613
|
+
tags: Optional list of tags to filter (AQL syntax).
|
|
614
|
+
status: Optional status filter for AQL query.
|
|
615
|
+
|
|
616
|
+
Returns:
|
|
617
|
+
Paginated test cases for the project.
|
|
618
|
+
|
|
619
|
+
Raises:
|
|
620
|
+
AllureNotFoundError: If project doesn't exist.
|
|
621
|
+
AllureValidationError: If input data fails validation.
|
|
622
|
+
AllureAuthError: If unauthorized.
|
|
623
|
+
AllureAPIError: If the server returns an error.
|
|
624
|
+
"""
|
|
625
|
+
search_api = await self._get_api("_search_api", error_name="test_case search APIs")
|
|
626
|
+
|
|
627
|
+
if not isinstance(project_id, int) or project_id <= 0:
|
|
628
|
+
raise AllureValidationError("Project ID must be a positive integer")
|
|
629
|
+
|
|
630
|
+
if not isinstance(page, int) or page < 0:
|
|
631
|
+
raise AllureValidationError("Page must be a non-negative integer")
|
|
632
|
+
if not isinstance(size, int) or size <= 0 or size > 100:
|
|
633
|
+
raise AllureValidationError("Size must be between 1 and 100")
|
|
634
|
+
|
|
635
|
+
rql = self._build_rql_filters(search=search, status=status, tags=tags)
|
|
636
|
+
|
|
637
|
+
return await self._call_api(
|
|
638
|
+
search_api.search1(
|
|
639
|
+
project_id=project_id,
|
|
640
|
+
rql=rql,
|
|
641
|
+
page=page,
|
|
642
|
+
size=size,
|
|
643
|
+
_request_timeout=self._timeout,
|
|
644
|
+
)
|
|
645
|
+
)
|
|
646
|
+
|
|
647
|
+
async def search_test_cases_aql(
|
|
648
|
+
self,
|
|
649
|
+
project_id: int,
|
|
650
|
+
rql: str,
|
|
651
|
+
page: int = 0,
|
|
652
|
+
size: int = 20,
|
|
653
|
+
deleted: bool = False,
|
|
654
|
+
sort: list[str] | None = None,
|
|
655
|
+
) -> PageTestCaseDto:
|
|
656
|
+
"""Search test cases using raw AQL (Allure Query Language).
|
|
657
|
+
|
|
658
|
+
This method passes the AQL query directly to the Allure search endpoint,
|
|
659
|
+
supporting complex queries with operators like AND, OR, NOT, and field filters.
|
|
660
|
+
|
|
661
|
+
Args:
|
|
662
|
+
project_id: Target project ID.
|
|
663
|
+
rql: Raw AQL query string (e.g., 'status="failed" and tag="regression"').
|
|
664
|
+
page: Zero-based page index.
|
|
665
|
+
size: Page size (max 100).
|
|
666
|
+
deleted: If True, include deleted test cases.
|
|
667
|
+
sort: Optional sort criteria (e.g., ["id,DESC"]).
|
|
668
|
+
|
|
669
|
+
Returns:
|
|
670
|
+
Paginated test case results matching the AQL query.
|
|
671
|
+
|
|
672
|
+
Raises:
|
|
673
|
+
AllureValidationError: If AQL syntax is invalid or input fails validation.
|
|
674
|
+
AllureNotFoundError: If project doesn't exist.
|
|
675
|
+
AllureAuthError: If unauthorized.
|
|
676
|
+
AllureAPIError: If the server returns an error.
|
|
677
|
+
"""
|
|
678
|
+
search_api = await self._get_api("_search_api", error_name="test_case search APIs")
|
|
679
|
+
|
|
680
|
+
if not isinstance(project_id, int) or project_id <= 0:
|
|
681
|
+
raise AllureValidationError("Project ID must be a positive integer")
|
|
682
|
+
|
|
683
|
+
if not isinstance(rql, str) or not rql.strip():
|
|
684
|
+
raise AllureValidationError("AQL query must be a non-empty string")
|
|
685
|
+
|
|
686
|
+
if not isinstance(page, int) or page < 0:
|
|
687
|
+
raise AllureValidationError("Page must be a non-negative integer")
|
|
688
|
+
if not isinstance(size, int) or size <= 0 or size > 100:
|
|
689
|
+
raise AllureValidationError("Size must be between 1 and 100")
|
|
690
|
+
|
|
691
|
+
return await self._call_api(
|
|
692
|
+
search_api.search1(
|
|
693
|
+
project_id=project_id,
|
|
694
|
+
rql=rql,
|
|
695
|
+
deleted=deleted,
|
|
696
|
+
page=page,
|
|
697
|
+
size=size,
|
|
698
|
+
sort=sort,
|
|
699
|
+
_request_timeout=self._timeout,
|
|
700
|
+
)
|
|
701
|
+
)
|
|
702
|
+
|
|
703
|
+
async def validate_test_case_query(
|
|
704
|
+
self,
|
|
705
|
+
project_id: int,
|
|
706
|
+
rql: str,
|
|
707
|
+
deleted: bool = False,
|
|
708
|
+
) -> tuple[bool, int | None]:
|
|
709
|
+
"""Validate an AQL query without executing it.
|
|
710
|
+
|
|
711
|
+
Use this to check AQL syntax and get an estimated count of matching
|
|
712
|
+
test cases before running an expensive search.
|
|
713
|
+
|
|
714
|
+
Args:
|
|
715
|
+
project_id: Target project ID.
|
|
716
|
+
rql: Raw AQL query string to validate.
|
|
717
|
+
deleted: If True, include deleted test cases in count.
|
|
718
|
+
|
|
719
|
+
Returns:
|
|
720
|
+
A tuple of (is_valid, count). If valid is True, count is the
|
|
721
|
+
estimated number of matching test cases. If valid is False,
|
|
722
|
+
count may be None.
|
|
723
|
+
|
|
724
|
+
Raises:
|
|
725
|
+
AllureValidationError: If input fails basic validation.
|
|
726
|
+
AllureNotFoundError: If project doesn't exist.
|
|
727
|
+
AllureAuthError: If unauthorized.
|
|
728
|
+
AllureAPIError: If the server returns an error.
|
|
729
|
+
"""
|
|
730
|
+
search_api = await self._get_api("_search_api", error_name="test_case search APIs")
|
|
731
|
+
|
|
732
|
+
if not isinstance(project_id, int) or project_id <= 0:
|
|
733
|
+
raise AllureValidationError("Project ID must be a positive integer")
|
|
734
|
+
|
|
735
|
+
if not isinstance(rql, str) or not rql.strip():
|
|
736
|
+
raise AllureValidationError("AQL query must be a non-empty string")
|
|
737
|
+
|
|
738
|
+
response = await self._call_api(
|
|
739
|
+
search_api.validate_query1(
|
|
740
|
+
project_id=project_id,
|
|
741
|
+
rql=rql,
|
|
742
|
+
deleted=deleted,
|
|
743
|
+
_request_timeout=self._timeout,
|
|
744
|
+
)
|
|
745
|
+
)
|
|
746
|
+
|
|
747
|
+
return (response.valid or False, response.count)
|
|
748
|
+
|
|
749
|
+
async def upload_attachment(
|
|
750
|
+
self,
|
|
751
|
+
test_case_id: int,
|
|
752
|
+
file_data: list[bytes | str | tuple[str, bytes]],
|
|
753
|
+
) -> list[TestCaseAttachmentRowDto]:
|
|
754
|
+
"""Upload one or more attachments to a test case.
|
|
755
|
+
|
|
756
|
+
Args:
|
|
757
|
+
test_case_id: Target test case ID.
|
|
758
|
+
file_data: List of tuples containing (filename, content_bytes).
|
|
759
|
+
|
|
760
|
+
Returns:
|
|
761
|
+
List of successfully created attachment records.
|
|
762
|
+
|
|
763
|
+
Raises:
|
|
764
|
+
AllureValidationError: If file types or sizes are rejected.
|
|
765
|
+
AllureAuthError: If unauthorized.
|
|
766
|
+
AllureAPIError: If the server returns an error.
|
|
767
|
+
"""
|
|
768
|
+
attachment_api = await self._get_api("_attachment_api")
|
|
769
|
+
return await self._upload_attachment_via_api(
|
|
770
|
+
attachment_api,
|
|
771
|
+
test_case_id=test_case_id,
|
|
772
|
+
file_data=file_data,
|
|
773
|
+
)
|
|
774
|
+
|
|
775
|
+
async def create_scenario_step(
|
|
776
|
+
self,
|
|
777
|
+
test_case_id: int,
|
|
778
|
+
step: ScenarioStepCreateDto,
|
|
779
|
+
after_id: int | None = None,
|
|
780
|
+
with_expected_result: bool = False,
|
|
781
|
+
) -> ScenarioStepCreatedResponseDto:
|
|
782
|
+
"""Create a scenario step for an existing test case.
|
|
783
|
+
|
|
784
|
+
Args:
|
|
785
|
+
test_case_id: The ID of the test case to add the step to.
|
|
786
|
+
step: The step data to create. Must have test_case_id set.
|
|
787
|
+
after_id: Optional ID of the step after which to insert the new step.
|
|
788
|
+
with_expected_result: If True, creates an expected result step below.
|
|
789
|
+
|
|
790
|
+
Returns:
|
|
791
|
+
The response containing the created step ID and updated scenario.
|
|
792
|
+
|
|
793
|
+
Raises:
|
|
794
|
+
AllureNotFoundError: If test case doesn't exist.
|
|
795
|
+
AllureValidationError: If input data fails validation.
|
|
796
|
+
AllureAuthError: If unauthorized.
|
|
797
|
+
AllureAPIError: If the server returns an error.
|
|
798
|
+
"""
|
|
799
|
+
scenario_api = await self._get_api("_scenario_api")
|
|
800
|
+
|
|
801
|
+
# Ensure test_case_id is set
|
|
802
|
+
if step.test_case_id is None:
|
|
803
|
+
step = ScenarioStepCreateDto.model_validate(
|
|
804
|
+
{
|
|
805
|
+
"testCaseId": test_case_id,
|
|
806
|
+
"body": step.body,
|
|
807
|
+
"bodyJson": step.body_json,
|
|
808
|
+
"attachmentId": step.attachment_id,
|
|
809
|
+
"sharedStepId": step.shared_step_id,
|
|
810
|
+
"parentId": step.parent_id,
|
|
811
|
+
}
|
|
812
|
+
)
|
|
813
|
+
|
|
814
|
+
return await self._create_scenario_step_via_api(
|
|
815
|
+
scenario_api,
|
|
816
|
+
step,
|
|
817
|
+
after_id=after_id,
|
|
818
|
+
with_expected_result=with_expected_result,
|
|
819
|
+
)
|
|
820
|
+
|
|
821
|
+
async def delete_scenario_step(self, step_id: int) -> None:
|
|
822
|
+
"""Delete a scenario step.
|
|
823
|
+
|
|
824
|
+
Args:
|
|
825
|
+
step_id: ID of the step to delete.
|
|
826
|
+
|
|
827
|
+
Raises:
|
|
828
|
+
AllureAPIError: If the API request fails.
|
|
829
|
+
"""
|
|
830
|
+
scenario_api = await self._get_api("_scenario_api")
|
|
831
|
+
await self._call_api(
|
|
832
|
+
scenario_api.delete_by_id1(
|
|
833
|
+
id=step_id,
|
|
834
|
+
_request_timeout=self._timeout,
|
|
835
|
+
)
|
|
836
|
+
)
|
|
837
|
+
|
|
838
|
+
async def get_test_case(self, test_case_id: int) -> TestCaseDto:
|
|
839
|
+
"""Retrieve a specific test case by its ID.
|
|
840
|
+
|
|
841
|
+
Args:
|
|
842
|
+
test_case_id: The unique ID of the test case.
|
|
843
|
+
|
|
844
|
+
Returns:
|
|
845
|
+
The test case data.
|
|
846
|
+
|
|
847
|
+
Raises:
|
|
848
|
+
AllureNotFoundError: If test case doesn't exist.
|
|
849
|
+
AllureAuthError: If unauthorized.
|
|
850
|
+
AllureAPIError: If the server returns an error.
|
|
851
|
+
"""
|
|
852
|
+
test_case_api = await self._get_api("_test_case_api")
|
|
853
|
+
|
|
854
|
+
try:
|
|
855
|
+
# Use _without_preload_content to get raw JSON for missing fields (like customFields)
|
|
856
|
+
# Actually, for customFields we now use get_overview
|
|
857
|
+
response = await self._call_api_raw(
|
|
858
|
+
test_case_api.find_one11_without_preload_content(id=test_case_id, _request_timeout=self._timeout)
|
|
859
|
+
)
|
|
860
|
+
raw_data = self._extract_response_data(response)
|
|
861
|
+
# Use our subclass to support extra fields
|
|
862
|
+
case = TestCaseDtoWithCF.model_validate(raw_data)
|
|
863
|
+
|
|
864
|
+
# Fetch custom fields from overview
|
|
865
|
+
try:
|
|
866
|
+
overview = await self._overview_api.get_overview(
|
|
867
|
+
test_case_id=test_case_id, _request_timeout=self._timeout
|
|
868
|
+
)
|
|
869
|
+
if overview.custom_fields:
|
|
870
|
+
case.custom_fields = overview.custom_fields
|
|
871
|
+
except Exception as e:
|
|
872
|
+
logger.warning(f"Failed to fetch overview for test case {test_case_id}: {e}")
|
|
873
|
+
|
|
874
|
+
return case
|
|
875
|
+
except AllureNotFoundError as e:
|
|
876
|
+
raise TestCaseNotFoundError(
|
|
877
|
+
test_case_id=test_case_id,
|
|
878
|
+
status_code=getattr(e, "status_code", None),
|
|
879
|
+
response_body=getattr(e, "response_body", None),
|
|
880
|
+
) from e
|
|
881
|
+
except ApiException as e:
|
|
882
|
+
try:
|
|
883
|
+
self._handle_api_exception(e)
|
|
884
|
+
except AllureNotFoundError as nf:
|
|
885
|
+
raise TestCaseNotFoundError(
|
|
886
|
+
test_case_id=test_case_id,
|
|
887
|
+
status_code=getattr(nf, "status_code", None),
|
|
888
|
+
response_body=getattr(nf, "response_body", None),
|
|
889
|
+
) from nf
|
|
890
|
+
raise
|
|
891
|
+
|
|
892
|
+
async def update_test_case(self, test_case_id: int, data: TestCasePatchV2Dto) -> TestCaseDto:
|
|
893
|
+
"""Update an existing test case with new data.
|
|
894
|
+
|
|
895
|
+
Args:
|
|
896
|
+
test_case_id: The ID of the test case to update.
|
|
897
|
+
data: The new data to apply.
|
|
898
|
+
|
|
899
|
+
Returns:
|
|
900
|
+
The updated test case.
|
|
901
|
+
|
|
902
|
+
Raises:
|
|
903
|
+
AllureNotFoundError: If test case doesn't exist.
|
|
904
|
+
AllureValidationError: If input data fails validation.
|
|
905
|
+
AllureAuthError: If unauthorized.
|
|
906
|
+
AllureAPIError: If the server returns an error.
|
|
907
|
+
"""
|
|
908
|
+
test_case_api = await self._get_api("_test_case_api")
|
|
909
|
+
return await self._call_api(
|
|
910
|
+
test_case_api.patch13(
|
|
911
|
+
id=test_case_id,
|
|
912
|
+
test_case_patch_v2_dto=data,
|
|
913
|
+
_request_timeout=self._timeout,
|
|
914
|
+
)
|
|
915
|
+
)
|
|
916
|
+
|
|
917
|
+
async def get_test_case_scenario(self, test_case_id: int) -> TestCaseScenarioV2Dto:
|
|
918
|
+
"""Retrieve the scenario (steps and attachments) for a test case.
|
|
919
|
+
|
|
920
|
+
Args:
|
|
921
|
+
test_case_id: The ID of the test case.
|
|
922
|
+
|
|
923
|
+
Returns:
|
|
924
|
+
The test case scenario including steps and attachments.
|
|
925
|
+
|
|
926
|
+
Raises:
|
|
927
|
+
AllureNotFoundError: If test case doesn't exist.
|
|
928
|
+
AllureAuthError: If unauthorized.
|
|
929
|
+
AllureAPIError: If the server returns an error.
|
|
930
|
+
"""
|
|
931
|
+
scenario_api = await self._get_api("_scenario_api", error_name="test_case_scenario_api")
|
|
932
|
+
|
|
933
|
+
response = await self._call_api_raw(
|
|
934
|
+
scenario_api.get_normalized_scenario_without_preload_content(
|
|
935
|
+
id=test_case_id, _request_timeout=self._timeout
|
|
936
|
+
)
|
|
937
|
+
)
|
|
938
|
+
raw_data = self._extract_response_data(response)
|
|
939
|
+
# print(f"DEBUG Initial Raw Normalized Scenario: {raw_data}")
|
|
940
|
+
return self._denormalize_to_v2_from_dict(raw_data)
|
|
941
|
+
|
|
942
|
+
@staticmethod
|
|
943
|
+
def _denormalize_to_v2_from_dict(raw: dict[str, object]) -> TestCaseScenarioV2Dto:
|
|
944
|
+
"""Convert a raw NormalizedScenarioDto dict into a TestCaseScenarioV2Dto tree.
|
|
945
|
+
|
|
946
|
+
This bypasses the generated from_dict which has broken oneOf deserialization.
|
|
947
|
+
"""
|
|
948
|
+
raw_root = raw.get("root")
|
|
949
|
+
if not isinstance(raw_root, dict):
|
|
950
|
+
return TestCaseScenarioV2Dto(steps=[])
|
|
951
|
+
|
|
952
|
+
root_children = raw_root.get("children")
|
|
953
|
+
if not isinstance(root_children, list):
|
|
954
|
+
return TestCaseScenarioV2Dto(steps=[])
|
|
955
|
+
|
|
956
|
+
scenario_steps_raw = raw.get("scenarioSteps", {})
|
|
957
|
+
scenario_steps = scenario_steps_raw if isinstance(scenario_steps_raw, dict) else {}
|
|
958
|
+
attachments_raw = raw.get("attachments", {})
|
|
959
|
+
attachments_map = attachments_raw if isinstance(attachments_raw, dict) else {}
|
|
960
|
+
|
|
961
|
+
# Recursive helper to build steps
|
|
962
|
+
def build_steps(step_ids: list[int]) -> list[SharedStepScenarioDtoStepsInner]:
|
|
963
|
+
steps_list: list[SharedStepScenarioDtoStepsInner] = []
|
|
964
|
+
if not step_ids:
|
|
965
|
+
return steps_list
|
|
966
|
+
|
|
967
|
+
for sid in step_ids:
|
|
968
|
+
# Look up the step definition
|
|
969
|
+
step_def = scenario_steps.get(str(sid))
|
|
970
|
+
|
|
971
|
+
if not step_def:
|
|
972
|
+
continue
|
|
973
|
+
|
|
974
|
+
# Is it an attachment?
|
|
975
|
+
attachment_id = step_def.get("attachmentId")
|
|
976
|
+
shared_step_id = step_def.get("sharedStepId")
|
|
977
|
+
|
|
978
|
+
if attachment_id:
|
|
979
|
+
# Look up name in attachments map
|
|
980
|
+
# attachments map key is the attachment ID as string
|
|
981
|
+
att_info = attachments_map.get(str(attachment_id), {})
|
|
982
|
+
att_name = att_info.get("name") or step_def.get("name")
|
|
983
|
+
|
|
984
|
+
# Build AttachmentStepDtoWithName
|
|
985
|
+
steps_list.append(
|
|
986
|
+
SharedStepScenarioDtoStepsInner(
|
|
987
|
+
actual_instance=AttachmentStepDtoWithName.model_construct(
|
|
988
|
+
type="AttachmentStepDto",
|
|
989
|
+
attachment_id=attachment_id,
|
|
990
|
+
name=att_name,
|
|
991
|
+
id=sid,
|
|
992
|
+
)
|
|
993
|
+
)
|
|
994
|
+
)
|
|
995
|
+
elif shared_step_id:
|
|
996
|
+
# It's a Shared Step Reference
|
|
997
|
+
steps_list.append(
|
|
998
|
+
SharedStepScenarioDtoStepsInner(
|
|
999
|
+
actual_instance=SharedStepStepDtoWithId.model_construct(
|
|
1000
|
+
type="SharedStepStepDto",
|
|
1001
|
+
shared_step_id=shared_step_id,
|
|
1002
|
+
id=sid,
|
|
1003
|
+
)
|
|
1004
|
+
)
|
|
1005
|
+
)
|
|
1006
|
+
else:
|
|
1007
|
+
# It's a Body Step
|
|
1008
|
+
body = step_def.get("body")
|
|
1009
|
+
child_ids = step_def.get("children") or []
|
|
1010
|
+
child_steps = build_steps(child_ids) if child_ids else None
|
|
1011
|
+
|
|
1012
|
+
# Build BodyStepDtoWithSteps
|
|
1013
|
+
steps_list.append(
|
|
1014
|
+
SharedStepScenarioDtoStepsInner(
|
|
1015
|
+
actual_instance=BodyStepDtoWithSteps.model_construct(
|
|
1016
|
+
type="BodyStepDto",
|
|
1017
|
+
body=body,
|
|
1018
|
+
body_json=None, # Skip complex rich-text
|
|
1019
|
+
steps=child_steps,
|
|
1020
|
+
id=sid,
|
|
1021
|
+
)
|
|
1022
|
+
)
|
|
1023
|
+
)
|
|
1024
|
+
return steps_list
|
|
1025
|
+
|
|
1026
|
+
final_steps = build_steps(root_children)
|
|
1027
|
+
return TestCaseScenarioV2Dto(steps=final_steps)
|
|
1028
|
+
|
|
1029
|
+
async def delete_test_case(self, test_case_id: int) -> None:
|
|
1030
|
+
"""Permanently delete a test case from the system.
|
|
1031
|
+
|
|
1032
|
+
Args:
|
|
1033
|
+
test_case_id: The ID of the test case to remove.
|
|
1034
|
+
|
|
1035
|
+
Raises:
|
|
1036
|
+
AllureAPIError: If the API request fails.
|
|
1037
|
+
"""
|
|
1038
|
+
test_case_api = await self._get_api("_test_case_api")
|
|
1039
|
+
await self._call_api(test_case_api.delete13(id=test_case_id))
|
|
1040
|
+
|
|
1041
|
+
# ==========================================
|
|
1042
|
+
# Shared Step operations
|
|
1043
|
+
# ==========================================
|
|
1044
|
+
|
|
1045
|
+
async def create_shared_step(self, project_id: int, name: str) -> SharedStepDto:
|
|
1046
|
+
"""Create a new shared step.
|
|
1047
|
+
|
|
1048
|
+
Args:
|
|
1049
|
+
project_id: Target project ID.
|
|
1050
|
+
name: Name of the shared step.
|
|
1051
|
+
|
|
1052
|
+
Returns:
|
|
1053
|
+
The created SharedStepDto.
|
|
1054
|
+
|
|
1055
|
+
Raises:
|
|
1056
|
+
AllureNotFoundError: If project doesn't exist.
|
|
1057
|
+
AllureValidationError: If input data fails validation.
|
|
1058
|
+
AllureAuthError: If unauthorized.
|
|
1059
|
+
AllureAPIError: If the server returns an error.
|
|
1060
|
+
"""
|
|
1061
|
+
shared_step_api = await self._get_api("_shared_step_api")
|
|
1062
|
+
dto = SharedStepCreateDto(name=name, project_id=project_id)
|
|
1063
|
+
return await self._call_api(shared_step_api.create19(dto, _request_timeout=self._timeout))
|
|
1064
|
+
|
|
1065
|
+
async def list_shared_steps(
|
|
1066
|
+
self,
|
|
1067
|
+
project_id: int,
|
|
1068
|
+
page: int = 0,
|
|
1069
|
+
size: int = 100,
|
|
1070
|
+
search: str | None = None,
|
|
1071
|
+
archived: bool | None = None,
|
|
1072
|
+
) -> PageSharedStepDto:
|
|
1073
|
+
"""List shared steps in a project.
|
|
1074
|
+
|
|
1075
|
+
Args:
|
|
1076
|
+
project_id: Target project ID.
|
|
1077
|
+
page: Zero-based page index.
|
|
1078
|
+
size: Page size.
|
|
1079
|
+
search: Optional search query (by name).
|
|
1080
|
+
archived: Optional filter by archived status.
|
|
1081
|
+
|
|
1082
|
+
Returns:
|
|
1083
|
+
Paginated list of shared steps.
|
|
1084
|
+
"""
|
|
1085
|
+
shared_step_api = await self._get_api("_shared_step_api")
|
|
1086
|
+
return await self._call_api(
|
|
1087
|
+
shared_step_api.find_all16(
|
|
1088
|
+
project_id,
|
|
1089
|
+
search,
|
|
1090
|
+
archived,
|
|
1091
|
+
page,
|
|
1092
|
+
size,
|
|
1093
|
+
None,
|
|
1094
|
+
_request_timeout=self._timeout,
|
|
1095
|
+
)
|
|
1096
|
+
)
|
|
1097
|
+
|
|
1098
|
+
async def create_shared_step_scenario_step(
|
|
1099
|
+
self,
|
|
1100
|
+
step: ScenarioStepCreateDto,
|
|
1101
|
+
) -> ScenarioStepCreatedResponseDto:
|
|
1102
|
+
"""Create a step within a shared step scenario.
|
|
1103
|
+
|
|
1104
|
+
Args:
|
|
1105
|
+
step: Step data (must include shared_step_id).
|
|
1106
|
+
|
|
1107
|
+
Returns:
|
|
1108
|
+
Response containing created step ID.
|
|
1109
|
+
"""
|
|
1110
|
+
shared_step_scenario_api = await self._get_api("_shared_step_scenario_api")
|
|
1111
|
+
|
|
1112
|
+
if not step.shared_step_id:
|
|
1113
|
+
raise AllureValidationError("shared_step_id is required for shared step scenario steps")
|
|
1114
|
+
|
|
1115
|
+
return await self._create_scenario_step_via_api(shared_step_scenario_api, step)
|
|
1116
|
+
|
|
1117
|
+
async def upload_shared_step_attachment(
|
|
1118
|
+
self,
|
|
1119
|
+
shared_step_id: int,
|
|
1120
|
+
file_data: list[bytes | str | tuple[str, bytes]],
|
|
1121
|
+
) -> list[SharedStepAttachmentRowDto]:
|
|
1122
|
+
"""Upload attachment(s) to a shared step.
|
|
1123
|
+
|
|
1124
|
+
Args:
|
|
1125
|
+
shared_step_id: Target shared step ID.
|
|
1126
|
+
file_data: List of files to upload.
|
|
1127
|
+
|
|
1128
|
+
Returns:
|
|
1129
|
+
List of created attachment records.
|
|
1130
|
+
"""
|
|
1131
|
+
shared_step_attachment_api = await self._get_api("_shared_step_attachment_api")
|
|
1132
|
+
return await self._upload_attachment_via_api(
|
|
1133
|
+
shared_step_attachment_api,
|
|
1134
|
+
shared_step_id=shared_step_id,
|
|
1135
|
+
file_data=file_data,
|
|
1136
|
+
)
|
|
1137
|
+
|
|
1138
|
+
async def archive_shared_step(self, shared_step_id: int) -> None:
|
|
1139
|
+
"""Archive a shared step.
|
|
1140
|
+
|
|
1141
|
+
Args:
|
|
1142
|
+
shared_step_id: ID of the shared step to archive.
|
|
1143
|
+
"""
|
|
1144
|
+
shared_step_api = await self._get_api("_shared_step_api")
|
|
1145
|
+
await self._call_api(shared_step_api.archive(id=shared_step_id, _request_timeout=self._timeout))
|
|
1146
|
+
|
|
1147
|
+
async def get_shared_step(self, shared_step_id: int) -> SharedStepDto:
|
|
1148
|
+
"""Retrieve a specific shared step by its ID.
|
|
1149
|
+
|
|
1150
|
+
Args:
|
|
1151
|
+
shared_step_id: The unique ID of the shared step.
|
|
1152
|
+
|
|
1153
|
+
Returns:
|
|
1154
|
+
The shared step data.
|
|
1155
|
+
|
|
1156
|
+
Raises:
|
|
1157
|
+
AllureNotFoundError: If shared step doesn't exist.
|
|
1158
|
+
AllureAuthError: If unauthorized.
|
|
1159
|
+
AllureAPIError: If the server returns an error.
|
|
1160
|
+
"""
|
|
1161
|
+
shared_step_api = await self._get_api("_shared_step_api")
|
|
1162
|
+
return await self._call_api(shared_step_api.find_one15(id=shared_step_id, _request_timeout=self._timeout))
|
|
1163
|
+
|
|
1164
|
+
async def update_shared_step(self, shared_step_id: int, data: SharedStepPatchDto) -> SharedStepDto:
|
|
1165
|
+
"""Update an existing shared step with new data.
|
|
1166
|
+
|
|
1167
|
+
Args:
|
|
1168
|
+
shared_step_id: The ID of the shared step to update.
|
|
1169
|
+
data: The new data to apply (partial update supported).
|
|
1170
|
+
|
|
1171
|
+
Returns:
|
|
1172
|
+
The updated shared step.
|
|
1173
|
+
|
|
1174
|
+
Raises:
|
|
1175
|
+
AllureNotFoundError: If shared step doesn't exist.
|
|
1176
|
+
AllureValidationError: If input data fails validation.
|
|
1177
|
+
AllureAuthError: If unauthorized.
|
|
1178
|
+
AllureAPIError: If the server returns an error.
|
|
1179
|
+
"""
|
|
1180
|
+
shared_step_api = await self._get_api("_shared_step_api")
|
|
1181
|
+
return await self._call_api(
|
|
1182
|
+
shared_step_api.patch18(
|
|
1183
|
+
id=shared_step_id,
|
|
1184
|
+
shared_step_patch_dto=data,
|
|
1185
|
+
_request_timeout=self._timeout,
|
|
1186
|
+
)
|
|
1187
|
+
)
|
|
1188
|
+
|
|
1189
|
+
async def delete_shared_step(self, shared_step_id: int) -> None:
|
|
1190
|
+
"""Delete a shared step from the system.
|
|
1191
|
+
|
|
1192
|
+
This performs a soft delete by archiving the shared step.
|
|
1193
|
+
|
|
1194
|
+
Args:
|
|
1195
|
+
shared_step_id: The ID of the shared step to delete.
|
|
1196
|
+
|
|
1197
|
+
Raises:
|
|
1198
|
+
AllureNotFoundError: If shared step doesn't exist.
|
|
1199
|
+
AllureAPIError: If the API request fails.
|
|
1200
|
+
"""
|
|
1201
|
+
shared_step_api = await self._get_api("_shared_step_api")
|
|
1202
|
+
# Soft delete via archive
|
|
1203
|
+
await self._call_api(shared_step_api.archive(id=shared_step_id, _request_timeout=self._timeout))
|