File: resource_event_spec.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (64 lines) | stat: -rw-r--r-- 1,942 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe ResourceEvent, feature_category: :team_planning, type: :model do
  context 'when inheriting from ResourceEvent' do
    context 'when it does not implement the #issuable method' do
      let(:dummy_resource_label_event_class) do
        Class.new(ResourceEvent) do
          self.table_name = 'resource_label_events'

          def self.name
            'DummyResourceLabelEventClass'
          end
        end
      end

      it 'raises error on not implemented `issuable` method' do
        expect { dummy_resource_label_event_class.new.issuable }
          .to raise_error(
            NoMethodError,
            "`DummyResourceLabelEventClass#issuable` method must be implemented"
          )
      end
    end

    context 'when it does not implement the #synthetic_note_class method' do
      let(:dummy_resource_label_event_class) do
        Class.new(ResourceEvent) do
          self.table_name = 'resource_label_events'

          def self.name
            'DummyResourceLabelEventClass'
          end

          def issuable
            :issuable
          end
        end
      end

      it 'raises error on not implemented `issuable` method' do
        expect { dummy_resource_label_event_class.new.synthetic_note_class }
          .to raise_error(NoMethodError, <<~MESSAGE.squish)
            `DummyResourceLabelEventClass#synthetic_note_class` method must be implemented
            (return nil if event does not require a note)
          MESSAGE
      end
    end

    it 'must implement #synthetic_note_class method', :aggregate_failures do
      Dir['{ee/,}app/models/**/resource*event.rb'].each do |klass|
        require(Rails.root.join(klass))
      end

      described_class.subclasses.each do |klass|
        next if klass.abstract_class?

        expect { klass.new.synthetic_note_class }
          .not_to(raise_error)
      end
    end
  end
end