Sha256: eb263d5b049080ba91407224e51156e27ec03ba71435d3a88189206015df430c

Contents?: true

Size: 1.93 KB

Versions: 25

Compression:

Stored size: 1.93 KB

Contents

# frozen_string_literal: true

require "spec_helper"

describe Decidim::Budgets::Order do
  let!(:order) { create :order, feature: create(:budget_feature) }
  subject { order }

  describe "validations" do
    it "is valid" do
      expect(subject).to be_valid
    end

    it "is invalid when user is not present" do
      subject.user = nil
      expect(subject).to be_invalid
    end

    it "is invalid when feature is not present" do
      subject.feature = nil
      expect(subject).to be_invalid
    end

    it "is unique for each user and feature" do
      subject.save
      new_order = build :order, user: subject.user, feature: subject.feature
      expect(new_order).to be_invalid
    end

    it "can't exceed a maximum order value" do
      project1 = create(:project, feature: subject.feature, budget: 100)
      project2 = create(:project, feature: subject.feature, budget: 20)

      subject.projects << project1
      subject.projects << project2

      subject.feature.settings = {
        "total_budget" => 100, "vote_threshold" => 50
      }

      expect(subject).to be_invalid
    end

    it "can't be lower than a minimum order value when checked out" do
      project1 = create(:project, feature: subject.feature, budget: 20)

      subject.projects << project1

      subject.feature.settings = {
        "total_budget" => 100, "vote_threshold" => 50
      }

      expect(subject).to be_valid
      subject.checked_out_at = Time.current
      expect(subject).to be_invalid
    end
  end

  describe "#total_budget" do
    it "returns the sum of project budgets" do
      subject.projects << build(:project, feature: subject.feature)

      expect(subject.total_budget).to eq(subject.projects.sum(&:budget))
      expect(subject)
    end
  end

  describe "#checked_out?" do
    it "returns true if the checked_out_at attribute is present" do
      subject.checked_out_at = Time.zone.now
      expect(subject).to be_checked_out
    end
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
decidim-0.6.8 decidim-budgets/spec/models/order_spec.rb
decidim-0.6.7 decidim-budgets/spec/models/order_spec.rb
decidim-0.6.6 decidim-budgets/spec/models/order_spec.rb
decidim-0.6.5 decidim-budgets/spec/models/order_spec.rb
decidim-0.6.4 decidim-budgets/spec/models/order_spec.rb
decidim-0.6.3 decidim-budgets/spec/models/order_spec.rb
decidim-0.6.2 decidim-budgets/spec/models/order_spec.rb
decidim-0.6.1 decidim-budgets/spec/models/order_spec.rb
decidim-0.6.0 decidim-budgets/spec/models/order_spec.rb
decidim-0.5.1 decidim-budgets/spec/models/order_spec.rb
decidim-0.5.0 decidim-budgets/spec/models/order_spec.rb
decidim-0.4.4 decidim-budgets/spec/models/order_spec.rb
decidim-0.4.3 decidim-budgets/spec/models/order_spec.rb
decidim-0.4.2 decidim-budgets/spec/models/order_spec.rb
decidim-0.4.1 decidim-budgets/spec/models/order_spec.rb
decidim-0.4.0 decidim-budgets/spec/models/order_spec.rb
decidim-0.3.2 decidim-budgets/spec/models/order_spec.rb
decidim-0.3.1 decidim-budgets/spec/models/order_spec.rb
decidim-0.3.0 decidim-budgets/spec/models/order_spec.rb
decidim-0.2.0 decidim-budgets/spec/models/order_spec.rb