marvel_api 0.2.0 → 0.2.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 +4 -4
- data/.document +1 -1
- data/.rspec +2 -1
- data/.travis.yml +8 -0
- data/Gemfile +11 -4
- data/Guardfile +5 -0
- data/LICENSE.txt +1 -1
- data/README.md +16 -4
- data/Rakefile +11 -8
- data/lib/marvel/client.rb +6 -14
- data/lib/marvel/connection.rb +10 -2
- data/lib/marvel/error.rb +16 -0
- data/lib/marvel/request.rb +22 -8
- data/lib/marvel/response.rb +21 -0
- data/lib/marvel/version.rb +14 -0
- data/marvel_api.gemspec +75 -18
- data/spec/fixtures/characters/character.json +341 -0
- data/spec/fixtures/characters/character_comics.json +4975 -0
- data/spec/fixtures/characters/character_events.json +1666 -0
- data/spec/fixtures/characters/character_series.json +6117 -0
- data/spec/fixtures/characters/character_stories.json +1873 -0
- data/spec/fixtures/characters/characters.json +3006 -0
- data/spec/fixtures/comics/comic.json +359 -0
- data/spec/fixtures/comics/comic_characters.json +4649 -0
- data/spec/fixtures/comics/comic_creators.json +4387 -0
- data/spec/fixtures/comics/comic_events.json +522 -0
- data/spec/fixtures/comics/comic_stories.json +1985 -0
- data/spec/fixtures/comics/comics.json +2246 -0
- data/spec/fixtures/creators/creator.json +340 -0
- data/spec/fixtures/creators/creator_comics.json +2856 -0
- data/spec/fixtures/creators/creator_events.json +1899 -0
- data/spec/fixtures/creators/creator_series.json +4686 -0
- data/spec/fixtures/creators/creator_stories.json +1491 -0
- data/spec/fixtures/creators/creators.json +1376 -0
- data/spec/fixtures/errors/empty_parameter.json +4 -0
- data/spec/fixtures/errors/excessive_filter_values.json +4 -0
- data/spec/fixtures/errors/invalid_credentials.json +4 -0
- data/spec/fixtures/errors/invalid_filter_value.json +4 -0
- data/spec/fixtures/errors/invalid_hash_ts_key_combo.json +4 -0
- data/spec/fixtures/errors/invalid_ordering.json +4 -0
- data/spec/fixtures/errors/invalid_parameter.json +4 -0
- data/spec/fixtures/errors/limit_invalid.json +4 -0
- data/spec/fixtures/errors/limit_over_100.json +4 -0
- data/spec/fixtures/errors/resource_not_found.json +4 -0
- data/spec/fixtures/events/event.json +522 -0
- data/spec/fixtures/events/event_characters.json +6397 -0
- data/spec/fixtures/events/event_comics.json +4718 -0
- data/spec/fixtures/events/event_creators.json +5869 -0
- data/spec/fixtures/events/event_series.json +2243 -0
- data/spec/fixtures/events/event_stories.json +4846 -0
- data/spec/fixtures/events/events.json +8613 -0
- data/spec/fixtures/series/serie.json +448 -0
- data/spec/fixtures/series/series.json +3464 -0
- data/spec/fixtures/series/series_characters.json +6029 -0
- data/spec/fixtures/series/series_comics.json +2935 -0
- data/spec/fixtures/series/series_creators.json +5923 -0
- data/spec/fixtures/series/series_events.json +944 -0
- data/spec/fixtures/series/series_stories.json +1544 -0
- data/spec/fixtures/stories/stories.json +1282 -0
- data/spec/fixtures/stories/story.json +117 -0
- data/spec/fixtures/stories/story_characters.json +794 -0
- data/spec/fixtures/stories/story_comics.json +522 -0
- data/spec/fixtures/stories/story_creators.json +1672 -0
- data/spec/fixtures/stories/story_events.json +522 -0
- data/spec/fixtures/stories/story_series.json +695 -0
- data/spec/marvel_api/client/client_character_spec.rb +142 -0
- data/spec/marvel_api/client/client_comic_spec.rb +141 -0
- data/spec/marvel_api/client/client_creator_spec.rb +139 -0
- data/spec/marvel_api/client/client_event_spec.rb +163 -0
- data/spec/marvel_api/client/client_series_spec.rb +165 -0
- data/spec/marvel_api/client/client_story_spec.rb +162 -0
- data/spec/marvel_api/error_spec.rb +192 -0
- data/spec/marvel_api_spec.rb +15 -3
- data/spec/spec_helper.rb +55 -4
- metadata +83 -27
- data/VERSION +0 -1
- data/spec/marvel_api/client_spec.rb +0 -7
@@ -0,0 +1,165 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Marvel::Client do
|
4
|
+
let(:client) { marvel_test_client }
|
5
|
+
|
6
|
+
context 'Series endpoints' do
|
7
|
+
let(:id) { 354 }
|
8
|
+
|
9
|
+
describe '#series' do
|
10
|
+
before do
|
11
|
+
stub_get('series', returns: 'series/series.json')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'fetches a list of series' do
|
15
|
+
expect(client.series.size).to eq 20
|
16
|
+
expect(client.series.map(&:title).take(3))
|
17
|
+
.to eq ['100th Anniversary Special (2014 - Present)',
|
18
|
+
'15-Love (2011)',
|
19
|
+
'15-Love GN-TPB (2013 - Present)']
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'requests public/v1/series successfully' do
|
23
|
+
expect(client.series.status).to eq 'Ok'
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'returns an [ Hashie::Mash ]' do
|
27
|
+
expect(client.series).to be_an Array
|
28
|
+
expect(client.series.sample).to be_a Hashie::Mash
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe '#serie' do
|
33
|
+
before do
|
34
|
+
stub_get("series/#{id}", returns: 'series/serie.json')
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'fetches a single series by id' do
|
38
|
+
expect(client.serie(id).size).to eq 1
|
39
|
+
expect(client.serie(id).pop.title)
|
40
|
+
.to eq 'Avengers (1998 - 2004)'
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'requests public/v1/series/#{id} successfully' do
|
44
|
+
expect(client.serie(id).status).to eq 'Ok'
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'returns an [ Hashie::Mash ]' do
|
48
|
+
expect(client.serie(id)).to be_an Array
|
49
|
+
expect(client.serie(id).sample).to be_a Hashie::Mash
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
describe '#series_characters' do
|
54
|
+
before do
|
55
|
+
stub_get("series/#{id}/characters",
|
56
|
+
returns: 'series/series_characters.json')
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'fetches a list of characters filtered by series id' do
|
60
|
+
expect(client.series_characters(id).size).to eq 20
|
61
|
+
expect(client.series_characters(id).map(&:name).take(3))
|
62
|
+
.to eq ['A.I.M.',
|
63
|
+
'Abomination (Emil Blonsky)',
|
64
|
+
'Archangel']
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'requests public/v1/series/#{id}/characters successfully' do
|
68
|
+
expect(client.series_characters(id).status).to eq 'Ok'
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'returns an [ Hashie::Mash ]' do
|
72
|
+
expect(client.series_characters(id)).to be_an Array
|
73
|
+
expect(client.series_characters(id).sample).to be_a Hashie::Mash
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe '#series_comics' do
|
78
|
+
before do
|
79
|
+
stub_get("series/#{id}/comics",
|
80
|
+
returns: 'series/series_comics.json')
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'fetches a list of comics filtered by series id' do
|
84
|
+
expect(client.series_comics(id).size).to eq 20
|
85
|
+
expect(client.series_comics(id).map(&:id).take(3))
|
86
|
+
.to eq [923, 845, 767]
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'requests public/v1/series/#{id}/comics successfully' do
|
90
|
+
expect(client.series_comics(id).status).to eq 'Ok'
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'returns an [ Hashie::Mash ]' do
|
94
|
+
expect(client.series_comics(id)).to be_an Array
|
95
|
+
expect(client.series_comics(id).sample).to be_a Hashie::Mash
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe '#series_creators' do
|
100
|
+
before do
|
101
|
+
stub_get("series/#{id}/creators",
|
102
|
+
returns: 'series/series_creators.json')
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'fetches a list of creators filtered by series id' do
|
106
|
+
expect(client.series_creators(id).size).to eq 20
|
107
|
+
expect(client.series_creators(id).map(&:id).take(3))
|
108
|
+
.to eq [807, 5744, 6694]
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'requests public/v1/series/#{id}/creators successfully' do
|
112
|
+
expect(client.series_creators(id).status).to eq 'Ok'
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'returns an [ Hashie::Mash ]' do
|
116
|
+
expect(client.series_creators(id)).to be_an Array
|
117
|
+
expect(client.series_creators(id).sample).to be_a Hashie::Mash
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe '#series_events' do
|
122
|
+
before do
|
123
|
+
stub_get("series/#{id}/events",
|
124
|
+
returns: 'series/series_events.json')
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'fetches a list of events filtered by series id' do
|
128
|
+
expect(client.series_events(id).size).to eq 2
|
129
|
+
expect(client.series_events(id).map(&:title))
|
130
|
+
.to eq ['Avengers Disassembled', 'Maximum Security']
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'requests public/v1/series/#{id}/events successfully' do
|
134
|
+
expect(client.series_events(id).status).to eq 'Ok'
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'returns an [ Hashie::Mash ]' do
|
138
|
+
expect(client.series_events(id)).to be_an Array
|
139
|
+
expect(client.series_events(id).sample).to be_a Hashie::Mash
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
describe '#series_stories' do
|
144
|
+
before do
|
145
|
+
stub_get("series/#{id}/stories",
|
146
|
+
returns: 'series/series_stories.json')
|
147
|
+
end
|
148
|
+
|
149
|
+
it 'fetches a list of stories filtered by series id' do
|
150
|
+
expect(client.series_stories(id).size).to eq 20
|
151
|
+
expect(client.series_stories(id).map(&:id).take(3))
|
152
|
+
.to eq [490, 542, 572]
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'requests public/v1/series/#{id}/stories successfully' do
|
156
|
+
expect(client.series_stories(id).status).to eq 'Ok'
|
157
|
+
end
|
158
|
+
|
159
|
+
it 'returns an [ Hashie::Mash ]' do
|
160
|
+
expect(client.series_stories(id)).to be_an Array
|
161
|
+
expect(client.series_stories(id).sample).to be_a Hashie::Mash
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Marvel::Client do
|
4
|
+
let(:client) { marvel_test_client }
|
5
|
+
|
6
|
+
context 'Story endpoints' do
|
7
|
+
let(:id) { 2209 }
|
8
|
+
|
9
|
+
describe '#stories' do
|
10
|
+
before do
|
11
|
+
stub_get('stories', returns: 'stories/stories.json')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'fetches a list of stories' do
|
15
|
+
expect(client.stories.size).to eq 20
|
16
|
+
expect(client.stories.map(&:id).take(3))
|
17
|
+
.to eq [3, 7, 8]
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'requests public/v1/stories successfully' do
|
21
|
+
expect(client.stories.status).to eq 'Ok'
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'returns an [ Hashie::Mash ]' do
|
25
|
+
expect(client.stories).to be_an Array
|
26
|
+
expect(client.stories.sample).to be_a Hashie::Mash
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#story' do
|
31
|
+
before do
|
32
|
+
stub_get("stories/#{id}", returns: 'stories/story.json')
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'fetches a single story by id' do
|
36
|
+
expect(client.story(id).size).to eq 1
|
37
|
+
expect(client.story(id).pop.title)
|
38
|
+
.to eq '1 of 3 - House of M'
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'requests public/v1/stories/#{id} successfully' do
|
42
|
+
expect(client.story(id).status).to eq 'Ok'
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns an [ Hashie::Mash ]' do
|
46
|
+
expect(client.story(id)).to be_an Array
|
47
|
+
expect(client.story(id).sample).to be_a Hashie::Mash
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#story_characters' do
|
52
|
+
before do
|
53
|
+
stub_get("stories/#{id}/characters",
|
54
|
+
returns: 'stories/story_characters.json')
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'fetches a list of characters filtered by story id' do
|
58
|
+
expect(client.story_characters(id).size).to eq 2
|
59
|
+
expect(client.story_characters(id).map(&:name))
|
60
|
+
.to eq ['Iron Man', 'Wolverine']
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'requests public/v1/stories/#{id}/characters successfully' do
|
64
|
+
expect(client.story_characters(id).status).to eq 'Ok'
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'returns an [ Hashie::Mash ]' do
|
68
|
+
expect(client.story_characters(id)).to be_an Array
|
69
|
+
expect(client.story_characters(id).sample).to be_a Hashie::Mash
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#story_comics' do
|
74
|
+
before do
|
75
|
+
stub_get("stories/#{id}/comics",
|
76
|
+
returns: 'stories/story_comics.json')
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'fetches a list of comics filtered by story id' do
|
80
|
+
expect(client.story_comics(id).size).to eq 2
|
81
|
+
expect(client.story_comics(id).map(&:title))
|
82
|
+
.to eq ['House of M: World of M (Trade Paperback)',
|
83
|
+
'Wolverine (2003) #33']
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'requests public/v1/stories/#{id}/comics successfully' do
|
87
|
+
expect(client.story_comics(id).status).to eq 'Ok'
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'returns an [ Hashie::Mash ]' do
|
91
|
+
expect(client.story_comics(id)).to be_an Array
|
92
|
+
expect(client.story_comics(id).sample).to be_a Hashie::Mash
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe '#story_creators' do
|
97
|
+
before do
|
98
|
+
stub_get("stories/#{id}/creators",
|
99
|
+
returns: 'stories/story_creators.json')
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'fetches a list of creators filtered by story id' do
|
103
|
+
expect(client.story_creators(id).size).to eq 5
|
104
|
+
expect(client.story_creators(id).map(&:fullName).take(3))
|
105
|
+
.to eq ['Randy Gentile', 'Paul Mounts', 'Javier Saltares']
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'requests public/v1/stories/#{id}/creators successfully' do
|
109
|
+
expect(client.story_creators(id).status).to eq 'Ok'
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'returns an [ Hashie::Mash ]' do
|
113
|
+
expect(client.story_creators(id)).to be_an Array
|
114
|
+
expect(client.story_creators(id).sample).to be_a Hashie::Mash
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe '#story_events' do
|
119
|
+
before do
|
120
|
+
stub_get("stories/#{id}/events",
|
121
|
+
returns: 'stories/story_events.json')
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'fetches a list of events filtered by story id' do
|
125
|
+
expect(client.story_events(id).size).to eq 1
|
126
|
+
expect(client.story_events(id).map(&:title))
|
127
|
+
.to eq ['House of M']
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'requests public/v1/stories/#{id}/events successfully' do
|
131
|
+
expect(client.story_events(id).status).to eq 'Ok'
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'returns an [ Hashie::Mash ]' do
|
135
|
+
expect(client.story_events(id)).to be_an Array
|
136
|
+
expect(client.story_events(id).sample).to be_a Hashie::Mash
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe '#story_series' do
|
141
|
+
before do
|
142
|
+
stub_get("stories/#{id}/series",
|
143
|
+
returns: 'stories/story_series.json')
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'fetches a list of series filtered by story id' do
|
147
|
+
expect(client.story_series(id).size).to eq 2
|
148
|
+
expect(client.story_series(id).map(&:id))
|
149
|
+
.to eq [1614, 632]
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'requests public/v1/stories/#{id}/series successfully' do
|
153
|
+
expect(client.story_series(id).status).to eq 'Ok'
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'returns an [ Hashie::Mash ]' do
|
157
|
+
expect(client.story_series(id)).to be_an Array
|
158
|
+
expect(client.story_series(id).sample).to be_a Hashie::Mash
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
@@ -0,0 +1,192 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Marvel::Response::Error do
|
4
|
+
let(:client) { marvel_test_client }
|
5
|
+
|
6
|
+
context 'A request' do
|
7
|
+
describe 'for a non-existent resource' do
|
8
|
+
before do
|
9
|
+
stub_get('characters/1',
|
10
|
+
response_code: 404,
|
11
|
+
returns: 'errors/resource_not_found.json')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'returns a 404 not found' do
|
15
|
+
expect(client.character(1).to_s)
|
16
|
+
.to eq '404 We couldn\'t find that character'
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'returns a Marvel::Response::Error' do
|
20
|
+
expect(client.character(1))
|
21
|
+
.to be_a Marvel::Response::Error
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe 'with a limit parameter greater than 100' do
|
26
|
+
before do
|
27
|
+
stub_get('characters', limit: 101,
|
28
|
+
response_code: 409,
|
29
|
+
returns: 'errors/limit_over_100.json')
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'returns a 409 error' do
|
33
|
+
expect(client.characters(limit: 101).to_s)
|
34
|
+
.to eq '409 You may not request more than 100 items.'
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'returns a Marvel::Response::Error' do
|
38
|
+
expect(client.characters(limit: 101))
|
39
|
+
.to be_a Marvel::Response::Error
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'with an invalid limit or less than 1' do
|
44
|
+
before do
|
45
|
+
stub_get('characters', limit: 0,
|
46
|
+
response_code: 409,
|
47
|
+
returns: 'errors/limit_invalid.json')
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'returns a 409 error' do
|
51
|
+
expect(client.characters(limit: 0).to_s)
|
52
|
+
.to eq '409 You must pass an integer limit greater than 0.'
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'returns a Marvel::Response::Error' do
|
56
|
+
expect(client.characters(limit: 0))
|
57
|
+
.to be_a Marvel::Response::Error
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe 'with an invalid paramter' do
|
62
|
+
before do
|
63
|
+
stub_get('characters', invalid_param: 1,
|
64
|
+
response_code: 409,
|
65
|
+
returns: 'errors/invalid_parameter.json')
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'returns a 409 error' do
|
69
|
+
expect(client.characters(invalid_param: 1).to_s)
|
70
|
+
.to eq '409 We don\'t recognize the parameter invalid_param'
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'returns a Marvel::Response::Error' do
|
74
|
+
expect(client.characters(invalid_param: 1))
|
75
|
+
.to be_a Marvel::Response::Error
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe 'with an empty parameter' do
|
80
|
+
before do
|
81
|
+
stub_get('characters', name: '',
|
82
|
+
response_code: 409,
|
83
|
+
returns: 'errors/empty_parameter.json')
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'returns a 409 error' do
|
87
|
+
expect(client.characters(name: '').to_s)
|
88
|
+
.to eq '409 name cannot be blank if it is set'
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'returns a Marvel::Response::Error' do
|
92
|
+
expect(client.characters(name: ''))
|
93
|
+
.to be_a Marvel::Response::Error
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe 'with an invalid ordering parameter' do
|
98
|
+
before do
|
99
|
+
stub_get('characters', orderBy: 'goofiness',
|
100
|
+
response_code: 409,
|
101
|
+
returns: 'errors/invalid_ordering.json')
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'returns a 409 error' do
|
105
|
+
expect(client.characters(orderBy: 'goofiness').to_s)
|
106
|
+
.to eq '409 goofiness is not a valid ordering parameter.'
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'returns a Marvel::Response::Error' do
|
110
|
+
expect(client.characters(orderBy: 'goofiness'))
|
111
|
+
.to be_a Marvel::Response::Error
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe 'with too many values sent to a multi-value list filter' do
|
116
|
+
before do
|
117
|
+
stub_get('characters', comics: [*1..11] * ',',
|
118
|
+
response_code: 409,
|
119
|
+
returns: 'errors/excessive_filter_values.json')
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'returns a 409 error' do
|
123
|
+
expect(client.characters(comics: [*1..11] * ',').to_s)
|
124
|
+
.to eq '409 You may not submit more than 10 issue ids.'
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'returns a Marvel::Response::Error' do
|
128
|
+
expect(client.characters(comics: [*1..11] * ','))
|
129
|
+
.to be_a Marvel::Response::Error
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe 'with an invalid filter value' do
|
134
|
+
before do
|
135
|
+
stub_get('characters', comics: 'one',
|
136
|
+
response_code: 409,
|
137
|
+
returns: 'errors/invalid_filter_value.json')
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'returns a 409 error' do
|
141
|
+
expect(client.characters(comics: 'one').to_s)
|
142
|
+
.to eq '409 You must pass at least one valid '\
|
143
|
+
'issue id if you set the issue filter.'
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'returns a Marvel::Response::Error' do
|
147
|
+
expect(client.characters(comics: 'one'))
|
148
|
+
.to be_a Marvel::Response::Error
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
context 'with an Etag' do
|
153
|
+
let(:id) { 1009652 }
|
154
|
+
|
155
|
+
describe 'that is valid and up-to-date' do
|
156
|
+
let(:etag) { 'd3f102f7c8d0ef375f395733ae2ce06d1899a94f' }
|
157
|
+
|
158
|
+
before do
|
159
|
+
stub_get("characters/#{id}",
|
160
|
+
etag: etag,
|
161
|
+
response_code: 304,
|
162
|
+
returns: nil)
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'returns a 304 error' do
|
166
|
+
expect(client.character(id, etag: etag).to_s)
|
167
|
+
.to eq '304 Not Modified'
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'returns a Marvel::Response::Error' do
|
171
|
+
expect(client.character(1009652, etag: etag))
|
172
|
+
.to be_a Marvel::Response::Error
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
describe 'that is invalid or expired' do
|
177
|
+
let(:etag) { 'invalid_or_expired_etag' }
|
178
|
+
|
179
|
+
before do
|
180
|
+
stub_get("characters/#{id}",
|
181
|
+
etag: etag,
|
182
|
+
returns: 'characters/character.json')
|
183
|
+
end
|
184
|
+
|
185
|
+
it 'fetches the requested resource' do
|
186
|
+
expect(client.character(id).status).to eq 'Ok'
|
187
|
+
expect(client.character(id).pop.name).to eq 'Thanos'
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|