From 39e9577246b10c1d90beb0596f0ba00ba94a68e6 Mon Sep 17 00:00:00 2001
From: nhertz <nhertz@nrao.edu>
Date: Thu, 18 Feb 2021 17:06:11 -0700
Subject: [PATCH] Committing the tests for the capability request Pyramid views
 that I forgot to add in the previous MR

---
 .../test/test_capability_request_views.py     | 104 ++++++++++++++++++
 1 file changed, 104 insertions(+)
 create mode 100644 services/capability/test/test_capability_request_views.py

diff --git a/services/capability/test/test_capability_request_views.py b/services/capability/test/test_capability_request_views.py
new file mode 100644
index 000000000..8a6f71db4
--- /dev/null
+++ b/services/capability/test/test_capability_request_views.py
@@ -0,0 +1,104 @@
+"""
+Tests that test the view functionality of our capability request REST API.
+The logic can be found in `capability/views/capability.py`.
+"""
+
+from pyramid.config import Configurator
+from pyramid.httpexceptions import (
+    HTTPBadRequest,
+    HTTPExpectationFailed,
+    HTTPNotFound,
+    HTTPPreconditionFailed,
+)
+from pyramid.testing import DummyRequest
+
+
+def test_view_capability_request(test_config: Configurator, request_null_capability: DummyRequest):
+    """
+    Tests the view_capability_request view to make sure it properly returns the info of a capability request
+
+    :param test_config: Dummy Pyramid Configurator object set up for testing
+    :param request_null_capability: Dummy Pyramid request object set up with mocked DB access
+    supporting the null capability
+    """
+    from capability.views.capability_request import view_capability_request
+
+    expected_response = (
+        '{"id": 0, "capability_name": "null", "state": "Created", "parameters": "-g"}'
+    )
+    request_null_capability.matchdict["capability_name"] = "null"
+    request_null_capability.matchdict["request_id"] = 0
+    response = view_capability_request(request_null_capability)
+    assert response.status_code == 200
+    assert response.json_body == expected_response
+
+
+def test_view_capability_request_not_found(
+    test_config: Configurator, request_null_capability: DummyRequest
+):
+    """
+    Tests the view_capability_request view to make sure it properly returns a 404 Not Found exception
+    when a capability request does not exist
+
+    :param test_config: Dummy Pyramid Configurator object set up for testing
+    :param request_null_capability: Dummy Pyramid request object set up with mocked DB access
+    supporting the null capability
+    """
+    from capability.views.capability_request import view_capability_request
+
+    request_null_capability.matchdict["capability_name"] = "null"
+    request_null_capability.matchdict["request_id"] = -1
+    response = view_capability_request(request_null_capability)
+    assert response.status_code == 404
+    assert type(response) is HTTPNotFound
+
+
+def test_create_capability_request(
+    test_config: Configurator, request_null_capability: DummyRequest
+):
+    """
+    Tests the create capability view to make sure it properly supports creation of capabilities
+
+    :param test_config: Dummy Pyramid Configurator object set up for testing
+    :param request_null_capability: Dummy Pyramid request object set up with mocked DB access
+    supporting the null capability
+    """
+    from capability.views.capability_request import create_capability_request
+
+    request_null_capability.json_body = {"parameters": "-g", "versions": []}
+
+    # Assert test capability not in list of capabilities (mocked)
+    assert not request_null_capability.capability_info.lookup_capability_request(1)
+
+    response = create_capability_request(request_null_capability)
+    assert response.status_code == 200
+    expected_response = (
+        '{"id": 1, "capability_name": "null", "state": "Created", "parameters": "-g"}'
+    )
+    assert response.json_body == expected_response
+    # Assert test capability has been added to list of capabilities (mocked)
+    assert request_null_capability.capability_info.lookup_capability_request(1)
+
+
+def test_create_capability_request_error(
+    test_config: Configurator, request_null_capability: DummyRequest
+):
+    """
+    Tests that the create_capability_request view correctly responds with exceptions given bad input
+
+    :param test_config: Dummy Pyramid Configurator object set up for testing
+    :param request_null_capability: Dummy Pyramid request object set up with mocked DB access
+    supporting the null capability
+    """
+    from capability.views.capability_request import create_capability_request
+
+    request_null_capability.json_body = {"bad": "param"}
+    response_bad_params = create_capability_request(request_null_capability)
+    assert response_bad_params.status_code == 400
+    assert type(response_bad_params) is HTTPBadRequest
+
+    request_null_capability.matchdict["capability_name"] = "does_not_exist"
+    request_null_capability.json_body = {"parameters": "-g", "versions": []}
+    response_does_not_exist = create_capability_request(request_null_capability)
+    assert response_does_not_exist.status_code == 412
+    assert type(response_does_not_exist) is HTTPPreconditionFailed
-- 
GitLab