feat: updated integration page with missing API routes
This commit is contained in:
1 parent
25d9c30b8a
commit
7c0ee21906
25 files changed
+2402
-350
No files matched your search
@@ -950,8 +950,8 @@ export const messages = {
|
||||
'API reference': 'Référence de l’API',
|
||||
'Everything a developer needs to build on RenewCMS.':
|
||||
'Tout ce dont une personne développeuse a besoin pour construire sur RenewCMS.',
|
||||
'RenewCMS is headless: it stores your content and your own code displays it. There are two ways in. Public read-only access lets a website read online articles. API keys let a script or service manage articles, media and users without the back-office.':
|
||||
'RenewCMS est headless : il stocke votre contenu et votre propre code l’affiche. Il y a deux façons d’y accéder. L’accès public en lecture seule permet à un site de lire les articles publiés. Les clés d’API permettent à un script ou à un service de gérer les articles, les médias et les utilisateurs sans le back-office.',
|
||||
'RenewCMS is headless: it stores your content and your own code displays it. There are two ways in. Public read-only access lets a website read online articles. API keys let a script or service manage articles, media and users, and manage content types and entries, without the back-office.':
|
||||
'RenewCMS est headless : il stocke votre contenu et votre propre code l’affiche. Il y a deux façons d’y accéder. L’accès public en lecture seule permet à un site de lire les articles publiés. Les clés d’API permettent à un script ou à un service de gérer les articles, les médias et les utilisateurs, ainsi que les types de contenu et les entrées, sans le back-office.',
|
||||
'No key': 'Sans clé',
|
||||
'No key needed. Two read-only routes, and only online articles are returned.':
|
||||
'Aucune clé nécessaire. Deux routes en lecture seule, et seuls les articles publiés sont renvoyés.',
|
||||
@@ -961,8 +961,8 @@ export const messages = {
|
||||
'Envoyez `Authorization: Bearer rcms_…`. Les requêtes agissent comme la personne qui a créé la clé, avec son rôle (propriétaire ou administrateur). Une clé n’a jamais plus de droits que son créateur.',
|
||||
'Keys start with `rcms_` and are shown in full once, when you create them.':
|
||||
'Les clés commencent par `rcms_` et ne sont affichées en entier qu’une fois, à leur création.',
|
||||
'A key can\'t create, list or revoke API keys, verify or cancel a registration, or call anything under `/v1/system`. Those routes answer 403 "This action needs a real session." An invalid, unknown, expired or revoked key answers 401, even on public routes, and so does a key whose user was deleted or unverified.':
|
||||
'Une clé ne peut pas créer, lister ni révoquer de clés d’API, vérifier ou annuler une inscription, ni appeler quoi que ce soit sous `/v1/system`. Ces routes répondent 403 « This action needs a real session. » Une clé invalide, inconnue, expirée ou révoquée reçoit 401, même sur les routes publiques, tout comme une clé dont l’utilisateur a été supprimé ou n’est pas vérifié.',
|
||||
'A key can\'t create, list or revoke API keys, verify or cancel a registration, or call anything under `/v1/system`. Those routes answer 403 "This action needs a real session." An invalid, unknown, expired or revoked key answers 401, even on public routes, and so does a key whose user was deleted or unverified. Owner and admin routes answer 403 to a key whose creator is neither.':
|
||||
'Une clé ne peut pas créer, lister ni révoquer de clés d’API, vérifier ou annuler une inscription, ni appeler quoi que ce soit sous `/v1/system`. Ces routes répondent 403 « This action needs a real session. » Une clé invalide, inconnue, expirée ou révoquée reçoit 401, même sur les routes publiques, tout comme une clé dont l’utilisateur a été supprimé ou n’est pas vérifié. Les routes propriétaire et administrateur répondent 403 à une clé dont le créateur n’est ni l’un ni l’autre.',
|
||||
'Each key can make 120 requests per minute. Beyond that the API answers 429 with a `Retry-After` header.':
|
||||
'Chaque clé peut faire 120 requêtes par minute. Au-delà, l’API répond 429 avec un en-tête `Retry-After`.',
|
||||
'Every error is a plain-text body with a single sentence. The status code is in the HTTP status line, and the Content-Type is text/plain.':
|
||||
@@ -2741,6 +2741,96 @@ export const messages = {
|
||||
'Status codes and messages': 'Codes d’état et messages',
|
||||
'Images, CORS and ?format=': 'Images, CORS et ?format=',
|
||||
'{0} routes, not available to API keys': '{0} routes, indisponibles avec une clé API',
|
||||
'Define your own kind of content, like events or recipes. An owner or admin creates a type made of 1 to 50 ordered fields; the type then has its own entry routes.':
|
||||
'Définissez votre propre type de contenu, comme des événements ou des recettes. Un propriétaire ou un administrateur crée un type composé de 1 à 50 champs ordonnés ; le type a alors ses propres routes d’entrées.',
|
||||
'A content type has a `key` (2 to 40 lowercase letters, digits or hyphens, chosen at creation and never changed) and fields. Each field has a `key` (letters, digits and underscores, starting with a letter), a `label`, a `type` and rules.':
|
||||
'Un type de contenu a une `key` (2 à 40 lettres minuscules, chiffres ou tirets, choisie à la création et jamais modifiée) et des champs. Chaque champ a une `key` (lettres, chiffres et tirets bas, commençant par une lettre), un `label`, un `type` et des règles.',
|
||||
'Field object': 'Objet champ',
|
||||
string: 'chaîne',
|
||||
'min/max = length in characters. Can be unique.':
|
||||
'min/max = longueur en caractères. Peut être unique.',
|
||||
'string (Markdown)': 'chaîne (Markdown)',
|
||||
'min/max = length. Cannot be unique.': 'min/max = longueur. Ne peut pas être unique.',
|
||||
number: 'nombre',
|
||||
'min/max = value. Can be unique.': 'min/max = valeur. Peut être unique.',
|
||||
'true/false': 'true/false',
|
||||
'No min/max. Cannot be unique.': 'Pas de min/max. Ne peut pas être unique.',
|
||||
'string "YYYY-MM-DD"': 'chaîne « AAAA-MM-JJ »',
|
||||
'min/max = earliest/latest date. Can be unique.':
|
||||
'min/max = date la plus ancienne/la plus récente. Peut être unique.',
|
||||
'one string from `options` (1 to 50 choices)': 'une chaîne parmi `options` (1 à 50 choix)',
|
||||
'Can be unique.': 'Peut être unique.',
|
||||
'the numeric id of an uploaded image (see Media)':
|
||||
'l’identifiant numérique d’une image envoyée (voir Médias)',
|
||||
'ids of entries of another content type; `relation: { content_type, kind }`, kind one_to_one | one_to_many | many_to_many':
|
||||
'identifiants d’entrées d’un autre type de contenu ; `relation: { content_type, kind }`, kind valant one_to_one | one_to_many | many_to_many',
|
||||
'List all custom content types.': 'Liste tous les types de contenu personnalisés.',
|
||||
'Get one content type with its fields.': 'Renvoie un type de contenu avec ses champs.',
|
||||
'Create a content type.': 'Crée un type de contenu.',
|
||||
"2 to 40 characters. Lowercase letters, digits and hyphens. Can't be changed later.":
|
||||
'2 à 40 caractères. Lettres minuscules, chiffres et tirets. Ne peut pas être modifiée ensuite.',
|
||||
'Up to 100 characters.': 'Jusqu’à 100 caractères.',
|
||||
'Optional.': 'Facultatif.',
|
||||
'1 to 50 fields, in order. See Field types.':
|
||||
'1 à 50 champs, dans l’ordre. Voir Types de champ.',
|
||||
"Replace the name, icon and fields of a type. The key never changes. Saved field keys and types can't change.":
|
||||
'Remplace le nom, l’icône et les champs d’un type. La clé ne change jamais. Les clés et types des champs enregistrés ne peuvent pas changer.',
|
||||
"Some existing entries don't fit the new fields. Nothing was changed.":
|
||||
'Certaines entrées existantes ne conviennent pas aux nouveaux champs. Rien n’a été modifié.',
|
||||
'Delete a content type. Only possible when it has no entries and no relation field points at it.':
|
||||
'Supprime un type de contenu. Possible seulement s’il n’a aucune entrée et si aucun champ de relation ne pointe vers lui.',
|
||||
'Read and write the content of a custom type. Any verified user can write entries.':
|
||||
'Lisez et écrivez le contenu d’un type personnalisé. Tout utilisateur vérifié peut écrire des entrées.',
|
||||
"An entry's `data` is an object keyed by field key, validated against the type. Responses add `media` (the resolved images for media fields, keyed by field key: id, filename, width, height, size and thumbnail_url, or { id, missing: true } if the image was deleted) and `relations` (the resolved first field of related entries).":
|
||||
'Les `data` d’une entrée forment un objet indexé par clé de champ, validé selon le type. Les réponses ajoutent `media` (les images résolues des champs média, indexées par clé de champ : id, filename, width, height, size et thumbnail_url, ou { id, missing: true } si l’image a été supprimée) et `relations` (le premier champ résolu des entrées liées).',
|
||||
'List entries of a type, one page at a time. The response is an object with items, total, page and size, not a bare array like articles.':
|
||||
'Liste les entrées d’un type, une page à la fois. La réponse est un objet avec items, total, page et size, et non un tableau simple comme pour les articles.',
|
||||
'id, created_at or updated_at, then :asc or :desc. For example updated_at:desc.':
|
||||
'id, created_at ou updated_at, puis :asc ou :desc. Par exemple updated_at:desc.',
|
||||
'Create an entry.': 'Crée une entrée.',
|
||||
"Keys are the type's field keys. For events: title, starts_on, capacity, online, category and cover.":
|
||||
'Les clés sont les clés de champ du type. Pour les événements : title, starts_on, capacity, online, category et cover.',
|
||||
'Get one entry.': 'Renvoie une entrée.',
|
||||
'Replace the data of an entry.': 'Remplace les données d’une entrée.',
|
||||
'Delete an entry.': 'Supprime une entrée.',
|
||||
'Built-in types': 'Types intégrés',
|
||||
'The fields of Articles, Authors, Sites, Media and Users, in the same shape as the fields of a content type.':
|
||||
'Les champs des articles, auteurs, sites, médias et utilisateurs, dans la même forme que les champs d’un type de contenu.',
|
||||
'Built-in types are read-only: they cannot be changed through the API.':
|
||||
'Les types intégrés sont en lecture seule : ils ne peuvent pas être modifiés par l’API.',
|
||||
'List the built-in types (Articles, Authors, Sites, Media, Users) and their fields. Keys are article, author, site, media and user.':
|
||||
'Liste les types intégrés (articles, auteurs, sites, médias, utilisateurs) et leurs champs. Les clés sont article, author, site, media et user.',
|
||||
'Get one built-in type. Keys are article, author, site, media and user.':
|
||||
'Renvoie un type intégré. Les clés sont article, author, site, media et user.',
|
||||
'Merge every group of identical copies. Send the preview fingerprint to refuse a changed library. failed_groups counts groups that could not be purged; the others were still purged.':
|
||||
'Fusionne chaque groupe de copies identiques. Envoyez l’empreinte de l’aperçu pour refuser une bibliothèque modifiée. failed_groups compte les groupes qui n’ont pas pu être purgés ; les autres l’ont été.',
|
||||
'Sites and authors': 'Sites et auteurs',
|
||||
'Read the sites and authors your content belongs to. Creating and changing them needs a session.':
|
||||
'Lisez les sites et les auteurs auxquels votre contenu appartient. Les créer et les modifier demande une session.',
|
||||
'Sites and authors writes': 'Écritures des sites et des auteurs',
|
||||
'List variants': 'Lister les variantes',
|
||||
'Create a variant': 'Créer une variante',
|
||||
'Replace a variant': 'Remplacer une variante',
|
||||
'Update a variant': 'Mettre à jour une variante',
|
||||
'Delete a variant': 'Supprimer une variante',
|
||||
'Purge the cache of a variant': 'Purger le cache d’une variante',
|
||||
'Image cache status': 'État du cache d’images',
|
||||
'Purge the image cache': 'Purger le cache d’images',
|
||||
'List the variants of an image': 'Lister les variantes d’une image',
|
||||
'Add variants to an image': 'Ajouter des variantes à une image',
|
||||
'Generate one variant of an image': 'Générer une variante d’une image',
|
||||
'Delete one variant of an image': 'Supprimer une variante d’une image',
|
||||
'Text in code style is the literal body of the response, not a sentence.':
|
||||
'Le texte en style code est le corps littéral de la réponse, pas une phrase.',
|
||||
'On an entry, `invalid_entry: <reason>` is a 409 only when a unique field clashes. Any other field error is a 422.':
|
||||
'Sur une entrée, `invalid_entry: <reason>` est un 409 seulement quand un champ unique entre en conflit. Toute autre erreur de champ est un 422.',
|
||||
Unprocessable: 'Non traitable',
|
||||
'An entry doesn\'t fit its content type. The body is `invalid_entry`, then ": " and the reason, for example `invalid_entry: capacity must be at most 5000`.':
|
||||
'Une entrée ne convient pas à son type de contenu. Le corps est `invalid_entry`, puis « : » et la raison, par exemple `invalid_entry: capacity must be at most 5000`.',
|
||||
'Field types': 'Types de champ',
|
||||
'Value in an entry': 'Valeur dans une entrée',
|
||||
'1 or higher. Default 1.': '1 ou plus. 1 par défaut.',
|
||||
'One of 5, 25, 50 or 100. Default 25.': '5, 25, 50 ou 100. 25 par défaut.',
|
||||
} as const
|
||||
|
||||
export type MessageKey = keyof typeof messages
|
||||
@@ -77,14 +77,14 @@ describe('Sites and authors in the editor, articles and profile screens: message
|
||||
})
|
||||
|
||||
describe('Catalogue groups of Sites and Authors in French', () => {
|
||||
const groups = API_GROUPS.filter((group) => ['sites', 'authors'].includes(group.key))
|
||||
const sessionGroups = SESSION_GROUPS.filter((group) => /^(Sites|Authors)/.test(group.title))
|
||||
const groups = API_GROUPS.filter((group) => group.key === 'sites')
|
||||
const sessionGroups = SESSION_GROUPS.filter((group) => /^Sites/.test(group.title))
|
||||
|
||||
it('covers the four group titles of the feature', () => {
|
||||
it('covers the group titles of the feature', () => {
|
||||
expect([
|
||||
...groups.map((group) => group.title),
|
||||
...sessionGroups.map((group) => group.title),
|
||||
]).toEqual(['Sites', 'Authors', 'Sites · owner only', 'Authors · owner and admin'])
|
||||
]).toEqual(['Sites and authors', 'Sites and authors writes'])
|
||||
})
|
||||
|
||||
it.each([
|
||||
|
||||
Reference in new issue
Block a user