File tree Expand file tree Collapse file tree 3 files changed +33
-7
lines changed Expand file tree Collapse file tree 3 files changed +33
-7
lines changed Original file line number Diff line number Diff line change @@ -42,6 +42,7 @@ Available matchers:
4242* ` expect(document['data']).to have_link(:self).with_value('http://api.example.com/users/12') `
4343* ` expect(document).to have_meta `
4444* ` expect(document).to have_meta('foo' => 'bar') `
45+ * ` expect(document).to have_meta('foo' => 'bar', 'fum' => 'baz').exactly `
4546* ` expect(document).to have_jsonapi_object `
4647* ` expect(document).to have_jsonapi_object('version' => '1.0') `
4748
Original file line number Diff line number Diff line change @@ -4,9 +4,17 @@ module Meta
44 ::RSpec ::Matchers . define :have_meta do |val |
55 match do |actual |
66 actual = JSONAPI ::RSpec . as_indifferent_hash ( actual )
7+ return false unless actual . key? ( 'meta' )
8+ return true unless val
9+
710 val = JSONAPI ::RSpec . as_indifferent_hash ( val )
11+ return false unless val <= actual [ 'meta' ]
12+
13+ !@exactly || ( @exactly && val . size == actual [ 'meta' ] . size )
14+ end
815
9- actual . key? ( 'meta' ) && ( !val || actual [ 'meta' ] == val )
16+ chain :exactly do
17+ @exactly = true
1018 end
1119 end
1220 end
Original file line number Diff line number Diff line change 11require 'spec_helper'
22
33RSpec . describe JSONAPI ::RSpec , '#have_meta' do
4+ let ( :doc ) do
5+ {
6+ 'meta' => {
7+ 'one' => 'I' ,
8+ 'two' => 'II' ,
9+ 'three' => 'III'
10+ }
11+ }
12+ end
413 context 'when providing no value' do
514 it 'succeeds when meta is present' do
6- expect ( 'meta' => { } ) . to have_meta
15+ expect ( doc ) . to have_meta
716 end
817
918 it 'fails when meta is absent' do
1726 after ( :all ) { ::RSpec . configuration . jsonapi_indifferent_hash = false }
1827
1928 it do
20- expect ( 'meta' => { 'foo' => 'bar' } ) . to have_meta ( foo : :bar )
29+ expect ( doc ) . to have_meta ( one : 'I' )
2130 end
2231 end
2332
24- it 'succeeds when meta matches' do
25- expect ( 'meta' => { foo : 'bar' } ) . to have_meta ( foo : 'bar' )
33+ it 'succeeds when meta includes the value' do
34+ expect ( doc ) . to have_meta ( 'one' => 'I' )
35+ end
36+
37+ it 'fails when meta does not include the value' do
38+ expect ( doc ) . not_to have_meta ( 'one' => 'II' )
39+ end
40+
41+ it 'succeeds when meta exactly matches the value' do
42+ expect ( doc ) . to have_meta ( { 'one' => 'I' , 'two' => 'II' , 'three' => 'III' } ) . exactly
2643 end
2744
28- it 'fails when meta mismatches ' do
29- expect ( 'meta ' => { foo : 'bar' } ) . not_to have_meta ( bar : 'baz' )
45+ it 'succeeds when meta does not exactly match the value ' do
46+ expect ( doc ) . not_to have_meta ( { 'one ' => ' foo' , 'two' => 'II' , 'three' => 'III' } ) . exactly
3047 end
3148
3249 it 'fails when meta is absent' do
You can’t perform that action at this time.
0 commit comments