Files
RenewCMS/features/article_body_unlimited.feature
T

125 lines
7.2 KiB
Gherkin

Feature: Article bodies have no length limit and the body is optional
As a verified RenewCMS owner
I want to create an article with only a title and write articles of any length
So that starting a draft is one field and long articles are never blocked
Background:
Given POST /v1/article/ and PATCH /v1/article/{id} sit inside the jwt-protected group
And the request structs PostArticle and UpdateArticleBody validate through validator.Validate.Struct
And PostArticle.Title keeps validate "required,min=3,max=200"
And PostArticle.Body and UpdateArticleBody.Body carry no validate tag: no max, no required
And a body is stored and returned as given; an absent "body" key is treated as ""
And success bodies are the article JSON (id, title, body, body_format, is_online, created_at, updated_at)
And a new article is created offline (is_online false)
Scenario Outline: Create with only a title succeeds in every body format
Given a valid jwt cookie for a verified user
When the client sends POST /v1/article/<query> with JSON <payload>
Then the status is 201
And the response JSON has title "Choosing tiles for a small bathroom", is_online false, body_format "<format>" and body <rendered>
And the fake article repository holds one article with Body ""
Examples:
| query | payload | format | rendered |
| | {"title": "Choosing tiles for a small bathroom"} | markdown | "" |
| ?format=html | {"title": "Choosing tiles for a small bathroom"} | html | "" |
| ?format=json | {"title": "Choosing tiles for a small bathroom"} | json | [] |
| | {"title": "Choosing tiles for a small bathroom", "body": ""} | markdown | "" |
Scenario: A body of 120,000 characters is accepted on create
Given a valid jwt cookie for a verified user
When the client sends POST /v1/article/ with a title of 3 characters or more and a body of 120000 characters
Then the status is 201
And the repository holds the full 120000-character body, unmodified
Scenario Outline: Update the body with no length limit
Given an article with id 12 exists
And a valid jwt cookie for a verified user
When the client sends PATCH /v1/article/12 with a body of <length> characters
Then the status is 200
And the repository body for article 12 has <length> characters
Examples:
| length |
| 10001 |
| 120000 |
Scenario: Update the body to empty
Given an article with id 12 exists with a non-empty body
When the client sends PATCH /v1/article/12 with JSON {"body": ""}
Then the status is 200 and the repository body is ""
And GET /v1/article/12?format=json returns body []
Scenario Outline: Title rules are unchanged
Given a valid jwt cookie for a verified user
When the client sends POST /v1/article/ with JSON <payload>
Then the status is 400, the response is plain text from http.Error, and no article is created
Examples:
| payload |
| {"body": "Hello"} |
| {"title": "Ti", "body": "Hello"} |
| {"title": "<201 characters>"} |
Scenario: Existing guards on PATCH are unchanged
When PATCH /v1/article/abc is sent
Then the status is 400 with the uint32 id error text
When PATCH /v1/article/999 is sent and no such article exists
Then the status is 404 with the article-not-found text
When PATCH /v1/article/12 is sent with malformed JSON
Then the status is 400 with apperr.BodyErrorMessage
Scenario: The SPA no longer limits or counts the body
Given the Vue SPA
Then the constant BODY_MAX_LENGTH no longer exists
And the CharacterCounter component stays (ProfileView and CreateApiKeyModal still use it) but EditorView and NewArticleModal no longer import it
And the editor has no "Near the limit" or "Too long" state
Scenario: Editor status bar shows a neutral count
Given the editor is open on /article/12/edit with a loaded article whose body has 1204 words and 7318 characters
Then the EditorStatusBar reads "1,204 words · 7,318 characters"
And the count updates as the body changes
And a new empty article reads "0 words · 0 characters"
And the count carries no warning, error colour or icon at any length
Scenario: Editor states at 120,000 characters
Given the editor holds an article body of 120000 characters (19,845 words)
Then the count reads "19,845 words · 120,000 characters", neutral
When the body is edited
Then the state is Unsaved changes, and Save and Publish ("Save and publish") are enabled
When the user saves and PATCH /v1/article/12 is pending
Then the status shows the spinner with "Saving 120,000 characters. This can take a few seconds.", Save is disabled and the page stays editable
When PATCH resolves 200
Then the status reads Saved with the time and the count is unchanged
When PATCH instead resolves 500, 413 or a network failure
Then the editor shows "Couldn't save. Your text is kept. Retry." and the body is unchanged
And Retry resends the same content
Scenario: NewArticleModal is title-only
Given NewArticleModal is open
Then it shows the Title field with its "0 / 200" counter and "3 to 200 characters." help, "Cancel" and "Create draft"
And there is no First paragraph field
When the user submits a valid title
Then POST /v1/article/ is sent with JSON {"title": "<title>"} (no body key)
Scenario Outline: NewArticleModal states
Given NewArticleModal is open with Title "<title>"
When <trigger>
Then <outcome>
Examples:
| title | trigger | outcome |
| | it opens | Default (empty): Title focused, counter "0 / 200" |
| Ti | the field blurs or Create draft is pressed | Validation: "Use at least 3 characters.", counter in error style, no request |
| Choosing tiles for a small bathroom | Create draft is pressed | Submitting: "Creating…", Title and buttons disabled, not dismissible |
| Choosing tiles for a small bathroom | POST resolves 201 (id 42) | modal closes, navigates to /article/42/edit, toast "Draft created" id "article-created-42" |
| Choosing tiles for a small bathroom | POST resolves 400 | Title rejected: "Check this title and try again." and alert "Something in the form isn't valid. Check the highlighted fields." |
| Choosing tiles for a small bathroom | POST resolves 500 or never reaches server | Error: alert "Couldn't create the article. Your text is still here. Try again in a moment." |
Scenario: Integration API reference no longer says max 10000
Given the Integration screen's request-body tables for POST /v1/article/ and PATCH /v1/article/{id}
Then POST lists: title string required 3-200; body string optional, no length limit
And PATCH lists: body string optional, no length limit
And no text on the screen contains "max 10000"