From f9145699b78462602e18936458dec6204a0c7857 Mon Sep 17 00:00:00 2001 From: Radovan Fuchs Date: Mon, 18 Aug 2025 12:24:15 +0200 Subject: [PATCH] add e2e tests for the endpoints --- behave.ini | 2 + tests/e2e/features/authorized.feature | 34 +++++++ tests/e2e/features/conversations.feature | 54 +++++++++++ tests/e2e/features/feedback.feature | 90 +++++++++++++++++++ tests/e2e/features/health.feature | 53 +++++++++++ tests/e2e/features/info.feature | 46 ++++++++++ tests/e2e/features/llm_interface.feature | 18 ---- tests/e2e/features/query.feature | 60 +++++++++++++ tests/e2e/features/rest_api.feature | 43 --------- tests/e2e/features/steps/auth.py | 25 ++++++ tests/e2e/features/steps/common_http.py | 11 +-- tests/e2e/features/steps/conversation.py | 18 ++++ tests/e2e/features/steps/feedback.py | 38 ++++++++ tests/e2e/features/steps/health.py | 18 ++++ tests/e2e/features/steps/info.py | 22 +++++ .../e2e/features/steps/llm_query_response.py | 30 ++++++- tests/e2e/features/streaming_query.feature | 39 ++++++++ tests/e2e/test_list.txt | 8 +- 18 files changed, 536 insertions(+), 73 deletions(-) create mode 100644 behave.ini create mode 100644 tests/e2e/features/authorized.feature create mode 100644 tests/e2e/features/conversations.feature create mode 100644 tests/e2e/features/feedback.feature create mode 100644 tests/e2e/features/health.feature create mode 100644 tests/e2e/features/info.feature delete mode 100644 tests/e2e/features/llm_interface.feature create mode 100644 tests/e2e/features/query.feature create mode 100644 tests/e2e/features/steps/auth.py create mode 100644 tests/e2e/features/steps/conversation.py create mode 100644 tests/e2e/features/steps/feedback.py create mode 100644 tests/e2e/features/steps/health.py create mode 100644 tests/e2e/features/steps/info.py create mode 100644 tests/e2e/features/streaming_query.feature diff --git a/behave.ini b/behave.ini new file mode 100644 index 00000000..ba4ed1bf --- /dev/null +++ b/behave.ini @@ -0,0 +1,2 @@ +[behave] +paths = tests/e2e/features \ No newline at end of file diff --git a/tests/e2e/features/authorized.feature b/tests/e2e/features/authorized.feature new file mode 100644 index 00000000..b92b3a7e --- /dev/null +++ b/tests/e2e/features/authorized.feature @@ -0,0 +1,34 @@ +# Feature: Authorized endpoint API tests +# TODO: fix test + +# Background: +# Given The service is started locally +# And REST API service hostname is localhost +# And REST API service port is 8080 +# And REST API service prefix is /v1 + +# Scenario: Check if the OpenAPI endpoint works as expected +# Given The system is in default state +# When I access endpoint "authorized" using HTTP POST method +# Then The status code of the response is 200 +# And The body of the response has proper username + +# Scenario: Check if LLM responds to sent question with error when not authenticated +# Given The system is in default state +# And I remove the auth header +# When I access endpoint "authorized" using HTTP POST method +# Then The status code of the response is 400 +# And The body of the response is the following +# """ +# {"detail": "Unauthorized: No auth header found"} +# """ + +# Scenario: Check if LLM responds to sent question with error when not authorized +# Given The system is in default state +# And I modify the auth header so that the user is it authorized +# When I access endpoint "authorized" using HTTP POST method +# Then The status code of the response is 403 +# And The body of the response is the following +# """ +# {"detail": "Forbidden: User is not authorized to access this resource"} +# """ diff --git a/tests/e2e/features/conversations.feature b/tests/e2e/features/conversations.feature new file mode 100644 index 00000000..82e59bc9 --- /dev/null +++ b/tests/e2e/features/conversations.feature @@ -0,0 +1,54 @@ +# Feature: conversations endpoint API tests +#TODO: fix test + +# Background: +# Given The service is started locally +# And REST API service hostname is localhost +# And REST API service port is 8080 +# And REST API service prefix is /v1 + + +# Scenario: Check if conversations endpoint finds the correct conversation when it exists +# Given The system is in default state +# When I access REST API endpoint "conversations" using HTTP GET method +# Then The status code of the response is 200 +# And the proper conversation is returned + +# Scenario: Check if conversations endpoint does not finds the conversation when it does not exists +# Given The system is in default state +# When I access REST API endpoint "conversations" using HTTP GET method +# Then The status code of the response is 404 + +# Scenario: Check if conversations endpoint fails when conversation id is not provided +# Given The system is in default state +# When I access REST API endpoint "conversations" using HTTP GET method +# Then The status code of the response is 422 + +# Scenario: Check if conversations endpoint fails when service is unavailable +# Given The system is in default state +# And the service is stopped +# When I access REST API endpoint "conversations" using HTTP GET method +# Then The status code of the response is 503 + +# Scenario: Check if conversations/delete endpoint finds the correct conversation when it exists +# Given The system is in default state +# When I access REST API endpoint "conversations/delete" using HTTP GET method +# Then The status code of the response is 200 +# And the deleted conversation is not found + +# Scenario: Check if conversations/delete endpoint does not finds the conversation when it does not exists +# Given The system is in default state +# When I access REST API endpoint "conversations/delete" using HTTP GET method +# Then The status code of the response is 404 + +# Scenario: Check if conversations/delete endpoint fails when conversation id is not provided +# Given The system is in default state +# When I access REST API endpoint "conversations/delete" using HTTP GET method +# Then The status code of the response is 422 + +# Scenario: Check if conversations/delete endpoint fails when service is unavailable +# Given The system is in default state +# And the service is stopped +# When I access REST API endpoint "conversations/delete" using HTTP GET method +# Then The status code of the response is 503 + diff --git a/tests/e2e/features/feedback.feature b/tests/e2e/features/feedback.feature new file mode 100644 index 00000000..bf5b43c2 --- /dev/null +++ b/tests/e2e/features/feedback.feature @@ -0,0 +1,90 @@ +# Feature: feedback endpoint API tests + + +# Background: +# Given The service is started locally +# And REST API service hostname is localhost +# And REST API service port is 8080 +# And REST API service prefix is /v1 + + +# Scenario: Check if feedback endpoint is working +# Given The system is in default state +# When I access endpoint "feedback" using HTTP POST with conversation ID conversationID +# """ +# { +# "llm_response": "bar", +# "sentiment": -1, +# "user_feedback": "Not satisfied with the response quality", +# "user_question": "random question" +# } +# """ +# Then The status code of the response is 200 +# And The body of the response is the following +# """ +# {"response": "feedback received"} +# """ + +# Scenario: Check if feedback endpoint is not working when not authorized +# Given The system is in default state +# And I remove the auth header +# When I access endpoint "feedback" using HTTP POST with conversation ID conversationID +# """ +# { +# "llm_response": "bar", +# "sentiment": -1, +# "user_feedback": "Not satisfied with the response quality", +# "user_question": "random question" +# } +# """ +# Then The status code of the response is 400 +# And The body of the response is the following +# """ +# {"response": "feedback received"} +# """ + +# Scenario: Check if feedback endpoint is not working when feedback is disabled +# Given The system is in default state +# And I disable the feedback +# When I access endpoint "feedback" using HTTP POST with conversation ID conversationID +# """ +# { +# "llm_response": "bar", +# "sentiment": -1, +# "user_feedback": "Not satisfied with the response quality", +# "user_question": "random question" +# } +# """ +# Then The status code of the response is 403 +# And The body of the response is the following +# """ +# {"response": "feedback received"} +# """ + +# Scenario: Check if feedback endpoint fails with incorrect body format when conversationID is not present +# Given The system is in default state +# When I access endpoint "feedback" using HTTP POST method +# """ +# { +# "llm_response": "bar", +# "sentiment": -1, +# "user_feedback": "Not satisfied with the response quality", +# "user_question": "random question" +# } +# """ +# Then The status code of the response is 422 +# And The body of the response is the following +# """ +# { "type": "missing", "loc": [ "body", "conversation_id" ], "msg": "Field required", } +# """ + +# Scenario: Check if feedback/status endpoint is working +# Given The system is in default state +# When I access REST API endpoint "feedback/status" using HTTP GET method +# Then The status code of the response is 200 +# And The body of the response is the following +# """ +# {"functionality": "feedback", "status": { "enabled": true}} +# """ + + diff --git a/tests/e2e/features/health.feature b/tests/e2e/features/health.feature new file mode 100644 index 00000000..7358653b --- /dev/null +++ b/tests/e2e/features/health.feature @@ -0,0 +1,53 @@ +# Feature: Health endpoint API tests +#TODO: fix test + +# Background: +# Given The service is started locally +# And REST API service hostname is localhost +# And REST API service port is 8080 +# And REST API service prefix is /v1 + + +# Scenario: Check if service report proper readiness state +# Given The system is in default state +# When I access endpoint "readiness" using HTTP GET method +# Then The status code of the response is 200 +# And The body of the response has the following schema +# """ +# { +# "ready": "bool", +# "reason": "str", +# "providers": "list[str]" +# } +# """ +# And The body of the response is the following +# """ +# {"ready": true, "reason": "All providers are healthy", "providers": []} +# """ + +# Scenario: Check if service report proper readiness state when llama stack is not available +# Given The system is in default state +# And The llama-stack connection is disrupted +# When I access endpoint "readiness" using HTTP GET method +# Then The status code of the response is 503 + +# Scenario: Check if service report proper liveness state +# Given The system is in default state +# When I access endpoint "liveness" using HTTP GET method +# Then The status code of the response is 200 +# And The body of the response has the following schema +# """ +# { +# "alive": "bool" +# } +# """ +# And The body of the response is the following +# """ +# {"alive":true} +# """ + +# Scenario: Check if service report proper liveness state when llama stack is not available +# Given The system is in default state +# And The llama-stack connection is disrupted +# When I access endpoint "liveness" using HTTP GET method +# Then The status code of the response is 503 \ No newline at end of file diff --git a/tests/e2e/features/info.feature b/tests/e2e/features/info.feature new file mode 100644 index 00000000..8bad3538 --- /dev/null +++ b/tests/e2e/features/info.feature @@ -0,0 +1,46 @@ +# Feature: Info endpoint API tests +#TODO: fix test + +# Background: +# Given The service is started locally +# And REST API service hostname is localhost +# And REST API service port is 8080 +# And REST API service prefix is /v1 + +# Scenario: Check if the OpenAPI endpoint works as expected +# Given The system is in default state +# When I access endpoint "openapi.json" using HTTP GET method +# Then The status code of the response is 200 +# And The body of the response contains OpenAPI + +# Scenario: Check if info endpoint is working +# Given The system is in default state +# When I access REST API endpoint "info" using HTTP GET method +# Then The status code of the response is 200 +# And The body of the response has proper name "lightspeed_stack" and version "0.2.0" + +# Scenario: Check if models endpoint is working +# Given The system is in default state +# When I access REST API endpoint "models" using HTTP GET method +# Then The status code of the response is 200 +# And The body of the response contains gpt + + +# Scenario: Check if models endpoint is working +# Given The system is in default state +# And The llama-stack connection is disrupted +# When I access REST API endpoint "models" using HTTP GET method +# Then The status code of the response is 503 + +# Scenario: Check if metrics endpoint is working +# Given The system is in default state +# When I access REST API endpoint "metrics" using HTTP GET method +# Then The status code of the response is 200 +# And The body of the response has proper metrics + +# Scenario: Check if metrics endpoint is working +# Given The system is in default state +# And The llama-stack connection is disrupted +# When I access REST API endpoint "metrics" using HTTP GET method +# Then The status code of the response is 500 + diff --git a/tests/e2e/features/llm_interface.feature b/tests/e2e/features/llm_interface.feature deleted file mode 100644 index 153b5287..00000000 --- a/tests/e2e/features/llm_interface.feature +++ /dev/null @@ -1,18 +0,0 @@ -Feature: LLM interface tests - - - Background: - Given The service is started locally - And REST API service hostname is localhost - And REST API service port is 8080 - And REST API service prefix is /v1 - - - Scenario: Check if LLM responds to sent question - Given The system is in default state - When I ask question "Say hello" - Then The status code of the response is 200 - And The response should have proper LLM response format - And The response should contain following fragments - | Fragments in LLM response | - | Hello | diff --git a/tests/e2e/features/query.feature b/tests/e2e/features/query.feature new file mode 100644 index 00000000..581840d9 --- /dev/null +++ b/tests/e2e/features/query.feature @@ -0,0 +1,60 @@ +# Feature: Query endpoint API tests +#TODO: fix test + +# Background: +# Given The service is started locally +# And REST API service hostname is localhost +# And REST API service port is 8080 +# And REST API service prefix is /v1 + + +# Scenario: Check if LLM responds to sent question +# Given The system is in default state +# When I use "query" to ask question "Say hello" +# Then The status code of the response is 200 +# And The response should have proper LLM response format +# And The response should contain following fragments +# | Fragments in LLM response | +# | Hello | + +# Scenario: Check if LLM responds to sent question with different system prompt +# Given The system is in default state +# And I change the system prompt to "new system prompt" +# When I use "query" to ask question "Say hello" +# Then The status code of the response is 200 +# And The response should have proper LLM response format +# And The response should contain following fragments +# | Fragments in LLM response | +# | Hello | + +# Scenario: Check if LLM responds with error for malformed request +# Given The system is in default state +# And I modify the request body by removing the "query" +# When I use "query" to ask question "Say hello" +# Then The status code of the response is 422 +# And The body of the response is the following +# """ +# { "type": "missing", "loc": [ "body", "system_query" ], "msg": "Field required", } +# """ + +# Scenario: Check if LLM responds to sent question with error when not authenticated +# Given The system is in default state +# And I remove the auth header +# When I use "query" to ask question "Say hello" +# Then The status code of the response is 200 +# Then The status code of the response is 400 +# And The body of the response is the following +# """ +# {"detail": "Unauthorized: No auth header found"} +# """ + +# Scenario: Check if LLM responds to sent question with error when not authorized +# Given The system is in default state +# And I modify the auth header so that the user is it authorized +# When I use "query" to ask question "Say hello" +# Then The status code of the response is 403 +# And The body of the response is the following +# """ +# {"detail": "Forbidden: User is not authorized to access this resource"} +# """ + \ No newline at end of file diff --git a/tests/e2e/features/rest_api.feature b/tests/e2e/features/rest_api.feature index eb2cfc32..41b312c8 100644 --- a/tests/e2e/features/rest_api.feature +++ b/tests/e2e/features/rest_api.feature @@ -7,51 +7,8 @@ Feature: REST API tests And REST API service port is 8080 And REST API service prefix is /v1 - - Scenario: Check if service report proper readiness state - Given The system is in default state - When I access endpoint "readiness" using HTTP GET method - Then The status code of the response is 200 - And The body of the response has the following schema - """ - { - "ready": "bool", - "reason": "str", - "providers": "list[str]" - } - """ - And The body of the response is the following - """ - {"ready": true, "reason": "All providers are healthy", "providers": []} - """ - - - Scenario: Check if service report proper liveness state - Given The system is in default state - When I access endpoint "liveness" using HTTP GET method - Then The status code of the response is 200 - And The body of the response has the following schema - """ - { - "alive": "bool" - } - """ - And The body of the response is the following - """ - {"alive":true} - """ - - Scenario: Check if the OpenAPI endpoint works as expected Given The system is in default state When I access endpoint "openapi.json" using HTTP GET method Then The status code of the response is 200 And The body of the response contains OpenAPI - - - Scenario: Check if info endpoint is working - Given The system is in default state - When I access REST API endpoint "info" using HTTP GET method - Then The status code of the response is 200 - And The body of the response contains name - And The body of the response contains version diff --git a/tests/e2e/features/steps/auth.py b/tests/e2e/features/steps/auth.py new file mode 100644 index 00000000..2db9aee4 --- /dev/null +++ b/tests/e2e/features/steps/auth.py @@ -0,0 +1,25 @@ +"""Implementation of common test steps.""" + +from behave import given, then # pyright: ignore[reportAttributeAccessIssue] +from behave.runner import Context + + +@then("The body of the response has proper username") +def check_body_username(context: Context) -> None: + """Check that the username is correct in response.""" + # TODO: add step implementation + assert context is not None + + +@given("I remove the auth header") +def remove_auth_header(context: Context) -> None: + """Remove the auth header.""" + # TODO: add step implementation + assert context is not None + + +@given("I modify the auth header so that the user is it authorized") +def modify_auth_header(context: Context) -> None: + """Modify the auth header making the user unauthorized.""" + # TODO: add step implementation + assert context is not None diff --git a/tests/e2e/features/steps/common_http.py b/tests/e2e/features/steps/common_http.py index c2c3b376..261b0dfd 100644 --- a/tests/e2e/features/steps/common_http.py +++ b/tests/e2e/features/steps/common_http.py @@ -3,7 +3,7 @@ import json import requests -from behave import given, then, when # pyright: ignore[reportAttributeAccessIssue] +from behave import then, when, step # pyright: ignore[reportAttributeAccessIssue] from behave.runner import Context from tests.e2e.utils.utils import normalize_endpoint, validate_json @@ -194,22 +194,19 @@ def check_prediction_result_ignoring_field(context: Context, field: str) -> None assert result == expected_body, f"got:\n{result}\nwant:\n{expected_body}" -@given("REST API service hostname is {hostname:w}") -@when("REST API service hostname is {hostname:w}") +@step("REST API service hostname is {hostname:w}") def set_service_hostname(context: Context, hostname: str) -> None: """Set REST API hostname to be used in following steps.""" context.hostname = hostname -@given("REST API service port is {port:d}") -@when("REST API service port is {port:d}") +@step("REST API service port is {port:d}") def set_service_port(context: Context, port: int) -> None: """Set REST API port to be used in following steps.""" context.port = port -@given("REST API service prefix is {prefix}") -@when("REST API service prefix is {prefix}") +@step("REST API service prefix is {prefix}") def set_rest_api_prefix(context: Context, prefix: str) -> None: """Set REST API prefix to be used in following steps.""" context.api_prefix = prefix diff --git a/tests/e2e/features/steps/conversation.py b/tests/e2e/features/steps/conversation.py new file mode 100644 index 00000000..36c39d48 --- /dev/null +++ b/tests/e2e/features/steps/conversation.py @@ -0,0 +1,18 @@ +"""Implementation of common test steps.""" + +from behave import then # pyright: ignore[reportAttributeAccessIssue] +from behave.runner import Context + + +@then("The proper conversation is returned") +def check_returned_conversation(context: Context) -> None: + """Check the conversation in response.""" + # TODO: add step implementation + assert context.response is not None + + +@then("the deleted conversation is not found") +def check_deleted_conversation(context: Context) -> None: + """Check whether the deleted conversation is gone.""" + # TODO: add step implementation + assert context.response is not None diff --git a/tests/e2e/features/steps/feedback.py b/tests/e2e/features/steps/feedback.py new file mode 100644 index 00000000..5184db8d --- /dev/null +++ b/tests/e2e/features/steps/feedback.py @@ -0,0 +1,38 @@ +"""Implementation of common test steps.""" + +from behave import given, when # pyright: ignore[reportAttributeAccessIssue] +from behave.runner import Context +import requests + +# default timeout for HTTP operations +DEFAULT_TIMEOUT = 10 + + +@when( + "I access endpoint {endpoint:w} using HTTP POST with conversation ID {conversationID:w}" +) +def access_rest_api_endpoint_post( + context: Context, endpoint: str, conversation_id: str +) -> None: + """Send POST HTTP request with JSON payload to tested service. + + The JSON payload is retrieved from `context.text` attribute, + which must not be None. The response is stored in + `context.response` attribute. + """ + base = f"http://{context.hostname}:{context.port}" + path = f"{context.api_prefix}/{endpoint}".replace("//", "/") + url = base + path + + assert conversation_id is not None, "Payload needs to be specified" + # TODO: finish the conversation ID handling + + # perform REST API call + context.response = requests.post(url, timeout=DEFAULT_TIMEOUT) + + +@given("I disable the feedback") +def disable_feedback(context: Context) -> None: + """Disable feedback.""" + # TODO: add step implementation + assert context is not None diff --git a/tests/e2e/features/steps/health.py b/tests/e2e/features/steps/health.py new file mode 100644 index 00000000..7421465e --- /dev/null +++ b/tests/e2e/features/steps/health.py @@ -0,0 +1,18 @@ +"""Implementation of common test steps.""" + +from behave import given # pyright: ignore[reportAttributeAccessIssue] +from behave.runner import Context + + +@given("The llama-stack connection is disrupted") +def llama_stack_connection_broken(context: Context) -> None: + """Break llama_stack connection.""" + # TODO: add step implementation + assert context is not None + + +@given("the service is stopped") +def stop_service(context: Context) -> None: + """Stop service.""" + # TODO: add step implementation + assert context is not None diff --git a/tests/e2e/features/steps/info.py b/tests/e2e/features/steps/info.py new file mode 100644 index 00000000..c6244f12 --- /dev/null +++ b/tests/e2e/features/steps/info.py @@ -0,0 +1,22 @@ +"""Implementation of common test steps.""" + +from behave import then # pyright: ignore[reportAttributeAccessIssue] +from behave.runner import Context + + +@then( + "The body of the response has proper name {system_prompt:w} and version {version:w}" +) +def check_name_version(context: Context, system_prompt: str, version: str) -> None: + """Check proper name and version number.""" + context.system_prompt = system_prompt + context.version = version + # TODO: add step implementation + assert context is not None + + +@then("The body of the response has proper metrics") +def check_metrics(context: Context) -> None: + """Check proper metrics.""" + # TODO: add step implementation + assert context is not None diff --git a/tests/e2e/features/steps/llm_query_response.py b/tests/e2e/features/steps/llm_query_response.py index 776dcf3d..14f0a59c 100644 --- a/tests/e2e/features/steps/llm_query_response.py +++ b/tests/e2e/features/steps/llm_query_response.py @@ -1,17 +1,39 @@ """LLM query and response steps.""" import requests -from behave import then, when # pyright: ignore[reportAttributeAccessIssue] +from behave import then, step # pyright: ignore[reportAttributeAccessIssue] from behave.runner import Context DEFAULT_LLM_TIMEOUT = 60 -@when('I ask question "{question}"') -def ask_question(context: Context, question: str) -> None: +@step('I change the system prompt to "{system_prompt}"') +def change_system_prompt(context: Context, system_prompt: str) -> None: + """Change the system prompt.""" + context.system_prompt = system_prompt + # TODO: add step implementation + assert context is not None + + +@step('I modify the request body by removing the "{field}"') +def remove_field_prompt(context: Context, field: str) -> None: + """Remove the field from the prompt.""" + context.field = field + # TODO: add step implementation + assert context is not None + + +@step("I wait for the response to be completed") +def wait_for_complete_response(context: Context) -> None: + """Wait for the response to be complete.""" + assert context is not None + + +@step('I use "{endpoint}" to ask question "{question}"') +def ask_question(context: Context, endpoint: str, question: str) -> None: """Call the service REST API endpoint with question.""" base = f"http://{context.hostname}:{context.port}" - path = f"{context.api_prefix}/query".replace("//", "/") + path = f"{context.api_prefix}/{endpoint}".replace("//", "/") url = base + path data = {"query": question} context.response = requests.post(url, json=data, timeout=DEFAULT_LLM_TIMEOUT) diff --git a/tests/e2e/features/streaming_query.feature b/tests/e2e/features/streaming_query.feature new file mode 100644 index 00000000..d2644e9c --- /dev/null +++ b/tests/e2e/features/streaming_query.feature @@ -0,0 +1,39 @@ +# Feature: streaming_query endpoint API tests +#TODO: fix test + +# Background: +# Given The service is started locally +# And REST API service hostname is localhost +# And REST API service port is 8080 +# And REST API service prefix is /v1 + + +# Scenario: Check if LLM responds to sent question +# Given The system is in default state +# And I use "streaming_query" to ask question "Say hello" +# When I wait for the response to be completed +# Then The status code of the response is 200 +# And The response should contain following fragments +# | Fragments in LLM response | +# | Hello | + +# Scenario: Check if LLM responds to sent question with different system prompt +# Given The system is in default state +# And I change the system prompt to "new system prompt" +# And I use "streaming_query" to ask question "Say hello" +# When I wait for the response to be completed +# Then The status code of the response is 200 +# And The response should contain following fragments +# | Fragments in LLM response | +# | Hello | + +# Scenario: Check if LLM responds for streaming_query request with error for malformed request +# Given The system is in default state +# And I modify the request body by removing the "query" +# And I use "streaming_query" to ask question "Say hello" +# When I wait for the response to be completed +# Then The status code of the response is 422 +# And The body of the response is the following +# """ +# { "type": "missing", "loc": [ "body", "system_query" ], "msg": "Field required", } +# """ diff --git a/tests/e2e/test_list.txt b/tests/e2e/test_list.txt index 42201f02..5a6d1ed1 100644 --- a/tests/e2e/test_list.txt +++ b/tests/e2e/test_list.txt @@ -1,3 +1,9 @@ features/smoketests.feature +features/authorized.feature +features/conversations.feature +features/feedback.feature +features/health.feature +features/info.feature +features/query.feature +features/streaming_query.feature features/rest_api.feature -features/llm_interface.feature