"""Tests for Validation.""" import json from unittest import mock import flask from content_review.constants import error from content_review.constants import field_const from content_review.constants import header as header_const from content_review.validation import validation from content_review.validation.schema import header def test_validate_headers_success(valid_headers): """Assert that validate_headers succeeds when headers valid.""" request = mock.Mock() request.headers = valid_headers @validation.validate_headers(request, header.schema) def fn(): return 42 assert 42 == fn() def test_validate_headers_fail(): """Assert that validate_headers fails when required field missing.""" request = mock.Mock() request.headers = {} @validation.validate_headers(request, header.schema) def fn(): pass response = fn() assert flask.Response == type(response) response_json = json.loads(response.data.decode()) assert 400 == response.status_code assert error.HEADER_VALIDATION_ERROR == response_json[field_const.CODE] assert "'{}' is a required property".format( header_const.GRASS_ACCOUNT_TYPE ) in response_json[field_const.MESSAGE] def test_validate_body_success(valid_body, example_body_schema): """Assert that validate_body succeeds when body valid.""" request = mock.Mock() request.get_json = mock.MagicMock(return_value=valid_body) @validation.validate_body(request, example_body_schema) def fn(): return 42 assert 42 == fn() def test_validate_body_failure(invalid_body, example_body_schema): """Assert that validate_body fails when body is invalid.""" request = mock.Mock() request.get_json = mock.MagicMock(return_value=invalid_body) @validation.validate_body(request, example_body_schema) def fn(): pass response = fn() assert flask.Response == type(response) response_json = json.loads(response.data.decode()) assert 400 == response.status_code assert error.BODY_VALIDATION_ERROR == response_json[field_const.CODE] assert "100 is not of type 'string'" in response_json[field_const.MESSAGE]