metrics_spec.rb 2.13 KB
Newer Older
1 2
require 'spec_helper'

3
describe Issue::Metrics do
4
  let(:project) { create(:project) }
5 6 7 8 9 10 11

  subject { create(:issue, project: project) }

  describe "when recording the default set of issue metrics on issue save" do
    context "milestones" do
      it "records the first time an issue is associated with a milestone" do
        time = Time.now
12
        Timecop.freeze(time) { subject.update(milestone: create(:milestone, project: project)) }
13 14 15
        metrics = subject.metrics

        expect(metrics).to be_present
16
        expect(metrics.first_associated_with_milestone_at).to be_like_time(time)
17 18 19 20
      end

      it "does not record the second time an issue is associated with a milestone" do
        time = Time.now
21
        Timecop.freeze(time) { subject.update(milestone: create(:milestone, project: project)) }
22
        Timecop.freeze(time + 2.hours) { subject.update(milestone: nil) }
23
        Timecop.freeze(time + 6.hours) { subject.update(milestone: create(:milestone, project: project)) }
24 25 26
        metrics = subject.metrics

        expect(metrics).to be_present
27
        expect(metrics.first_associated_with_milestone_at).to be_like_time(time)
28 29 30 31 32 33 34 35 36 37 38
      end
    end

    context "list labels" do
      it "records the first time an issue is associated with a list label" do
        list_label = create(:label, lists: [create(:list)])
        time = Time.now
        Timecop.freeze(time) { subject.update(label_ids: [list_label.id]) }
        metrics = subject.metrics

        expect(metrics).to be_present
39
        expect(metrics.first_added_to_board_at).to be_like_time(time)
40 41 42 43 44 45 46 47 48 49 50
      end

      it "does not record the second time an issue is associated with a list label" do
        time = Time.now
        first_list_label = create(:label, lists: [create(:list)])
        Timecop.freeze(time) { subject.update(label_ids: [first_list_label.id]) }
        second_list_label = create(:label, lists: [create(:list)])
        Timecop.freeze(time + 5.hours) { subject.update(label_ids: [second_list_label.id]) }
        metrics = subject.metrics

        expect(metrics).to be_present
51
        expect(metrics.first_added_to_board_at).to be_like_time(time)
52 53 54 55
      end
    end
  end
end