require 'swagger_helper'

describe 'User', type: :request do
  include ApiHelper

  path '/user' do
    get 'info about the currently logged-in user' do
      tags 'User'
      produces 'application/json'
      let(:api_scopes) { ['user:read'] }
      let(:other_user1) { create :user }
      let(:user) { create :user }
      let(:other_user2) { create :user }

      response '200', 'success' do
        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: %w[id name email]
                 }
               }

        run_test! do |response|
          data = JSON.parse(response.body)
          expect(data['user']['id']).to eq(user.id)
        end
      end

      it_handles_invalid_token_and_scope
    end
  end

  path '/user/financial_overview' do
    get 'financial summary about the currently logged-in user' do
      tags 'User', 'Financial Transaction'
      produces 'application/json'
      let(:user) { create :user, :ordergroup }
      let(:api_scopes) { ['finance:user'] }
      FinancialTransactionClass.create(name: 'TestTransaction')

      response 200, 'success' do
        schema type: :object,
               properties: {
                 financial_overview: {
                   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: :array,
                       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: %w[id name amount]
                     }
                   },
                   required: %w[account_balance available_funds financial_transaction_class_sums]
                 }
               }

        run_test!
      end

      it_handles_invalid_token_and_scope
    end
  end
end