Skip to content
Snippets Groups Projects
Commit 0a7af017 authored by Sam Kagan's avatar Sam Kagan
Browse files

Fixed tests, refactoring them so that independent tests run indep'ly

parent b6cf6c3b
No related branches found
No related tags found
2 merge requests!1706merge 2.8.4 to main,!1676Switched returns to raises for error responses in views where a db transacation appeared to be open with some modified data
Pipeline #16087 passed
...@@ -23,6 +23,7 @@ The logic can be found in `capability/views/capability_request.py`. ...@@ -23,6 +23,7 @@ The logic can be found in `capability/views/capability_request.py`.
import http import http
import pytest
from capability.views.capability_request import ( from capability.views.capability_request import (
create_capability_request, create_capability_request,
delete_capability_request, delete_capability_request,
...@@ -210,9 +211,9 @@ def test_delete_capability_request(request_null_capability: DummyRequest): ...@@ -210,9 +211,9 @@ def test_delete_capability_request(request_null_capability: DummyRequest):
assert response.status_code == http.HTTPStatus.OK assert response.status_code == http.HTTPStatus.OK
def test_delete_capability_request_error(request_null_capability: DummyRequest): def test_delete_capability_request_error_undeletable_request(request_null_capability: DummyRequest):
""" """
Tests that the delete_capability_request view correctly executes its logic Tests that the delete_capability_request view correctly executes its logic for a request that can't be deleted
:param request_null_capability: Dummy Pyramid request object set up with mocked DB access :param request_null_capability: Dummy Pyramid request object set up with mocked DB access
supporting the null capability supporting the null capability
...@@ -224,11 +225,20 @@ def test_delete_capability_request_error(request_null_capability: DummyRequest): ...@@ -224,11 +225,20 @@ def test_delete_capability_request_error(request_null_capability: DummyRequest):
request_null_capability.matchdict["capability_name"] = "null" request_null_capability.matchdict["capability_name"] = "null"
request_null_capability.capability_service.run_capability(capability_request) request_null_capability.capability_service.run_capability(capability_request)
response = delete_capability_request(request_null_capability) with pytest.raises(HTTPBadRequest):
assert response.status_code == http.HTTPStatus.BAD_REQUEST response = delete_capability_request(request_null_capability)
assert isinstance(response, HTTPBadRequest) assert response.status_code == http.HTTPStatus.BAD_REQUEST
assert isinstance(response, HTTPBadRequest)
def test_delete_capability_request_error_nonexistent_request(request_null_capability: DummyRequest):
"""
Tests that the delete_capability_request view correctly executes its logic when a request does not exist
# Request does not exist :param request_null_capability: Dummy Pyramid request object set up with mocked DB access
supporting the null capability
"""
request_null_capability.matchdict["capability_name"] = "null"
request_null_capability.matchdict["request_id"] = -1 request_null_capability.matchdict["request_id"] = -1
response = delete_capability_request(request_null_capability) response = delete_capability_request(request_null_capability)
assert response.status_code == http.HTTPStatus.PRECONDITION_FAILED assert response.status_code == http.HTTPStatus.PRECONDITION_FAILED
......
...@@ -20,11 +20,13 @@ Tests that test the view functionality of our capability REST API. ...@@ -20,11 +20,13 @@ Tests that test the view functionality of our capability REST API.
The logic can be found in `capability/views/capability.py`. The logic can be found in `capability/views/capability.py`.
""" """
import http import http
from typing import Optional
import pytest import pytest
from pyramid.config import Configurator from pyramid.config import Configurator
from pyramid.httpexceptions import ( from pyramid.httpexceptions import (
HTTPBadRequest, HTTPBadRequest,
HTTPException,
HTTPExpectationFailed, HTTPExpectationFailed,
HTTPNotFound, HTTPNotFound,
HTTPPreconditionFailed, HTTPPreconditionFailed,
...@@ -182,7 +184,22 @@ def test_edit_capability(test_config: Configurator, request_null_capability: Dum ...@@ -182,7 +184,22 @@ def test_edit_capability(test_config: Configurator, request_null_capability: Dum
assert response_jobs_only.status_code == http.HTTPStatus.OK assert response_jobs_only.status_code == http.HTTPStatus.OK
def test_edit_capability_error(test_config: Configurator, request_null_capability: DummyRequest): @pytest.mark.parametrize(
["capability_name", "max_jobs", "response_type", "is_raised"],
[
("not_found", 3, HTTPPreconditionFailed, False),
("null", None, HTTPBadRequest, False),
("error", 3, HTTPExpectationFailed, True),
],
)
def test_edit_capability_error(
test_config: Configurator,
request_null_capability: DummyRequest,
capability_name: str,
max_jobs: int | None,
response_type: HTTPException,
is_raised: bool,
):
""" """
Tests that the edit_capability view correctly responds with exceptions Tests that the edit_capability view correctly responds with exceptions
...@@ -192,23 +209,20 @@ def test_edit_capability_error(test_config: Configurator, request_null_capabilit ...@@ -192,23 +209,20 @@ def test_edit_capability_error(test_config: Configurator, request_null_capabilit
""" """
from capability.views.capability import edit_capability from capability.views.capability import edit_capability
request_null_capability.matchdict["capability_name"] = "not_found" request_null_capability.matchdict["capability_name"] = capability_name
request_null_capability.json_body = {"max_jobs": 3} if max_jobs is not None:
response_cap_not_exists = edit_capability(request_null_capability) request_null_capability.json_body = {"max_jobs": max_jobs}
assert response_cap_not_exists.status_code == http.HTTPStatus.PRECONDITION_FAILED else:
assert type(response_cap_not_exists) is HTTPPreconditionFailed request_null_capability.json_body = {}
if is_raised:
request_null_capability.matchdict["capability_name"] = "null" with pytest.raises(response_type):
request_null_capability.json_body = {} response = edit_capability(request_null_capability)
response_empty = edit_capability(request_null_capability) assert response.status_code == response_type.code
assert response_empty.status_code == http.HTTPStatus.BAD_REQUEST assert type(response) is response_type
assert type(response_empty) is HTTPBadRequest else:
response = edit_capability(request_null_capability)
request_null_capability.matchdict["capability_name"] = "error" assert response.status_code == response_type.code
request_null_capability.json_body = {"max_jobs": 3} assert type(response) is response_type
response_edit_failed = edit_capability(request_null_capability)
assert response_edit_failed.status_code == http.HTTPStatus.EXPECTATION_FAILED
assert type(response_edit_failed) is HTTPExpectationFailed
def test_enable_capability(test_config: Configurator, request_null_capability: DummyRequest): def test_enable_capability(test_config: Configurator, request_null_capability: DummyRequest):
...@@ -226,7 +240,17 @@ def test_enable_capability(test_config: Configurator, request_null_capability: D ...@@ -226,7 +240,17 @@ def test_enable_capability(test_config: Configurator, request_null_capability: D
assert response.status_code == http.HTTPStatus.OK assert response.status_code == http.HTTPStatus.OK
def test_enable_capability_error(test_config: Configurator, request_null_capability: DummyRequest): @pytest.mark.parametrize(
["capability_name", "response_type", "is_raised"],
[("does_not_exist", HTTPPreconditionFailed, False), ("error", HTTPExpectationFailed, True)],
)
def test_enable_capability_error(
test_config: Configurator,
request_null_capability: DummyRequest,
capability_name: str,
response_type: HTTPException,
is_raised: bool,
):
""" """
Tests that enable_capability view properly responds with HTTP exceptions given bad input Tests that enable_capability view properly responds with HTTP exceptions given bad input
...@@ -236,14 +260,16 @@ def test_enable_capability_error(test_config: Configurator, request_null_capabil ...@@ -236,14 +260,16 @@ def test_enable_capability_error(test_config: Configurator, request_null_capabil
""" """
from capability.views.capability import enable_capability from capability.views.capability import enable_capability
request_null_capability.matchdict["capability_name"] = "does_not_exist" request_null_capability.matchdict["capability_name"] = capability_name
response_does_not_exist = enable_capability(request_null_capability) if is_raised:
assert response_does_not_exist.status_code == http.HTTPStatus.PRECONDITION_FAILED with pytest.raises(response_type):
assert type(response_does_not_exist) is HTTPPreconditionFailed response_enable_failed = enable_capability(request_null_capability)
request_null_capability.matchdict["capability_name"] = "error" assert response_enable_failed.status_code == response_type.code
response_enable_failed = enable_capability(request_null_capability) assert type(response_enable_failed) is response_type
assert response_enable_failed.status_code == http.HTTPStatus.EXPECTATION_FAILED else:
assert type(response_enable_failed) is HTTPExpectationFailed response_enable_failed = enable_capability(request_null_capability)
assert response_enable_failed.status_code == response_type.code
assert type(response_enable_failed) is response_type
def test_disable_capability(test_config: Configurator, request_null_capability: DummyRequest): def test_disable_capability(test_config: Configurator, request_null_capability: DummyRequest):
...@@ -261,7 +287,17 @@ def test_disable_capability(test_config: Configurator, request_null_capability: ...@@ -261,7 +287,17 @@ def test_disable_capability(test_config: Configurator, request_null_capability:
assert response.status_code == http.HTTPStatus.OK assert response.status_code == http.HTTPStatus.OK
def test_disable_capability_error(test_config: Configurator, request_null_capability: DummyRequest): @pytest.mark.parametrize(
["capability_name", "response_type", "is_raised"],
[("does_not_exist", HTTPPreconditionFailed, False), ("error", HTTPExpectationFailed, True)],
)
def test_disable_capability_error(
test_config: Configurator,
request_null_capability: DummyRequest,
capability_name: str,
response_type: HTTPException,
is_raised: bool,
):
""" """
Tests that disable_capability view properly responds with HTTP exceptions given bad input Tests that disable_capability view properly responds with HTTP exceptions given bad input
...@@ -271,11 +307,13 @@ def test_disable_capability_error(test_config: Configurator, request_null_capabi ...@@ -271,11 +307,13 @@ def test_disable_capability_error(test_config: Configurator, request_null_capabi
""" """
from capability.views.capability import disable_capability from capability.views.capability import disable_capability
request_null_capability.matchdict["capability_name"] = "does_not_exist" request_null_capability.matchdict["capability_name"] = capability_name
response_does_not_exist = disable_capability(request_null_capability) if is_raised:
assert response_does_not_exist.status_code == http.HTTPStatus.PRECONDITION_FAILED with pytest.raises(response_type):
assert type(response_does_not_exist) is HTTPPreconditionFailed response_enable_failed = disable_capability(request_null_capability)
request_null_capability.matchdict["capability_name"] = "error" assert response_enable_failed.status_code == response_type.code
response_disable_failed = disable_capability(request_null_capability) assert type(response_enable_failed) is response_type
assert response_disable_failed.status_code == http.HTTPStatus.EXPECTATION_FAILED else:
assert type(response_disable_failed) is HTTPExpectationFailed response_enable_failed = disable_capability(request_null_capability)
assert response_enable_failed.status_code == response_type.code
assert type(response_enable_failed) is response_type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment