rspec-activejob 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5ec1b26448aaa3732cc1239e94ed67be18fdd034
4
- data.tar.gz: 53d956546e042ad727cc3d02094c5fb9851c24ff
3
+ metadata.gz: 6ed4f20a431ed47d9bac346276c28f5c66143cf5
4
+ data.tar.gz: 2ac30436e51224415b3a083acbfb008eeaf7a1c8
5
5
  SHA512:
6
- metadata.gz: 7dbbdb3029c97cb2c71fe0b57d112fece98190849934e26e861e01cb4f2f9a427921fa541cba527589f341f06a1a5629a7a5afd9fddceb7f59d06ec56fabfddf
7
- data.tar.gz: ded3be79382e60bf7fa9c590da4f34a0732ff660c51236cba33153aae22da379b3144bcd7a8cf8b4f4193dc24b47e35fca75a920bde1eebdaae8396719a61ee2
6
+ metadata.gz: 41552e56407232b5f260b1b8459725916a86b3b5411938bf87a23074f84f62bf58c011195952fac04dad56519bbe3970c06d98bd7c01c7ad9a8ad92135b870f5
7
+ data.tar.gz: f057e07d01d62994ec8d586f56af964075bafe140c95c3843a29913eb79d46b01f37f2cfd90b984641f133a106042625cc02ba09e806ff42c0a894062bdb7cd9
@@ -1,3 +1,11 @@
1
+ ## 0.3.0 - Unreleased
2
+
3
+ - Added the `deserialize_as` matcher
4
+
5
+ ## 0.2.0 - January 21, 2015
6
+
7
+ - Added the `global_id` matcher
8
+
1
9
  ## 0.1.0 - January 18, 2015
2
10
 
3
11
  - Added support for argument matchers (e.g. `instance_of`, `hash_including`), like the `receive` matcher.
@@ -1,17 +1,17 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-activejob (0.2.0)
4
+ rspec-activejob (0.3.0)
5
5
  activejob (>= 4.2)
6
6
  rspec-mocks
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activejob (4.2.0)
12
- activesupport (= 4.2.0)
11
+ activejob (4.2.1)
12
+ activesupport (= 4.2.1)
13
13
  globalid (>= 0.3.0)
14
- activesupport (4.2.0)
14
+ activesupport (4.2.1)
15
15
  i18n (~> 0.7)
16
16
  json (~> 1.7, >= 1.7.7)
17
17
  minitest (~> 5.1)
@@ -19,7 +19,7 @@ GEM
19
19
  tzinfo (~> 1.1)
20
20
  coderay (1.1.0)
21
21
  diff-lcs (1.2.5)
22
- globalid (0.3.0)
22
+ globalid (0.3.3)
23
23
  activesupport (>= 4.1.0)
24
24
  i18n (0.7.0)
25
25
  json (1.8.2)
@@ -29,23 +29,24 @@ GEM
29
29
  coderay (~> 1.1.0)
30
30
  method_source (~> 0.8.1)
31
31
  slop (~> 3.4)
32
- rspec (3.1.0)
33
- rspec-core (~> 3.1.0)
34
- rspec-expectations (~> 3.1.0)
35
- rspec-mocks (~> 3.1.0)
36
- rspec-core (3.1.7)
37
- rspec-support (~> 3.1.0)
38
- rspec-expectations (3.1.2)
32
+ rspec (3.2.0)
33
+ rspec-core (~> 3.2.0)
34
+ rspec-expectations (~> 3.2.0)
35
+ rspec-mocks (~> 3.2.0)
36
+ rspec-core (3.2.2)
37
+ rspec-support (~> 3.2.0)
38
+ rspec-expectations (3.2.0)
39
39
  diff-lcs (>= 1.2.0, < 2.0)
40
- rspec-support (~> 3.1.0)
41
- rspec-its (1.1.0)
40
+ rspec-support (~> 3.2.0)
41
+ rspec-its (1.2.0)
42
42
  rspec-core (>= 3.0.0)
43
43
  rspec-expectations (>= 3.0.0)
44
- rspec-mocks (3.1.3)
45
- rspec-support (~> 3.1.0)
46
- rspec-support (3.1.2)
44
+ rspec-mocks (3.2.1)
45
+ diff-lcs (>= 1.2.0, < 2.0)
46
+ rspec-support (~> 3.2.0)
47
+ rspec-support (3.2.2)
47
48
  slop (3.6.0)
48
- thread_safe (0.3.4)
49
+ thread_safe (0.3.5)
49
50
  tzinfo (1.2.2)
50
51
  thread_safe (~> 0.1)
51
52
 
@@ -53,6 +54,7 @@ PLATFORMS
53
54
  ruby
54
55
 
55
56
  DEPENDENCIES
57
+ activesupport
56
58
  pry
57
59
  rspec
58
60
  rspec-activejob!
data/README.md CHANGED
@@ -5,6 +5,8 @@
5
5
  config.active_job.queue_adapter = :test
6
6
 
7
7
  # spec/spec_helper.rb
8
+ require 'rspec/active_job'
9
+
8
10
  RSpec.configure do |config|
9
11
  config.include(RSpec::ActiveJob)
10
12
 
@@ -27,10 +29,10 @@ end
27
29
 
28
30
  rspec-activejob expects the current queue adapter to expose an array of `enqueued_jobs`, like the included
29
31
  test adapter. The test adapter included in ActiveJob 4.2.0 does not fully serialize its arguments, so you
30
- will not need to use the GlobalID matcher until ActiveJob 4.2.1. See rails/rails#18266 for the improved
31
- test adapter.
32
+ will not need to use the GlobalID matcher unless you're using ActiveJob 4.2.1. See rails/rails#18266 for
33
+ the improved test adapter.
32
34
 
33
- This gem defines two matchers:
35
+ This gem defines three matchers:
34
36
 
35
37
  * `enqueue_a`: for a block or proc, expects that to enqueue an job to the ActiveJob test adapter. Optionally
36
38
  takes the job class as its argument, and can be modified with a `.with(*args)` call to expect specific arguments.
@@ -41,6 +43,8 @@ This gem defines two matchers:
41
43
  the serialized version of any instance of that model; if you pass an instance, it will expect the serialized
42
44
  version of that specific instance.
43
45
 
46
+ * `deserialize_as(hash)`: an argument matcher, matching ActiveJob-serialized versions of hashes (with
47
+ string/symbol keys, or with indifferent access).
44
48
 
45
49
  With the `global_id` matcher it's important to note that it's specific to ActiveJob-serialized GlobalIDs.
46
50
  ActiveJob serializes them as a hash like `{ '_aj_global_id' => 'gid://my-app/MyModel/ID123' }`, to avoid
@@ -1,5 +1,6 @@
1
1
  require 'rspec/active_job/enqueue_a'
2
2
  require 'rspec/active_job/global_id'
3
+ require 'rspec/active_job/deserialize_as'
3
4
 
4
5
  module RSpec
5
6
  module ActiveJob
@@ -10,5 +11,9 @@ module RSpec
10
11
  def global_id(expected)
11
12
  Matchers::GlobalID.new(expected)
12
13
  end
14
+
15
+ def deserialize_as(expected)
16
+ Matchers::DeserializeAs.new(expected)
17
+ end
13
18
  end
14
19
  end
@@ -0,0 +1,29 @@
1
+ require 'active_job/arguments'
2
+ require 'active_support/core_ext/hash/indifferent_access'
3
+
4
+ module RSpec
5
+ module ActiveJob
6
+ module Matchers
7
+ class DeserializeAs
8
+ def initialize(expected)
9
+ @expected = expected
10
+ end
11
+
12
+ def ===(other)
13
+ deserialize(other).class == @expected.class &&
14
+ deserialize(other) == @expected
15
+ end
16
+
17
+ def description
18
+ "an object deserializing to #{@expected}"
19
+ end
20
+
21
+ private
22
+
23
+ def deserialize(argument)
24
+ ::ActiveJob::Arguments.deserialize([argument]).first
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,5 +1,5 @@
1
1
  module RSpec
2
2
  module ActiveJob
3
- VERSION = '0.2.0'.freeze
3
+ VERSION = '0.3.0'.freeze
4
4
  end
5
5
  end
@@ -9,7 +9,8 @@ Gem::Specification.new do |s|
9
9
  s.summary = 'RSpec matchers to test ActiveJob'
10
10
  s.description = <<-EOL
11
11
  RSpec matchers for ActiveJob:
12
- * expect { method }.to enqueue_a(MyJob).with('some', 'arguments')
12
+ * expect { method }.to enqueue_a(MyJob).with(global_id(some_model),
13
+ deserialize_as(other_argument))
13
14
  EOL
14
15
  s.homepage = 'http://github.com/gocardless/rspec-activejob'
15
16
  s.license = 'MIT'
@@ -23,4 +24,5 @@ Gem::Specification.new do |s|
23
24
 
24
25
  s.add_development_dependency('rspec')
25
26
  s.add_development_dependency('rspec-its')
27
+ s.add_development_dependency('activesupport')
26
28
  end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe RSpec::ActiveJob::Matchers::DeserializeAs do
4
+ let(:instance) { described_class.new(expected) }
5
+ subject(:matches?) { instance === actual }
6
+
7
+ context "with an indifferent hash" do
8
+ let(:actual) do
9
+ { 'key' => 'value', '_aj_hash_with_indifferent_access' => true }
10
+ end
11
+ let(:expected) { ActiveSupport::HashWithIndifferentAccess.new(key: 'value') }
12
+
13
+ it { is_expected.to be(true) }
14
+
15
+ context "with a non-indifferent hash serialized" do
16
+ let(:actual) { { 'key' => 'value', '_aj_symbol_keys' => [] } }
17
+
18
+ it { is_expected.to be(false) }
19
+ end
20
+ end
21
+
22
+ context "with a string-keyed hash" do
23
+ let(:expected) { { 'key' => 'value' } }
24
+ let(:actual) { { 'key' => 'value', '_aj_symbol_keys' => [] } }
25
+
26
+ it { is_expected.to be(true) }
27
+
28
+ context "with an indifferent hash serialized" do
29
+ let(:actual) do
30
+ { 'key' => 'value', '_aj_hash_with_indifferent_access' => true }
31
+ end
32
+ it { is_expected.to be(false) }
33
+ end
34
+
35
+ context "with a symbol keyed hash serialized" do
36
+ let(:actual) { { 'key' => 'value', '_aj_symbol_keys' => ['key'] } }
37
+ it { is_expected.to be(false) }
38
+ end
39
+ end
40
+
41
+ context "with a symbol-keyed hash" do
42
+ let(:expected) { { key: 'value' } }
43
+ let(:actual) { { 'key' => 'value', '_aj_symbol_keys' => ['key'] } }
44
+
45
+ it { is_expected.to be(true) }
46
+
47
+ context "with an indifferent hash serialized" do
48
+ let(:actual) do
49
+ { 'key' => 'value', '_aj_hash_with_indifferent_access' => true }
50
+ end
51
+ it { is_expected.to be(false) }
52
+ end
53
+
54
+ context "with a string keyed hash serialized" do
55
+ let(:actual) { { 'key' => 'value', '_aj_symbol_keys' => [] } }
56
+ it { is_expected.to be(false) }
57
+ end
58
+ end
59
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-activejob
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Isaac Seymour
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-20 00:00:00.000000000 Z
11
+ date: 2015-03-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activejob
@@ -66,9 +66,24 @@ dependencies:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: activesupport
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  description: |2
70
84
  RSpec matchers for ActiveJob:
71
- * expect { method }.to enqueue_a(MyJob).with('some', 'arguments')
85
+ * expect { method }.to enqueue_a(MyJob).with(global_id(some_model),
86
+ deserialize_as(other_argument))
72
87
  email:
73
88
  - isaac@isaacseymour.co.uk
74
89
  executables: []
@@ -82,10 +97,12 @@ files:
82
97
  - Gemfile.lock
83
98
  - README.md
84
99
  - lib/rspec/active_job.rb
100
+ - lib/rspec/active_job/deserialize_as.rb
85
101
  - lib/rspec/active_job/enqueue_a.rb
86
102
  - lib/rspec/active_job/global_id.rb
87
103
  - lib/rspec/active_job/version.rb
88
104
  - rspec-activejob.gemspec
105
+ - spec/rspec/active_job/deserialize_as_spec.rb
89
106
  - spec/rspec/active_job/enqueue_a_spec.rb
90
107
  - spec/rspec/active_job/global_id_spec.rb
91
108
  - spec/spec_helper.rb