Added integration tests for using extra fields
This commit is contained in:
156
tests_integration/tests/fields/test_utilize.py
Normal file
156
tests_integration/tests/fields/test_utilize.py
Normal file
@@ -0,0 +1,156 @@
|
|||||||
|
"""Integration tests for the custom extra fields system."""
|
||||||
|
|
||||||
|
import json
|
||||||
|
|
||||||
|
import httpx
|
||||||
|
|
||||||
|
from ..conftest import assert_httpx_success
|
||||||
|
|
||||||
|
URL = "http://spoolman:8000"
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_vendor_with_extra_field():
|
||||||
|
"""Test adding a vendor with a custom field."""
|
||||||
|
result = httpx.post(
|
||||||
|
f"{URL}/api/v1/field/vendor/mytextfield",
|
||||||
|
json={
|
||||||
|
"name": "My text field",
|
||||||
|
"field_type": "text",
|
||||||
|
"default_value": json.dumps("Hello World"),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert_httpx_success(result)
|
||||||
|
|
||||||
|
result = httpx.post(
|
||||||
|
f"{URL}/api/v1/vendor",
|
||||||
|
json={
|
||||||
|
"name": "My Vendor",
|
||||||
|
"extra": {
|
||||||
|
"mytextfield": '"My Value"',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert_httpx_success(result)
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
result = httpx.get(f"{URL}/api/v1/vendor/{result.json()['id']}")
|
||||||
|
assert_httpx_success(result)
|
||||||
|
vendor = result.json()
|
||||||
|
assert vendor["name"] == "My Vendor"
|
||||||
|
assert vendor["extra"] == {"mytextfield": '"My Value"'}
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
result = httpx.delete(f"{URL}/api/v1/field/vendor/mytextfield")
|
||||||
|
assert_httpx_success(result)
|
||||||
|
|
||||||
|
result = httpx.delete(f"{URL}/api/v1/vendor/{vendor['id']}")
|
||||||
|
assert_httpx_success(result)
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_vendor_with_invalid_extra_field():
|
||||||
|
"""Test adding a vendor with an invalid custom field."""
|
||||||
|
result = httpx.post(
|
||||||
|
f"{URL}/api/v1/vendor",
|
||||||
|
json={
|
||||||
|
"name": "My Vendor",
|
||||||
|
"extra": {
|
||||||
|
"somefield": 42,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert result.status_code == 400
|
||||||
|
assert "somefield" in result.json()["message"].lower()
|
||||||
|
|
||||||
|
|
||||||
|
def test_add_vendor_with_extra_field_then_delete():
|
||||||
|
"""Test adding a vendor with an extra field, then delete the field.
|
||||||
|
|
||||||
|
Vendor GET response should then not contain the extra field.
|
||||||
|
"""
|
||||||
|
result = httpx.post(
|
||||||
|
f"{URL}/api/v1/field/vendor/mytextfield",
|
||||||
|
json={
|
||||||
|
"name": "My text field",
|
||||||
|
"field_type": "text",
|
||||||
|
"default_value": json.dumps("Hello World"),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert_httpx_success(result)
|
||||||
|
|
||||||
|
result = httpx.post(
|
||||||
|
f"{URL}/api/v1/vendor",
|
||||||
|
json={
|
||||||
|
"name": "My Vendor",
|
||||||
|
"extra": {
|
||||||
|
"mytextfield": '"My Value"',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert_httpx_success(result)
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
result = httpx.get(f"{URL}/api/v1/vendor/{result.json()['id']}")
|
||||||
|
assert_httpx_success(result)
|
||||||
|
vendor = result.json()
|
||||||
|
assert vendor["name"] == "My Vendor"
|
||||||
|
assert vendor["extra"] == {"mytextfield": '"My Value"'}
|
||||||
|
|
||||||
|
# Remove field
|
||||||
|
result = httpx.delete(f"{URL}/api/v1/field/vendor/mytextfield")
|
||||||
|
assert_httpx_success(result)
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
result = httpx.get(f"{URL}/api/v1/vendor/{vendor['id']}")
|
||||||
|
assert_httpx_success(result)
|
||||||
|
vendor = result.json()
|
||||||
|
assert vendor["name"] == "My Vendor"
|
||||||
|
assert "extra" not in vendor or vendor["extra"] == {}
|
||||||
|
|
||||||
|
result = httpx.delete(f"{URL}/api/v1/vendor/{vendor['id']}")
|
||||||
|
assert_httpx_success(result)
|
||||||
|
|
||||||
|
|
||||||
|
def test_update_existing_vendor_with_new_extra_field():
|
||||||
|
"""Test updating an existing vendor with a new extra field."""
|
||||||
|
result = httpx.post(
|
||||||
|
f"{URL}/api/v1/vendor",
|
||||||
|
json={
|
||||||
|
"name": "My Vendor",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert_httpx_success(result)
|
||||||
|
vendor_id = result.json()["id"]
|
||||||
|
|
||||||
|
result = httpx.post(
|
||||||
|
f"{URL}/api/v1/field/vendor/mytextfield",
|
||||||
|
json={
|
||||||
|
"name": "My text field",
|
||||||
|
"field_type": "text",
|
||||||
|
"default_value": json.dumps("Hello World"),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert_httpx_success(result)
|
||||||
|
|
||||||
|
result = httpx.patch(
|
||||||
|
f"{URL}/api/v1/vendor/{vendor_id}",
|
||||||
|
json={
|
||||||
|
"extra": {
|
||||||
|
"mytextfield": '"My Value"',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert_httpx_success(result)
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
result = httpx.get(f"{URL}/api/v1/vendor/{vendor_id}")
|
||||||
|
assert_httpx_success(result)
|
||||||
|
vendor = result.json()
|
||||||
|
assert vendor["name"] == "My Vendor"
|
||||||
|
assert vendor["extra"] == {"mytextfield": '"My Value"'}
|
||||||
|
|
||||||
|
# Clean up
|
||||||
|
result = httpx.delete(f"{URL}/api/v1/field/vendor/mytextfield")
|
||||||
|
assert_httpx_success(result)
|
||||||
|
|
||||||
|
result = httpx.delete(f"{URL}/api/v1/vendor/{vendor_id}")
|
||||||
|
assert_httpx_success(result)
|
||||||
Reference in New Issue
Block a user