rspec_jsonapi_serializer 1.0.1 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
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: