48 lines
2.5 KiB
Gherkin
48 lines
2.5 KiB
Gherkin
Feature: POST /v1/article/{id}/image is a thin alias that creates a library image
|
|
|
|
As the current editor, until the editor slice moves it to /v1/media
|
|
I want to keep uploading through the article route and get {id, location} back
|
|
So that the editor keeps working while images are library assets
|
|
|
|
Background:
|
|
Given the route stays in the article router's jwtauth group with RequireCurrentToken and
|
|
RequireVerifiedUser, and is marked for removal in the editor slice
|
|
And the handler calls GetArticleUseCase first, so an unknown article is 404
|
|
apperr.ArticleNotFoundErrorMessage and nothing is created
|
|
And it then calls the same CreateImageUseCase as POST /v1/media/, with UploadedByID from the
|
|
jwt user_id claim, attaches nothing to the article, and answers 201 {"id", "location"}
|
|
where location is the image's url
|
|
And type, size and unreadable errors map as on /v1/media/: 415, 413, 400
|
|
And DELETE /v1/article/{id}/image/{imageId} is not mounted
|
|
|
|
Scenario: Uploading through the alias creates a library image
|
|
Given a valid jwt cookie for user 1 and article 1 "Backyard Renovation Update"
|
|
When the client sends POST /v1/article/1/image with a real PNG named "before.png"
|
|
Then the response status is 201
|
|
And the body has "id" equal to the new image's id and "location" equal to its url
|
|
And GET /v1/media/ lists the image with uploaded_by of user 1
|
|
And article 1 is unchanged
|
|
|
|
Scenario: An unknown article is 404 and creates no image
|
|
When the client sends POST /v1/article/9999/image with a valid PNG
|
|
Then the response status is 404 and the body is "Article not found"
|
|
And the image repository's Create is never called
|
|
|
|
Scenario Outline: Rejected files use the media status codes
|
|
When the client sends POST /v1/article/1/image with <file>
|
|
Then the response status is <status> and Create is never called
|
|
|
|
Examples:
|
|
| file | status |
|
|
| "notes.pdf" as application/pdf | 415 |
|
|
| a valid PNG padded to 10485761 bytes | 413 |
|
|
| "broken.png" as image/png with text bytes | 400 |
|
|
|
|
Scenario: The alias still requires authentication
|
|
When the client sends POST /v1/article/1/image with no cookie
|
|
Then the response status is 401 and Create is never called
|
|
|
|
Scenario: The removed delete route is gone
|
|
When the client sends DELETE /v1/article/1/image/10 with a valid cookie
|
|
Then the response status is 405 and image 10 still exists
|