Phase 12 - Bruno API Tests Standardization Convert all custom section builder tests to .yml format: - preview-collection.bru → preview-collection.yml - create-custom-section-manual.bru → create-custom-section-manual.yml - create-custom-section-missing-fields.bru → create-custom-section-missing-fields.yml - create-custom-section-rules.bru → create-custom-section-rules.yml All Bruno tests now consistently use .yml extension across the project. Tests cover: - Preview collection with filter rules - Create collection with manual book selection - Validation of required fields - Multiple filter rules with operators Part of Carousel Dashboard Plan completion
65 lines
2.4 KiB
YAML
65 lines
2.4 KiB
YAML
meta:
|
|
name: Create Custom Section with Filter Rules
|
|
type: http
|
|
seq: 1
|
|
http:
|
|
method: POST
|
|
url: '{{base_url}}/api/collections'
|
|
auth: inherit
|
|
body:
|
|
type: json
|
|
jsonBody: "{\n \"library_id\": \"{{library_id}}\",\n \"name\": \"Science Fiction\
|
|
\ Books\",\n \"icon\": \"🚀\",\n \"description\": \"All my sci-fi books\",\n\
|
|
\ \"show_on_dashboard\": true,\n \"auto_assign_rules\": \"{\\\"rules\\\":[{\\\
|
|
\"id\\\":\\\"rule1\\\",\\\"field\\\":\\\"genre\\\",\\\"operator\\\":\\\"equals\\\"\
|
|
,\\\"value\\\":\\\"Sci-Fi\\\",\\\"priority\\\":1}]}\",\n \"manual_book_ids\"\
|
|
: [],\n \"match_type\": \"all\"\n}"
|
|
runtime:
|
|
scripts:
|
|
- type: tests
|
|
code: "test(\"status must be 201 with valid request\", function() {\n expect(res.status).to.eql(201);\n\
|
|
});\n\ntest(\"response contains collection id\", function() {\n expect(res.body.id).to.exist;\n\
|
|
expect(res.body.id).to.be.a('string');\n });\n\ntest(\"response contains\
|
|
\ collection name\", function() {\n expect(res.body.name).to.eql(\"Science\
|
|
\ Fiction Books\");\n });\n\ntest(\"response contains is_system false\", function()\
|
|
\ {\n expect(res.body.is_system).to.exist;\n expect(res.body.is_system).to.eql(false);\n\
|
|
\ });"
|
|
|
|
docs: |-
|
|
Create a custom collection with filter rules.
|
|
|
|
**Endpoint**: POST /api/collections
|
|
**Auth**: Required (Bearer token)
|
|
|
|
## Request Body
|
|
|
|
| Field | Type | Required | Description |
|
|
|-------|------|----------|-------------|
|
|
| library_id | string | Yes | Library UUID |
|
|
| name | string | Yes | Collection name |
|
|
| icon | string | No | Emoji icon |
|
|
| description | string | No | Collection description |
|
|
| show_on_dashboard | boolean | No | Show on dashboard (default: true) |
|
|
| auto_assign_rules | string | No | JSON string of filter rules |
|
|
| manual_book_ids | array | No | Array of book IDs |
|
|
| match_type | string | No | "all" (AND) or "any" (OR) |
|
|
|
|
## Example Request
|
|
|
|
```json
|
|
{
|
|
"library_id": "cc23c3a7-f8fb-451a-a78d-2a16df1b725a",
|
|
"name": "Science Fiction Books",
|
|
"icon": "🚀",
|
|
"description": "All my sci-fi books",
|
|
"show_on_dashboard": true,
|
|
"auto_assign_rules": "{\"rules\":[{\"id\":\"rule1\",\"field\":\"genre\",\"operator\":\"equals\",\"value\":\"Sci-Fi\",\"priority\":1}]}",
|
|
"manual_book_ids": [],
|
|
"match_type": "all"
|
|
}
|
|
```
|
|
|
|
## Response
|
|
|
|
Returns the created collection with generated ID.
|