From 2aae9b53d3265f3561b15170a41597b33ba0a866 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridnev Date: Wed, 10 Jun 2026 16:03:45 +0300 Subject: [PATCH] chore: update API clients to latest specification --- qase-api-client/docs/DefectCreate.md | 2 +- qase-api-client/docs/DefectUpdate.md | 2 +- qase-api-client/docs/RunCreate.md | 2 +- qase-api-client/docs/Runupdate.md | 2 +- qase-api-client/docs/TestCase.md | 4 +++- qase-api-client/docs/TestCaseCreate.md | 6 ++++-- qase-api-client/docs/TestCaseUpdate.md | 6 ++++-- qase-api-client/docs/TestCasebulkCasesInner.md | 6 ++++-- qase-api-client/pyproject.toml | 2 +- .../src/qase/api_client_v1/models/defect_create.py | 2 +- .../src/qase/api_client_v1/models/defect_update.py | 2 +- .../src/qase/api_client_v1/models/run_create.py | 2 +- .../src/qase/api_client_v1/models/runupdate.py | 2 +- .../src/qase/api_client_v1/models/test_case.py | 8 ++++++-- .../src/qase/api_client_v1/models/test_case_create.py | 10 +++++++--- .../src/qase/api_client_v1/models/test_case_update.py | 10 +++++++--- .../api_client_v1/models/test_casebulk_cases_inner.py | 10 +++++++--- 17 files changed, 51 insertions(+), 27 deletions(-) diff --git a/qase-api-client/docs/DefectCreate.md b/qase-api-client/docs/DefectCreate.md index 989314c6..5a457201 100644 --- a/qase-api-client/docs/DefectCreate.md +++ b/qase-api-client/docs/DefectCreate.md @@ -10,7 +10,7 @@ Name | Type | Description | Notes **severity** | **int** | | **milestone_id** | **int** | | [optional] **attachments** | **List[str]** | | [optional] -**custom_field** | **Dict[str, str]** | A map of custom fields values (id => value) | [optional] +**custom_field** | **Dict[str, str]** | Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Validation: all required fields without a default value must be present and non-empty; unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. | [optional] **tags** | **List[str]** | | [optional] ## Example diff --git a/qase-api-client/docs/DefectUpdate.md b/qase-api-client/docs/DefectUpdate.md index 23c05b0b..db8f5928 100644 --- a/qase-api-client/docs/DefectUpdate.md +++ b/qase-api-client/docs/DefectUpdate.md @@ -10,7 +10,7 @@ Name | Type | Description | Notes **severity** | **int** | | [optional] **milestone_id** | **int** | | [optional] **attachments** | **List[str]** | | [optional] -**custom_field** | **Dict[str, str]** | A map of custom fields values (id => value) | [optional] +**custom_field** | **Dict[str, str]** | Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Partial update: only fields present in the payload are validated; required fields not included are not enforced. Send `\"\"` to clear a value. Unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. | [optional] **tags** | **List[str]** | | [optional] ## Example diff --git a/qase-api-client/docs/RunCreate.md b/qase-api-client/docs/RunCreate.md index 9ab43694..e2c96b2e 100644 --- a/qase-api-client/docs/RunCreate.md +++ b/qase-api-client/docs/RunCreate.md @@ -17,7 +17,7 @@ Name | Type | Description | Notes **author_id** | **int** | | [optional] **tags** | **List[str]** | | [optional] **configurations** | **List[int]** | | [optional] -**custom_field** | **Dict[str, str]** | A map of custom fields values (id => value) | [optional] +**custom_field** | **Dict[str, str]** | Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Validation: all required fields without a default value must be present and non-empty; unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. | [optional] **start_time** | **str** | | [optional] **end_time** | **str** | | [optional] **is_cloud** | **bool** | Indicates if the run is created for the Test Cases produced by AIDEN | [optional] diff --git a/qase-api-client/docs/Runupdate.md b/qase-api-client/docs/Runupdate.md index e2a75bb7..eb93b3c8 100644 --- a/qase-api-client/docs/Runupdate.md +++ b/qase-api-client/docs/Runupdate.md @@ -12,7 +12,7 @@ Name | Type | Description | Notes **milestone_id** | **int** | | [optional] **tags** | **List[str]** | | [optional] **configurations** | **List[int]** | | [optional] -**custom_field** | **Dict[str, str]** | A map of custom fields values (id => value) | [optional] +**custom_field** | **Dict[str, str]** | Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Validation: all required fields without a default value must be present and non-empty; unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. | [optional] ## Example diff --git a/qase-api-client/docs/TestCase.md b/qase-api-client/docs/TestCase.md index 57860d26..3456e22d 100644 --- a/qase-api-client/docs/TestCase.md +++ b/qase-api-client/docs/TestCase.md @@ -17,7 +17,9 @@ Name | Type | Description | Notes **layer** | **int** | | [optional] **is_flaky** | **int** | | [optional] **behavior** | **int** | | [optional] -**automation** | **int** | | [optional] +**automation** | **int** | Deprecated, use `isManual` and `isToBeAutomated` instead. Encodes the test case automation state as a single integer: `0` = manual, `1` = manual planned to be automated, `2` = automated. | [optional] +**is_manual** | **int** | `1` if the case is manual, `0` if it is automated. Combined with `isToBeAutomated`, replaces the deprecated `automation` field. | [optional] +**is_to_be_automated** | **int** | `1` if a manual case is planned to be automated, `0` otherwise. Only meaningful when `isManual = 1`; ignored when `isManual = 0`. | [optional] **status** | **int** | | [optional] **milestone_id** | **int** | | [optional] **suite_id** | **int** | | [optional] diff --git a/qase-api-client/docs/TestCaseCreate.md b/qase-api-client/docs/TestCaseCreate.md index 1374de0c..51a027d6 100644 --- a/qase-api-client/docs/TestCaseCreate.md +++ b/qase-api-client/docs/TestCaseCreate.md @@ -17,7 +17,9 @@ Name | Type | Description | Notes **is_flaky** | **int** | | [optional] **suite_id** | **int** | | [optional] **milestone_id** | **int** | | [optional] -**automation** | **int** | | [optional] +**automation** | **int** | Deprecated, use `isManual` and `isToBeAutomated` instead. Encodes the test case automation state as a single integer: `0` = manual, `1` = manual planned to be automated, `2` = automated. If both `automation` and `isManual`/`isToBeAutomated` are provided, `isManual` and `isToBeAutomated` take precedence. | [optional] +**is_manual** | **int** | `1` if the case is manual, `0` if it is automated. Combined with `isToBeAutomated`, replaces the deprecated `automation` field. | [optional] +**is_to_be_automated** | **int** | `1` if a manual case is planned to be automated, `0` otherwise. Only meaningful when `isManual = 1`; ignored when `isManual = 0`. | [optional] **status** | **int** | | [optional] **steps_type** | **str** | Determines the format of the steps field. When \"classic\", steps use the standard action/expected_result/data format. When \"gherkin\", steps use the {value: \"Given...\\nWhen...\\nThen...\"} format. | [optional] [default to 'classic'] **attachments** | **List[str]** | A list of Attachment hashes. | [optional] @@ -25,7 +27,7 @@ Name | Type | Description | Notes **tags** | **List[str]** | | [optional] **params** | **Dict[str, List[str]]** | Deprecated, use `parameters` instead. | [optional] **parameters** | [**List[TestCaseParameterCreate]**](TestCaseParameterCreate.md) | | [optional] -**custom_field** | **Dict[str, str]** | A map of custom fields values (id => value) | [optional] +**custom_field** | **Dict[str, str]** | Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Validation: all required fields without a default value must be present and non-empty; unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. | [optional] **created_at** | **str** | | [optional] **updated_at** | **str** | | [optional] diff --git a/qase-api-client/docs/TestCaseUpdate.md b/qase-api-client/docs/TestCaseUpdate.md index c2501e29..ff14f9bd 100644 --- a/qase-api-client/docs/TestCaseUpdate.md +++ b/qase-api-client/docs/TestCaseUpdate.md @@ -17,7 +17,9 @@ Name | Type | Description | Notes **is_flaky** | **int** | | [optional] **suite_id** | **int** | | [optional] **milestone_id** | **int** | | [optional] -**automation** | **int** | | [optional] +**automation** | **int** | Deprecated, use `isManual` and `isToBeAutomated` instead. Encodes the test case automation state as a single integer: `0` = manual, `1` = manual planned to be automated, `2` = automated. If both `automation` and `isManual`/`isToBeAutomated` are provided, `isManual` and `isToBeAutomated` take precedence. | [optional] +**is_manual** | **int** | `1` if the case is manual, `0` if it is automated. Combined with `isToBeAutomated`, replaces the deprecated `automation` field. | [optional] +**is_to_be_automated** | **int** | `1` if a manual case is planned to be automated, `0` otherwise. Only meaningful when `isManual = 1`; ignored when `isManual = 0`. | [optional] **status** | **int** | | [optional] **steps_type** | **str** | Determines the format of the steps field. When \"classic\", steps use the standard action/expected_result/data format. When \"gherkin\", steps use the {value: \"Given...\\nWhen...\\nThen...\"} format. | [optional] [default to 'classic'] **attachments** | **List[str]** | A list of Attachment hashes. | [optional] @@ -25,7 +27,7 @@ Name | Type | Description | Notes **tags** | **List[str]** | | [optional] **params** | **Dict[str, List[str]]** | Deprecated, use `parameters` instead. | [optional] **parameters** | [**List[TestCaseParameterCreate]**](TestCaseParameterCreate.md) | | [optional] -**custom_field** | **Dict[str, str]** | A map of custom fields values (id => value) | [optional] +**custom_field** | **Dict[str, str]** | Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Partial update: only fields present in the payload are validated; required fields not included are not enforced. Send `\"\"` to clear a value. Unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. | [optional] ## Example diff --git a/qase-api-client/docs/TestCasebulkCasesInner.md b/qase-api-client/docs/TestCasebulkCasesInner.md index 787f11e0..7a7816ac 100644 --- a/qase-api-client/docs/TestCasebulkCasesInner.md +++ b/qase-api-client/docs/TestCasebulkCasesInner.md @@ -17,7 +17,9 @@ Name | Type | Description | Notes **is_flaky** | **int** | | [optional] **suite_id** | **int** | | [optional] **milestone_id** | **int** | | [optional] -**automation** | **int** | | [optional] +**automation** | **int** | Deprecated, use `isManual` and `isToBeAutomated` instead. Encodes the test case automation state as a single integer: `0` = manual, `1` = manual planned to be automated, `2` = automated. If both `automation` and `isManual`/`isToBeAutomated` are provided, `isManual` and `isToBeAutomated` take precedence. | [optional] +**is_manual** | **int** | `1` if the case is manual, `0` if it is automated. Combined with `isToBeAutomated`, replaces the deprecated `automation` field. | [optional] +**is_to_be_automated** | **int** | `1` if a manual case is planned to be automated, `0` otherwise. Only meaningful when `isManual = 1`; ignored when `isManual = 0`. | [optional] **status** | **int** | | [optional] **steps_type** | **str** | Determines the format of the steps field. When \"classic\", steps use the standard action/expected_result/data format. When \"gherkin\", steps use the {value: \"Given...\\nWhen...\\nThen...\"} format. | [optional] [default to 'classic'] **attachments** | **List[str]** | A list of Attachment hashes. | [optional] @@ -25,7 +27,7 @@ Name | Type | Description | Notes **tags** | **List[str]** | | [optional] **params** | **Dict[str, List[str]]** | Deprecated, use `parameters` instead. | [optional] **parameters** | [**List[TestCaseParameterCreate]**](TestCaseParameterCreate.md) | | [optional] -**custom_field** | **Dict[str, str]** | A map of custom fields values (id => value) | [optional] +**custom_field** | **Dict[str, str]** | Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Validation: all required fields without a default value must be present and non-empty; unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. | [optional] **created_at** | **str** | | [optional] **updated_at** | **str** | | [optional] **id** | **int** | | [optional] diff --git a/qase-api-client/pyproject.toml b/qase-api-client/pyproject.toml index 8989b62d..41ecea1c 100644 --- a/qase-api-client/pyproject.toml +++ b/qase-api-client/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "qase-api-client" -version = "2.0.8" +version = "2.0.9" description = "Qase TestOps API V1 client for Python" readme = "README.md" authors = [{name = "Qase Team", email = "support@qase.io"}] diff --git a/qase-api-client/src/qase/api_client_v1/models/defect_create.py b/qase-api-client/src/qase/api_client_v1/models/defect_create.py index 49446c4a..cd21912b 100644 --- a/qase-api-client/src/qase/api_client_v1/models/defect_create.py +++ b/qase-api-client/src/qase/api_client_v1/models/defect_create.py @@ -32,7 +32,7 @@ class DefectCreate(BaseModel): severity: StrictInt milestone_id: Optional[StrictInt] = None attachments: Optional[List[StrictStr]] = None - custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="A map of custom fields values (id => value)") + custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Validation: all required fields without a default value must be present and non-empty; unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. ") tags: Optional[List[StrictStr]] = None __properties: ClassVar[List[str]] = ["title", "actual_result", "severity", "milestone_id", "attachments", "custom_field", "tags"] diff --git a/qase-api-client/src/qase/api_client_v1/models/defect_update.py b/qase-api-client/src/qase/api_client_v1/models/defect_update.py index a35cfe56..0f44e96d 100644 --- a/qase-api-client/src/qase/api_client_v1/models/defect_update.py +++ b/qase-api-client/src/qase/api_client_v1/models/defect_update.py @@ -32,7 +32,7 @@ class DefectUpdate(BaseModel): severity: Optional[StrictInt] = None milestone_id: Optional[StrictInt] = None attachments: Optional[List[StrictStr]] = None - custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="A map of custom fields values (id => value)") + custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Partial update: only fields present in the payload are validated; required fields not included are not enforced. Send `\"\"` to clear a value. Unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. ") tags: Optional[List[StrictStr]] = None __properties: ClassVar[List[str]] = ["title", "actual_result", "severity", "milestone_id", "attachments", "custom_field", "tags"] diff --git a/qase-api-client/src/qase/api_client_v1/models/run_create.py b/qase-api-client/src/qase/api_client_v1/models/run_create.py index eab58bc4..81cc7dac 100644 --- a/qase-api-client/src/qase/api_client_v1/models/run_create.py +++ b/qase-api-client/src/qase/api_client_v1/models/run_create.py @@ -41,7 +41,7 @@ class RunCreate(BaseModel): author_id: Optional[Annotated[int, Field(strict=True, ge=1)]] = None tags: Optional[List[StrictStr]] = None configurations: Optional[List[StrictInt]] = None - custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="A map of custom fields values (id => value)") + custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Validation: all required fields without a default value must be present and non-empty; unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. ") start_time: Optional[StrictStr] = None end_time: Optional[StrictStr] = None is_cloud: Optional[StrictBool] = Field(default=None, description="Indicates if the run is created for the Test Cases produced by AIDEN") diff --git a/qase-api-client/src/qase/api_client_v1/models/runupdate.py b/qase-api-client/src/qase/api_client_v1/models/runupdate.py index 96bb0428..1cd11cf4 100644 --- a/qase-api-client/src/qase/api_client_v1/models/runupdate.py +++ b/qase-api-client/src/qase/api_client_v1/models/runupdate.py @@ -35,7 +35,7 @@ class Runupdate(BaseModel): milestone_id: Optional[Annotated[int, Field(strict=True, ge=1)]] = None tags: Optional[List[StrictStr]] = None configurations: Optional[List[StrictInt]] = None - custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="A map of custom fields values (id => value)") + custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Validation: all required fields without a default value must be present and non-empty; unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. ") __properties: ClassVar[List[str]] = ["title", "description", "environment_id", "environment_slug", "milestone_id", "tags", "configurations", "custom_field"] model_config = ConfigDict( diff --git a/qase-api-client/src/qase/api_client_v1/models/test_case.py b/qase-api-client/src/qase/api_client_v1/models/test_case.py index 7060925d..96ee1ed4 100644 --- a/qase-api-client/src/qase/api_client_v1/models/test_case.py +++ b/qase-api-client/src/qase/api_client_v1/models/test_case.py @@ -47,7 +47,9 @@ class TestCase(BaseModel): layer: Optional[StrictInt] = None is_flaky: Optional[StrictInt] = None behavior: Optional[StrictInt] = None - automation: Optional[StrictInt] = None + automation: Optional[StrictInt] = Field(default=None, description="Deprecated, use `isManual` and `isToBeAutomated` instead. Encodes the test case automation state as a single integer: `0` = manual, `1` = manual planned to be automated, `2` = automated.") + is_manual: Optional[StrictInt] = Field(default=None, description="`1` if the case is manual, `0` if it is automated. Combined with `isToBeAutomated`, replaces the deprecated `automation` field.", alias="isManual") + is_to_be_automated: Optional[StrictInt] = Field(default=None, description="`1` if a manual case is planned to be automated, `0` otherwise. Only meaningful when `isManual = 1`; ignored when `isManual = 0`.", alias="isToBeAutomated") status: Optional[StrictInt] = None milestone_id: Optional[StrictInt] = None suite_id: Optional[StrictInt] = None @@ -66,7 +68,7 @@ class TestCase(BaseModel): created: Optional[StrictStr] = Field(default=None, description="Deprecated, use the `created_at` property instead.") updated: Optional[StrictStr] = Field(default=None, description="Deprecated, use the `updated_at` property instead.") external_issues: Optional[List[ExternalIssue]] = None - __properties: ClassVar[List[str]] = ["id", "position", "title", "description", "preconditions", "postconditions", "severity", "priority", "type", "layer", "is_flaky", "behavior", "automation", "status", "milestone_id", "suite_id", "custom_fields", "attachments", "steps_type", "steps", "params", "parameters", "tags", "member_id", "author_id", "created_at", "updated_at", "deleted", "created", "updated", "external_issues"] + __properties: ClassVar[List[str]] = ["id", "position", "title", "description", "preconditions", "postconditions", "severity", "priority", "type", "layer", "is_flaky", "behavior", "automation", "isManual", "isToBeAutomated", "status", "milestone_id", "suite_id", "custom_fields", "attachments", "steps_type", "steps", "params", "parameters", "tags", "member_id", "author_id", "created_at", "updated_at", "deleted", "created", "updated", "external_issues"] @field_validator('steps_type') def steps_type_validate_enum(cls, value): @@ -222,6 +224,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "is_flaky": obj.get("is_flaky"), "behavior": obj.get("behavior"), "automation": obj.get("automation"), + "isManual": obj.get("isManual"), + "isToBeAutomated": obj.get("isToBeAutomated"), "status": obj.get("status"), "milestone_id": obj.get("milestone_id"), "suite_id": obj.get("suite_id"), diff --git a/qase-api-client/src/qase/api_client_v1/models/test_case_create.py b/qase-api-client/src/qase/api_client_v1/models/test_case_create.py index 566c35d8..d0f7cce8 100644 --- a/qase-api-client/src/qase/api_client_v1/models/test_case_create.py +++ b/qase-api-client/src/qase/api_client_v1/models/test_case_create.py @@ -42,7 +42,9 @@ class TestCaseCreate(BaseModel): is_flaky: Optional[StrictInt] = None suite_id: Optional[StrictInt] = None milestone_id: Optional[StrictInt] = None - automation: Optional[StrictInt] = None + automation: Optional[StrictInt] = Field(default=None, description="Deprecated, use `isManual` and `isToBeAutomated` instead. Encodes the test case automation state as a single integer: `0` = manual, `1` = manual planned to be automated, `2` = automated. If both `automation` and `isManual`/`isToBeAutomated` are provided, `isManual` and `isToBeAutomated` take precedence.") + is_manual: Optional[StrictInt] = Field(default=None, description="`1` if the case is manual, `0` if it is automated. Combined with `isToBeAutomated`, replaces the deprecated `automation` field.", alias="isManual") + is_to_be_automated: Optional[StrictInt] = Field(default=None, description="`1` if a manual case is planned to be automated, `0` otherwise. Only meaningful when `isManual = 1`; ignored when `isManual = 0`.", alias="isToBeAutomated") status: Optional[StrictInt] = None steps_type: Optional[StrictStr] = Field(default='classic', description="Determines the format of the steps field. When \"classic\", steps use the standard action/expected_result/data format. When \"gherkin\", steps use the {value: \"Given...\\nWhen...\\nThen...\"} format.") attachments: Optional[List[StrictStr]] = Field(default=None, description="A list of Attachment hashes.") @@ -50,10 +52,10 @@ class TestCaseCreate(BaseModel): tags: Optional[List[StrictStr]] = None params: Optional[Dict[str, List[StrictStr]]] = Field(default=None, description="Deprecated, use `parameters` instead.") parameters: Optional[List[TestCaseParameterCreate]] = None - custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="A map of custom fields values (id => value)") + custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Validation: all required fields without a default value must be present and non-empty; unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. ") created_at: Optional[StrictStr] = None updated_at: Optional[StrictStr] = None - __properties: ClassVar[List[str]] = ["description", "preconditions", "postconditions", "title", "severity", "priority", "behavior", "type", "layer", "is_flaky", "suite_id", "milestone_id", "automation", "status", "steps_type", "attachments", "steps", "tags", "params", "parameters", "custom_field", "created_at", "updated_at"] + __properties: ClassVar[List[str]] = ["description", "preconditions", "postconditions", "title", "severity", "priority", "behavior", "type", "layer", "is_flaky", "suite_id", "milestone_id", "automation", "isManual", "isToBeAutomated", "status", "steps_type", "attachments", "steps", "tags", "params", "parameters", "custom_field", "created_at", "updated_at"] @field_validator('steps_type') def steps_type_validate_enum(cls, value): @@ -153,6 +155,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "suite_id": obj.get("suite_id"), "milestone_id": obj.get("milestone_id"), "automation": obj.get("automation"), + "isManual": obj.get("isManual"), + "isToBeAutomated": obj.get("isToBeAutomated"), "status": obj.get("status"), "steps_type": obj.get("steps_type") if obj.get("steps_type") is not None else 'classic', "attachments": obj.get("attachments"), diff --git a/qase-api-client/src/qase/api_client_v1/models/test_case_update.py b/qase-api-client/src/qase/api_client_v1/models/test_case_update.py index 634eb2dd..95d429ee 100644 --- a/qase-api-client/src/qase/api_client_v1/models/test_case_update.py +++ b/qase-api-client/src/qase/api_client_v1/models/test_case_update.py @@ -42,7 +42,9 @@ class TestCaseUpdate(BaseModel): is_flaky: Optional[StrictInt] = None suite_id: Optional[StrictInt] = None milestone_id: Optional[StrictInt] = None - automation: Optional[StrictInt] = None + automation: Optional[StrictInt] = Field(default=None, description="Deprecated, use `isManual` and `isToBeAutomated` instead. Encodes the test case automation state as a single integer: `0` = manual, `1` = manual planned to be automated, `2` = automated. If both `automation` and `isManual`/`isToBeAutomated` are provided, `isManual` and `isToBeAutomated` take precedence.") + is_manual: Optional[StrictInt] = Field(default=None, description="`1` if the case is manual, `0` if it is automated. Combined with `isToBeAutomated`, replaces the deprecated `automation` field.", alias="isManual") + is_to_be_automated: Optional[StrictInt] = Field(default=None, description="`1` if a manual case is planned to be automated, `0` otherwise. Only meaningful when `isManual = 1`; ignored when `isManual = 0`.", alias="isToBeAutomated") status: Optional[StrictInt] = None steps_type: Optional[StrictStr] = Field(default='classic', description="Determines the format of the steps field. When \"classic\", steps use the standard action/expected_result/data format. When \"gherkin\", steps use the {value: \"Given...\\nWhen...\\nThen...\"} format.") attachments: Optional[List[StrictStr]] = Field(default=None, description="A list of Attachment hashes.") @@ -50,8 +52,8 @@ class TestCaseUpdate(BaseModel): tags: Optional[List[StrictStr]] = None params: Optional[Dict[str, List[StrictStr]]] = Field(default=None, description="Deprecated, use `parameters` instead.") parameters: Optional[List[TestCaseParameterCreate]] = None - custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="A map of custom fields values (id => value)") - __properties: ClassVar[List[str]] = ["description", "preconditions", "postconditions", "title", "severity", "priority", "behavior", "type", "layer", "is_flaky", "suite_id", "milestone_id", "automation", "status", "steps_type", "attachments", "steps", "tags", "params", "parameters", "custom_field"] + custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Partial update: only fields present in the payload are validated; required fields not included are not enforced. Send `\"\"` to clear a value. Unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. ") + __properties: ClassVar[List[str]] = ["description", "preconditions", "postconditions", "title", "severity", "priority", "behavior", "type", "layer", "is_flaky", "suite_id", "milestone_id", "automation", "isManual", "isToBeAutomated", "status", "steps_type", "attachments", "steps", "tags", "params", "parameters", "custom_field"] @field_validator('steps_type') def steps_type_validate_enum(cls, value): @@ -151,6 +153,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "suite_id": obj.get("suite_id"), "milestone_id": obj.get("milestone_id"), "automation": obj.get("automation"), + "isManual": obj.get("isManual"), + "isToBeAutomated": obj.get("isToBeAutomated"), "status": obj.get("status"), "steps_type": obj.get("steps_type") if obj.get("steps_type") is not None else 'classic', "attachments": obj.get("attachments"), diff --git a/qase-api-client/src/qase/api_client_v1/models/test_casebulk_cases_inner.py b/qase-api-client/src/qase/api_client_v1/models/test_casebulk_cases_inner.py index 27081db6..f0b3e70a 100644 --- a/qase-api-client/src/qase/api_client_v1/models/test_casebulk_cases_inner.py +++ b/qase-api-client/src/qase/api_client_v1/models/test_casebulk_cases_inner.py @@ -42,7 +42,9 @@ class TestCasebulkCasesInner(BaseModel): is_flaky: Optional[StrictInt] = None suite_id: Optional[StrictInt] = None milestone_id: Optional[StrictInt] = None - automation: Optional[StrictInt] = None + automation: Optional[StrictInt] = Field(default=None, description="Deprecated, use `isManual` and `isToBeAutomated` instead. Encodes the test case automation state as a single integer: `0` = manual, `1` = manual planned to be automated, `2` = automated. If both `automation` and `isManual`/`isToBeAutomated` are provided, `isManual` and `isToBeAutomated` take precedence.") + is_manual: Optional[StrictInt] = Field(default=None, description="`1` if the case is manual, `0` if it is automated. Combined with `isToBeAutomated`, replaces the deprecated `automation` field.", alias="isManual") + is_to_be_automated: Optional[StrictInt] = Field(default=None, description="`1` if a manual case is planned to be automated, `0` otherwise. Only meaningful when `isManual = 1`; ignored when `isManual = 0`.", alias="isToBeAutomated") status: Optional[StrictInt] = None steps_type: Optional[StrictStr] = Field(default='classic', description="Determines the format of the steps field. When \"classic\", steps use the standard action/expected_result/data format. When \"gherkin\", steps use the {value: \"Given...\\nWhen...\\nThen...\"} format.") attachments: Optional[List[StrictStr]] = Field(default=None, description="A list of Attachment hashes.") @@ -50,11 +52,11 @@ class TestCasebulkCasesInner(BaseModel): tags: Optional[List[StrictStr]] = None params: Optional[Dict[str, List[StrictStr]]] = Field(default=None, description="Deprecated, use `parameters` instead.") parameters: Optional[List[TestCaseParameterCreate]] = None - custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="A map of custom fields values (id => value)") + custom_field: Optional[Dict[str, StrictStr]] = Field(default=None, description="Custom field values keyed by the field's project-scoped `internal_id` (see `GET /custom_field`). Values are always **scalar strings**; arrays, objects or non-scalars are rejected. | Field type | Value format | Example | |----------------------|-------------------------------------------|-------------------------| | `string`, `text` | Plain string | `\"hello\"` | | `number` | Numeric string | `\"42\"` | | `url` | Valid URL | `\"https://qase.io\"` | | `datetime` | Absolute date (ISO 8601 recommended) | `\"2026-04-29T15:00:00Z\"`| | `selectbox`, `radio` | Option `id` as string | `\"1\"` | | `multiselect` | Comma-separated option `id`s (no spaces) | `\"1,2,3\"` | | `checkbox` | `\"1\"` to check, `\"\"` to uncheck | `\"1\"` | | `user` | Team member `internal_id` as string | `\"42\"` | Validation: all required fields without a default value must be present and non-empty; unknown `internal_id`s are rejected; option-based values must reference an existing option. Note: a `required` checkbox without a default cannot be unchecked via the API — set a default or clear `required` in workspace settings. ") created_at: Optional[StrictStr] = None updated_at: Optional[StrictStr] = None id: Optional[StrictInt] = None - __properties: ClassVar[List[str]] = ["description", "preconditions", "postconditions", "title", "severity", "priority", "behavior", "type", "layer", "is_flaky", "suite_id", "milestone_id", "automation", "status", "steps_type", "attachments", "steps", "tags", "params", "parameters", "custom_field", "created_at", "updated_at", "id"] + __properties: ClassVar[List[str]] = ["description", "preconditions", "postconditions", "title", "severity", "priority", "behavior", "type", "layer", "is_flaky", "suite_id", "milestone_id", "automation", "isManual", "isToBeAutomated", "status", "steps_type", "attachments", "steps", "tags", "params", "parameters", "custom_field", "created_at", "updated_at", "id"] @field_validator('steps_type') def steps_type_validate_enum(cls, value): @@ -159,6 +161,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]: "suite_id": obj.get("suite_id"), "milestone_id": obj.get("milestone_id"), "automation": obj.get("automation"), + "isManual": obj.get("isManual"), + "isToBeAutomated": obj.get("isToBeAutomated"), "status": obj.get("status"), "steps_type": obj.get("steps_type") if obj.get("steps_type") is not None else 'classic', "attachments": obj.get("attachments"),