File: test_testing.rb

package info (click to toggle)
ruby-sidekiq 4.2.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 1,064 kB
  • ctags: 754
  • sloc: ruby: 7,384; makefile: 26; sh: 4
file content (143 lines) | stat: -rw-r--r-- 3,382 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
65
66
67
68
69
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# frozen_string_literal: true
require_relative 'helper'

require 'active_record'
require 'action_mailer'
require 'sidekiq/rails'
require 'sidekiq/extensions/action_mailer'
require 'sidekiq/extensions/active_record'

Sidekiq.hook_rails!

class TestTesting < Sidekiq::Test
  describe 'sidekiq testing' do
    describe 'require/load sidekiq/testing.rb' do
      before do
        require 'sidekiq/testing'
      end

      after do
        Sidekiq::Testing.disable!
      end

      it 'enables fake testing' do
        Sidekiq::Testing.fake!
        assert Sidekiq::Testing.enabled?
        assert Sidekiq::Testing.fake?
        refute Sidekiq::Testing.inline?
      end

      it 'enables fake testing in a block' do
        Sidekiq::Testing.disable!
        assert Sidekiq::Testing.disabled?
        refute Sidekiq::Testing.fake?

        Sidekiq::Testing.fake! do
          assert Sidekiq::Testing.enabled?
          assert Sidekiq::Testing.fake?
          refute Sidekiq::Testing.inline?
        end

        refute Sidekiq::Testing.enabled?
        refute Sidekiq::Testing.fake?
      end

      it 'disables testing in a block' do
        Sidekiq::Testing.fake!
        assert Sidekiq::Testing.fake?

        Sidekiq::Testing.disable! do
          refute Sidekiq::Testing.fake?
          assert Sidekiq::Testing.disabled?
        end

        assert Sidekiq::Testing.fake?
        assert Sidekiq::Testing.enabled?
      end
    end

    describe 'require/load sidekiq/testing/inline.rb' do
      before do
        require 'sidekiq/testing/inline'
      end

      after do
        Sidekiq::Testing.disable!
      end

      it 'enables inline testing' do
        Sidekiq::Testing.inline!
        assert Sidekiq::Testing.enabled?
        assert Sidekiq::Testing.inline?
        refute Sidekiq::Testing.fake?
      end

      it 'enables inline testing in a block' do
        Sidekiq::Testing.disable!
        assert Sidekiq::Testing.disabled?
        refute Sidekiq::Testing.fake?

        Sidekiq::Testing.inline! do
          assert Sidekiq::Testing.enabled?
          assert Sidekiq::Testing.inline?
        end

        refute Sidekiq::Testing.enabled?
        refute Sidekiq::Testing.inline?
        refute Sidekiq::Testing.fake?
      end
    end
  end

  describe 'with middleware' do
    before do
      require 'sidekiq/testing'
    end

    after do
      Sidekiq::Testing.disable!
    end

    class AttributeWorker
      include Sidekiq::Worker
      class_attribute :count
      self.count = 0
      attr_accessor :foo

      def perform
        self.class.count += 1 if foo == :bar
      end
    end

    class AttributeMiddleware
      def call(worker, msg, queue)
        worker.foo = :bar if worker.respond_to?(:foo=)
        yield
      end
    end

    it 'wraps the inlined worker with middleware' do
      Sidekiq::Testing.server_middleware do |chain|
        chain.add AttributeMiddleware
      end

      begin
        Sidekiq::Testing.fake! do
          AttributeWorker.perform_async
          assert_equal 0, AttributeWorker.count
        end

        AttributeWorker.perform_one
        assert_equal 1, AttributeWorker.count

        Sidekiq::Testing.inline! do
          AttributeWorker.perform_async
          assert_equal 2, AttributeWorker.count
        end
      ensure
        Sidekiq::Testing.server_middleware.clear
      end
    end
  end

end