Skip to content

MPT-19124 add TODOs and FIXMEs for improving e2e assertions#250

Merged
jentyk merged 1 commit intomainfrom
feat/MPT-19124
Mar 26, 2026
Merged

MPT-19124 add TODOs and FIXMEs for improving e2e assertions#250
jentyk merged 1 commit intomainfrom
feat/MPT-19124

Conversation

@jentyk
Copy link
Copy Markdown
Member

@jentyk jentyk commented Mar 26, 2026

Closes MPT-19124

  • Added helpdesk.channel.id = CHL-5064-0262-3671 to e2e_config.test.json
  • Re-enabled many previously-skipped E2E tests (removed per-test pytest.mark.skip and adjusted module marks)
  • Strengthened list assertions to verify returned items are instances of expected resource types (Chat, ChatMessage, Case, Channel, Form, Parameter, Queue, ParameterGroup, ChatAnswer, ChatAttachment, ChatLink, ChatParticipant, ParameterGroupParameter, etc.)
  • Standardized "not found" tests to capture MPTAPIError and assert error.value.status_code == HTTPStatus.NOT_FOUND (replacing regex/match-based checks)
  • Added imports (HTTPStatus and various resource types) to support the new assertions
  • Added inline TODO/FIXME comments (including a FIXME on the channels fixture return) to highlight seed-data and assertion improvements
  • Minor formatting cleanup (removed an empty line in tests/e2e/helpdesk/channels/messages/init.py)

@jentyk jentyk requested a review from a team as a code owner March 26, 2026 10:39
@jentyk jentyk requested review from alephsur and svazquezco March 26, 2026 10:39
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 26, 2026

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 5afd41b5-2bd9-4b30-a40f-102c5596ac2d

📥 Commits

Reviewing files that changed from the base of the PR and between 7f95542 and 988e468.

📒 Files selected for processing (33)
  • e2e_config.test.json
  • tests/e2e/helpdesk/cases/test_async_cases.py
  • tests/e2e/helpdesk/cases/test_sync_cases.py
  • tests/e2e/helpdesk/channels/conftest.py
  • tests/e2e/helpdesk/channels/messages/__init__.py
  • tests/e2e/helpdesk/channels/messages/test_async_messages.py
  • tests/e2e/helpdesk/channels/messages/test_sync_messages.py
  • tests/e2e/helpdesk/channels/test_async_channels.py
  • tests/e2e/helpdesk/channels/test_sync_channels.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/chats/answers/test_async_answers.py
  • tests/e2e/helpdesk/chats/answers/test_sync_answers.py
  • tests/e2e/helpdesk/chats/attachment/test_async_attachment.py
  • tests/e2e/helpdesk/chats/attachment/test_sync_attachment.py
  • tests/e2e/helpdesk/chats/links/test_async_links.py
  • tests/e2e/helpdesk/chats/links/test_sync_links.py
  • tests/e2e/helpdesk/chats/messages/test_async_messages.py
  • tests/e2e/helpdesk/chats/messages/test_sync_messages.py
  • tests/e2e/helpdesk/chats/participants/test_async_participants.py
  • tests/e2e/helpdesk/chats/participants/test_sync_participants.py
  • tests/e2e/helpdesk/chats/test_async_chats.py
  • tests/e2e/helpdesk/chats/test_sync_chats.py
  • tests/e2e/helpdesk/forms/test_async_forms.py
  • tests/e2e/helpdesk/forms/test_sync_forms.py
  • tests/e2e/helpdesk/parameter_groups/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/parameter_groups/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/parameter_groups/test_async_parameter_groups.py
  • tests/e2e/helpdesk/parameter_groups/test_sync_parameter_groups.py
  • tests/e2e/helpdesk/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/queues/test_async_queues.py
  • tests/e2e/helpdesk/queues/test_sync_queues.py
💤 Files with no reviewable changes (1)
  • tests/e2e/helpdesk/channels/messages/init.py
✅ Files skipped from review due to trivial changes (9)
  • tests/e2e/helpdesk/chats/test_async_chats.py
  • e2e_config.test.json
  • tests/e2e/helpdesk/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/chats/messages/test_async_messages.py
  • tests/e2e/helpdesk/channels/conftest.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/parameter_groups/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/chats/answers/test_async_answers.py
  • tests/e2e/helpdesk/chats/participants/test_sync_participants.py
🚧 Files skipped from review as they are similar to previous changes (19)
  • tests/e2e/helpdesk/chats/links/test_sync_links.py
  • tests/e2e/helpdesk/chats/answers/test_sync_answers.py
  • tests/e2e/helpdesk/channels/messages/test_sync_messages.py
  • tests/e2e/helpdesk/parameter_groups/test_sync_parameter_groups.py
  • tests/e2e/helpdesk/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/cases/test_sync_cases.py
  • tests/e2e/helpdesk/parameter_groups/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/cases/test_async_cases.py
  • tests/e2e/helpdesk/chats/attachment/test_async_attachment.py
  • tests/e2e/helpdesk/parameter_groups/test_async_parameter_groups.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/chats/test_sync_chats.py
  • tests/e2e/helpdesk/chats/attachment/test_sync_attachment.py
  • tests/e2e/helpdesk/forms/test_sync_forms.py
  • tests/e2e/helpdesk/channels/messages/test_async_messages.py
  • tests/e2e/helpdesk/chats/participants/test_async_participants.py
  • tests/e2e/helpdesk/channels/test_sync_channels.py
  • tests/e2e/helpdesk/forms/test_async_forms.py
  • tests/e2e/helpdesk/channels/test_async_channels.py

📝 Walkthrough

Walkthrough

Added helpdesk.channel.id to test config and re-enabled many helpdesk E2E tests; strengthened list assertions to verify returned items are specific resource types and changed not-found tests to assert MPTAPIError.status_code == HTTPStatus.NOT_FOUND. No production code or public API signatures changed.

Changes

Cohort / File(s) Summary
Configuration
e2e_config.test.json
Added helpdesk.channel.id = "CHL-5064-0262-3671".
Cases Tests
tests/e2e/helpdesk/cases/test_async_cases.py, tests/e2e/helpdesk/cases/test_sync_cases.py
Un-skipped tests; list assertions now verify Case instances; not-found tests assert MPTAPIError.status_code == HTTPStatus.NOT_FOUND.
Channels Tests & Fixture
tests/e2e/helpdesk/channels/conftest.py, tests/e2e/helpdesk/channels/test_async_channels.py, tests/e2e/helpdesk/channels/test_sync_channels.py
Fixture return annotated with # FIXME: seed data; list assertions now verify Channel instances; not-found tests assert status_code == HTTPStatus.NOT_FOUND; module/test skip marker adjustments.
Channels Messages
tests/e2e/helpdesk/channels/messages/__init__.py, tests/e2e/helpdesk/channels/messages/test_async_messages.py, tests/e2e/helpdesk/channels/messages/test_sync_messages.py
Removed leading blank line; list assertions now verify ChatMessage instances; not-found tests assert MPTAPIError.status_code == HTTPStatus.NOT_FOUND; added imports.
Chats - Core
tests/e2e/helpdesk/chats/test_async_chats.py, tests/e2e/helpdesk/chats/test_sync_chats.py
List assertions changed to Chat instance checks; not-found tests capture MPTAPIError and assert status_code == HTTPStatus.NOT_FOUND; imports updated.
Chats — Answers / Parameters / Attachment / Links / Messages / Participants
tests/e2e/helpdesk/chats/answers/*, tests/e2e/helpdesk/chats/answers/parameters/*, tests/e2e/helpdesk/chats/attachment/*, tests/e2e/helpdesk/chats/links/*, tests/e2e/helpdesk/chats/messages/*, tests/e2e/helpdesk/chats/participants/*
Replaced non-empty assertions with per-item resource-type checks (e.g., ChatAnswer, ChatAttachment, ChatLink, ChatMessage, ChatParticipant); updated not-found tests to assert MPTAPIError.status_code == HTTPStatus.NOT_FOUND; added imports.
Forms, Parameter Groups, Parameters, Queues
tests/e2e/helpdesk/forms/*, tests/e2e/helpdesk/parameter_groups/*, tests/e2e/helpdesk/parameters/*, tests/e2e/helpdesk/queues/*
List assertions strengthened to verify specific item types (Form, ParameterGroup, Parameter, Queue); not-found tests updated to assert MPTAPIError.status_code == HTTPStatus.NOT_FOUND; added imports where needed.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Jira Issue Key In Title ✅ Passed The PR title contains exactly one Jira issue key in the format MPT-XXXX. The found issue key is MPT-19124.
Test Coverage Required ✅ Passed The pull request modifies only test files (33 test files in tests/e2e/ directory) and configuration file (e2e_config.test.json). No source code files in mpt_api_client/ directory were modified.
Single Commit Required ✅ Passed The pull request contains exactly one commit (988e468) that consolidates all test improvements for e2e assertions, maintaining a clean git history.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Nitpick comments (11)
tests/e2e/helpdesk/parameters/test_async_parameters.py (1)

20-20: Strengthen list assertion instead of only checking non-empty length.

Line 20 still allows false positives. Consider asserting at least one stable field (e.g., id presence/type) for returned items so this test validates API contract, not just count.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/parameters/test_async_parameters.py` at line 20, The test
currently only asserts len(result) > 0 which can yield false positives; update
the assertion to validate the returned items' contract by checking that result
is non-empty and that each item (or at least the first item) contains a stable
field (e.g., an "id") of the expected type; locate the assertion using the
variable name result in test_async_parameters.py and replace the simple length
check with assertions like "result" is truthy and that result[0] has an "id" key
with the expected type (or iterate all items to assert "id" presence/type) so
the test verifies the API shape as well as non-emptiness.
tests/e2e/helpdesk/chats/links/test_sync_links.py (1)

44-49: FIXME comment may be misleading.

The test already uses match=r"404 Not Found" which does specifically check for the not-found condition via string matching. The FIXME comment "should specifically check for not found" could confuse future developers since it already does this.

Consider clarifying the FIXME to indicate the actual intent, e.g., # FIXME: consider using a specific NotFoundError exception type if that's the goal.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/chats/links/test_sync_links.py` around lines 44 - 49, The
FIXME comment in test_delete_chat_link_not_found is misleading because the test
already asserts the not-found condition via pytest.raises(MPTAPIError,
match=r"404 Not Found") — update the comment next to the
chat_links_service.delete call to state the real intent (for example: "# FIXME:
consider asserting a specific NotFoundError type instead of string matching" or
similar) so future readers know you intend to switch from text-matching to a
dedicated exception type rather than re-checking for "not found".
tests/e2e/helpdesk/channels/test_sync_channels.py (1)

51-55: Consider adding match= parameter for consistency.

Same issue as test_sync_cases.py - this enabled test uses a broad pytest.raises(MPTAPIError) without a match pattern, while other tests in this PR already use match=r"404 Not Found".

Suggested improvement
 def test_not_found(mpt_ops, invalid_channel_id):
     service = mpt_ops.helpdesk.channels
 
-    with pytest.raises(MPTAPIError):  # FIXME: should specifically check for not found
+    with pytest.raises(MPTAPIError, match=r"404 Not Found"):  # FIXME: should specifically check for not found
         service.get(invalid_channel_id)

As per coding guidelines: "avoid broad pytest.raises assertions—prefer adding a match=... or narrowing the exception".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/channels/test_sync_channels.py` around lines 51 - 55, The
test_not_found uses a broad pytest.raises(MPTAPIError) which is inconsistent
with other tests; update the assertion to include a match parameter that checks
the 404 message (e.g., pytest.raises(MPTAPIError, match=r"404 Not Found")) so
the test specifically validates the not-found error when calling
mpt_ops.helpdesk.channels.get(invalid_channel_id).
tests/e2e/helpdesk/cases/test_sync_cases.py (1)

67-69: Consider adding match= parameter now for consistency.

Other tests in this PR (e.g., test_sync_links.py, test_sync_messages.py) already use match=r"404 Not Found" with the same FIXME comment. For consistency and to provide at least some specificity while this test is now enabled, consider adding the match parameter rather than leaving a completely broad assertion.

Suggested improvement
 def test_not_found(mpt_ops, invalid_case_id):
-    with pytest.raises(MPTAPIError):  # FIXME: should specifically check for not found
+    with pytest.raises(MPTAPIError, match=r"404 Not Found"):  # FIXME: should specifically check for not found
         mpt_ops.helpdesk.cases.get(invalid_case_id)

As per coding guidelines: "avoid broad pytest.raises assertions—prefer adding a match=... or narrowing the exception".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/cases/test_sync_cases.py` around lines 67 - 69, Update the
test_not_found test to narrow the pytest.raises assertion by adding a match
parameter so it asserts the specific "404 Not Found" error; modify the
pytest.raises(MPTAPIError) around the
mpt_ops.helpdesk.cases.get(invalid_case_id) call to include match=r"404 Not
Found" (matching other tests) so the test checks for the expected not-found
message while still raising MPTAPIError.
tests/e2e/helpdesk/channels/messages/test_sync_messages.py (1)

15-20: Same FIXME clarity concern as other files.

The test already matches on "404 Not Found". The FIXME wording could be clarified to indicate the actual improvement needed (e.g., a dedicated exception type).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/channels/messages/test_sync_messages.py` around lines 15 -
20, The FIXME is vague: update the test_list_channel_messages_not_found to
clearly state the intended improvement and how to implement it — either assert a
dedicated NotFound exception or check an explicit error code/message instead of
the generic "404 Not Found". Reference the raised symbol MPTAPIError and the
call mpt_ops.helpdesk.channels.messages(invalid_channel_id).fetch_page; change
the FIXME to specify "expect a dedicated NotFoundError (e.g., NotFoundError) or
assert error.code == 404" or modify the test to raise/check that specific
exception type/value.
tests/e2e/helpdesk/chats/participants/test_sync_participants.py (1)

12-12: Strengthen the list assertion while keeping it lightweight.

len(result) > 0 is a good smoke check, but it can still pass on malformed items. Consider also checking a minimal field contract (for example, first item has an id).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/chats/participants/test_sync_participants.py` at line 12,
Strengthen the smoke assertion on the result list by asserting it's non-empty
and that the first item conforms to a minimal contract: check that result is a
sequence with len(result) > 0 and that result[0] contains an identifier (e.g.,
has key "id" if it's a dict or an attribute .id if it's an object) and that the
id is non-empty; update the assertion around the existing "result" variable to
include these checks so malformed items no longer pass.
tests/e2e/helpdesk/channels/test_async_channels.py (1)

23-23: Improve list validation slightly beyond non-empty.

A minimal field check in addition to len(result) > 0 would reduce false positives.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/channels/test_async_channels.py` at line 23, Replace the
weak non-empty check on result with a small structural validation: verify result
is a list and that items contain the expected fields (e.g., each item has an
"id" and "name" key) and that at least one item meets those criteria; update the
assertion around the variable result in the test_async_channels.py test to check
both type and presence of these fields instead of only len(result) > 0.
tests/e2e/helpdesk/chats/links/test_async_links.py (1)

12-12: Optional: tighten the list assertion a bit.

len(result) > 0 is fine for smoke coverage; adding a minimal item-level assertion would improve signal.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/chats/links/test_async_links.py` at line 12, The current
assertion only checks len(result) > 0; tighten it by asserting that result is
truthy and that at least one item has the expected shape, e.g. assert result and
isinstance(result[0], dict) and ('url' in result[0] or 'text' in result[0]) (or
another domain-specific key your code returns) so the test verifies both
non-empty list and a minimal item-level contract; update the assertion in
test_async_links.py where result is produced to reflect this.
tests/e2e/helpdesk/cases/test_async_cases.py (1)

20-20: Nice smoke check; consider adding one stable field assertion.

This keeps the test resilient while making it more than a pure non-empty check.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/cases/test_async_cases.py` at line 20, Replace the broad
non-empty check on result (the line asserting "assert len(result) > 0") with an
additional stable-field assertion: after confirming result is non-empty, assert
a known, stable key exists and has the expected type/value on the first item
(for example assert "id" in result[0] and isinstance(result[0]["id"], str) or
assert result[0].get("status") == "open" depending on the schema). Update the
test in test_async_cases.py to keep the len(result) > 0 check but add one of
these deterministic assertions against result[0] to make the test resilient and
meaningful.
tests/e2e/helpdesk/chats/test_sync_chats.py (1)

21-21: Consider a minimally stronger list contract check.

Alongside len(result) > 0, asserting at least one stable field (e.g., id) will make this test more meaningful without making it brittle.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/chats/test_sync_chats.py` at line 21, The current assert
only checks len(result) > 0; strengthen it by verifying result is a list and at
least one item contains a stable field (e.g., "id"). Replace the single
assertion with checks on the result variable: confirm it's a list and assert
that any(item.get("id") for item in result) (or an equivalent non-brittle check)
so the test ensures at least one record has an id.
tests/e2e/helpdesk/chats/answers/test_sync_answers.py (1)

17-17: Optional: enrich the list assertion contract.

Consider validating one stable attribute on returned items in addition to len(result) > 0.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/chats/answers/test_sync_answers.py` at line 17, The
current assertion only checks that result is non-empty; enhance it by also
asserting one stable attribute on the returned items (e.g., that each item has a
non-empty "id" or a specific "type"/"source" value). Locate the test's result
variable in test_sync_answers.py, iterate or sample result[0], and add an
assertion such as checking presence and non-emptiness of item["id"] (or
item.get("type") == "expected_type") to make the contract more specific and
stable across runs.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@tests/e2e/helpdesk/cases/test_async_cases.py`:
- Line 68: The test currently uses a broad context manager
pytest.raises(MPTAPIError) which can mask unrelated errors; update the assertion
to narrow the expected error by adding a match pattern that verifies the "404
Not Found" message (e.g., change the pytest.raises(MPTAPIError) call to include
match="404 Not Found" or an appropriate regex) so the test only passes when the
API returns the not-found error.

In `@tests/e2e/helpdesk/channels/test_async_channels.py`:
- Line 54: The current test uses a broad context manager `with
pytest.raises(MPTAPIError):`; update it to assert the specific "not found" error
by adding a `match=` argument (e.g., `with pytest.raises(MPTAPIError,
match=r"not found"):` or a more precise regex that matches the actual message
like `r"Channel .* not found"`), so the assertion targets the intended not-found
failure for the code path that raises `MPTAPIError`.

In `@tests/e2e/helpdesk/chats/answers/parameters/test_async_parameters.py`:
- Around line 27-28: The test currently catches any MPTAPIError broadly; narrow
it by asserting the expected not-found signal from the exception raised by
service.fetch_page(limit=20). Replace the bare pytest.raises(MPTAPIError) with
pytest.raises(MPTAPIError, match=r"404 Not Found") or assert a specific
payload/code on the exception (e.g., capture exc = pytest.raises(MPTAPIError) as
excinfo and assert excinfo.value.code == "not_found" or excinfo.value.status ==
404) so the test specifically verifies the "not found" condition for
service.fetch_page.

In `@tests/e2e/helpdesk/chats/answers/parameters/test_sync_parameters.py`:
- Around line 28-29: The test currently asserts a broad MPTAPIError when calling
service.fetch_page(limit=20); tighten it to the expected "not found" case by
either using pytest.raises(MPTAPIError, match="not.?found") to assert the error
message contains a not-found indicator, or capture the exception via
pytest.raises as excinfo and assert excinfo.value.status_code == 404 (or the
project's specific NotFound status) after the call to service.fetch_page to
ensure only not-found failures satisfy the test.

In `@tests/e2e/helpdesk/chats/answers/test_async_answers.py`:
- Around line 71-72: The test currently uses a broad pytest.raises(MPTAPIError)
when calling async_chat_answers_service.get(invalid_chat_answer_id); narrow this
to assert the not-found signal explicitly by either (a) using pytest.raises with
a match argument that checks the "not found" message returned by
async_chat_answers_service.get, or (b) replacing MPTAPIError with the specific
NotFound exception the service raises; update the assertion to reference
async_chat_answers_service.get and invalid_chat_answer_id so the test fails only
when the not-found behavior is wrong.

In `@tests/e2e/helpdesk/chats/answers/test_sync_answers.py`:
- Line 66: The test currently uses a broad pytest.raises(MPTAPIError); narrow it
to assert the specific 404 not found by changing the context to
pytest.raises(MPTAPIError, match=r"404 Not Found") so the assertion in the
test_sync_answers case verifies the exact "404 Not Found" error string instead
of any MPTAPIError.

In `@tests/e2e/helpdesk/chats/test_async_chats.py`:
- Around line 37-38: The test uses a broad pytest.raises(MPTAPIError) for
service.get(invalid_chat_id); make the assertion specific by either using the
more specific exception class if one exists (e.g., MPTNotFoundError) or add a
match=... to pytest.raises to assert the "not found" message (for example:
pytest.raises(MPTAPIError, match="not found")). Update the with-block around
service.get(invalid_chat_id) to use the chosen specific check so unrelated
failures don't pass.

In `@tests/e2e/helpdesk/chats/test_sync_chats.py`:
- Line 37: The test in test_sync_chats.py uses a broad
pytest.raises(MPTAPIError) which may catch unrelated API errors; update the
assertion to narrow it to a not-found error by adding a match parameter (e.g.
pytest.raises(MPTAPIError, match=r"404" or match="Not Found")) so the test only
passes when the API returns a 404; locate the raise in the test_sync_chats test
and replace the bare pytest.raises(MPTAPIError) with the more specific
pytest.raises(MPTAPIError, match=...) form.

---

Nitpick comments:
In `@tests/e2e/helpdesk/cases/test_async_cases.py`:
- Line 20: Replace the broad non-empty check on result (the line asserting
"assert len(result) > 0") with an additional stable-field assertion: after
confirming result is non-empty, assert a known, stable key exists and has the
expected type/value on the first item (for example assert "id" in result[0] and
isinstance(result[0]["id"], str) or assert result[0].get("status") == "open"
depending on the schema). Update the test in test_async_cases.py to keep the
len(result) > 0 check but add one of these deterministic assertions against
result[0] to make the test resilient and meaningful.

In `@tests/e2e/helpdesk/cases/test_sync_cases.py`:
- Around line 67-69: Update the test_not_found test to narrow the pytest.raises
assertion by adding a match parameter so it asserts the specific "404 Not Found"
error; modify the pytest.raises(MPTAPIError) around the
mpt_ops.helpdesk.cases.get(invalid_case_id) call to include match=r"404 Not
Found" (matching other tests) so the test checks for the expected not-found
message while still raising MPTAPIError.

In `@tests/e2e/helpdesk/channels/messages/test_sync_messages.py`:
- Around line 15-20: The FIXME is vague: update the
test_list_channel_messages_not_found to clearly state the intended improvement
and how to implement it — either assert a dedicated NotFound exception or check
an explicit error code/message instead of the generic "404 Not Found". Reference
the raised symbol MPTAPIError and the call
mpt_ops.helpdesk.channels.messages(invalid_channel_id).fetch_page; change the
FIXME to specify "expect a dedicated NotFoundError (e.g., NotFoundError) or
assert error.code == 404" or modify the test to raise/check that specific
exception type/value.

In `@tests/e2e/helpdesk/channels/test_async_channels.py`:
- Line 23: Replace the weak non-empty check on result with a small structural
validation: verify result is a list and that items contain the expected fields
(e.g., each item has an "id" and "name" key) and that at least one item meets
those criteria; update the assertion around the variable result in the
test_async_channels.py test to check both type and presence of these fields
instead of only len(result) > 0.

In `@tests/e2e/helpdesk/channels/test_sync_channels.py`:
- Around line 51-55: The test_not_found uses a broad pytest.raises(MPTAPIError)
which is inconsistent with other tests; update the assertion to include a match
parameter that checks the 404 message (e.g., pytest.raises(MPTAPIError,
match=r"404 Not Found")) so the test specifically validates the not-found error
when calling mpt_ops.helpdesk.channels.get(invalid_channel_id).

In `@tests/e2e/helpdesk/chats/answers/test_sync_answers.py`:
- Line 17: The current assertion only checks that result is non-empty; enhance
it by also asserting one stable attribute on the returned items (e.g., that each
item has a non-empty "id" or a specific "type"/"source" value). Locate the
test's result variable in test_sync_answers.py, iterate or sample result[0], and
add an assertion such as checking presence and non-emptiness of item["id"] (or
item.get("type") == "expected_type") to make the contract more specific and
stable across runs.

In `@tests/e2e/helpdesk/chats/links/test_async_links.py`:
- Line 12: The current assertion only checks len(result) > 0; tighten it by
asserting that result is truthy and that at least one item has the expected
shape, e.g. assert result and isinstance(result[0], dict) and ('url' in
result[0] or 'text' in result[0]) (or another domain-specific key your code
returns) so the test verifies both non-empty list and a minimal item-level
contract; update the assertion in test_async_links.py where result is produced
to reflect this.

In `@tests/e2e/helpdesk/chats/links/test_sync_links.py`:
- Around line 44-49: The FIXME comment in test_delete_chat_link_not_found is
misleading because the test already asserts the not-found condition via
pytest.raises(MPTAPIError, match=r"404 Not Found") — update the comment next to
the chat_links_service.delete call to state the real intent (for example: "#
FIXME: consider asserting a specific NotFoundError type instead of string
matching" or similar) so future readers know you intend to switch from
text-matching to a dedicated exception type rather than re-checking for "not
found".

In `@tests/e2e/helpdesk/chats/participants/test_sync_participants.py`:
- Line 12: Strengthen the smoke assertion on the result list by asserting it's
non-empty and that the first item conforms to a minimal contract: check that
result is a sequence with len(result) > 0 and that result[0] contains an
identifier (e.g., has key "id" if it's a dict or an attribute .id if it's an
object) and that the id is non-empty; update the assertion around the existing
"result" variable to include these checks so malformed items no longer pass.

In `@tests/e2e/helpdesk/chats/test_sync_chats.py`:
- Line 21: The current assert only checks len(result) > 0; strengthen it by
verifying result is a list and at least one item contains a stable field (e.g.,
"id"). Replace the single assertion with checks on the result variable: confirm
it's a list and assert that any(item.get("id") for item in result) (or an
equivalent non-brittle check) so the test ensures at least one record has an id.

In `@tests/e2e/helpdesk/parameters/test_async_parameters.py`:
- Line 20: The test currently only asserts len(result) > 0 which can yield false
positives; update the assertion to validate the returned items' contract by
checking that result is non-empty and that each item (or at least the first
item) contains a stable field (e.g., an "id") of the expected type; locate the
assertion using the variable name result in test_async_parameters.py and replace
the simple length check with assertions like "result" is truthy and that
result[0] has an "id" key with the expected type (or iterate all items to assert
"id" presence/type) so the test verifies the API shape as well as non-emptiness.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 27d56b05-2d3b-41e3-845b-c8a2c67bd23b

📥 Commits

Reviewing files that changed from the base of the PR and between 59d7853 and 0ccaf4c.

📒 Files selected for processing (31)
  • e2e_config.test.json
  • tests/e2e/helpdesk/cases/test_async_cases.py
  • tests/e2e/helpdesk/cases/test_sync_cases.py
  • tests/e2e/helpdesk/channels/conftest.py
  • tests/e2e/helpdesk/channels/messages/__init__.py
  • tests/e2e/helpdesk/channels/messages/test_async_messages.py
  • tests/e2e/helpdesk/channels/messages/test_sync_messages.py
  • tests/e2e/helpdesk/channels/test_async_channels.py
  • tests/e2e/helpdesk/channels/test_sync_channels.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/chats/answers/test_async_answers.py
  • tests/e2e/helpdesk/chats/answers/test_sync_answers.py
  • tests/e2e/helpdesk/chats/attachment/test_async_attachment.py
  • tests/e2e/helpdesk/chats/attachment/test_sync_attachment.py
  • tests/e2e/helpdesk/chats/links/test_async_links.py
  • tests/e2e/helpdesk/chats/links/test_sync_links.py
  • tests/e2e/helpdesk/chats/messages/test_async_messages.py
  • tests/e2e/helpdesk/chats/messages/test_sync_messages.py
  • tests/e2e/helpdesk/chats/participants/test_async_participants.py
  • tests/e2e/helpdesk/chats/participants/test_sync_participants.py
  • tests/e2e/helpdesk/chats/test_async_chats.py
  • tests/e2e/helpdesk/chats/test_sync_chats.py
  • tests/e2e/helpdesk/forms/test_async_forms.py
  • tests/e2e/helpdesk/forms/test_sync_forms.py
  • tests/e2e/helpdesk/parameter_groups/test_async_parameter_groups.py
  • tests/e2e/helpdesk/parameter_groups/test_sync_parameter_groups.py
  • tests/e2e/helpdesk/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/queues/test_async_queues.py
  • tests/e2e/helpdesk/queues/test_sync_queues.py
💤 Files with no reviewable changes (1)
  • tests/e2e/helpdesk/channels/messages/init.py

@jentyk jentyk force-pushed the feat/MPT-19124 branch 3 times, most recently from b8e2d34 to 371facb Compare March 26, 2026 13:09
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (3)
tests/e2e/helpdesk/channels/messages/test_async_messages.py (1)

11-15: Consider retaining the non-empty check alongside the type assertion.

The change from len(result) > 0 to all(isinstance(...)) removes the guarantee that results are non-empty. Since all() returns True for an empty iterable, this test would pass even if the API returned zero messages—potentially masking a configuration or data issue.

♻️ Proposed fix to assert both non-empty and correct types
-    assert all(isinstance(message, ChatMessage) for message in result)
+    assert result, "Expected at least one message in result"
+    assert all(isinstance(message, ChatMessage) for message in result)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/channels/messages/test_async_messages.py` around lines 11
- 15, The test test_list_channel_messages currently only asserts types with
all(isinstance(..., ChatMessage)) which will pass for empty results; update the
test to also assert the result is non-empty by checking len(result) > 0 (or
assert result) before or alongside the existing type check on
async_channel_messages_service.fetch_page(limit=1) to ensure both that at least
one message is returned and that every item is a ChatMessage.
tests/e2e/helpdesk/chats/answers/test_sync_answers.py (1)

20-23: Consider also asserting that result is non-empty.

all() returns True for an empty iterable, so if the API returns no data, this test would pass silently. Adding a check ensures the test validates actual data.

💡 Suggested enhancement
 def test_list_chat_answers(chat_answers_service):
     result = chat_answers_service.fetch_page(limit=1)

+    assert result, "Expected at least one ChatAnswer from fetch_page"
     assert all(isinstance(answer, ChatAnswer) for answer in result)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/chats/answers/test_sync_answers.py` around lines 20 - 23,
The test_list_chat_answers currently only checks types but can pass on an empty
iterable; update the test to also assert that the returned result from
chat_answers_service.fetch_page(limit=1) is non-empty (e.g., assert result or
assert len(result) > 0) before the existing isinstance checks so that
test_list_chat_answers fails when no ChatAnswer instances are returned.
tests/e2e/helpdesk/chats/participants/test_async_participants.py (1)

15-15: Consider avoiding a vacuous pass on empty results.

At Line 15, all(...) returns True for an empty page. If this test expects seeded data, add an explicit non-empty assertion alongside the type assertion.

Suggested adjustment
-    assert all(isinstance(participant, ChatParticipant) for participant in result)
+    assert result, "Expected at least one chat participant"
+    assert all(isinstance(participant, ChatParticipant) for participant in result)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/chats/participants/test_async_participants.py` at line 15,
The test currently only checks types with "assert all(isinstance(participant,
ChatParticipant) for participant in result)" which vacuously passes for empty
result; update the test to first assert the page is non-empty (e.g., "assert
result" or "assert len(result) > 0") and then keep the type check to ensure
every item is a ChatParticipant; locate the assertion in
test_async_participants.py where "result" is produced and add the non-empty
assertion immediately before the existing isinstance/all check.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@tests/e2e/helpdesk/channels/messages/test_async_messages.py`:
- Around line 11-15: The test test_list_channel_messages currently only asserts
types with all(isinstance(..., ChatMessage)) which will pass for empty results;
update the test to also assert the result is non-empty by checking len(result) >
0 (or assert result) before or alongside the existing type check on
async_channel_messages_service.fetch_page(limit=1) to ensure both that at least
one message is returned and that every item is a ChatMessage.

In `@tests/e2e/helpdesk/chats/answers/test_sync_answers.py`:
- Around line 20-23: The test_list_chat_answers currently only checks types but
can pass on an empty iterable; update the test to also assert that the returned
result from chat_answers_service.fetch_page(limit=1) is non-empty (e.g., assert
result or assert len(result) > 0) before the existing isinstance checks so that
test_list_chat_answers fails when no ChatAnswer instances are returned.

In `@tests/e2e/helpdesk/chats/participants/test_async_participants.py`:
- Line 15: The test currently only checks types with "assert
all(isinstance(participant, ChatParticipant) for participant in result)" which
vacuously passes for empty result; update the test to first assert the page is
non-empty (e.g., "assert result" or "assert len(result) > 0") and then keep the
type check to ensure every item is a ChatParticipant; locate the assertion in
test_async_participants.py where "result" is produced and add the non-empty
assertion immediately before the existing isinstance/all check.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: a4f2ebcc-b9ae-48ac-9432-dc877c6fef7b

📥 Commits

Reviewing files that changed from the base of the PR and between 2397f71 and 7f95542.

📒 Files selected for processing (33)
  • e2e_config.test.json
  • tests/e2e/helpdesk/cases/test_async_cases.py
  • tests/e2e/helpdesk/cases/test_sync_cases.py
  • tests/e2e/helpdesk/channels/conftest.py
  • tests/e2e/helpdesk/channels/messages/__init__.py
  • tests/e2e/helpdesk/channels/messages/test_async_messages.py
  • tests/e2e/helpdesk/channels/messages/test_sync_messages.py
  • tests/e2e/helpdesk/channels/test_async_channels.py
  • tests/e2e/helpdesk/channels/test_sync_channels.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/chats/answers/test_async_answers.py
  • tests/e2e/helpdesk/chats/answers/test_sync_answers.py
  • tests/e2e/helpdesk/chats/attachment/test_async_attachment.py
  • tests/e2e/helpdesk/chats/attachment/test_sync_attachment.py
  • tests/e2e/helpdesk/chats/links/test_async_links.py
  • tests/e2e/helpdesk/chats/links/test_sync_links.py
  • tests/e2e/helpdesk/chats/messages/test_async_messages.py
  • tests/e2e/helpdesk/chats/messages/test_sync_messages.py
  • tests/e2e/helpdesk/chats/participants/test_async_participants.py
  • tests/e2e/helpdesk/chats/participants/test_sync_participants.py
  • tests/e2e/helpdesk/chats/test_async_chats.py
  • tests/e2e/helpdesk/chats/test_sync_chats.py
  • tests/e2e/helpdesk/forms/test_async_forms.py
  • tests/e2e/helpdesk/forms/test_sync_forms.py
  • tests/e2e/helpdesk/parameter_groups/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/parameter_groups/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/parameter_groups/test_async_parameter_groups.py
  • tests/e2e/helpdesk/parameter_groups/test_sync_parameter_groups.py
  • tests/e2e/helpdesk/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/queues/test_async_queues.py
  • tests/e2e/helpdesk/queues/test_sync_queues.py
💤 Files with no reviewable changes (1)
  • tests/e2e/helpdesk/channels/messages/init.py
✅ Files skipped from review due to trivial changes (9)
  • tests/e2e/helpdesk/channels/conftest.py
  • e2e_config.test.json
  • tests/e2e/helpdesk/chats/answers/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/chats/messages/test_async_messages.py
  • tests/e2e/helpdesk/forms/test_async_forms.py
  • tests/e2e/helpdesk/chats/answers/test_async_answers.py
  • tests/e2e/helpdesk/queues/test_async_queues.py
  • tests/e2e/helpdesk/parameter_groups/test_sync_parameter_groups.py
🚧 Files skipped from review as they are similar to previous changes (18)
  • tests/e2e/helpdesk/channels/test_async_channels.py
  • tests/e2e/helpdesk/queues/test_sync_queues.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/chats/messages/test_sync_messages.py
  • tests/e2e/helpdesk/cases/test_sync_cases.py
  • tests/e2e/helpdesk/chats/test_sync_chats.py
  • tests/e2e/helpdesk/channels/messages/test_sync_messages.py
  • tests/e2e/helpdesk/chats/links/test_async_links.py
  • tests/e2e/helpdesk/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/chats/attachment/test_async_attachment.py
  • tests/e2e/helpdesk/channels/test_sync_channels.py
  • tests/e2e/helpdesk/parameter_groups/test_async_parameter_groups.py
  • tests/e2e/helpdesk/chats/participants/test_sync_participants.py
  • tests/e2e/helpdesk/chats/test_async_chats.py
  • tests/e2e/helpdesk/chats/attachment/test_sync_attachment.py
  • tests/e2e/helpdesk/forms/test_sync_forms.py
  • tests/e2e/helpdesk/chats/links/test_sync_links.py
  • tests/e2e/helpdesk/cases/test_async_cases.py

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
tests/e2e/helpdesk/chats/participants/test_async_participants.py (1)

15-15: Consider keeping an explicit non-empty expectation in the list test.

This type assertion is good, but by itself it may not fail when the API returns no participants. If seeded data guarantees at least one participant here, add an explicit non-empty assert as well.

Suggested adjustment
 async def test_list_chat_participants(async_chat_participants_service):
     result = await async_chat_participants_service.fetch_page(limit=1)

+    assert result
     assert all(isinstance(participant, ChatParticipant) for participant in result)
Based on learnings, hardcoded/seeded test data dependencies in `tests/e2e` are intentional and should be asserted clearly when relied upon.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/e2e/helpdesk/chats/participants/test_async_participants.py` at line 15,
The test currently only verifies types with "assert all(isinstance(participant,
ChatParticipant) for participant in result)" but can silently pass if result is
empty; update the test around the "result" variable to also assert the list is
non-empty (e.g., assert result and/or assert len(result) > 0) before or
alongside the isinstance check so seeded participant data is explicitly required
by the test.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@tests/e2e/helpdesk/queues/test_sync_queues.py`:
- Line 22: The test currently can vacuously succeed because all(...) returns
True for empty iterables; before the type assertion for Queue objects, assert
the result is non-empty (e.g., assert result or assert len(result) > 0) so the
test fails when no queues are returned, then keep the existing type check
(all(isinstance(queue, Queue) for queue in result)) to validate element types.

---

Nitpick comments:
In `@tests/e2e/helpdesk/chats/participants/test_async_participants.py`:
- Line 15: The test currently only verifies types with "assert
all(isinstance(participant, ChatParticipant) for participant in result)" but can
silently pass if result is empty; update the test around the "result" variable
to also assert the list is non-empty (e.g., assert result and/or assert
len(result) > 0) before or alongside the isinstance check so seeded participant
data is explicitly required by the test.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 80b94be2-2a38-4921-bcfe-221e1bcabf2c

📥 Commits

Reviewing files that changed from the base of the PR and between 7f95542 and 371facb.

📒 Files selected for processing (33)
  • e2e_config.test.json
  • tests/e2e/helpdesk/cases/test_async_cases.py
  • tests/e2e/helpdesk/cases/test_sync_cases.py
  • tests/e2e/helpdesk/channels/conftest.py
  • tests/e2e/helpdesk/channels/messages/__init__.py
  • tests/e2e/helpdesk/channels/messages/test_async_messages.py
  • tests/e2e/helpdesk/channels/messages/test_sync_messages.py
  • tests/e2e/helpdesk/channels/test_async_channels.py
  • tests/e2e/helpdesk/channels/test_sync_channels.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/chats/answers/test_async_answers.py
  • tests/e2e/helpdesk/chats/answers/test_sync_answers.py
  • tests/e2e/helpdesk/chats/attachment/test_async_attachment.py
  • tests/e2e/helpdesk/chats/attachment/test_sync_attachment.py
  • tests/e2e/helpdesk/chats/links/test_async_links.py
  • tests/e2e/helpdesk/chats/links/test_sync_links.py
  • tests/e2e/helpdesk/chats/messages/test_async_messages.py
  • tests/e2e/helpdesk/chats/messages/test_sync_messages.py
  • tests/e2e/helpdesk/chats/participants/test_async_participants.py
  • tests/e2e/helpdesk/chats/participants/test_sync_participants.py
  • tests/e2e/helpdesk/chats/test_async_chats.py
  • tests/e2e/helpdesk/chats/test_sync_chats.py
  • tests/e2e/helpdesk/forms/test_async_forms.py
  • tests/e2e/helpdesk/forms/test_sync_forms.py
  • tests/e2e/helpdesk/parameter_groups/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/parameter_groups/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/parameter_groups/test_async_parameter_groups.py
  • tests/e2e/helpdesk/parameter_groups/test_sync_parameter_groups.py
  • tests/e2e/helpdesk/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/queues/test_async_queues.py
  • tests/e2e/helpdesk/queues/test_sync_queues.py
💤 Files with no reviewable changes (1)
  • tests/e2e/helpdesk/channels/messages/init.py
✅ Files skipped from review due to trivial changes (9)
  • tests/e2e/helpdesk/channels/conftest.py
  • tests/e2e/helpdesk/chats/answers/test_async_answers.py
  • tests/e2e/helpdesk/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/forms/test_async_forms.py
  • tests/e2e/helpdesk/parameter_groups/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/queues/test_async_queues.py
  • tests/e2e/helpdesk/chats/participants/test_sync_participants.py
  • tests/e2e/helpdesk/cases/test_async_cases.py
  • e2e_config.test.json
🚧 Files skipped from review as they are similar to previous changes (20)
  • tests/e2e/helpdesk/chats/test_async_chats.py
  • tests/e2e/helpdesk/channels/test_async_channels.py
  • tests/e2e/helpdesk/chats/messages/test_sync_messages.py
  • tests/e2e/helpdesk/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/chats/attachment/test_async_attachment.py
  • tests/e2e/helpdesk/channels/messages/test_async_messages.py
  • tests/e2e/helpdesk/parameter_groups/test_async_parameter_groups.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_async_parameters.py
  • tests/e2e/helpdesk/channels/test_sync_channels.py
  • tests/e2e/helpdesk/forms/test_sync_forms.py
  • tests/e2e/helpdesk/cases/test_sync_cases.py
  • tests/e2e/helpdesk/chats/answers/parameters/test_sync_parameters.py
  • tests/e2e/helpdesk/chats/links/test_sync_links.py
  • tests/e2e/helpdesk/channels/messages/test_sync_messages.py
  • tests/e2e/helpdesk/chats/messages/test_async_messages.py
  • tests/e2e/helpdesk/chats/attachment/test_sync_attachment.py
  • tests/e2e/helpdesk/chats/links/test_async_links.py
  • tests/e2e/helpdesk/chats/test_sync_chats.py
  • tests/e2e/helpdesk/chats/answers/test_sync_answers.py
  • tests/e2e/helpdesk/parameter_groups/test_sync_parameter_groups.py

@sonarqubecloud
Copy link
Copy Markdown

@jentyk jentyk merged commit e20527f into main Mar 26, 2026
4 checks passed
@jentyk jentyk deleted the feat/MPT-19124 branch March 26, 2026 13:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants