From cab028660874a53f68d9a81c9d6becd2861c566b Mon Sep 17 00:00:00 2001 From: chris48s <chris48s@users.noreply.github.com> Date: Wed, 1 Nov 2023 20:33:44 +0000 Subject: [PATCH] migrate examples to openApi part 16; affects [gitlabrelease swagger] (#9565) * convert gitlab release from examples to openApi * convert swagger from examples to openApi * DRY up enums (1) * DRY up enums (2) --- services/gitlab/gitlab-release.service.js | 109 ++++++++++------------ services/swagger/swagger.service.js | 22 +++-- 2 files changed, 60 insertions(+), 71 deletions(-) diff --git a/services/gitlab/gitlab-release.service.js b/services/gitlab/gitlab-release.service.js index 96dccdc47c..18a2789c7f 100644 --- a/services/gitlab/gitlab-release.service.js +++ b/services/gitlab/gitlab-release.service.js @@ -1,7 +1,7 @@ import Joi from 'joi' import { optionalUrl } from '../validators.js' import { latest, renderVersionBadge } from '../version.js' -import { NotFound } from '../index.js' +import { NotFound, pathParam, queryParam } from '../index.js' import { documentation, httpErrorsFor } from './gitlab-helper.js' import GitLabBase from './gitlab-base.js' @@ -12,23 +12,24 @@ const schema = Joi.array().items( }), ) +const sortEnum = ['date', 'semver'] +const displayNameEnum = ['tag', 'release'] +const dateOrderByEnum = ['created_at', 'released_at'] + const queryParamSchema = Joi.object({ gitlab_url: optionalUrl, include_prereleases: Joi.equal(''), - sort: Joi.string().valid('date', 'semver').default('date'), - display_name: Joi.string().valid('tag', 'release').default('tag'), + sort: Joi.string() + .valid(...sortEnum) + .default('date'), + display_name: Joi.string() + .valid(...displayNameEnum) + .default('tag'), date_order_by: Joi.string() - .valid('created_at', 'released_at') + .valid(...dateOrderByEnum) .default('created_at'), }).required() -const commonProps = { - namedParams: { - project: 'shields-ops-group/tag-test', - }, - documentation, -} - export default class GitLabRelease extends GitLabBase { static category = 'version' @@ -38,58 +39,44 @@ export default class GitLabRelease extends GitLabBase { queryParamSchema, } - static examples = [ - { - title: 'GitLab Release (latest by date)', - ...commonProps, - queryParams: { sort: 'date', date_order_by: 'created_at' }, - staticPreview: renderVersionBadge({ version: 'v2.0.0' }), - }, - { - title: 'GitLab Release (latest by SemVer)', - ...commonProps, - queryParams: { sort: 'semver' }, - staticPreview: renderVersionBadge({ version: 'v4.0.0' }), - }, - { - title: 'GitLab Release (latest by SemVer pre-release)', - ...commonProps, - queryParams: { - sort: 'semver', - include_prereleases: null, + static openApi = { + '/gitlab/v/release/{project}': { + get: { + summary: 'GitLab Release', + description: documentation, + parameters: [ + pathParam({ + name: 'project', + example: 'gitlab-org/gitlab', + }), + queryParam({ + name: 'gitlab_url', + example: 'https://gitlab.com', + }), + queryParam({ + name: 'include_prereleases', + schema: { type: 'boolean' }, + example: null, + }), + queryParam({ + name: 'sort', + schema: { type: 'string', enum: sortEnum }, + example: 'semver', + }), + queryParam({ + name: 'display_name', + schema: { type: 'string', enum: displayNameEnum }, + example: 'release', + }), + queryParam({ + name: 'date_order_by', + schema: { type: 'string', enum: dateOrderByEnum }, + example: 'created_at', + }), + ], }, - staticPreview: renderVersionBadge({ version: 'v5.0.0-beta.1' }), }, - { - title: 'GitLab Release (self-managed)', - namedParams: { - project: 'GNOME/librsvg', - }, - documentation, - queryParams: { - sort: 'semver', - include_prereleases: null, - gitlab_url: 'https://gitlab.gnome.org', - date_order_by: 'created_at', - }, - staticPreview: renderVersionBadge({ version: 'v2.51.4' }), - }, - { - title: 'GitLab Release (by release name)', - namedParams: { - project: 'gitlab-org/gitlab', - }, - documentation, - queryParams: { - sort: 'semver', - include_prereleases: null, - gitlab_url: 'https://gitlab.com', - display_name: 'release', - date_order_by: 'created_at', - }, - staticPreview: renderVersionBadge({ version: 'GitLab 14.2' }), - }, - ] + } static defaultBadgeData = { label: 'release' } diff --git a/services/swagger/swagger.service.js b/services/swagger/swagger.service.js index f26c626e14..2b9f97a8e4 100644 --- a/services/swagger/swagger.service.js +++ b/services/swagger/swagger.service.js @@ -1,6 +1,6 @@ import Joi from 'joi' import { optionalUrl } from '../validators.js' -import { BaseJsonService, NotFound } from '../index.js' +import { BaseJsonService, NotFound, queryParams } from '../index.js' const schema = Joi.object() .keys({ @@ -26,17 +26,19 @@ export default class SwaggerValidatorService extends BaseJsonService { queryParamSchema, } - static examples = [ - { - title: 'Swagger Validator', - staticPreview: this.render({ status: 'valid' }), - namedParams: {}, - queryParams: { - specUrl: - 'https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v2.0/json/petstore-expanded.json', + static openApi = { + '/swagger/valid/3.0': { + get: { + summary: 'Swagger Validator', + parameters: queryParams({ + name: 'specUrl', + required: true, + example: + 'https://raw.githubusercontent.com/OAI/OpenAPI-Specification/master/examples/v2.0/json/petstore-expanded.json', + }), }, }, - ] + } static defaultBadgeData = { label: 'swagger', -- GitLab