docbrown/spec/models/credit_spec.rb
rhymes 1f97669e66 Credits ledger (#3395)
* Add #purchase to Credit

* Assigns spent credits to the listing

* Add Credits::Ledger and use it

* Localize ledger datetimes

* Add organization to the ledger

* Add tests for ledger

* Remove unused class

* Fix scope error

* Compare UTC times

* Fix broken specs

* Wrap listing create in a transaction

* Wrap listings bump into a transaction

* Avoid microseconds issue with datetimes in tests

* Use .detect instead of .select.first

* Fix spec description
2019-07-09 10:11:18 -04:00

59 lines
1.9 KiB
Ruby

require "rails_helper"
RSpec.describe Credit, type: :model do
let(:user) { create(:user) }
let(:organization) { create(:organization) }
let(:random_number) { rand(100) }
it { is_expected.to belong_to(:user).optional }
it { is_expected.to belong_to(:organization).optional }
it { is_expected.to belong_to(:purchase).optional }
xit "counts credits for user" do
# See https://github.com/magnusvk/counter_culture/issues/259
create_list(:credit, random_number, user: user)
Credit.counter_culture_fix_counts
expect(user.reload.credits_count).to eq(random_number)
end
it "counts credits for organization" do
create_list(:credit, random_number, organization: organization)
Credit.counter_culture_fix_counts
expect(organization.reload.credits_count).to eq(random_number)
end
it "counts the number of unspent credits for a user" do
create_list(:credit, random_number, user: user)
expect(user.reload.unspent_credits_count).to eq(random_number)
end
it "counts the number of spent credits for a user" do
create_list(:credit, random_number, user: user, spent: true)
expect(user.reload.spent_credits_count).to eq(random_number)
end
it "counts the number of unspent credits for an organization" do
create_list(:credit, random_number, organization: organization)
expect(organization.reload.unspent_credits_count).to eq(random_number)
end
it "counts the number of spent credits for an organization" do
create_list(:credit, random_number, organization: organization, spent: true)
expect(organization.reload.spent_credits_count).to eq(random_number)
end
describe "#purchase" do
let(:listing) { create(:classified_listing) }
it "associates to a purchase" do
credit = create(:credit, purchase: listing)
expect(credit.purchase).to eq(listing)
end
it "is valid without a purchase" do
credit = create(:credit, purchase: nil)
expect(credit).to be_valid
end
end
end