162 lines
7.3 KiB
Plaintext
162 lines
7.3 KiB
Plaintext
# =============================================================
|
||
# OxiCloud – Favorites API end-to-end scenario
|
||
# =============================================================
|
||
# Depends on files-folders.hurl having run first:
|
||
# - home folder exists with sub-folders test1 and test2-renamed
|
||
# - test2-renamed contains hello-renamed.txt
|
||
#
|
||
# Run:
|
||
# hurl --variables-file tests/api/test.env --test tests/api/favorites.hurl
|
||
# =============================================================
|
||
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Step 1 – Login and capture the JWT token
|
||
# ─────────────────────────────────────────────────────────────
|
||
POST {{base_url}}/api/auth/login
|
||
Content-Type: application/json
|
||
{
|
||
"username": "{{username}}",
|
||
"password": "{{password}}"
|
||
}
|
||
|
||
HTTP 200
|
||
[Captures]
|
||
token: jsonpath "$.access_token"
|
||
[Asserts]
|
||
jsonpath "$.access_token" isString
|
||
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Step 2 – No favorites yet
|
||
# ─────────────────────────────────────────────────────────────
|
||
GET {{base_url}}/api/favorites/resources
|
||
Authorization: Bearer {{token}}
|
||
|
||
HTTP 200
|
||
[Asserts]
|
||
jsonpath "$.items" isCollection
|
||
jsonpath "$.items" count == 0
|
||
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Step 3 – Discover item IDs from the folder structure
|
||
# Folders are ORDER BY name: test1 ($[0]), test2-renamed ($[1])
|
||
# ─────────────────────────────────────────────────────────────
|
||
GET {{base_url}}/api/folders
|
||
Authorization: Bearer {{token}}
|
||
|
||
HTTP 200
|
||
[Captures]
|
||
home_folder_id: jsonpath "$[0].id"
|
||
|
||
|
||
GET {{base_url}}/api/folders/{{home_folder_id}}/resources?resource_types=folder
|
||
Authorization: Bearer {{token}}
|
||
|
||
HTTP 200
|
||
[Captures]
|
||
test1_id: jsonpath "$.items[0].resource.id"
|
||
test2_id: jsonpath "$.items[1].resource.id"
|
||
[Asserts]
|
||
jsonpath "$.items[0].resource.name" == "test1"
|
||
jsonpath "$.items[1].resource.name" == "test2-renamed"
|
||
|
||
|
||
GET {{base_url}}/api/files?folder_id={{test2_id}}
|
||
Authorization: Bearer {{token}}
|
||
|
||
HTTP 200
|
||
[Captures]
|
||
file_id: jsonpath "$[0].id"
|
||
[Asserts]
|
||
jsonpath "$[0].name" == "hello-renamed.txt"
|
||
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Step 4 – Add hello-renamed.txt to favorites
|
||
# ─────────────────────────────────────────────────────────────
|
||
POST {{base_url}}/api/favorites/file/{{file_id}}
|
||
Authorization: Bearer {{token}}
|
||
|
||
HTTP 201
|
||
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Step 5 – Favorites contains only hello-renamed.txt
|
||
# ─────────────────────────────────────────────────────────────
|
||
GET {{base_url}}/api/favorites/resources
|
||
Authorization: Bearer {{token}}
|
||
|
||
HTTP 200
|
||
[Asserts]
|
||
jsonpath "$.items" count == 1
|
||
jsonpath "$.items[0].resource.id" == {{file_id}}
|
||
jsonpath "$.items[0].resource_type" == "file"
|
||
jsonpath "$.items[0].resource.name" == "hello-renamed.txt"
|
||
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Step 6 – Add test1 folder to favorites
|
||
# ─────────────────────────────────────────────────────────────
|
||
POST {{base_url}}/api/favorites/folder/{{test1_id}}
|
||
Authorization: Bearer {{token}}
|
||
|
||
HTTP 201
|
||
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Step 7 – Favorites contains both items (order-independent)
|
||
# ─────────────────────────────────────────────────────────────
|
||
GET {{base_url}}/api/favorites/resources
|
||
Authorization: Bearer {{token}}
|
||
|
||
HTTP 200
|
||
[Asserts]
|
||
jsonpath "$.items" count == 2
|
||
jsonpath "$.items[*].resource.id" contains {{file_id}}
|
||
jsonpath "$.items[*].resource.id" contains {{test1_id}}
|
||
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Step 8 – Remove hello-renamed.txt from favorites
|
||
# ─────────────────────────────────────────────────────────────
|
||
DELETE {{base_url}}/api/favorites/file/{{file_id}}
|
||
Authorization: Bearer {{token}}
|
||
|
||
HTTP 200
|
||
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Step 9 – Favorites contains only test1 folder
|
||
# ─────────────────────────────────────────────────────────────
|
||
GET {{base_url}}/api/favorites/resources
|
||
Authorization: Bearer {{token}}
|
||
|
||
HTTP 200
|
||
[Asserts]
|
||
jsonpath "$.items" count == 1
|
||
jsonpath "$.items[0].resource.id" == {{test1_id}}
|
||
jsonpath "$.items[0].resource_type" == "folder"
|
||
jsonpath "$.items[0].resource.name" == "test1"
|
||
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Step 10 – Cleanup: remove test1 from favorites
|
||
# ─────────────────────────────────────────────────────────────
|
||
DELETE {{base_url}}/api/favorites/folder/{{test1_id}}
|
||
Authorization: Bearer {{token}}
|
||
|
||
HTTP 200
|
||
|
||
|
||
# ─────────────────────────────────────────────────────────────
|
||
# Step 11 – Favorites is empty again
|
||
# ─────────────────────────────────────────────────────────────
|
||
GET {{base_url}}/api/favorites/resources
|
||
Authorization: Bearer {{token}}
|
||
|
||
HTTP 200
|
||
[Asserts]
|
||
jsonpath "$.items" count == 0
|