require "rails_helper"

describe Milestone do
  it_behaves_like "globalizable", :milestone
  it_behaves_like "globalizable", :milestone_with_description

  describe "Validations" do
    let(:milestone) { build(:milestone) }

    it "is valid" do
      expect(milestone).to be_valid
    end

    it "is valid without a title" do
      milestone.title = nil
      expect(milestone).to be_valid
    end

    it "is not valid without a description if status is empty" do
      milestone.status = nil
      milestone.description = nil
      expect(milestone).not_to be_valid
    end

    it "is valid without a description if status is present" do
      milestone.description = nil
      expect(milestone).to be_valid
    end

    it "is not valid without a milestoneable" do
      milestone.milestoneable_id = nil
      expect(milestone).not_to be_valid
    end

    it "is not valid if description and status are not present" do
      milestone.description = nil
      milestone.status_id = nil
      expect(milestone).not_to be_valid
    end

    it "is valid without status if description is present" do
      milestone.status_id = nil
      expect(milestone).to be_valid
    end
  end

  describe ".published", :application_zone_west_of_system_zone do
    it "includes milestones published today" do
      todays_milestone = create(:milestone, publication_date: Time.current)

      expect(Milestone.published).to eq [todays_milestone]
    end

    it "does not include future milestones" do
      create(:milestone, publication_date: Date.tomorrow.beginning_of_day)

      expect(Milestone.published).to be_empty
    end
  end
end
