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
|
@@ -0,0 +1,951 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from pydantic import ValidationError as PydanticValidationError
|
|
6
|
+
|
|
7
|
+
from src.client import (
|
|
8
|
+
AllureClient,
|
|
9
|
+
AttachmentStepDtoWithName,
|
|
10
|
+
BodyStepDtoWithSteps,
|
|
11
|
+
)
|
|
12
|
+
from src.client.exceptions import AllureAPIError, AllureNotFoundError, AllureValidationError
|
|
13
|
+
from src.client.generated.models import (
|
|
14
|
+
CustomFieldDto,
|
|
15
|
+
CustomFieldValueWithCfDto,
|
|
16
|
+
ExternalLinkDto,
|
|
17
|
+
ScenarioStepCreateDto,
|
|
18
|
+
SharedStepScenarioDtoStepsInner,
|
|
19
|
+
TestCaseCreateV2Dto,
|
|
20
|
+
TestCaseDto,
|
|
21
|
+
TestCaseOverviewDto,
|
|
22
|
+
TestCaseTreeSelectionDto,
|
|
23
|
+
TestTagDto,
|
|
24
|
+
)
|
|
25
|
+
from src.client.generated.models.attachment_step_dto import AttachmentStepDto
|
|
26
|
+
from src.client.generated.models.body_step_dto import BodyStepDto
|
|
27
|
+
from src.client.generated.models.expected_body_step_dto import ExpectedBodyStepDto
|
|
28
|
+
from src.client.generated.models.shared_step_step_dto import SharedStepStepDto
|
|
29
|
+
from src.client.generated.models.test_case_patch_v2_dto import TestCasePatchV2Dto
|
|
30
|
+
from src.client.generated.models.test_case_scenario_v2_dto import TestCaseScenarioV2Dto
|
|
31
|
+
from src.services.attachment_service import AttachmentService
|
|
32
|
+
from src.utils.schema_hint import generate_schema_hint
|
|
33
|
+
|
|
34
|
+
# Maximum lengths based on API constraints
|
|
35
|
+
MAX_NAME_LENGTH = 255
|
|
36
|
+
MAX_PRECONDITION_LENGTH = 1000
|
|
37
|
+
MAX_TAG_LENGTH = 255
|
|
38
|
+
MAX_BODY_LENGTH = 10000 # Step body limit
|
|
39
|
+
|
|
40
|
+
logger = logging.getLogger(__name__)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@dataclass
|
|
44
|
+
class TestCaseUpdate:
|
|
45
|
+
"""Data object for updating a test case."""
|
|
46
|
+
|
|
47
|
+
name: str | None = None
|
|
48
|
+
description: str | None = None
|
|
49
|
+
precondition: str | None = None
|
|
50
|
+
steps: list[dict[str, Any]] | None = None
|
|
51
|
+
tags: list[str] | None = None
|
|
52
|
+
attachments: list[dict[str, str]] | None = None
|
|
53
|
+
custom_fields: dict[str, str] | None = None
|
|
54
|
+
automated: bool | None = None
|
|
55
|
+
expected_result: str | None = None
|
|
56
|
+
status_id: int | None = None
|
|
57
|
+
test_layer_id: int | None = None
|
|
58
|
+
workflow_id: int | None = None
|
|
59
|
+
links: list[dict[str, str]] | None = None
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@dataclass
|
|
63
|
+
class DeleteResult:
|
|
64
|
+
"""Result of a delete operation."""
|
|
65
|
+
|
|
66
|
+
test_case_id: int
|
|
67
|
+
status: str # "archived", "deleted", "already_deleted", "not_found"
|
|
68
|
+
message: str
|
|
69
|
+
name: str | None = None
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
class TestCaseService:
|
|
73
|
+
"""Service for managing Test Cases in Allure TestOps."""
|
|
74
|
+
|
|
75
|
+
def __init__(
|
|
76
|
+
self,
|
|
77
|
+
client: AllureClient,
|
|
78
|
+
attachment_service: AttachmentService | None = None,
|
|
79
|
+
) -> None:
|
|
80
|
+
self._client = client
|
|
81
|
+
self._project_id = client.get_project()
|
|
82
|
+
self._attachment_service = attachment_service or AttachmentService(self._client)
|
|
83
|
+
self._cf_cache: dict[int, dict[str, int]] = {} # {project_id: {name: id}}
|
|
84
|
+
|
|
85
|
+
async def create_test_case(
|
|
86
|
+
self,
|
|
87
|
+
name: str,
|
|
88
|
+
description: str | None = None,
|
|
89
|
+
steps: list[dict[str, Any]] | None = None,
|
|
90
|
+
tags: list[str] | None = None,
|
|
91
|
+
attachments: list[dict[str, str]] | None = None,
|
|
92
|
+
custom_fields: dict[str, str] | None = None,
|
|
93
|
+
) -> TestCaseOverviewDto:
|
|
94
|
+
"""Create a new test case.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
name: The name of the test case.
|
|
98
|
+
description: Optional description.
|
|
99
|
+
steps: Optional list of steps [{'action': '...', 'expected': '...', 'attachments': [...]}]
|
|
100
|
+
tags: Optional list of tags.
|
|
101
|
+
attachments: Optional list of test-case level attachments.
|
|
102
|
+
custom_fields: Optional dictionary of custom fields (Name -> Value).
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
The created test case overview.
|
|
106
|
+
|
|
107
|
+
Raises:
|
|
108
|
+
AllureAPIError: If the API request fails.
|
|
109
|
+
AllureValidationError: If validation fails.
|
|
110
|
+
"""
|
|
111
|
+
# 1. Input Validation
|
|
112
|
+
self._validate_project_id(self._project_id)
|
|
113
|
+
self._validate_name(name)
|
|
114
|
+
self._validate_steps(steps)
|
|
115
|
+
self._validate_tags(tags)
|
|
116
|
+
self._validate_attachments(attachments)
|
|
117
|
+
self._validate_custom_fields(custom_fields)
|
|
118
|
+
|
|
119
|
+
# 2. Resolve custom fields if provided
|
|
120
|
+
resolved_custom_fields = []
|
|
121
|
+
if custom_fields:
|
|
122
|
+
project_cfs = await self._get_resolved_custom_fields(self._project_id)
|
|
123
|
+
for key, value in custom_fields.items():
|
|
124
|
+
cf_id = project_cfs.get(key)
|
|
125
|
+
if cf_id is None:
|
|
126
|
+
raise AllureValidationError(f"Custom field '{key}' not found in project {self._project_id}.")
|
|
127
|
+
|
|
128
|
+
resolved_custom_fields.append(
|
|
129
|
+
CustomFieldValueWithCfDto(custom_field=CustomFieldDto(id=cf_id, name=key), name=value)
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
# 3. Create TestCaseCreateV2Dto with validation
|
|
133
|
+
tag_dtos = self._build_tag_dtos(tags)
|
|
134
|
+
try:
|
|
135
|
+
data = TestCaseCreateV2Dto(
|
|
136
|
+
project_id=self._project_id,
|
|
137
|
+
name=name,
|
|
138
|
+
description=description,
|
|
139
|
+
tags=tag_dtos,
|
|
140
|
+
custom_fields=resolved_custom_fields,
|
|
141
|
+
)
|
|
142
|
+
except PydanticValidationError as e:
|
|
143
|
+
hint = generate_schema_hint(TestCaseCreateV2Dto)
|
|
144
|
+
raise AllureValidationError(f"Invalid test case data: {e}", suggestions=[hint]) from e
|
|
145
|
+
|
|
146
|
+
# 4. Create the test case
|
|
147
|
+
created_test_case = await self._client.create_test_case(data)
|
|
148
|
+
test_case_id = created_test_case.id
|
|
149
|
+
|
|
150
|
+
if test_case_id is None:
|
|
151
|
+
raise AllureValidationError("Failed to get test case ID from created test case")
|
|
152
|
+
|
|
153
|
+
# 5. Add steps and attachments with rollback on failure
|
|
154
|
+
try:
|
|
155
|
+
# Add steps one by one via separate API calls
|
|
156
|
+
last_step_id: int | None = None
|
|
157
|
+
last_step_id = await self._add_steps(test_case_id, steps, last_step_id)
|
|
158
|
+
|
|
159
|
+
# Add global attachments (appended at end of steps)
|
|
160
|
+
await self._add_global_attachments(test_case_id, attachments, last_step_id)
|
|
161
|
+
except Exception as e:
|
|
162
|
+
# Rollback: delete the partially created test case
|
|
163
|
+
try:
|
|
164
|
+
await self._client.delete_test_case(test_case_id)
|
|
165
|
+
except Exception as rollback_error:
|
|
166
|
+
# Log but don't raise the rollback error to keep the original error primary
|
|
167
|
+
logger.error(f"Rollback failed for test case {test_case_id}: {rollback_error}")
|
|
168
|
+
pass
|
|
169
|
+
|
|
170
|
+
if isinstance(e, (AllureValidationError, AllureAPIError)):
|
|
171
|
+
# Refine message to indicate rollback
|
|
172
|
+
raise type(e)(f"Test case creation failed and was rolled back: {e}") from e
|
|
173
|
+
raise AllureAPIError(f"Test case creation failed and was rolled back: {e}") from e
|
|
174
|
+
|
|
175
|
+
return created_test_case
|
|
176
|
+
|
|
177
|
+
async def get_test_case(self, test_case_id: int) -> TestCaseDto:
|
|
178
|
+
"""Retrieve a test case by ID.
|
|
179
|
+
|
|
180
|
+
Args:
|
|
181
|
+
test_case_id: ID of the test case.
|
|
182
|
+
|
|
183
|
+
Returns:
|
|
184
|
+
The test case DTO.
|
|
185
|
+
"""
|
|
186
|
+
return await self._client.get_test_case(test_case_id)
|
|
187
|
+
|
|
188
|
+
async def update_test_case(self, test_case_id: int, data: TestCaseUpdate) -> TestCaseDto:
|
|
189
|
+
"""Update an existing test case.
|
|
190
|
+
|
|
191
|
+
Args:
|
|
192
|
+
test_case_id: ID of the test case.
|
|
193
|
+
data: Update data.
|
|
194
|
+
|
|
195
|
+
Returns:
|
|
196
|
+
The updated test case.
|
|
197
|
+
"""
|
|
198
|
+
# 1. Fetch current state for idempotency and partial updates
|
|
199
|
+
current_case = await self.get_test_case(test_case_id)
|
|
200
|
+
|
|
201
|
+
# 2. Prepare patches for simple fields and tags
|
|
202
|
+
patch_kwargs, has_changes = await self._prepare_field_updates(current_case, data)
|
|
203
|
+
|
|
204
|
+
# 3. Handle Scenario (Steps and Attachments)
|
|
205
|
+
scenario_dto_v2 = await self._prepare_scenario_update(test_case_id, data)
|
|
206
|
+
# We do NOT add scenario to patch_kwargs because patch13 endpoint has issues with BodyStepDto serialization.
|
|
207
|
+
# Instead, we will recreate the scenario step-by-step if needed.
|
|
208
|
+
if scenario_dto_v2:
|
|
209
|
+
has_changes = True
|
|
210
|
+
|
|
211
|
+
# 4. Idempotency Check
|
|
212
|
+
if not has_changes:
|
|
213
|
+
return current_case
|
|
214
|
+
|
|
215
|
+
# 5. Apply Update
|
|
216
|
+
updated_case = current_case
|
|
217
|
+
if patch_kwargs:
|
|
218
|
+
try:
|
|
219
|
+
patch_data = TestCasePatchV2Dto(**patch_kwargs)
|
|
220
|
+
updated_case = await self._client.update_test_case(test_case_id, patch_data)
|
|
221
|
+
except PydanticValidationError as e:
|
|
222
|
+
hint = generate_schema_hint(TestCasePatchV2Dto)
|
|
223
|
+
raise AllureValidationError(f"Invalid update data: {e}", suggestions=[hint]) from e
|
|
224
|
+
|
|
225
|
+
# 6. Apply Scenario Re-creation
|
|
226
|
+
if scenario_dto_v2 and scenario_dto_v2.steps is not None:
|
|
227
|
+
await self._recreate_scenario(test_case_id, scenario_dto_v2.steps)
|
|
228
|
+
# Refetch to get consistent state
|
|
229
|
+
updated_case = await self.get_test_case(test_case_id)
|
|
230
|
+
|
|
231
|
+
return updated_case
|
|
232
|
+
|
|
233
|
+
async def delete_test_case(self, test_case_id: int) -> DeleteResult:
|
|
234
|
+
"""Archive/soft-delete a test case."""
|
|
235
|
+
# 1. Verify existence (idempotency check)
|
|
236
|
+
try:
|
|
237
|
+
test_case = await self.get_test_case(test_case_id)
|
|
238
|
+
# Idempotency: Check if already archived
|
|
239
|
+
# Note: exact status name depends on Allure configuration, checking common ones
|
|
240
|
+
if test_case.status and test_case.status.name and test_case.status.name.lower() in ("archived", "deleted"):
|
|
241
|
+
return DeleteResult(
|
|
242
|
+
test_case_id=test_case_id,
|
|
243
|
+
status="already_deleted",
|
|
244
|
+
message=f"Test Case {test_case_id} was already archived (Status: {test_case.status.name}).",
|
|
245
|
+
)
|
|
246
|
+
except AllureNotFoundError:
|
|
247
|
+
return DeleteResult(
|
|
248
|
+
test_case_id=test_case_id,
|
|
249
|
+
status="already_deleted",
|
|
250
|
+
message=f"Test Case {test_case_id} was already archived or doesn't exist.",
|
|
251
|
+
)
|
|
252
|
+
|
|
253
|
+
# 2. Perform deletion
|
|
254
|
+
await self._client.delete_test_case(test_case_id)
|
|
255
|
+
|
|
256
|
+
# 3. Log the action
|
|
257
|
+
logger.info(
|
|
258
|
+
"Test case archived",
|
|
259
|
+
extra={
|
|
260
|
+
"test_case_id": test_case_id,
|
|
261
|
+
"test_case_name": test_case.name,
|
|
262
|
+
"action": "delete",
|
|
263
|
+
"result": "archived",
|
|
264
|
+
},
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
return DeleteResult(
|
|
268
|
+
test_case_id=test_case_id,
|
|
269
|
+
status="archived",
|
|
270
|
+
name=test_case.name,
|
|
271
|
+
message=f"Test Case {test_case_id}: '{test_case.name}' has been archived.",
|
|
272
|
+
)
|
|
273
|
+
|
|
274
|
+
async def add_shared_step_to_case(
|
|
275
|
+
self,
|
|
276
|
+
test_case_id: int,
|
|
277
|
+
shared_step_id: int,
|
|
278
|
+
position: int | None = None,
|
|
279
|
+
) -> TestCaseDto:
|
|
280
|
+
"""Add a shared step reference to a test case.
|
|
281
|
+
|
|
282
|
+
Args:
|
|
283
|
+
test_case_id: Target test case ID.
|
|
284
|
+
shared_step_id: ID of the shared step to link.
|
|
285
|
+
position: Optional 0-indexed position. None = append.
|
|
286
|
+
|
|
287
|
+
Returns:
|
|
288
|
+
Updated test case DTO.
|
|
289
|
+
"""
|
|
290
|
+
# 1. Determine position (after_id)
|
|
291
|
+
scen = await self._client.get_test_case_scenario(test_case_id)
|
|
292
|
+
current_steps = scen.steps if scen and scen.steps else []
|
|
293
|
+
|
|
294
|
+
after_id: int | None = None
|
|
295
|
+
if position is None:
|
|
296
|
+
# Append: find the last step ID
|
|
297
|
+
if current_steps:
|
|
298
|
+
last_step = current_steps[-1]
|
|
299
|
+
if last_step.actual_instance:
|
|
300
|
+
after_id = getattr(last_step.actual_instance, "id", None)
|
|
301
|
+
elif position == 0:
|
|
302
|
+
# Insert at start
|
|
303
|
+
after_id = None
|
|
304
|
+
else:
|
|
305
|
+
# Insert at position
|
|
306
|
+
if position < 0 or position > len(current_steps):
|
|
307
|
+
raise AllureValidationError(f"Position {position} is out of bounds (0-{len(current_steps)})")
|
|
308
|
+
# We insert AFTER the step at (position - 1)
|
|
309
|
+
prev_step = current_steps[position - 1]
|
|
310
|
+
if prev_step.actual_instance:
|
|
311
|
+
after_id = getattr(prev_step.actual_instance, "id", None)
|
|
312
|
+
|
|
313
|
+
# 2. Create the step reference
|
|
314
|
+
step_dto = self._build_scenario_step_dto(
|
|
315
|
+
test_case_id=test_case_id,
|
|
316
|
+
shared_step_id=shared_step_id,
|
|
317
|
+
)
|
|
318
|
+
|
|
319
|
+
await self._client.create_scenario_step(
|
|
320
|
+
test_case_id=test_case_id,
|
|
321
|
+
step=step_dto,
|
|
322
|
+
after_id=after_id,
|
|
323
|
+
)
|
|
324
|
+
|
|
325
|
+
return await self.get_test_case(test_case_id)
|
|
326
|
+
|
|
327
|
+
async def remove_shared_step_from_case(
|
|
328
|
+
self,
|
|
329
|
+
test_case_id: int,
|
|
330
|
+
shared_step_id: int,
|
|
331
|
+
) -> TestCaseDto:
|
|
332
|
+
"""Remove all references to a shared step from a test case.
|
|
333
|
+
|
|
334
|
+
Args:
|
|
335
|
+
test_case_id: Target test case ID.
|
|
336
|
+
shared_step_id: ID of the shared step to unlink.
|
|
337
|
+
|
|
338
|
+
Returns:
|
|
339
|
+
Updated test case DTO.
|
|
340
|
+
"""
|
|
341
|
+
scen = await self._client.get_test_case_scenario(test_case_id)
|
|
342
|
+
if not scen or not scen.steps:
|
|
343
|
+
return await self.get_test_case(test_case_id)
|
|
344
|
+
|
|
345
|
+
steps_to_delete = []
|
|
346
|
+
for step in scen.steps:
|
|
347
|
+
if step.actual_instance and isinstance(step.actual_instance, SharedStepStepDto):
|
|
348
|
+
if step.actual_instance.shared_step_id == shared_step_id:
|
|
349
|
+
steps_to_delete.append(getattr(step.actual_instance, "id", None))
|
|
350
|
+
|
|
351
|
+
if not steps_to_delete:
|
|
352
|
+
raise AllureValidationError(f"Shared Step {shared_step_id} not found in Test Case {test_case_id}")
|
|
353
|
+
|
|
354
|
+
for step_id in steps_to_delete:
|
|
355
|
+
if step_id:
|
|
356
|
+
await self._client.delete_scenario_step(step_id)
|
|
357
|
+
|
|
358
|
+
return await self.get_test_case(test_case_id)
|
|
359
|
+
|
|
360
|
+
async def _prepare_field_updates( # noqa: C901
|
|
361
|
+
self, current_case: TestCaseDto, data: TestCaseUpdate
|
|
362
|
+
) -> tuple[dict[str, Any], bool]:
|
|
363
|
+
"""Prepare patch arguments for simple fields, tags, and custom fields."""
|
|
364
|
+
patch_kwargs: dict[str, Any] = {}
|
|
365
|
+
has_changes = False
|
|
366
|
+
|
|
367
|
+
if data.name is not None and data.name != current_case.name:
|
|
368
|
+
patch_kwargs["name"] = data.name
|
|
369
|
+
has_changes = True
|
|
370
|
+
|
|
371
|
+
if data.description is not None and data.description != current_case.description:
|
|
372
|
+
patch_kwargs["description"] = data.description
|
|
373
|
+
has_changes = True
|
|
374
|
+
|
|
375
|
+
if data.precondition is not None and data.precondition != current_case.precondition:
|
|
376
|
+
patch_kwargs["precondition"] = data.precondition
|
|
377
|
+
has_changes = True
|
|
378
|
+
|
|
379
|
+
if data.automated is not None and data.automated != current_case.automated:
|
|
380
|
+
patch_kwargs["automated"] = data.automated
|
|
381
|
+
has_changes = True
|
|
382
|
+
|
|
383
|
+
if data.expected_result is not None and data.expected_result != current_case.expected_result:
|
|
384
|
+
patch_kwargs["expected_result"] = data.expected_result
|
|
385
|
+
has_changes = True
|
|
386
|
+
|
|
387
|
+
if data.status_id is not None:
|
|
388
|
+
current_status_id = current_case.status.id if current_case.status else None
|
|
389
|
+
if data.status_id != current_status_id:
|
|
390
|
+
patch_kwargs["status_id"] = data.status_id
|
|
391
|
+
has_changes = True
|
|
392
|
+
|
|
393
|
+
if data.test_layer_id is not None:
|
|
394
|
+
current_test_layer_id = current_case.test_layer.id if current_case.test_layer else None
|
|
395
|
+
if data.test_layer_id != current_test_layer_id:
|
|
396
|
+
patch_kwargs["test_layer_id"] = data.test_layer_id
|
|
397
|
+
has_changes = True
|
|
398
|
+
|
|
399
|
+
if data.workflow_id is not None:
|
|
400
|
+
current_workflow_id = current_case.workflow.id if current_case.workflow else None
|
|
401
|
+
if data.workflow_id != current_workflow_id:
|
|
402
|
+
patch_kwargs["workflow_id"] = data.workflow_id
|
|
403
|
+
has_changes = True
|
|
404
|
+
|
|
405
|
+
if data.links is not None:
|
|
406
|
+
# Simple link replacement for now
|
|
407
|
+
new_links = [ExternalLinkDto(**link) for link in data.links]
|
|
408
|
+
patch_kwargs["links"] = new_links
|
|
409
|
+
has_changes = True
|
|
410
|
+
|
|
411
|
+
# Tags
|
|
412
|
+
if data.tags is not None:
|
|
413
|
+
current_tag_names = sorted([t.name for t in (current_case.tags or []) if t.name])
|
|
414
|
+
new_tag_names = sorted(data.tags)
|
|
415
|
+
if current_tag_names != new_tag_names:
|
|
416
|
+
patch_kwargs["tags"] = self._build_tag_dtos(data.tags)
|
|
417
|
+
has_changes = True
|
|
418
|
+
|
|
419
|
+
# Custom Fields
|
|
420
|
+
if data.custom_fields:
|
|
421
|
+
project_id = current_case.project_id
|
|
422
|
+
if project_id:
|
|
423
|
+
resolved_cfs = []
|
|
424
|
+
project_cfs = await self._get_resolved_custom_fields(project_id)
|
|
425
|
+
for key, value in data.custom_fields.items():
|
|
426
|
+
cf_id = project_cfs.get(key)
|
|
427
|
+
if cf_id:
|
|
428
|
+
resolved_cfs.append(
|
|
429
|
+
CustomFieldValueWithCfDto(custom_field=CustomFieldDto(id=cf_id, name=key), name=value)
|
|
430
|
+
)
|
|
431
|
+
patch_kwargs["custom_fields"] = resolved_cfs
|
|
432
|
+
has_changes = True
|
|
433
|
+
|
|
434
|
+
return patch_kwargs, has_changes
|
|
435
|
+
|
|
436
|
+
async def _prepare_scenario_update(self, test_case_id: int, data: TestCaseUpdate) -> TestCaseScenarioV2Dto | None:
|
|
437
|
+
"""Prepare the scenario DTO if steps or attachments need updating."""
|
|
438
|
+
if data.steps is None and data.attachments is None:
|
|
439
|
+
return None
|
|
440
|
+
|
|
441
|
+
existing_steps = await self._get_existing_steps_to_preserve(test_case_id, data)
|
|
442
|
+
final_steps_list = await self._build_final_steps_list(test_case_id, data, existing_steps)
|
|
443
|
+
|
|
444
|
+
return TestCaseScenarioV2Dto(steps=final_steps_list)
|
|
445
|
+
|
|
446
|
+
async def _get_existing_steps_to_preserve(
|
|
447
|
+
self, test_case_id: int, data: TestCaseUpdate
|
|
448
|
+
) -> list[SharedStepScenarioDtoStepsInner]:
|
|
449
|
+
"""Fetch existing steps that should be preserved based on what's being updated."""
|
|
450
|
+
if data.steps is not None and data.attachments is not None:
|
|
451
|
+
return [] # Both provided, nothing to preserve
|
|
452
|
+
|
|
453
|
+
existing_steps: list[SharedStepScenarioDtoStepsInner] = []
|
|
454
|
+
try:
|
|
455
|
+
current_scenario = await self._client.get_test_case_scenario(test_case_id)
|
|
456
|
+
if not current_scenario or not current_scenario.steps:
|
|
457
|
+
return existing_steps
|
|
458
|
+
|
|
459
|
+
for step in current_scenario.steps:
|
|
460
|
+
if not step.actual_instance:
|
|
461
|
+
continue
|
|
462
|
+
is_attachment = isinstance(step.actual_instance, AttachmentStepDto)
|
|
463
|
+
# Preserve attachments if data.attachments is None
|
|
464
|
+
# Preserve body steps if data.steps is None
|
|
465
|
+
if is_attachment and data.attachments is None:
|
|
466
|
+
existing_steps.append(step)
|
|
467
|
+
elif not is_attachment and data.steps is None:
|
|
468
|
+
existing_steps.append(step)
|
|
469
|
+
except Exception: # noqa: S110
|
|
470
|
+
pass
|
|
471
|
+
|
|
472
|
+
return existing_steps
|
|
473
|
+
|
|
474
|
+
async def _build_final_steps_list(
|
|
475
|
+
self,
|
|
476
|
+
test_case_id: int,
|
|
477
|
+
data: TestCaseUpdate,
|
|
478
|
+
existing_steps: list[SharedStepScenarioDtoStepsInner],
|
|
479
|
+
) -> list[SharedStepScenarioDtoStepsInner]:
|
|
480
|
+
"""Build the final list of steps combining new and preserved steps."""
|
|
481
|
+
final_steps: list[SharedStepScenarioDtoStepsInner] = []
|
|
482
|
+
|
|
483
|
+
# Add new or existing body steps
|
|
484
|
+
if data.steps is not None:
|
|
485
|
+
final_steps.extend(await self._build_steps_dtos_from_list(test_case_id, data.steps))
|
|
486
|
+
else:
|
|
487
|
+
for step in existing_steps:
|
|
488
|
+
if step.actual_instance and not isinstance(step.actual_instance, AttachmentStepDto):
|
|
489
|
+
final_steps.append(step)
|
|
490
|
+
|
|
491
|
+
# Add new or existing attachments
|
|
492
|
+
if data.attachments is not None:
|
|
493
|
+
for att in data.attachments:
|
|
494
|
+
row = await self._attachment_service.upload_attachment(test_case_id, att)
|
|
495
|
+
final_steps.append(
|
|
496
|
+
SharedStepScenarioDtoStepsInner(
|
|
497
|
+
actual_instance=AttachmentStepDto(type="AttachmentStepDto", attachment_id=row.id, name=row.name)
|
|
498
|
+
)
|
|
499
|
+
)
|
|
500
|
+
else:
|
|
501
|
+
for step in existing_steps:
|
|
502
|
+
if step.actual_instance and isinstance(step.actual_instance, AttachmentStepDto):
|
|
503
|
+
final_steps.append(step)
|
|
504
|
+
|
|
505
|
+
return final_steps
|
|
506
|
+
|
|
507
|
+
async def _build_steps_dtos_from_list(
|
|
508
|
+
self, test_case_id: int, steps: list[dict[str, Any]]
|
|
509
|
+
) -> list[SharedStepScenarioDtoStepsInner]:
|
|
510
|
+
"""Convert list of step dicts to DTOs for PATCH."""
|
|
511
|
+
dtos = []
|
|
512
|
+
for s in steps:
|
|
513
|
+
action = str(s.get("action", ""))
|
|
514
|
+
expected = str(s.get("expected", ""))
|
|
515
|
+
step_attachments = s.get("attachments", [])
|
|
516
|
+
|
|
517
|
+
children: list[SharedStepScenarioDtoStepsInner] = []
|
|
518
|
+
|
|
519
|
+
if expected:
|
|
520
|
+
children.append(
|
|
521
|
+
SharedStepScenarioDtoStepsInner(
|
|
522
|
+
actual_instance=ExpectedBodyStepDto(type="ExpectedBodyStepDto", body=expected)
|
|
523
|
+
)
|
|
524
|
+
)
|
|
525
|
+
|
|
526
|
+
if step_attachments and isinstance(step_attachments, list):
|
|
527
|
+
for sa in step_attachments:
|
|
528
|
+
if isinstance(sa, dict):
|
|
529
|
+
att_row = await self._attachment_service.upload_attachment(test_case_id, sa)
|
|
530
|
+
children.append(
|
|
531
|
+
SharedStepScenarioDtoStepsInner(
|
|
532
|
+
actual_instance=AttachmentStepDtoWithName(
|
|
533
|
+
type="AttachmentStepDto", attachment_id=att_row.id, name=att_row.name
|
|
534
|
+
)
|
|
535
|
+
)
|
|
536
|
+
)
|
|
537
|
+
|
|
538
|
+
# Recursive steps processing
|
|
539
|
+
nested_steps_data = s.get("steps")
|
|
540
|
+
if nested_steps_data and isinstance(nested_steps_data, list):
|
|
541
|
+
nested_dtos = await self._build_steps_dtos_from_list(test_case_id, nested_steps_data)
|
|
542
|
+
children.extend(nested_dtos)
|
|
543
|
+
|
|
544
|
+
dtos.append(
|
|
545
|
+
SharedStepScenarioDtoStepsInner(
|
|
546
|
+
actual_instance=BodyStepDtoWithSteps(type="BodyStepDto", body=action, steps=children)
|
|
547
|
+
)
|
|
548
|
+
)
|
|
549
|
+
return dtos
|
|
550
|
+
|
|
551
|
+
# ==========================================
|
|
552
|
+
# Validation Methods
|
|
553
|
+
# ==========================================
|
|
554
|
+
|
|
555
|
+
def _validate_project_id(self, project_id: int | None) -> None:
|
|
556
|
+
"""Validate project ID."""
|
|
557
|
+
if not isinstance(project_id, int):
|
|
558
|
+
raise AllureValidationError(f"Project ID must be an integer, got {type(project_id).__name__}")
|
|
559
|
+
if project_id <= 0:
|
|
560
|
+
raise AllureValidationError("Project ID is required and must be positive")
|
|
561
|
+
|
|
562
|
+
def _validate_name(self, name: str) -> None:
|
|
563
|
+
"""Validate test case name."""
|
|
564
|
+
if not isinstance(name, str):
|
|
565
|
+
raise AllureValidationError(f"Test Case name must be a string, got {type(name).__name__}")
|
|
566
|
+
if not name or not name.strip():
|
|
567
|
+
raise AllureValidationError("Test case name is required.")
|
|
568
|
+
if len(name) > MAX_NAME_LENGTH:
|
|
569
|
+
raise AllureValidationError(f"Test case name must be {MAX_NAME_LENGTH} characters or less.")
|
|
570
|
+
|
|
571
|
+
def _validate_steps(self, steps: list[dict[str, Any]] | None) -> None: # noqa: C901
|
|
572
|
+
"""Validate steps list structure and content."""
|
|
573
|
+
if steps is None:
|
|
574
|
+
return
|
|
575
|
+
|
|
576
|
+
if not isinstance(steps, list):
|
|
577
|
+
raise AllureValidationError(f"Steps must be a list, got {type(steps).__name__}")
|
|
578
|
+
|
|
579
|
+
for i, step in enumerate(steps):
|
|
580
|
+
if not isinstance(step, dict):
|
|
581
|
+
hint = generate_schema_hint(ScenarioStepCreateDto)
|
|
582
|
+
raise AllureValidationError(
|
|
583
|
+
f"Step at index {i} must be a dictionary, got {type(step).__name__}", suggestions=[hint]
|
|
584
|
+
)
|
|
585
|
+
|
|
586
|
+
action = step.get("action")
|
|
587
|
+
expected = step.get("expected")
|
|
588
|
+
step_attachments = step.get("attachments")
|
|
589
|
+
|
|
590
|
+
if action is not None and not isinstance(action, str):
|
|
591
|
+
raise AllureValidationError(f"Step {i}: 'action' must be a string, got {type(action).__name__}")
|
|
592
|
+
if action and len(action) > MAX_BODY_LENGTH:
|
|
593
|
+
raise AllureValidationError(f"Step {i}: 'action' must be {MAX_BODY_LENGTH} characters or less")
|
|
594
|
+
|
|
595
|
+
if expected is not None and not isinstance(expected, str):
|
|
596
|
+
raise AllureValidationError(f"Step {i}: 'expected' must be a string, got {type(expected).__name__}")
|
|
597
|
+
if expected and len(expected) > MAX_BODY_LENGTH:
|
|
598
|
+
raise AllureValidationError(f"Step {i}: 'expected' must be {MAX_BODY_LENGTH} characters or less")
|
|
599
|
+
|
|
600
|
+
if step_attachments is not None:
|
|
601
|
+
if not isinstance(step_attachments, list):
|
|
602
|
+
hint = generate_schema_hint(AttachmentStepDto)
|
|
603
|
+
raise AllureValidationError(
|
|
604
|
+
f"Step {i}: 'attachments' must be a list, got {type(step_attachments).__name__}",
|
|
605
|
+
suggestions=[hint],
|
|
606
|
+
)
|
|
607
|
+
for j, att in enumerate(step_attachments):
|
|
608
|
+
if not isinstance(att, dict):
|
|
609
|
+
hint = generate_schema_hint(AttachmentStepDto)
|
|
610
|
+
raise AllureValidationError(
|
|
611
|
+
f"Step {i}, attachment {j}: must be a dictionary, got {type(att).__name__}",
|
|
612
|
+
suggestions=[hint],
|
|
613
|
+
)
|
|
614
|
+
|
|
615
|
+
def _validate_tags(self, tags: list[str] | None) -> None:
|
|
616
|
+
"""Validate tags list."""
|
|
617
|
+
if tags is None:
|
|
618
|
+
return
|
|
619
|
+
|
|
620
|
+
if not isinstance(tags, list):
|
|
621
|
+
hint = generate_schema_hint(TestTagDto)
|
|
622
|
+
raise AllureValidationError(f"Tags must be a list, got {type(tags).__name__}", suggestions=[hint])
|
|
623
|
+
|
|
624
|
+
for i, tag in enumerate(tags):
|
|
625
|
+
if not isinstance(tag, str):
|
|
626
|
+
hint = generate_schema_hint(TestTagDto)
|
|
627
|
+
raise AllureValidationError(
|
|
628
|
+
f"Tag at index {i} must be a string, got {type(tag).__name__}", suggestions=[hint]
|
|
629
|
+
)
|
|
630
|
+
if not tag.strip():
|
|
631
|
+
raise AllureValidationError(f"Tag at index {i} cannot be empty")
|
|
632
|
+
if len(tag) > MAX_TAG_LENGTH:
|
|
633
|
+
raise AllureValidationError(f"Tag at index {i} must be {MAX_TAG_LENGTH} characters or less")
|
|
634
|
+
|
|
635
|
+
def _validate_attachments(self, attachments: list[dict[str, str]] | None) -> None:
|
|
636
|
+
"""Validate attachments list structure."""
|
|
637
|
+
if attachments is None:
|
|
638
|
+
return
|
|
639
|
+
|
|
640
|
+
if not isinstance(attachments, list):
|
|
641
|
+
hint = generate_schema_hint(AttachmentStepDto)
|
|
642
|
+
raise AllureValidationError(
|
|
643
|
+
f"Attachments must be a list, got {type(attachments).__name__}", suggestions=[hint]
|
|
644
|
+
)
|
|
645
|
+
|
|
646
|
+
for i, att in enumerate(attachments):
|
|
647
|
+
if not isinstance(att, dict):
|
|
648
|
+
hint = generate_schema_hint(AttachmentStepDto)
|
|
649
|
+
raise AllureValidationError(
|
|
650
|
+
f"Attachment at index {i} must be a dictionary, got {type(att).__name__}", suggestions=[hint]
|
|
651
|
+
)
|
|
652
|
+
# Must have either 'content' (base64) or 'url'
|
|
653
|
+
if "content" not in att and "url" not in att:
|
|
654
|
+
raise AllureValidationError(f"Attachment at index {i} must have either 'content' or 'url' key")
|
|
655
|
+
# Must have 'name' for base64 content
|
|
656
|
+
if "content" in att and "name" not in att:
|
|
657
|
+
raise AllureValidationError(f"Attachment at index {i} with 'content' must also have 'name'")
|
|
658
|
+
|
|
659
|
+
def _validate_custom_fields(self, custom_fields: dict[str, str] | None) -> None:
|
|
660
|
+
"""Validate custom fields dictionary."""
|
|
661
|
+
if custom_fields is None:
|
|
662
|
+
return
|
|
663
|
+
|
|
664
|
+
if not isinstance(custom_fields, dict):
|
|
665
|
+
hint = generate_schema_hint(CustomFieldValueWithCfDto)
|
|
666
|
+
raise AllureValidationError(
|
|
667
|
+
f"Custom fields must be a dictionary, got {type(custom_fields).__name__}", suggestions=[hint]
|
|
668
|
+
)
|
|
669
|
+
|
|
670
|
+
for key, value in custom_fields.items():
|
|
671
|
+
if not isinstance(key, str):
|
|
672
|
+
raise AllureValidationError(f"Custom field key must be a string, got {type(key).__name__}")
|
|
673
|
+
if not isinstance(value, str):
|
|
674
|
+
raise AllureValidationError(
|
|
675
|
+
f"Custom field value for '{key}' must be a string, got {type(value).__name__}"
|
|
676
|
+
)
|
|
677
|
+
if not key.strip():
|
|
678
|
+
raise AllureValidationError("Custom field key cannot be empty")
|
|
679
|
+
|
|
680
|
+
# ==========================================
|
|
681
|
+
# DTO Building Methods
|
|
682
|
+
# ==========================================
|
|
683
|
+
|
|
684
|
+
def _build_tag_dtos(self, tags: list[str] | None) -> list[TestTagDto]:
|
|
685
|
+
"""Build validated TestTagDto list."""
|
|
686
|
+
if not tags:
|
|
687
|
+
return []
|
|
688
|
+
|
|
689
|
+
tag_dtos = []
|
|
690
|
+
for t in tags:
|
|
691
|
+
try:
|
|
692
|
+
tag_dtos.append(TestTagDto(name=t))
|
|
693
|
+
except PydanticValidationError as e:
|
|
694
|
+
hint = generate_schema_hint(TestTagDto)
|
|
695
|
+
raise AllureValidationError(f"Invalid tag '{t}': {e}", suggestions=[hint]) from e
|
|
696
|
+
return tag_dtos
|
|
697
|
+
|
|
698
|
+
async def _get_resolved_custom_fields(self, project_id: int) -> dict[str, int]:
|
|
699
|
+
"""Get or fetch custom field name-to-id mapping for a project."""
|
|
700
|
+
if project_id in self._cf_cache:
|
|
701
|
+
return self._cf_cache[project_id]
|
|
702
|
+
|
|
703
|
+
try:
|
|
704
|
+
from src.client.generated.api.test_case_custom_field_controller_api import TestCaseCustomFieldControllerApi
|
|
705
|
+
|
|
706
|
+
api = TestCaseCustomFieldControllerApi(self._client.api_client)
|
|
707
|
+
selection = TestCaseTreeSelectionDto(project_id=project_id)
|
|
708
|
+
cfs = await api.get_custom_fields_with_values2(test_case_tree_selection_dto=selection)
|
|
709
|
+
|
|
710
|
+
mapping = {}
|
|
711
|
+
for cf_with_values in cfs:
|
|
712
|
+
if cf_with_values.custom_field and cf_with_values.custom_field.custom_field:
|
|
713
|
+
inner_cf = cf_with_values.custom_field.custom_field
|
|
714
|
+
if inner_cf.name and inner_cf.id:
|
|
715
|
+
mapping[inner_cf.name] = inner_cf.id
|
|
716
|
+
|
|
717
|
+
self._cf_cache[project_id] = mapping
|
|
718
|
+
return mapping
|
|
719
|
+
except Exception as e:
|
|
720
|
+
# If we fail to fetch CFs, we might want to warn or raise.
|
|
721
|
+
# For now, let's raise as it's critical for resolving names to IDs.
|
|
722
|
+
raise AllureValidationError(f"Failed to fetch custom fields for project {project_id}: {e}") from e
|
|
723
|
+
|
|
724
|
+
def _build_custom_field_dtos(self, custom_fields: dict[str, str] | None) -> list[CustomFieldValueWithCfDto]:
|
|
725
|
+
"""DEPRECATED: Use inline resolution in create_test_case."""
|
|
726
|
+
if not custom_fields:
|
|
727
|
+
return []
|
|
728
|
+
|
|
729
|
+
cf_dtos = []
|
|
730
|
+
for key, value in custom_fields.items():
|
|
731
|
+
if not key:
|
|
732
|
+
raise AllureValidationError("Custom field key cannot be empty.")
|
|
733
|
+
if not isinstance(value, str):
|
|
734
|
+
raise AllureValidationError(f"Custom field '{key}' value must be a string.")
|
|
735
|
+
cf_dtos.append(CustomFieldValueWithCfDto(custom_field=CustomFieldDto(name=key), name=value))
|
|
736
|
+
return cf_dtos
|
|
737
|
+
|
|
738
|
+
def _build_scenario_step_dto(
|
|
739
|
+
self,
|
|
740
|
+
test_case_id: int,
|
|
741
|
+
body: str | None = None,
|
|
742
|
+
attachment_id: int | None = None,
|
|
743
|
+
shared_step_id: int | None = None,
|
|
744
|
+
parent_id: int | None = None,
|
|
745
|
+
) -> ScenarioStepCreateDto:
|
|
746
|
+
"""Build and validate a ScenarioStepCreateDto."""
|
|
747
|
+
try:
|
|
748
|
+
return ScenarioStepCreateDto(
|
|
749
|
+
test_case_id=test_case_id,
|
|
750
|
+
body=body,
|
|
751
|
+
attachment_id=attachment_id,
|
|
752
|
+
shared_step_id=shared_step_id,
|
|
753
|
+
parent_id=parent_id,
|
|
754
|
+
)
|
|
755
|
+
except PydanticValidationError as e:
|
|
756
|
+
hint = generate_schema_hint(ScenarioStepCreateDto)
|
|
757
|
+
raise AllureValidationError(f"Invalid scenario step data: {e}", suggestions=[hint]) from e
|
|
758
|
+
|
|
759
|
+
# ==========================================
|
|
760
|
+
# Step Creation Methods
|
|
761
|
+
# ==========================================
|
|
762
|
+
|
|
763
|
+
async def _add_steps(
|
|
764
|
+
self,
|
|
765
|
+
test_case_id: int,
|
|
766
|
+
steps: list[dict[str, Any]] | None,
|
|
767
|
+
last_step_id: int | None,
|
|
768
|
+
) -> int | None:
|
|
769
|
+
"""Add steps to a test case using separate API calls.
|
|
770
|
+
|
|
771
|
+
Args:
|
|
772
|
+
test_case_id: Test case ID to add steps to.
|
|
773
|
+
steps: List of step definitions.
|
|
774
|
+
last_step_id: ID of the last created step (for ordering).
|
|
775
|
+
|
|
776
|
+
Returns:
|
|
777
|
+
The ID of the last created step, or None if no steps were created.
|
|
778
|
+
"""
|
|
779
|
+
if not steps:
|
|
780
|
+
return last_step_id
|
|
781
|
+
|
|
782
|
+
for s in steps:
|
|
783
|
+
action = str(s.get("action", ""))
|
|
784
|
+
expected = str(s.get("expected", ""))
|
|
785
|
+
step_attachments: list[dict[str, str]] = s.get("attachments", [])
|
|
786
|
+
|
|
787
|
+
current_parent_id: int | None = None
|
|
788
|
+
last_child_id: int | None = None
|
|
789
|
+
|
|
790
|
+
# Action Step (body step)
|
|
791
|
+
if action:
|
|
792
|
+
step_dto = self._build_scenario_step_dto(test_case_id=test_case_id, body=action)
|
|
793
|
+
response = await self._client.create_scenario_step(
|
|
794
|
+
test_case_id=test_case_id,
|
|
795
|
+
step=step_dto,
|
|
796
|
+
after_id=last_step_id,
|
|
797
|
+
)
|
|
798
|
+
current_parent_id = response.created_step_id
|
|
799
|
+
last_step_id = current_parent_id
|
|
800
|
+
|
|
801
|
+
# If there's an expected result, create it as a child step under the action
|
|
802
|
+
if expected:
|
|
803
|
+
expected_step_dto = self._build_scenario_step_dto(
|
|
804
|
+
test_case_id=test_case_id,
|
|
805
|
+
body=expected,
|
|
806
|
+
parent_id=current_parent_id,
|
|
807
|
+
)
|
|
808
|
+
expected_response = await self._client.create_scenario_step(
|
|
809
|
+
test_case_id=test_case_id,
|
|
810
|
+
step=expected_step_dto,
|
|
811
|
+
after_id=None, # First child
|
|
812
|
+
)
|
|
813
|
+
last_child_id = expected_response.created_step_id
|
|
814
|
+
|
|
815
|
+
# Step Attachments (added as children of the action step)
|
|
816
|
+
if step_attachments and isinstance(step_attachments, list):
|
|
817
|
+
for sa in step_attachments:
|
|
818
|
+
if isinstance(sa, dict):
|
|
819
|
+
attachment_row = await self._attachment_service.upload_attachment(test_case_id, sa)
|
|
820
|
+
attachment_step_dto = self._build_scenario_step_dto(
|
|
821
|
+
test_case_id=test_case_id,
|
|
822
|
+
attachment_id=attachment_row.id,
|
|
823
|
+
parent_id=current_parent_id,
|
|
824
|
+
)
|
|
825
|
+
attachment_response = await self._client.create_scenario_step(
|
|
826
|
+
test_case_id=test_case_id,
|
|
827
|
+
step=attachment_step_dto,
|
|
828
|
+
after_id=last_child_id,
|
|
829
|
+
)
|
|
830
|
+
last_child_id = attachment_response.created_step_id
|
|
831
|
+
|
|
832
|
+
return last_step_id
|
|
833
|
+
|
|
834
|
+
async def _recreate_scenario(self, test_case_id: int, steps: list[SharedStepScenarioDtoStepsInner]) -> None:
|
|
835
|
+
"""Recreate the entire scenario step by step."""
|
|
836
|
+
# 1. Fetch current scenario for rollback in case of failure
|
|
837
|
+
try:
|
|
838
|
+
previous_scenario = await self._client.get_test_case_scenario(test_case_id)
|
|
839
|
+
except Exception:
|
|
840
|
+
# If we can't get current scenario, we can't rollback to it. Proceed with caution.
|
|
841
|
+
previous_scenario = None
|
|
842
|
+
|
|
843
|
+
try:
|
|
844
|
+
# 2. Clear existing scenario
|
|
845
|
+
await self._client.update_test_case(
|
|
846
|
+
test_case_id, TestCasePatchV2Dto(scenario=TestCaseScenarioV2Dto(steps=[]))
|
|
847
|
+
)
|
|
848
|
+
|
|
849
|
+
# 3. Recursively add steps
|
|
850
|
+
last_step_id: int | None = None
|
|
851
|
+
for step in steps:
|
|
852
|
+
last_step_id = await self._recursive_add_step(test_case_id, step, after_id=last_step_id)
|
|
853
|
+
|
|
854
|
+
except Exception as e:
|
|
855
|
+
# Rollback Attempt
|
|
856
|
+
if previous_scenario and previous_scenario.steps:
|
|
857
|
+
try:
|
|
858
|
+
# Clear any partial progress
|
|
859
|
+
await self._client.update_test_case(
|
|
860
|
+
test_case_id, TestCasePatchV2Dto(scenario=TestCaseScenarioV2Dto(steps=[]))
|
|
861
|
+
)
|
|
862
|
+
# Attempt to restore previous steps
|
|
863
|
+
# Note: We can only best-effort restore. IDs will change.
|
|
864
|
+
# We need to convert TestCaseScenarioDto steps -> SharedStepScenarioDtoStepsInner
|
|
865
|
+
# This is complex because Read DTOs != Write DTOs.
|
|
866
|
+
# For now, we raise a clear error indicating data was lost/partial.
|
|
867
|
+
# Ideally, we would have logic to convert Read -> Write DTOs, but that's a larger feature.
|
|
868
|
+
# Given the scope, raising a critical error is better than silent failure.
|
|
869
|
+
pass
|
|
870
|
+
except Exception as rollback_error:
|
|
871
|
+
# We log this as a warning because the original error will be raised anyway
|
|
872
|
+
logger.warning(
|
|
873
|
+
f"Rollback failed during scenario recreation. Partial data may persist. Error: {rollback_error}"
|
|
874
|
+
)
|
|
875
|
+
|
|
876
|
+
raise AllureAPIError(
|
|
877
|
+
f"Failed to recreate scenario. Steps may be partially applied or lost. Error: {e}"
|
|
878
|
+
) from e
|
|
879
|
+
|
|
880
|
+
async def _recursive_add_step(
|
|
881
|
+
self,
|
|
882
|
+
test_case_id: int,
|
|
883
|
+
step: SharedStepScenarioDtoStepsInner,
|
|
884
|
+
parent_id: int | None = None,
|
|
885
|
+
after_id: int | None = None,
|
|
886
|
+
) -> int | None:
|
|
887
|
+
"""Recursively add a step and its children."""
|
|
888
|
+
if not step.actual_instance:
|
|
889
|
+
return after_id
|
|
890
|
+
|
|
891
|
+
instance = step.actual_instance
|
|
892
|
+
created_id = None
|
|
893
|
+
|
|
894
|
+
# Determine step type and create
|
|
895
|
+
if isinstance(instance, BodyStepDto):
|
|
896
|
+
step_dto = self._build_scenario_step_dto(test_case_id=test_case_id, body=instance.body, parent_id=parent_id)
|
|
897
|
+
resp = await self._client.create_scenario_step(test_case_id=test_case_id, step=step_dto, after_id=after_id)
|
|
898
|
+
created_id = resp.created_step_id
|
|
899
|
+
|
|
900
|
+
# Add children (steps may not be a defined field in generated DTO,
|
|
901
|
+
# but we set it via model_construct)
|
|
902
|
+
child_steps = getattr(instance, "steps", None)
|
|
903
|
+
if child_steps:
|
|
904
|
+
last_child_id = None
|
|
905
|
+
for child in child_steps:
|
|
906
|
+
last_child_id = await self._recursive_add_step(
|
|
907
|
+
test_case_id, child, parent_id=created_id, after_id=last_child_id
|
|
908
|
+
)
|
|
909
|
+
|
|
910
|
+
elif isinstance(instance, ExpectedBodyStepDto):
|
|
911
|
+
step_dto = self._build_scenario_step_dto(test_case_id=test_case_id, body=instance.body, parent_id=parent_id)
|
|
912
|
+
resp = await self._client.create_scenario_step(test_case_id=test_case_id, step=step_dto, after_id=after_id)
|
|
913
|
+
created_id = resp.created_step_id
|
|
914
|
+
|
|
915
|
+
elif isinstance(instance, AttachmentStepDto):
|
|
916
|
+
step_dto = self._build_scenario_step_dto(
|
|
917
|
+
test_case_id=test_case_id, attachment_id=instance.attachment_id, parent_id=parent_id
|
|
918
|
+
)
|
|
919
|
+
resp = await self._client.create_scenario_step(test_case_id=test_case_id, step=step_dto, after_id=after_id)
|
|
920
|
+
created_id = resp.created_step_id
|
|
921
|
+
|
|
922
|
+
return created_id if created_id else after_id
|
|
923
|
+
|
|
924
|
+
async def _add_global_attachments(
|
|
925
|
+
self,
|
|
926
|
+
test_case_id: int,
|
|
927
|
+
attachments: list[dict[str, str]] | None,
|
|
928
|
+
last_step_id: int | None,
|
|
929
|
+
) -> None:
|
|
930
|
+
"""Add global attachments to a test case as attachment steps.
|
|
931
|
+
|
|
932
|
+
Args:
|
|
933
|
+
test_case_id: Test case ID to add attachments to.
|
|
934
|
+
attachments: List of attachment definitions.
|
|
935
|
+
last_step_id: ID of the last created step (for ordering).
|
|
936
|
+
"""
|
|
937
|
+
if not attachments:
|
|
938
|
+
return
|
|
939
|
+
|
|
940
|
+
for attachment in attachments:
|
|
941
|
+
attachment_row = await self._attachment_service.upload_attachment(test_case_id, attachment)
|
|
942
|
+
attachment_step_dto = self._build_scenario_step_dto(
|
|
943
|
+
test_case_id=test_case_id,
|
|
944
|
+
attachment_id=attachment_row.id,
|
|
945
|
+
)
|
|
946
|
+
response = await self._client.create_scenario_step(
|
|
947
|
+
test_case_id=test_case_id,
|
|
948
|
+
step=attachment_step_dto,
|
|
949
|
+
after_id=last_step_id,
|
|
950
|
+
)
|
|
951
|
+
last_step_id = response.created_step_id
|