BigW Consortium Gitlab

issue_spec.rb 3.26 KB
Newer Older
Dmitriy Zaporozhets committed
1 2 3 4
# == Schema Information
#
# Table name: issues
#
Stan Hu committed
5 6 7 8 9 10 11 12 13 14 15 16 17 18
#  id            :integer          not null, primary key
#  title         :string(255)
#  assignee_id   :integer
#  author_id     :integer
#  project_id    :integer
#  created_at    :datetime
#  updated_at    :datetime
#  position      :integer          default(0)
#  branch_name   :string(255)
#  description   :text
#  milestone_id  :integer
#  state         :string(255)
#  iid           :integer
#  updated_by_id :integer
Dmitriy Zaporozhets committed
19 20
#

gitlabhq committed
21 22 23 24
require 'spec_helper'

describe Issue do
  describe "Associations" do
25
    it { is_expected.to belong_to(:milestone) }
gitlabhq committed
26 27
  end

28
  describe 'modules' do
29 30 31
    subject { described_class }

    it { is_expected.to include_module(InternalId) }
32
    it { is_expected.to include_module(Issuable) }
33 34 35
    it { is_expected.to include_module(Referable) }
    it { is_expected.to include_module(Sortable) }
    it { is_expected.to include_module(Taskable) }
36 37
  end

38
  subject { create(:issue) }
39

40 41 42 43 44 45 46 47 48 49 50 51
  describe '#to_reference' do
    it 'returns a String reference to the object' do
      expect(subject.to_reference).to eq "##{subject.iid}"
    end

    it 'supports a cross-project reference' do
      cross = double('project')
      expect(subject.to_reference(cross)).
        to eq "#{subject.project.to_reference}##{subject.iid}"
    end
  end

52 53
  describe '#is_being_reassigned?' do
    it 'returns true if the issue assignee has changed' do
54
      subject.assignee = create(:user)
55
      expect(subject.is_being_reassigned?).to be_truthy
56 57
    end
    it 'returns false if the issue assignee has not changed' do
58
      expect(subject.is_being_reassigned?).to be_falsey
59 60
    end
  end
61 62

  describe '#is_being_reassigned?' do
Johannes Schleifenbaum committed
63
    it 'returns issues assigned to user' do
64 65
      user = create(:user)
      create_list(:issue, 2, assignee: user)
66

67
      expect(Issue.open_for(user).count).to eq 2
68 69
    end
  end
70

71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
  describe '#closed_by_merge_requests' do
    let(:project) { create(:project) }
    let(:issue)   { create(:issue, project: project, state: "opened")}
    let(:closed_issue) { build(:issue, project: project, state: "closed")}

    let(:mr) do
      opts = {
        title: 'Awesome merge_request',
        description: "Fixes #{issue.to_reference}",
        source_branch: 'feature',
        target_branch: 'master'
      }
      MergeRequests::CreateService.new(project, project.owner, opts).execute
    end

    let(:closed_mr) do
      opts = {
        title: 'Awesome merge_request 2',
        description: "Fixes #{issue.to_reference}",
        source_branch: 'feature',
        target_branch: 'master',
        state: 'closed'
      }
      MergeRequests::CreateService.new(project, project.owner, opts).execute
    end

    it 'returns the merge request to close this issue' do
      allow(mr).to receive(:closes_issue?).with(issue).and_return(true)

      expect(issue.closed_by_merge_requests).to eq([mr])
    end

    it "returns an empty array when the current issue is closed already" do
      expect(closed_issue.closed_by_merge_requests).to eq([])
    end
  end

108
  it_behaves_like 'an editable mentionable' do
Douwe Maan committed
109
    subject { create(:issue) }
110

111
    let(:backref_text) { "issue #{subject.to_reference}" }
112 113
    let(:set_mentionable_text) { ->(txt){ subject.description = txt } }
  end
Vinnie Okada committed
114 115 116 117

  it_behaves_like 'a Taskable' do
    let(:subject) { create :issue }
  end
gitlabhq committed
118
end