rspec_jsonapi_serializer 1.0.1 → 1.1.1

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
  SHA256:
3
- metadata.gz: c575d046628ade51e83238d8bc7179eea00ee9bc1cedde252fda0c8b98fa2269
4
- data.tar.gz: 30d857690790f7cc807ac6e432e1103ef646e140f085a7c5c09c8b6d3b75b1c6
3
+ metadata.gz: 3efc377379395cabd985abbac53a9fc4b69cf1a0b26204f7a19bd22a18576ed3
4
+ data.tar.gz: 14556e3d0b0952b9e27d0ebad8e78ab70814a4a7e4d7d52e8b837a8d9b3af92b
5
5
  SHA512:
6
- metadata.gz: f1303aa1426102b7f26ebc5d4abc0fbfb0a9f712e9b231e05e5a43e6e70900d3f8a1e22731db6d00f701bcbf7c024117a7c2f22fed4530403e069682f2826556
7
- data.tar.gz: 52b6d4c3dd1e2214e4275105195c028b35dfbb4b599754c23b6d65fe9c6b6cfb86e6ecc2a2bca35b5319d4b507b1c909171513dd0e5c427ea100cfb27429d261
6
+ metadata.gz: 9971fa215577e3fa032e97ebbcaaec958aad471d110d342b3e903bdaf93bad22038f3248fece252a2626b46e44e201d3398b107f69a52114055291eb166fd14c
7
+ data.tar.gz: af72fbe0cdd36375b492c1c03d84eee3a83d513e448680f06bc63c0ead0a51c6270ff6c63e17912144f4f0519b207a646bdd681210f20608975510e8aae159d1
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "rspec_jsonapi_serializer/matchers/base"
4
+ require "rspec_jsonapi_serializer/matchers/association_matchers/serializer_matcher"
5
+ require "rspec_jsonapi_serializer/metadata/relationships"
4
6
 
5
7
  module RSpecJSONAPISerializer
6
8
  module Matchers
@@ -15,8 +17,13 @@ module RSpecJSONAPISerializer
15
17
  def matches?(serializer_instance)
16
18
  @serializer_instance = serializer_instance
17
19
 
18
- relationships.select { |_, r| r.relationship_type == relationship_type }
19
- .has_key?(expected)
20
+ relationship_matches? && submatchers_match?
21
+ end
22
+
23
+ def serializer(value)
24
+ add_submatcher AssociationMatchers::SerializerMatcher.new(value, expected)
25
+
26
+ self
20
27
  end
21
28
 
22
29
  def description
@@ -26,19 +33,33 @@ module RSpecJSONAPISerializer
26
33
  end
27
34
 
28
35
  def failure_message
29
- [expected_message, actual_message].compact.join(", ")
36
+ "Expected #{expectation}"
37
+ end
38
+
39
+ def failure_message_when_negated
40
+ "Did not expect #{expectation}"
30
41
  end
31
42
 
32
43
  private
33
44
 
34
45
  attr_reader :relationship_matcher, :relationship_type
35
46
 
36
- def expected_message
37
- "expected #{serializer_name} to #{association_message} #{expected}"
47
+ def expectation
48
+ expectation = "#{serializer_name} to #{association_message} #{expected}"
49
+
50
+ submatchers_expectations = failing_submatchers.map do |submatcher|
51
+ "(#{submatcher.expectation})"
52
+ end.compact.join(", ")
53
+
54
+ [expectation, submatchers_expectations].reject(&:nil?).reject(&:empty?).join(" ")
55
+ end
56
+
57
+ def relationship_matches?
58
+ actual.present? && actual.relationship_type == relationship_type
38
59
  end
39
60
 
40
61
  def actual_message
41
- actual ? "got :#{actual} instead" : nil
62
+ actual ? "got :#{actual.relationship_type} instead" : nil
42
63
  end
43
64
 
44
65
  def association_message
@@ -46,11 +67,15 @@ module RSpecJSONAPISerializer
46
67
  end
47
68
 
48
69
  def actual
49
- relationships.key(expected) || relationship.key(expected.to_s)
70
+ metadata.relationship(expected)
50
71
  end
51
72
 
52
73
  def relationships
53
- @relationships ||= serializer_instance.class&.relationships_to_serialize || {}
74
+ metadata.relationships
75
+ end
76
+
77
+ def metadata
78
+ Metadata::Relationships.new(serializer_instance)
54
79
  end
55
80
  end
56
81
  end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rspec_jsonapi_serializer/metadata/relationships"
4
+
5
+ module RSpecJSONAPISerializer
6
+ module Matchers
7
+ module AssociationMatchers
8
+ class SerializerMatcher < Base
9
+ def initialize(value, relationship_target)
10
+ super(value)
11
+
12
+ @relationship_target = relationship_target
13
+ end
14
+
15
+ def matches?(serializer_instance)
16
+ @serializer_instance = serializer_instance
17
+
18
+ actual == expected
19
+ end
20
+
21
+ def description
22
+ "with serializer #{expected}"
23
+ end
24
+
25
+ def expectation
26
+ [ "with serializer #{expected}", actual_message ].compact.join(", ")
27
+ end
28
+
29
+ private
30
+
31
+ attr_reader :relationship_target
32
+
33
+ def actual_message
34
+ actual ? "got #{actual} instead" : nil
35
+ end
36
+
37
+ def actual
38
+ metadata.relationship(relationship_target).serializer
39
+ end
40
+
41
+ def metadata
42
+ Metadata::Relationships.new(serializer_instance)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -13,6 +13,10 @@ module RSpecJSONAPISerializer
13
13
  association_matcher.matches?(serializer_instance)
14
14
  end
15
15
 
16
+ def serializer(value)
17
+ association_matcher.serializer(value)
18
+ end
19
+
16
20
  def description
17
21
  association_matcher.description
18
22
  end
@@ -13,6 +13,10 @@ module RSpecJSONAPISerializer
13
13
  association_matcher.matches?(serializer_instance)
14
14
  end
15
15
 
16
+ def serializer(value)
17
+ association_matcher.serializer(value)
18
+ end
19
+
16
20
  def description
17
21
  association_matcher.description
18
22
  end
@@ -13,6 +13,10 @@ module RSpecJSONAPISerializer
13
13
  association_matcher.matches?(serializer_instance)
14
14
  end
15
15
 
16
+ def serializer(value)
17
+ association_matcher.serializer(value)
18
+ end
19
+
16
20
  def description
17
21
  association_matcher.description
18
22
  end
@@ -13,6 +13,8 @@ module RSpecJSONAPISerializer
13
13
  module Matchers
14
14
  # This allows us to assert attributes on a serializer, e.g.:
15
15
  # expect(serializer).to belong_to(:team)
16
+ # If you have a custom serializer, you can assert its value with the `serializer` submatcher
17
+ # expect(serializer).to belong_to(:team).serializer(TeamSerializer)
16
18
  def belong_to(expected)
17
19
  BelongToMatcher.new(expected)
18
20
  end
@@ -45,6 +47,8 @@ module RSpecJSONAPISerializer
45
47
 
46
48
  # This allows us to assert attributes on a serializer, e.g.:
47
49
  # expect(serializer).to have_many(:teams)
50
+ # If you have a custom serializer, you can assert its value with the `serializer` submatcher
51
+ # expect(serializer).to have_many(:teams).serializer(TeamSerializer)
48
52
  def have_many(expected)
49
53
  HaveManyMatcher.new(expected)
50
54
  end
@@ -61,6 +65,8 @@ module RSpecJSONAPISerializer
61
65
 
62
66
  # This allows us to assert attributes on a serializer, e.g.:
63
67
  # expect(serializer).to have_one(:team)
68
+ # If you have a custom serializer, you can assert its value with the `serializer` submatcher
69
+ # expect(serializer).to have_one(:team).serializer(TeamSerializer)
64
70
  def have_one(expected)
65
71
  HaveOneMatcher.new(expected)
66
72
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+
4
+ require "rspec_jsonapi_serializer/metadata/relationships"
5
+
6
+ module RSpecJSONAPISerializer
7
+ module Metadata
8
+ class Relationships
9
+ def initialize(serializer)
10
+ @serializer = serializer
11
+ end
12
+
13
+ def relationship(key)
14
+ relationships.values.find { |relationship| relationship.key.to_s == key.to_s }
15
+ end
16
+
17
+ def relationships
18
+ serializer.class&.relationships_to_serialize || {}
19
+ end
20
+
21
+ private
22
+
23
+ attr_reader :serializer
24
+ end
25
+ end
26
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RSpecJSONAPISerializer
4
- VERSION = "1.0.1"
4
+ VERSION = "1.1.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec_jsonapi_serializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mateus Cruz
@@ -34,6 +34,7 @@ files:
34
34
  - lib/rspec_jsonapi_serializer.rb
35
35
  - lib/rspec_jsonapi_serializer/matchers.rb
36
36
  - lib/rspec_jsonapi_serializer/matchers/association_matcher.rb
37
+ - lib/rspec_jsonapi_serializer/matchers/association_matchers/serializer_matcher.rb
37
38
  - lib/rspec_jsonapi_serializer/matchers/base.rb
38
39
  - lib/rspec_jsonapi_serializer/matchers/belong_to_matcher.rb
39
40
  - lib/rspec_jsonapi_serializer/matchers/have_attribute_matcher.rb
@@ -46,6 +47,7 @@ files:
46
47
  - lib/rspec_jsonapi_serializer/matchers/have_meta_matchers/as_matcher.rb
47
48
  - lib/rspec_jsonapi_serializer/matchers/have_one_matcher.rb
48
49
  - lib/rspec_jsonapi_serializer/matchers/have_type_matcher.rb
50
+ - lib/rspec_jsonapi_serializer/metadata/relationships.rb
49
51
  - lib/rspec_jsonapi_serializer/version.rb
50
52
  homepage: https://github.com/teamintricately/rspec_jsonapi_serializer
51
53
  licenses: