2022-11-29 21:37:45 +01:00
require 'swagger_helper'
describe 'User' , type : :request do
include ApiHelper
let ( :api_scopes ) { [ 'finance:user' ] }
let ( :user ) { create :user , groups : [ create ( :ordergroup ) ] }
let ( :other_user2 ) { create :user }
let ( :ft ) { create ( :financial_transaction , user : user , ordergroup : user . ordergroup ) }
before do
ft
end
path '/user/financial_transactions' do
2022-12-05 17:07:10 +01:00
post 'create new financial transaction (requires enabled self service)' do
2022-11-29 21:37:45 +01:00
tags 'User' , 'FinancialTransaction'
consumes 'application/json'
produces 'application/json'
2022-12-05 17:07:10 +01:00
parameter name : " per_page " , in : :query , type : :integer , required : false
parameter name : " page " , in : :query , type : :integer , required : false
let ( :page ) { 1 }
let ( :per_page ) { 20 }
2022-11-29 21:37:45 +01:00
parameter name : :financial_transaction , in : :body , schema : {
type : :object ,
properties : {
amount : { type : :integer } ,
financial_transaction_type : { type : :integer } ,
2022-12-02 16:37:54 +01:00
note : { type : :string }
}
2022-11-29 21:37:45 +01:00
}
2022-12-02 16:37:54 +01:00
let ( :financial_transaction ) { { amount : 3 , financial_transaction_type_id : create ( :financial_transaction_type ) . id , note : 'lirum larum' } }
2022-11-29 21:37:45 +01:00
response '200' , 'success' do
schema type : :object , properties : {
financial_transaction_for_create : {
type : :object ,
items : {
'$ref' : '#/components/schemas/FinancialTransactionForCreate'
}
}
}
run_test!
end
2022-12-02 16:37:54 +01:00
# 401
it_handles_invalid_token_with_id ( :financial_transaction )
# 403
# description: user has no ordergroup, is below minimum balance, self service is disabled, or missing scope
2022-12-05 17:07:10 +01:00
it_handles_invalid_scope_with_id ( :financial_transaction , 'user has no ordergroup, is below minimum balance, self service is disabled, or missing scope' )
2022-12-02 16:37:54 +01:00
# TODO: fix 404 and 422
# 404
# Type not found
# description: financial transaction type not found
# Should be 404, but is 200 with validation errors..
# Rswag::Specs::UnexpectedResponse:
# Expected response code '404' to match '200'
# Response body: {"error":"not_found","error_description":"Couldn't find FinancialTransactionType with 'id'=invalid"}
# let(:financial_transaction) { { amount: 3, financial_transaction_type_id: 'invalid', note: 'lirum larum' } }
# response '404', 'invalid parameter value' do
# schema '$ref' => '#/components/schemas/Error404'
# run_test!
# end
# 422
# response '422', 'invalid parameter value' do
# let(:financial_transaction) { { amount: -3, financial_transaction_type_id: create(:financial_transaction_type).id, note: -2 } }
# schema '$ref' => '#/components/schemas/Error422'
# run_test!
# end
2022-11-29 21:37:45 +01:00
end
2022-12-05 17:07:10 +01:00
get " financial transactions of the member's ordergroup " do
2022-11-29 21:37:45 +01:00
tags 'User' , 'Financial Transaction'
produces 'application/json'
response '200' , 'success' do
schema type : :object , properties : {
meta : {
type : :object ,
items :
{
'$ref' : '#/components/schemas/Meta'
}
} ,
financial_transaction : {
type : :array ,
items : {
'$ref' : '#/components/schemas/FinancialTransaction'
}
}
}
run_test! do | response |
data = JSON . parse ( response . body )
expect ( data [ 'financial_transactions' ] . first [ 'id' ] ) . to eq ( ft . id )
end
end
# responses 401 & 403
it_handles_invalid_token_and_scope
end
end
path '/user/financial_transactions/{id}' do
get 'find financial transaction by id' do
tags 'User' , 'FinancialTransaction'
produces 'application/json'
parameter name : :id , in : :path , type : :string
response '200' , 'success' do
schema type : :object , properties : {
financial_transaction : {
type : :object ,
items : {
'$ref' : '#/components/schemas/FinancialTransaction'
}
}
}
let ( :id ) { ft . id }
run_test! do | response |
data = JSON . parse ( response . body )
expect ( data [ 'financial_transaction' ] [ 'id' ] ) . to eq ( ft . id )
end
end
# 401
it_handles_invalid_token_with_id ( :financial_transaction )
# 403
2022-12-05 17:07:10 +01:00
it_handles_invalid_scope_with_id ( :financial_transaction , 'user has no ordergroup or missing scope' )
2022-11-29 21:37:45 +01:00
# 404
response '404' , 'financial transaction not found' do
schema type : :object , properties : {
financial_transaction : {
type : :object ,
items : {
'$ref' : '#/components/schemas/FinancialTransaction'
}
}
}
let ( :id ) { 'invalid' }
run_test!
end
end
end
end