BigW Consortium Gitlab

taskable_shared_examples.rb 2.9 KB
Newer Older
Vinnie Okada committed
1 2 3
# Specs for task state functionality for issues and merge requests.
#
# Requires a context containing:
4
#   subject { Issue or MergeRequest }
Vinnie Okada committed
5
shared_examples 'a Taskable' do
6 7 8 9 10 11 12 13 14 15 16 17 18 19
  describe 'with multiple tasks' do
    before do
      subject.description = <<-EOT.strip_heredoc
        * [ ] Task 1
        * [x] Task 2
        * [x] Task 3
        * [ ] Task 4
        * [ ] Task 5
      EOT
    end

    it 'returns the correct task status' do
      expect(subject.task_status).to match('2 of')
      expect(subject.task_status).to match('5 tasks completed')
20 21
      expect(subject.task_status_short).to match('2/')
      expect(subject.task_status_short).to match('5 tasks')
22 23 24 25 26 27 28 29 30 31 32 33
    end

    describe '#tasks?' do
      it 'returns true when object has tasks' do
        expect(subject.tasks?).to eq true
      end

      it 'returns false when object has no tasks' do
        subject.description = 'Now I have no tasks'
        expect(subject.tasks?).to eq false
      end
    end
Vinnie Okada committed
34 35
  end

36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
  describe 'with nested tasks' do
    before do
      subject.description = <<-EOT.strip_heredoc
        - [ ] Task a
          - [x] Task a.1
          - [ ] Task a.2
        - [ ] Task b

        1. [ ] Task 1
          1. [ ] Task 1.1
          1. [ ] Task 1.2
        1. [x] Task 2
          1. [x] Task 2.1
      EOT
    end

    it 'returns the correct task status' do
      expect(subject.task_status).to match('3 of')
      expect(subject.task_status).to match('9 tasks completed')
      expect(subject.task_status_short).to match('3/')
      expect(subject.task_status_short).to match('9 tasks')
    end
  end

60 61 62 63 64 65 66 67 68 69
  describe 'with an incomplete task' do
    before do
      subject.description = <<-EOT.strip_heredoc
        * [ ] Task 1
      EOT
    end

    it 'returns the correct task status' do
      expect(subject.task_status).to match('0 of')
      expect(subject.task_status).to match('1 task completed')
70 71
      expect(subject.task_status_short).to match('0/')
      expect(subject.task_status_short).to match('1 task')
72
    end
Vinnie Okada committed
73 74
  end

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
  describe 'with tasks that are not formatted correctly' do
    before do
      subject.description = <<-EOT.strip_heredoc
        [ ] task 1
        [ ] task 2

        - [ ]task 1
        -[ ] task 2
      EOT
    end

    it 'returns the correct task status' do
      expect(subject.task_status).to match('0 of')
      expect(subject.task_status).to match('0 tasks completed')
      expect(subject.task_status_short).to match('0/')
      expect(subject.task_status_short).to match('0 task')
    end
  end

94 95 96 97 98
  describe 'with a complete task' do
    before do
      subject.description = <<-EOT.strip_heredoc
        * [x] Task 1
      EOT
99
    end
Vinnie Okada committed
100

101 102 103
    it 'returns the correct task status' do
      expect(subject.task_status).to match('1 of')
      expect(subject.task_status).to match('1 task completed')
104 105
      expect(subject.task_status_short).to match('1/')
      expect(subject.task_status_short).to match('1 task')
106
    end
Vinnie Okada committed
107 108
  end
end