152 lines
4.3 KiB
Python
152 lines
4.3 KiB
Python
import pytest
|
|
from nanoid import generate as generate_nanoid
|
|
|
|
|
|
def test_create_app(client):
|
|
name = str(generate_nanoid())
|
|
response = client.post(
|
|
"/v1/apps", json={"name": name, "metadata": {"key": "value"}}
|
|
)
|
|
print(response)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
print("===================")
|
|
print(data)
|
|
print("===================")
|
|
assert data["name"] == name
|
|
assert data["metadata"] == {"key": "value"}
|
|
assert "id" in data
|
|
|
|
|
|
def test_create_app_no_metadata(client):
|
|
name = str(generate_nanoid())
|
|
response = client.post("/v1/apps", json={"name": name})
|
|
print(response)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
print("===================")
|
|
print(data)
|
|
print("===================")
|
|
assert data["name"] == name
|
|
assert data["metadata"] == {}
|
|
assert "id" in data
|
|
|
|
|
|
def test_get_or_create_app(client):
|
|
name = str(generate_nanoid())
|
|
# Should return a ResourceNotFoundException with 404 status
|
|
response = client.get(f"/v1/apps/name/{name}")
|
|
assert response.status_code == 404
|
|
assert "detail" in response.json()
|
|
|
|
# This should create the app
|
|
response = client.get(f"/v1/apps/get_or_create/{name}")
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["name"] == name
|
|
assert "id" in data
|
|
|
|
|
|
def test_get_or_create_existing_app(client):
|
|
name = str(generate_nanoid())
|
|
|
|
# App doesn't exist yet
|
|
response = client.get(f"/v1/apps/name/{name}")
|
|
assert response.status_code == 404
|
|
|
|
# Create the app
|
|
response = client.post(
|
|
"/v1/apps", json={"name": name, "metadata": {"key": "value"}}
|
|
)
|
|
assert response.status_code == 200
|
|
app1 = response.json()
|
|
|
|
# Now get_or_create should find the existing app
|
|
response = client.get(f"/v1/apps/get_or_create/{name}")
|
|
assert response.status_code == 200
|
|
app2 = response.json()
|
|
|
|
# Both should be the same app
|
|
assert app1["name"] == app2["name"]
|
|
assert app1["id"] == app2["id"]
|
|
assert app1["metadata"] == app2["metadata"]
|
|
|
|
|
|
def test_get_app_by_id(client, sample_data):
|
|
test_app, _ = sample_data
|
|
response = client.get(f"/v1/apps?app_id={test_app.public_id}")
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["name"] == test_app.name
|
|
assert data["id"] == str(test_app.public_id)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_all_apps(client, db_session, sample_data):
|
|
test_app, test_user = sample_data
|
|
|
|
# create a test app with metadata
|
|
response = client.post(
|
|
"/v1/apps",
|
|
json={
|
|
"name": "test_app",
|
|
"metadata": {"test_key": "test_value"},
|
|
},
|
|
)
|
|
|
|
response = client.post(
|
|
"/v1/apps/list",
|
|
json={},
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "items" in data
|
|
assert len(data["items"]) > 0
|
|
|
|
response = client.post(
|
|
"/v1/apps/list",
|
|
json={"filter": {"test_key": "test_value"}},
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "items" in data
|
|
assert len(data["items"]) > 0
|
|
assert data["items"][0]["metadata"] == {"test_key": "test_value"}
|
|
|
|
|
|
def test_get_app_by_name(client, sample_data):
|
|
test_app, _ = sample_data
|
|
response = client.get(f"/v1/apps/name/{test_app.name}")
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["name"] == test_app.name
|
|
assert data["id"] == str(test_app.public_id)
|
|
|
|
|
|
def test_update_app(client, sample_data):
|
|
test_app, _ = sample_data
|
|
new_name = str(generate_nanoid())
|
|
response = client.put(
|
|
f"/v1/apps/{test_app.public_id}",
|
|
json={"name": new_name, "metadata": {"new_key": "new_value"}},
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["name"] == new_name
|
|
assert data["metadata"] == {"new_key": "new_value"}
|
|
|
|
|
|
def test_create_duplicate_app_name(client):
|
|
# Create an app
|
|
name = str(generate_nanoid())
|
|
response = client.post("/v1/apps", json={"name": name})
|
|
assert response.status_code == 200
|
|
|
|
# Try to create another app with the same name
|
|
response = client.post("/v1/apps", json={"name": name})
|
|
|
|
# Should get a ConflictException with 409 status
|
|
assert response.status_code == 409
|
|
data = response.json()
|
|
assert "detail" in data
|