28_introduce_rswag #35

Merged
philipp merged 46 commits from 28_introduce_rswag into develop 2023-01-05 13:45:47 +01:00
3 changed files with 11 additions and 212 deletions
Showing only changes of commit ccff79b041 - Show all commits

View file

@ -9,8 +9,6 @@ describe 'Article Categories', type: :request do
produces 'application/json' produces 'application/json'
parameter name: "per_page", in: :query, type: :integer, required: false parameter name: "per_page", in: :query, type: :integer, required: false
parameter name: "page", in: :query, type: :integer, required: false parameter name: "page", in: :query, type: :integer, required: false
let(:page) { 1 }
let(:per_page) { 10 }
let(:order_article) { create(:order, article_count: 1).order_articles.first } let(:order_article) { create(:order, article_count: 1).order_articles.first }
let(:stock_article) { create(:stock_article) } let(:stock_article) { create(:stock_article) }
let(:stock_order_article) { create(:stock_order, article_ids: [stock_article.id]).order_articles.first } let(:stock_order_article) { create(:stock_order, article_ids: [stock_article.id]).order_articles.first }
@ -46,36 +44,11 @@ describe 'Article Categories', type: :request do
} }
} }
} }
let(:id) { ArticleCategory.create(name: 'dairy').id } let(:id) { create(:article_category, name: 'dairy').id }
run_test!
end
response '401', 'not logged in' do
schema type: :object, properties: {
article_categories: {
type: :array,
items: {
'$ref': '#/components/schemas/ArticleCategory'
}
}
}
let(:Authorization) { 'abc' }
let(:id) { ArticleCategory.create(name: 'dairy').id }
run_test!
end
response '404', 'article category not found' do
schema type: :object, properties: {
article_categories: {
type: :array,
items: {
'$ref': '#/components/schemas/ArticleCategory'
}
}
}
let(:id) { 'invalid' }
run_test! run_test!
end end
it_handles_invalid_token_with_id(:article_category)
it_cannot_find_object
end end
end end
end end

View file

@ -30,7 +30,7 @@ module ApiHelper
end end
end end
def self.it_handles_invalid_scope(description="missing scope") def self.it_handles_invalid_scope(description = "missing scope")
context 'with invalid scope' do context 'with invalid scope' do
let(:api_scopes) { ['none'] } let(:api_scopes) { ['none'] }
@ -45,6 +45,7 @@ module ApiHelper
context 'with invalid scope' do context 'with invalid scope' do
let(:api_scopes) { ['none'] } let(:api_scopes) { ['none'] }
let(:id) { create(class_sym).id } let(:id) { create(class_sym).id }
response 403, description do response 403, description do
schema '$ref' => '#/components/schemas/Error403' schema '$ref' => '#/components/schemas/Error403'
run_test! run_test!
@ -52,18 +53,12 @@ module ApiHelper
end end
end end
def self.it_cannot_find_object(description="not found") def self.it_cannot_find_object(description = "not found")
# 404 let(:id) { 'invalid' }
response '404', description do
schema type: :object, properties: {
group_order_article: { response 404, description do
type: :object, schema '$ref' => '#/components/schemas/Error404'
items: {
'$ref': '#/components/schemas/GroupOrderArticle'
}
}
}
let(:id) { 'invalid' }
run_test! run_test!
end end
end end

View file

@ -1,169 +0,0 @@
---
openapi: 3.0.1
info:
title: API V1
version: v1
paths:
"/user":
get:
summary: info about the currently logged-in user
tags:
- User
responses:
'200':
description: success
content:
application/json:
schema:
type: object
properties:
user:
type: object
properties:
id:
type: integer
name:
type: string
description: full name
email:
type: string
description: email address
locale:
type: string
description: language code
required:
- id
- name
- email
'401':
description: not logged-in
content:
application/json:
schema:
"$ref": "#/components/schemas/Error401"
'403':
description: missing scope
content:
application/json:
schema:
"$ref": "#/components/schemas/Error403"
"/user/financial_overview":
get:
summary: financial summary about the currently logged-in user
tags:
- User
- FinancialTransaction
responses:
'200':
description: success
content:
application/json:
schema:
type: object
properties:
account_balance:
type: number
description: booked accout balance of ordergroup
available_funds:
type: number
description: fund available to order articles
financial_transaction_class_sums:
type: object
properties:
id:
type: integer
description: id of the financial transaction class
name:
type: string
description: name of the financial transaction class
amount:
type: number
description: sum of the amounts belonging to the financial
transaction class
required:
- id
- name
- amount
required:
- account_balance
- available_funds
- financial_transaction_class_sums
'401':
description: not logged-in
content:
application/json:
schema:
"$ref": "#/components/schemas/Error401"
'403':
description: missing scope
content:
application/json:
schema:
"$ref": "#/components/schemas/Error403"
components:
schemas:
Error:
type: object
properties:
error:
type: string
description: error code
error_description:
type: string
description: human-readable error message (localized)
Error401:
type: object
properties:
error:
type: string
description: "<tt>unauthorized</tt>"
error_description:
"$ref": "#/components/schemas/Error/properties/error_description"
Error403:
type: object
properties:
error:
type: string
description: "<tt>forbidden</tt> or <tt>invalid_scope</tt>"
error_description:
"$ref": "#/components/schemas/Error/properties/error_description"
Error404:
type: object
properties:
error:
type: string
description: "<tt>not_found</tt>"
error_description:
"$ref": "#/components/schemas/Error/properties/error_description"
Error422:
type: object
properties:
error:
type: string
description: unprocessable entity
error_description:
"$ref": "#/components/schemas/Error/properties/error_description"
securitySchemes:
oauth2:
type: oauth2
flows:
implicit:
authorizationUrl: http://localhost:3000/f/oauth/authorize
scopes:
config:user: reading Foodsoft configuration for regular users
config:read: reading Foodsoft configuration values
config:write: reading and updating Foodsoft configuration values
finance:user: accessing your own financial transactions
finance:read: reading all financial transactions
finance:write: reading and creating financial transactions
user:read: reading your own user profile
user:write: reading and updating your own user profile
offline_access: retain access after user has logged out
servers:
- url: http://{defaultHost}/f/api/v1
variables:
defaultHost:
default: localhost:3000
security:
- oauth2:
- user:read