mirror of
https://github.com/directus/directus.git
synced 2026-04-25 03:00:53 -04:00
* items semi complete
* updated items page to use snippet toggler and migrated endpoint docs to use it
* updated files page to use snippet toggler and migrated REST and GraphQL endpoint docs to it
* updated activity page to use snippet toggler and migrated REST and GraphQL endpoint doc to it
* updated collections page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* updated dashboards page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated extensions page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated fields page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated flows page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated folders page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated notifications page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated operations page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated panels page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated permissions page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated presets page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated relations page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated revisions page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated roles page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Made headlines consistant with the rest of the doc pages
* Updated server page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated settings page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated shares page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated translations page to use snippet togglers and migrated REST endpoint docs to them
* Updated users page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated utilities page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated webhooks page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated authentication page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* Updated Global Parameters page to use snippet togglers where there are adjacent REST and GraphQL Examples
* Added SDK code snippets to items page and made generic variables consistant
* Added SDK code snippets to files page and made generic variables consistant
* Few lang changes for files page
* Added SDK code snippets to activity page and made generic variables consistant
* Added SDK code snippets to collections page and made generic variables consistant
* Added SDK code snippets to dashboards page and made generic variables consistant
* removed query word from query parameter objects
* Added SDK code snippets to fields page and made generic variables consistant
* SnippetToggler border
* Used dynamic border color for snippettoggler heading
* Spacing top and bottom of snippet toggler in docs
* Removed extra HRs
* Remove manual TOC in query reference
* Small code styling change in items page
* Updated users page to use snippet togglers and migrated REST and GraphQL endpoint docs to them
* dashboards fixed up property names
* Small copy update on extensions page
* Updated keys in delete mult notifications REST
* Updated keys in operations
* Update keys in panel delete many
* Update keys in permissions
* Added quotes around generic example ID strings
* Added code formatting to final example in share public info
* Format files
* Refined sidebar
* Insert newline before ending template tags
* Fixed extra closing tags, causing an error, un users ref
* Text Formatting Users
* Put GQL related notes inside toggler
* Added SDK code snippets to flows page and made generic variables consistant
* Added SDK code snippets to folder page and made generic variables consistant
* fixing whitepsace for flows and folders page
* Consistent newlines in SnippetToggler usages
* Run prettier
* Fix 'alwaysDark' definition
* Home page snippet toggler style fixes
* Fix snippet toggler lang hover color in light mode
* Introduce different code theme for light mode
* Added SDK code snippets to notifications page and made generic variables consistant
* Switch to 'material-theme-lighter'
* Format file
* Fix tip
* Fix tip in sdk ref
* Consistent spacing for custom containers
* Added SDK code snippets to operations page and made generic variables consistant
* Lint & format code blocks
* Lint & format operations
* Added SDK code snippets to panels page and made generic variables consistant
* Added SDK code snippets to permissions page and made generic variables consistant
* Added SDK code snippets to presets page and made generic variables consistant
* Added SDK code snippets to relations page and made generic variables consistant
* Added SDK code snippets to revisions page and made generic variables consistant
* Added SDK code snippets to roles page and made generic variables consistant
* Added SDK code snippets to server page and made generic variables consistant
* Added SDK code snippets to settings page and made generic variables consistant
* app_url -> directus_project_url
* Omitted auth details in delete multiple files
* Added quotes to values in roles
* Upload a file snippets
* Pluralization for upload/import files
* More files functions typos
* Added SDK code snippets to shares page (still missing createShare(s) as endpoint not functioning currently) and made generic variables consistant
* Added SDK code snippets to translations page (missing delete endponts because not working) and made generic variables consistant
* Added SDK code snippets to users page and made generic variables consistant
* Added SDK code snippets to webhooks page and made generic variables consistant
* Added SDK code snippets to utilites page (except cleaning cache, will be tested and added in later commit) and made generic variables consistant
* Added SDK code snippets to auth page (not login, refresh, and logout though due to errors)
* Added SDK code snippets for utilsExport and clearCache
* added github username be7DOTis to contributors
* Omit auth commands in updateComment
* utilsImport
* rename app_url generic value
* changed instances of updated*operation* to update*Operation*
* missed some 'updated' changse
* Added SDK Snippets to Query Parameters page
* Add section on file security
* added create(s)Shares SDK snippet to shares page
* added console.log to create snippets
* Added delete(s)Webhook SDK snippet to webhooks page
* Added SDK snippets to extensions page
* Added create/updateSingleton section to items page
* Links in files security
* Added SDK Snippets to Schema page
* Added GQL Generic examples to snippet togglers and removed snippet toggler from Login Using SSO Providers
* Added create(s)Presets SDK Snippets to presets page
* replaced fields query in generics snippets for a more generic
* replaced fields query in generics snippets for a more generic
* Use storage value only if valid choice
* Sync snippet togglers across page
* Update docs/reference/system/activity.md
* Update docs/reference/system/activity.md
* Update docs/reference/system/extensions.md
* Update docs/reference/system/revisions.md
* Update docs/reference/system/settings.md
* Update docs/reference/system/revisions.md
* Update docs/reference/system/settings.md
* Update docs/reference/system/activity.md
* Update docs/reference/system/roles.md
* Update docs/reference/system/roles.md
* Update docs/reference/system/roles.md
* Update docs/reference/system/roles.md
* Update docs/reference/system/schema.md
* Update docs/reference/system/server.md
* Update docs/reference/system/shares.md
* Replace all directus_project_url placeholders
* Revert "Sync snippet togglers across page"
This reverts commit 8b36f0d778.
* Update docs/reference/system/shares.md
* Update docs/reference/system/webhooks.md
* Clarify singleton section
* Consistent newlines between SnippetToggler templates
* Format files
* Remove console.log(result) statements from snippet
* Add examples for shares & users
Co-authored-by: Brainslug <tim@brainslug.nl>
* Fix hash GraphQL example
* Clarify update singleton section
* Add auth examples
Co-authored-by: Brainslug <tim@brainslug.nl>
* Final run on consistent newlines between SnippetToggler
* Switch to github themes
* The "Last One"
Co-authored-by: Brainslug <tim@brainslug.nl>
* The "Big One"
* Fix dead links
---------
Co-authored-by: Bevis Halsey-Perry <hi@be7.is>
Co-authored-by: Kevin Lewis <kvn@lws.io>
Co-authored-by: Pascal Jufer <pascal-jufer@bluewin.ch>
Co-authored-by: Brainslug <br41nslug@users.noreply.github.com>
Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
Co-authored-by: Brainslug <tim@brainslug.nl>
182 lines
4.9 KiB
Markdown
182 lines
4.9 KiB
Markdown
# Tests
|
|
|
|
> Tests ensure that the platform continues to work as intended when the existing codebase is modified.
|
|
|
|
The current test strategy for Directus consists of `Blackbox Tests` testing the overall functionality of the platform as
|
|
well as `Unit Tests` testing individual parts of the codebase.
|
|
|
|
## Running Unit Tests
|
|
|
|
Use the following command to perform unit tests in all packages:
|
|
|
|
```bash
|
|
pnpm --workspace-root test
|
|
```
|
|
|
|
Use one of the following commands to perform more specific actions with unit tests (mix and match as desired):
|
|
|
|
```bash
|
|
# Run tests for a specific package (for example only in the API / App package)
|
|
pnpm --filter api test
|
|
pnpm --filter app test
|
|
|
|
# Start tests in watch mode
|
|
pnpm --filter api test -- --watch
|
|
|
|
# Enable coverage report
|
|
pnpm --filter api test -- --coverage
|
|
|
|
# Run specific test files using a filter pattern
|
|
pnpm --filter api test -- app.test.ts
|
|
pnpm --filter api test -- utils
|
|
```
|
|
|
|
::: tip Relative Commands
|
|
|
|
If you are already in a directory of a specific package, you may omit the `--filter` flag in `pnpm` commands since the
|
|
commands will be executed relative to the current directory.
|
|
|
|
```bash
|
|
# Run API tests, from within the "/api" directory
|
|
pnpm test
|
|
```
|
|
|
|
:::
|
|
|
|
## Running Blackbox Tests
|
|
|
|
Install [Docker](https://docs.docker.com/get-docker/) and ensure that the service is up and running.
|
|
|
|
Run the following commands to start the blackbox tests:
|
|
|
|
```bash
|
|
# Ensure that you are testing against the lastest state of the codebase
|
|
pnpm --workspace-root build
|
|
|
|
# Clean up in case you ran the tests before
|
|
pnpm --filter tests-blackbox exec docker compose down --volumes
|
|
# Start the containers required for the tests
|
|
pnpm --filter tests-blackbox exec docker compose up --detach --wait
|
|
|
|
# Run the tests
|
|
pnpm --workspace-root test:blackbox
|
|
```
|
|
|
|
Subsequent test runs can be issued with the following command, if only modifications to the blackbox tests themselves
|
|
have been made:
|
|
|
|
```bash
|
|
pnpm --filter tests-blackbox test
|
|
```
|
|
|
|
### Testing Specific Database Vendors
|
|
|
|
Provide a CSV of database vendors via the `TEST_DB` environment variable to target only a specific subset:
|
|
|
|
```bash
|
|
# Example targeting multiple vendors
|
|
TEST_DB=cockroachdb,postgres pnpm --workspace-root test:blackbox
|
|
|
|
# Example targeting a single vendor
|
|
TEST_DB=sqlite3 pnpm --workspace-root test:blackbox
|
|
```
|
|
|
|
### Using an Existing Directus Instance
|
|
|
|
Normally, the test suite will spin up a fresh copy of the Directus API built from the current state of the codebase. To
|
|
use an already running instance of Directus instead, enable the `TEST_LOCAL` flag:
|
|
|
|
```bash
|
|
TEST_DB=cockroachdb TEST_LOCAL=true pnpm --workspace-root test:blackbox
|
|
```
|
|
|
|
Note: The tests expect the instance running at `localhost:8055`. Make sure to connect the instance to the test database
|
|
container found in the `tests-blackbox/docker-compose.yml` file.
|
|
|
|
## Writing Unit Tests
|
|
|
|
Unit Tests are written throughout the codebase in a vite native unit test framework called [Vitest](https://vitest.dev).
|
|
|
|
### Example
|
|
|
|
```
|
|
/directus/api/src/utils/get-date-formatted.test.ts
|
|
```
|
|
|
|
```ts
|
|
import { afterEach, beforeEach, expect, test, vi } from 'vitest';
|
|
|
|
import { getDateFormatted } from './get-date-formatted.js';
|
|
|
|
beforeEach(() => {
|
|
vi.useFakeTimers();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.useRealTimers();
|
|
});
|
|
|
|
function getUtcDateForString(date: string) {
|
|
const now = new Date(date);
|
|
|
|
// account for timezone difference depending on the machine where this test is ran
|
|
const timezoneOffsetInMinutes = now.getTimezoneOffset();
|
|
const timezoneOffsetInMilliseconds = timezoneOffsetInMinutes * 60 * 1000;
|
|
const nowUTC = new Date(now.valueOf() + timezoneOffsetInMilliseconds);
|
|
|
|
return nowUTC;
|
|
}
|
|
|
|
test.each([
|
|
{ utc: '2023-01-01T01:23:45.678Z', expected: '20230101-12345' },
|
|
{ utc: '2023-01-11T01:23:45.678Z', expected: '20230111-12345' },
|
|
{ utc: '2023-11-01T01:23:45.678Z', expected: '20231101-12345' },
|
|
{ utc: '2023-11-11T12:34:56.789Z', expected: '20231111-123456' },
|
|
{ utc: '2023-06-01T01:23:45.678Z', expected: '20230601-12345' },
|
|
{ utc: '2023-06-11T12:34:56.789Z', expected: '20230611-123456' },
|
|
])('should format $utc into "$expected"', ({ utc, expected }) => {
|
|
const nowUTC = getUtcDateForString(utc);
|
|
|
|
vi.setSystemTime(nowUTC);
|
|
|
|
expect(getDateFormatted()).toBe(expected);
|
|
});
|
|
```
|
|
|
|
## Writing Blackbox Tests
|
|
|
|
### Example
|
|
|
|
```
|
|
/directus/tests/blackbox/routes/server/ping.test.ts
|
|
```
|
|
|
|
```ts
|
|
import { getUrl } from '@common/config';
|
|
import request from 'supertest';
|
|
import vendors from '@common/get-dbs-to-test';
|
|
import { requestGraphQL } from '@common/transport';
|
|
|
|
describe('/server', () => {
|
|
describe('GET /ping', () => {
|
|
it.each(vendors)('%s', async (vendor) => {
|
|
// Action
|
|
const response = await request(getUrl(vendor))
|
|
.get('/server/ping')
|
|
.expect('Content-Type', /text\/html/)
|
|
.expect(200);
|
|
|
|
const gqlResponse = await requestGraphQL(getUrl(vendor), true, null, {
|
|
query: {
|
|
server_ping: true,
|
|
},
|
|
});
|
|
|
|
// Assert
|
|
expect(response.text).toBe('pong');
|
|
expect(gqlResponse.body.data.server_ping).toBe('pong');
|
|
});
|
|
});
|
|
});
|
|
```
|