# frozen_string_literal: true

require 'test_helper'

module Credits; end

class Credits::UserInfoTest < ActionDispatch::IntegrationTest
  def setup
    @user_without_subscription = User.find_by(username: 'lseguin')
    @user_with_subscription = User.find_by(username: 'kdumas')
  end

  test 'user fetch her credits info' do
    login_as(@user_with_subscription, scope: :user)
    get "/api/credits/user/#{@user_with_subscription.id}/Machine"

    # Check response format & status
    assert_equal 200, response.status
    assert_match Mime[:json].to_s, response.content_type

    # Check the correct credits was returned
    credits = json_response(response.body)
    assert_equal @user_with_subscription.subscribed_plan.credits.where(creditable_type: 'Machine').count,
                 credits.length,
                 'not all credits were returned'
  end

  test 'user without credits fetch his credits info' do
    login_as(@user_without_subscription, scope: :user)
    get "/api/credits/user/#{@user_without_subscription.id}/Machine"

    # Check response format & status
    assert_equal 200, response.status
    assert_match Mime[:json].to_s, response.content_type

    # Check the correct credits was returned
    credits = json_response(response.body)
    assert_equal 0, credits.length, 'unexpected credits returned'
  end

  test 'user tries to fetch credits info from another user' do
    login_as(@user_without_subscription, scope: :user)
    get "/api/credits/user/#{@user_with_subscription.id}/Machine"

    assert_equal 403, response.status
  end
end