issuable_spec.rb 2.7 KB
Newer Older
1 2
require 'spec_helper'

D
Dmitriy Zaporozhets 已提交
3
describe Issue, "Issuable" do
4
  let(:issue) { create(:issue) }
5
  let(:user) { create(:user) }
6 7

  describe "Associations" do
8 9 10 11
    it { is_expected.to belong_to(:project) }
    it { is_expected.to belong_to(:author) }
    it { is_expected.to belong_to(:assignee) }
    it { is_expected.to have_many(:notes).dependent(:destroy) }
12 13 14
  end

  describe "Validation" do
15 16 17 18
    before do
      allow(subject).to receive(:set_iid).and_return(false)
    end

19 20 21 22
    it { is_expected.to validate_presence_of(:project) }
    it { is_expected.to validate_presence_of(:iid) }
    it { is_expected.to validate_presence_of(:author) }
    it { is_expected.to validate_presence_of(:title) }
23
    it { is_expected.to validate_length_of(:title).is_at_least(0).is_at_most(255) }
24 25 26
  end

  describe "Scope" do
27 28 29
    it { expect(described_class).to respond_to(:opened) }
    it { expect(described_class).to respond_to(:closed) }
    it { expect(described_class).to respond_to(:assigned) }
30 31 32 33 34 35
  end

  describe ".search" do
    let!(:searchable_issue) { create(:issue, title: "Searchable issue") }

    it "matches by title" do
36
      expect(described_class.search('able')).to eq([searchable_issue])
37 38 39 40 41 42
    end
  end

  describe "#today?" do
    it "returns true when created today" do
      # Avoid timezone differences and just return exactly what we want
43 44
      allow(Date).to receive(:today).and_return(issue.created_at.to_date)
      expect(issue.today?).to be_truthy
45 46 47
    end

    it "returns false when not created today" do
48 49
      allow(Date).to receive(:today).and_return(Date.yesterday)
      expect(issue.today?).to be_falsey
50 51 52 53 54
    end
  end

  describe "#new?" do
    it "returns true when created today and record hasn't been updated" do
55 56
      allow(issue).to receive(:today?).and_return(true)
      expect(issue.new?).to be_truthy
57 58 59
    end

    it "returns false when not created today" do
60 61
      allow(issue).to receive(:today?).and_return(false)
      expect(issue.new?).to be_falsey
62 63 64
    end

    it "returns false when record has been updated" do
65
      allow(issue).to receive(:today?).and_return(true)
66
      issue.touch
67
      expect(issue.new?).to be_falsey
68 69
    end
  end
70 71 72 73 74 75 76 77 78 79 80 81 82 83

  describe "#to_hook_data" do
    let(:hook_data) { issue.to_hook_data(user) }

    it "returns correct hook data" do
      expect(hook_data[:object_kind]).to eq("issue")
      expect(hook_data[:user]).to eq(user.hook_attrs)
      expect(hook_data[:repository][:name]).to eq(issue.project.name)
      expect(hook_data[:repository][:url]).to eq(issue.project.url_to_repo)
      expect(hook_data[:repository][:description]).to eq(issue.project.description)
      expect(hook_data[:repository][:homepage]).to eq(issue.project.web_url)
      expect(hook_data[:object_attributes]).to eq(issue.hook_attrs)
    end
  end
84
end