# License: AGPL-3.0-or-later WITH Web-Template-Output-Additional-Permission-3.0-or-later
require 'rails_helper'
require 'insert/insert_billing_subscriptions'
require 'query/query_billing_subscriptions'

describe QueryBillingSubscriptions, :pending => true do

  before(:each) do
    # Qx.delete_from(:billing_plans).where("stripe_plan_id = $id", id: 'stripe_bp').execute
    # Qx.delete_from(:billing_subscriptions).where("nonprofit_id = $id", id: 3624).execute
    # @billing_plan = Qx.insert_into(:billing_plans).values({name: 'test_bp', amount: 0, stripe_plan_id: 'stripe_bp', created_at: Time.current, updated_at: Time.current}).returning('*').execute.last
    # @sub = InsertBillingSubscriptions.trial(3624, @billing_plan['stripe_plan_id'])[:json]
  end

  describe '.days_left_in_trial' do

    it 'gives days left in trial, rounded down' do
      expect(QueryBillingSubscriptions.days_left_in_trial(3624)).to eq(9)
      fail
    end

    it 'gives 0 if not trialing' do
      Qx.update(:billing_subscriptions).set(status: 'active').where("id = $id", id: @sub['id']).execute
      expect(QueryBillingSubscriptions.days_left_in_trial(3624)).to eq(0)
      fail
    end
    
    it 'gives negative if past expiration' do
      Qx.update(:billing_subscriptions).set(status: 'trialing', created_at: 20.days.ago).where("id = $id", id: @sub['id']).execute
      expect(QueryBillingSubscriptions.days_left_in_trial(3624)).to eq(-11)
      fail
    end
  end

  describe '.plan_tier' do

    it 'gives tier 2 if status=trialing' do
      Qx.update(:billing_subscriptions).set(status: 'trialing').where("id = $id", id: @sub['id']).execute
      expect(QueryBillingSubscriptions.plan_tier(3624)).to eq(2)
    end
    it 'gives tier 0 if status=inactive' do
      Qx.update(:billing_subscriptions).set(status: 'inactive').where("id = $id", id: @sub['id']).execute
      expect(QueryBillingSubscriptions.plan_tier(3624)).to eq(0)
      fail
    end
    it 'gives tier 0 if no subscription' do
      expect(QueryBillingSubscriptions.plan_tier(666)).to eq(0)
      fail
    end
    it 'gives tier 2 if status=active' do
      Qx.update(:billing_subscriptions).set(status: 'active').where("id = $id", id: @sub['id']).execute
      expect(QueryBillingSubscriptions.plan_tier(3624)).to eq(2)
      fail
    end
  end

  describe '.currently_in_trial?' do

    it 'gives true if status=trialing' do
      Qx.update(:billing_subscriptions).set(status: 'trialing').where("id = $id", id: @sub['id']).execute
      expect(QueryBillingSubscriptions.currently_in_trial?(3624)).to eq(true)
      fail
    end

    it 'gives false if status!=trialing' do
      Qx.update(:billing_subscriptions).set(status: 'active').where("id = $id", id: @sub['id']).execute
      expect(QueryBillingSubscriptions.currently_in_trial?(3624)).to eq(false)
      fail
    end

    it 'gives false if no subscription' do
      expect(QueryBillingSubscriptions.currently_in_trial?(666)).to be_falsey
      fail
    end
  end
end