require 'spec_helper'

describe 'Fixxpert confirm expert session request' do

  let(:marketplace) {get_marketplace}

  it 'should reditect to create bank without a bank account' do
    customer = create :customer
    login_as_user customer
    create_card customer

    fixxpert = create :fixxpert, market_token_id: '123', market_refund_token_id: '123', market_recipient_email: 'valid@email.com'
    login_as_user fixxpert 
    expert_session = create :expert_session, fixxpert: fixxpert, customer: customer

    click_link 'fixxpert_expert_sessions_link'
    click_link "confirm_expert_session_#{expert_session.id}"
    page.should have_content "You will need an valid Bank Account. Enter your bank details."
  end

  it 'should confirm the session without charging the customer' do
    prev_balance = marketplace.in_escrow
    customer = create :customer
    has_credits = 120
    customer.credits = has_credits
    login_as_user customer
    create_card customer

    fixxpert = create :fixxpert, market_token_id: '123', market_refund_token_id: '123', market_recipient_email: 'valid@email.com'
    login_as_user fixxpert    
    create_bank_account fixxpert

    
    expert_session = create :expert_session, fixxpert: fixxpert, customer: customer
    
    total_credits = (((expert_session.fixxpert.rate_in_cents)/100)*(expert_session.length/60.0))
    puts total_credits*4

    visit root_path
    click_link 'fixxpert_expert_sessions_link'
    click_link "confirm_expert_session_#{expert_session.id}"
    sleep(10)
    page.should have_content "Expert session confirmed"
    marketplace.in_escrow.should eq prev_balance
    #(prev_balance + (1.029 * (total_credits + 0.30)).round(2) * 100).to_i

    customer.reload
    customer.credits.should eq has_credits
    customer.credits_booked.should eq total_credits*4
  end

  it 'should confirm the session charging the customer' do
    marketplace.reload
    prev_balance = marketplace.in_escrow
    customer = create :customer
    login_as_user customer
    create_card customer

    fixxpert = create :fixxpert, market_token_id: '123', market_refund_token_id: '123', market_recipient_email: 'valid@email.com'
    login_as_user fixxpert    
    create_bank_account fixxpert

    
    expert_session = create :expert_session, fixxpert: fixxpert, customer: customer
    
    total_credits = (((expert_session.fixxpert.rate_in_cents)/100)*(expert_session.length/60.0))

    visit root_path
    click_link 'fixxpert_expert_sessions_link'
    click_link "confirm_expert_session_#{expert_session.id}"
    sleep(10)
    page.should have_content "Expert session confirmed"
    marketplace.in_escrow.should eq (prev_balance + (1.029 * (total_credits + 0.30)).round(2) * 100).to_i
  end

  it 'should not confirm the session because customer has no balance', :js => true do
    prev_balance = marketplace.in_escrow
    customer = create :customer
    login_as_user customer
    create_failure_card customer

    fixxpert = create :fixxpert, market_token_id: '123', market_refund_token_id: '123', market_recipient_email: 'valid@email.com'
    login_as_user fixxpert    
    create_bank_account fixxpert

    
    expert_session = create :expert_session, fixxpert: fixxpert, customer: customer
    
    total_credits = (((expert_session.fixxpert.rate_in_cents)/100)*(expert_session.length/60.0))
    puts total_credits*4

    visit root_path
    click_link 'fixxpert_expert_sessions_link'
    click_link "confirm_expert_session_#{expert_session.id}"
    sleep(10)
    page.should have_content "Can't confirm expert session. Cannot charge card."
  end

  it 'should confirm the session and calculate the fixxpert level' do
    customer = create :customer
    login_as_user customer
    create_card customer

    fixxpert = create :fixxpert, market_token_id: '123', market_refund_token_id: '123', market_recipient_email: 'valid@email.com'
    fixxpert.billed_length = 576
    fixxpert.save
    login_as_user fixxpert    
    create_bank_account fixxpert

    
    expert_session = create :expert_session, fixxpert: fixxpert, customer: customer
    
    total_credits = (((expert_session.fixxpert.rate_in_cents)/100)*(expert_session.length/60.0))

    visit root_path
    click_link 'fixxpert_expert_sessions_link'
    click_link "confirm_expert_session_#{expert_session.id}"
    sleep(10)
    page.should have_content "Expert session confirmed"

    fixxpert.reload
    expect {fixxpert.level.should eq 2}
  end


  it 'should redirect to edit if expert_session schedule is not available' do
    customer = create :customer
    login_as_user customer
    create_card customer

    fixxpert = create :fixxpert, market_token_id: '123', market_refund_token_id: '123', market_recipient_email: 'valid@email.com'
    login_as_user fixxpert    
    create_bank_account fixxpert

    expert_session = create :expert_session, fixxpert: fixxpert, customer: customer
    confirmed_expert_session = create :expert_session, fixxpert: fixxpert, customer: customer, status: 'c'

    click_link 'fixxpert_expert_sessions_link'
    click_link "confirm_expert_session_#{expert_session.id}"
    current_path.should eq fixxpert_expert_sessions_path
    page.should have_content "Can't confirm expert session. Check availability"
    expert_session.reload
    expert_session.should_not be_confirmed
  end

end
