
Remove old cypress related files Update config and reorg tests Run test app before running playwright tests feat: add beginning of authentication test feat: add app template with database dumping ability chore: pr amends Run test app before running playwright tests feat: add beginning of authentication test feat: add app template with database dumping ability chore: pr amends init deits fix: e2e test chore: rename to e2e chore: commit tar for data Init playwright Run test app before running playwright tests feat: add beginning of authentication test feat: add app template with database dumping ability chore: pr amends chore: remove unneeded workflow fix: add private: true to the template so `test-apps` aren't published docs: add docs chore: add warning about DTS caveats chore: tweak docs docs(e2e): add correct route to api example for template chore: fix package.json tests chore: update from feature/DEITS chore: updates from DTS chore: update data-transfer Update yarn.lock fix: remove duplicate type chore(e2e): set up folder structure fix(e2e): avoid clearing 'admin_' DB tables through DTS or DB Dump feat(e2e): DTS scripts and backup files add route to change rate limit fix wront appPath for API test in CI no template by default when creating a test app Fix typo double equal fix template path for e2e tests chore(e2e): fix broken signup spec feat(e2e): basic logout test spec Login e2e tests globalSetup attempt use withAdmin backup cleanup fix playwright config & rate limit test remove example.spec.js refactor and merge some login tests Chore: Cleanup login and signup specs feat(e2e): sign up password error cases feat(e2e): add homepage expectation to signup spec refactor(e2e) refactor(e2e): signUp refactor(e2e): use global login util for logout and logins specs Init playwright fix: remove duplicate type chore: uncomment transfer route registering Update yarn.lock chore: update data-transfer chore: updates from DTS chore: update from feature/DEITS chore: fix package.json tests docs(e2e): add correct route to api example for template chore: tweak docs chore: add warning about DTS caveats docs: add docs fix: add private: true to the template so `test-apps` aren't published chore: remove unneeded workflow chore: pr amends feat: add app template with database dumping ability feat: add beginning of authentication test Run test app before running playwright tests Init playwright chore: commit tar for data chore: rename to e2e fix: e2e test init deits chore: pr amends feat: add app template with database dumping ability feat: add beginning of authentication test Run test app before running playwright tests chore: pr amends feat: add app template with database dumping ability feat: add beginning of authentication test Run test app before running playwright tests Update config and reorg tests Remove old cypress related files chore(e2e): cleanup e2e dir chore(docs): improve e2e testing documentation chore(docs): PR feedback chore: tweak action to run browsers in matrix & build packages chore: fix tests based on merge chore: shuffle e2e tests and add first conent-type fix: tests Make use of yarn linking for api & e2e tests Chore: Fix running backend unit tests Chore: Bring opts.run back Chore: Update playwright Chore: Update Playwright setup fix: workflow chore: fix path to package.json chore: build ts projects before tests chore: update e2e workflow chore: add no-immutable Use simpler transfer token to avoid misinterpretation Remove console.log Ensure that the custom transfer token exists in the e2e test app's database upon startup Use the custom transfer token for transferring data to the e2e test app Fix code analysis warning Define and export a constant for the custom transfer token Allow passing a custom access key for the transfer token service chore: add test-apps to workspace chore: update lockfile Co-Authored-By: Josh <37798644+joshuaellis@users.noreply.github.com> Co-Authored-By: Gustav Hansen <gu@stav.dev> Co-Authored-By: Alexandre BODIN <alexandrebodin@users.noreply.github.com> Co-Authored-By: Jean-Sébastien Herbaux <25851739+Convly@users.noreply.github.com>
Plugin documentation
This plugin automates your API documentation creation. It basically generates a swagger file. It follows the Open API specification version 3.0.1.
Usage
- Config
- Creating a new documentation version
- Generated files
- full_documentation.json structure
- Overriding the suggested documentation
- FAQ
- How does it generate the others plugins documentation ?
- I have created a route into a common API (like product) that query another model. How to automate this?
- TODO
Config
Create a settings.json
file located in src/extensions/documentation/config
folder where you can specify all your environment variables, licenses, external documentation and so one...
You can add all the entries listed in the specification.
NOTE if you need to add a custom key you can do it by prefixing your key by x-{something}
Creating a new documentation version
In order to create a new version you need to change the info.version
key in the settings.json
file.
This will automatically create a new version.
Generated files
When you start your server with this plugin installed it will automatically create the following files in your APIs (we will see how it works for the plugins).
- api
- my-api
- documentation
- documentationVersion // 1.0.0
- my-api.json // File containing all the identified path
- unclassified.json // File containing the manually added paths
- overrides // Folder to override the generated documentation
- documentationVersion // 1.0.0
- documentation
- my-api
- plugins
- ...
- documentation
- documentation
- 1.0.0
- full_documentation.json
- 1.0.0
- documentation
full_documentation.json
The combined documentation is merged into the full_documentation.json
file and it's located in src/extensions/documentation/documentation/{version}/full_documentation.json
It has the following structure
{
"openapi": "3.0.0", // do not change this version
"info": {
"version": "1.0.0" // change this line to create a new version
...
},
"x-strapi-config": {
"path": "/documentation", // Change this line to change to url of the doc
"showGeneratedFiles": true // Do not change this line at the moment...
},
"servers": {}, // Your servers config (it will be automated)
"externalDocs": {},
"paths": {}, // All your Api routes
"tags": [], // Group of route
"components": {} // Default generated components and custom ones
}
Overriding the suggested documentation
Currently the plugin writes a json file for each API.
In order to customize the responses or to add information to a path you need to create a file in the associated overrides/<file-name>.json
(the name of the file matters so make sure they are similar). Then you just need to identify the path you want to modify.
You can modify the default generated tags by adding a new one at the end of the file. Same for the components.
NOTE 1
Overriding the full_documentation.json
is a bad idea since it will be regenerated each time you change a model.
NOTE 2
You can modify the tags
, paths
, and components
keys on the generated documentation by providing replacement values. You can see how the API is used in the users-permissions plugin: packages/plugins/users-permissions/server/register.js
FAQ
How does it generate the others plugins documentation ?
In other to reference a plugin's route into the documentation you need to add a description
key in the config
object.
For example this is the plugin email routes.json file
{
"routes": [
{
"method": "POST",
"path": "/",
"handler": "Email.send",
"config": {
"policies": [],
"description": "Send an email",
"tag": {
"plugin": "email",
"name": "Email"
}
}
},
{
"method": "GET",
"path": "/environments",
"handler": "Email.getEnvironments",
"config": {
"policies": []
}
},
{
"method": "GET",
"path": "/settings/:environment",
"handler": "Email.getSettings",
"config": {
"policies": []
}
},
{
"method": "PUT",
"path": "/settings/:environment",
"handler": "Email.updateSettings",
"config": {
"policies": []
}
}
]
}
In this file we have only one route that we want to reference in our documentation (/
). Usually, the tag object is used for the SWAGGER UI, it will group this route under the Email - Email
dropdown in the documentation. Furthermore, the algorithm will try to find the model to generate the best response possible. If the model is unknown it generates a response like the following { foo: "string" }
that you can easily override later.
There's another property to guide the algorithm to create the best response possible, the actionType
key.
When we can't know by the controller name the type of the returned response (like find
and findOne
) you can specify it with this key. There's an example in ./plugins/users-permissions/config/routes.json
.
I have created a route in a common API (like product) that query another model. How to automate this ?
You can use the tag
key in your route. If you provide a tag
which is a string like "tag": "Product"
the algorithm will know that the end-point retrieves data from the Product
table. Creating a tag object { "tag": { "name": "User", "plugin": "User-Permissions } }
will result in generating a response with the User
model from the plugin users-permissions.
Each entry of the object is easily customisable take look at the users-permissions ones they are a good example on how to do it.