# frozen_string_literal: true

module Credits
  class TrainingTest < ActionDispatch::IntegrationTest
    # Called before every test method runs. Can be used
    # to set up fixture information.
    def setup
      admin = User.with_role(:admin).first
      login_as(admin, scope: :user)
    end

    test 'create machine credit' do
      # First, we create a new credit
      post '/api/credits',
           params: {
             credit: {
               creditable_id: 5,
               creditable_type: 'Machine',
               hours: 1,
               plan_id: 1
             }
           }.to_json,
           headers: default_headers

      # Check response format & status
      assert_equal 201, response.status, response.body
      assert_equal Mime[:json], response.content_type

      # Check the credit was created correctly
      credit = json_response(response.body)
      c = Credit.where(id: credit[:id]).first
      assert_not_nil c, 'Credit was not created in database'

      # Check that 1 hour is associated with the credit
      assert_equal 1, c.hours
    end

    test 'update a credit' do
      put '/api/credits/13',
          params: {
            credit: {
              creditable_id: 4,
              creditable_type: 'Machine',
              hours: 5,
              plan_id: 3
            }
          }.to_json,
          headers: default_headers

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

      # Check the credit was correctly updated
      credit = json_response(response.body)
      assert_equal 13, credit[:id]
      c = Credit.find(credit[:id])
      assert c.updated_at > 1.minute.ago

      assert_equal 5, c.hours
    end
  end
end