Alexandre Bodin 4a615f2db4 test: add e2e tooling
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>
2023-07-25 14:20:49 +01:00
..
2023-07-19 13:57:54 +01:00
2023-07-19 13:57:54 +01:00
2023-07-25 14:20:49 +01:00
2023-01-20 18:15:02 +03:00

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
  • plugins
    • ...
    • documentation
      • documentation
        • 1.0.0
          • full_documentation.json

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.