apirunner 0.4.5 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +96 -33
- data/VERSION +1 -1
- data/apirunner.gemspec +14 -6
- data/examples/config/api_runner.yml +21 -2
- data/examples/test/api_runner/001_create_user.yml +49 -40
- data/examples/test/api_runner/002_update_resources.yml +123 -0
- data/examples/test/api_runner/003_update_ratings.yml +7 -8
- data/examples/test/api_runner/004_update_series_ratings.yml +88 -0
- data/examples/test/api_runner/{005_recommendations.yml → 006_recommendations.yml} +4 -34
- data/examples/test/api_runner/007_item_predictions.yml +286 -0
- data/examples/test/api_runner/{006_discovery.yml → 008_discovery.yml} +142 -18
- data/examples/test/api_runner/010_fsk.yml +168 -0
- data/examples/test/api_runner/011_misc.yml +116 -0
- data/examples/test/api_runner/012_telekom_error_reports.yml +1831 -0
- data/examples/test/api_runner/013-extended-unpersonalized-discovery.yml +711 -0
- data/examples/test/api_runner/014-extended-personalized-discovery.yml +764 -0
- data/examples/test/api_runner/015_create_10000_users.yml +43 -0
- data/examples/test/api_runner/999_delete_user.yml +35 -4
- data/lib/api_runner.rb +1 -1
- metadata +16 -8
- /data/examples/test/api_runner/{004_rateables_and_pagination.yml → 005_rateables_and_pagination.yml} +0 -0
- /data/examples/test/api_runner/{007_cacheable_operations.yml → 009_cacheable_operations.yml} +0 -0
data/README.rdoc
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
= apirunner
|
2
2
|
|
3
|
-
*apirunner* let's you test your _JSON_ _API_ from the outside. Sometimes model-,
|
3
|
+
*apirunner* let's you test your _JSON_ _API_ from the outside. Sometimes model-, controller and routing-test's are not enough, you want to send requests to your application and validate the response in ganular detail. Then apirunner will be your best friend.
|
4
4
|
|
5
|
-
apirunner is no replacement to rspec or cucumber tests, nor does it replace webrat or capable tools like that. It's an addition that lets you query you API, specify your queries in detail, parse the expected response code, message, header and body and compare all (or any) of 'em to your expectation.
|
5
|
+
apirunner is no replacement to rspec or cucumber tests, nor does it replace webrat or capable tools like that. It's an addition that lets you query you API, specify your queries in detail, parse the expected response code, message, header and body and compare all (or any) of 'em to your expectation, as well as check and document every testcases performance.
|
6
6
|
|
7
7
|
The request and expectation can (and have to be) written down in easily createable YAML Files. The provided expectation matchers can match strings, integers and regular expressions. So apirunner provides you with a simple but powerful tool to examine your api's bugs.
|
8
8
|
|
@@ -14,16 +14,23 @@ apirunner was initially developed for testing of the mighty (m8ty) i18n recommen
|
|
14
14
|
|
15
15
|
* be configured for as many environemnts as you wish (your local machine, you staging environment, your production boxes, your wifes handbag)
|
16
16
|
* send GET, POST, PUT and DELETE requests via HTTP
|
17
|
+
* wait arbitrary but well specifief amount of time before sending a request
|
17
18
|
* read as many testcases as you wish from YAML files and execute them in the order of file appearance
|
19
|
+
* generate iterational testcases at runtime (for mass/performance test')
|
18
20
|
* read more then one testcase from a file
|
19
21
|
* match the response code's of your applications responses
|
20
22
|
* match the syntactical correctnes of the response format (as long as it is JSON)
|
21
|
-
* proof the occurance and match the content of your app's HTTP
|
22
|
-
* proof the occurence and match the content of your app's
|
23
|
+
* proof the occurance and match the content of your app's HTTP headers
|
24
|
+
* proof the occurence and match the content of your app's body (as long as it responds JSON)
|
23
25
|
* optionally match only parts of header / body (you dont have to specify them in more detail than you are interested in)
|
24
26
|
* exclude certain value test's from certain environments (by reading excludes from excludes.yml)
|
27
|
+
* build several priority layers, so that you can run only parts of your testspec
|
25
28
|
* provide you with some nice feedback at the console .... yeah sexy dots (".") and fancy F's ("F") ....
|
26
29
|
* print out a nice error report (that you as a awesome ruby coder will never see)
|
30
|
+
* print out a nice success report if you wish
|
31
|
+
* measure the performance of your api from the outsite (no concurrency provided today, sry)
|
32
|
+
* print out a nice performance report
|
33
|
+
* substitute defined resource names of you testcases (resource namespacing) so that several testruns on the same box dont interfere (Hudson vs. developer)
|
27
34
|
* be invoked from within rake to generate some example configuration and testcase files
|
28
35
|
* be invoked also from within rake to run your test's
|
29
36
|
* not travel to Ibiza
|
@@ -32,6 +39,28 @@ apirunner was initially developed for testing of the mighty (m8ty) i18n recommen
|
|
32
39
|
|
33
40
|
gem install apirunner
|
34
41
|
|
42
|
+
== Prerequisites
|
43
|
+
|
44
|
+
Until today apirunner runs only in connection with a rails application itself. In the future it (hopefully) will be able to run even isolated without a Rails environment. Releases of Rails prior to 3.0.0.rc are untested and will likely fail. Please don't blame the author put submit you patches.
|
45
|
+
|
46
|
+
== Invocation
|
47
|
+
|
48
|
+
Assuming you defined your environments as seen in the following section "Configuration", apirunner provides you with the following rake tasks:
|
49
|
+
|
50
|
+
rake -T api
|
51
|
+
|
52
|
+
should result in:
|
53
|
+
|
54
|
+
rake api:performance:local # runs a series of nessecary api calls for performance measuring and parses their response in environment local
|
55
|
+
rake api:performance:production # runs a series of nessecary api calls for performance measuring and parses their response in environment production
|
56
|
+
rake api:performance:staging # runs a series of nessecary api calls for performance measuring and parses their response in environment staging
|
57
|
+
rake api:run:local # runs a series of nessecary api calls and parses their response in environment local
|
58
|
+
rake api:run:production # runs a series of nessecary api calls and parses their response in environment production
|
59
|
+
rake api:run:staging # runs a series of nessecary api calls and parses their response in environment staging
|
60
|
+
rake api:scaffold # generates configuration and a skeleton for apirunner tests as well as excludes
|
61
|
+
|
62
|
+
Tasks are speaking so far ...
|
63
|
+
|
35
64
|
== Configuration
|
36
65
|
|
37
66
|
rake api::scaffold
|
@@ -42,9 +71,25 @@ The latter one generates a starter configuration file in your config directory:
|
|
42
71
|
|
43
72
|
Additionally there will be some example testcases which can be found in:
|
44
73
|
|
45
|
-
test/apirunner/
|
46
|
-
test/apirunner/
|
47
|
-
test/apirunner/
|
74
|
+
/test/apirunner/001_create_user.yml
|
75
|
+
/test/apirunner/002_update_resources.yml
|
76
|
+
/test/apirunner/003_update_ratings.yml
|
77
|
+
/test/apirunner/004_update_series_ratings.yml
|
78
|
+
/test/apirunner/005_rateables_and_pagination.yml
|
79
|
+
/test/apirunner/006_recommendations.yml
|
80
|
+
/test/apirunner/007_item_predictions.yml
|
81
|
+
/test/apirunner/008_discovery.yml
|
82
|
+
/test/apirunner/009_cacheable_operations.yml
|
83
|
+
/test/apirunner/010_fsk.yml
|
84
|
+
/test/apirunner/011_misc.yml
|
85
|
+
/test/apirunner/012_telekom_error_reports.yml
|
86
|
+
/test/apirunner/013-extended-unpersonalized-discovery.yml
|
87
|
+
/test/apirunner/014-extended-personalized-discovery.yml
|
88
|
+
/test/apirunner/015_create_10000_users.yml
|
89
|
+
/test/apirunner/999_delete_user.yml
|
90
|
+
/test/apirunner/excludes.yml
|
91
|
+
|
92
|
+
These testcases are specific to recent requirements regarding the moviepilot API but can be helpful to understand, how the YAML expectation files have to be created.
|
48
93
|
|
49
94
|
At first take some time and change config/api_runner.yml to your needs. You might for example want to test your app locally on localhost:3000, on staging machine and on production environment too. So your api_runner.yml could look like that:
|
50
95
|
|
@@ -52,31 +97,58 @@ At first take some time and change config/api_runner.yml to your needs. You migh
|
|
52
97
|
protocol: http
|
53
98
|
host: localhost
|
54
99
|
port: 3000
|
55
|
-
namespace:
|
100
|
+
namespace: api1v0
|
56
101
|
staging:
|
57
102
|
protocol: http
|
58
|
-
host: staging.
|
103
|
+
host: staging.moviepilot.com
|
59
104
|
port: 80
|
60
|
-
namespace:
|
105
|
+
namespace: api1v0
|
61
106
|
production:
|
62
|
-
protocol:
|
63
|
-
host:
|
107
|
+
protocol: http
|
108
|
+
host: production.moviepilot.com
|
64
109
|
port: 80
|
65
|
-
namespace:
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
110
|
+
namespace: api1v0
|
111
|
+
general:
|
112
|
+
verbosity:
|
113
|
+
- verbose_on_error
|
114
|
+
- verbose_on_success
|
115
|
+
- rspec
|
116
|
+
- performance
|
117
|
+
- verbose_with_curl
|
118
|
+
priority: 0
|
119
|
+
substitution:
|
120
|
+
substitutes:
|
121
|
+
- duffybasic
|
122
|
+
- daisyduck
|
123
|
+
- duffyduck
|
124
|
+
- duffyduck2
|
125
|
+
- duffyduck3
|
126
|
+
- duffydad
|
127
|
+
- duffykid
|
128
|
+
- roadrunner
|
129
|
+
- teletubby
|
130
|
+
- luckyluke
|
131
|
+
- wileecoyote
|
132
|
+
prefix: abc_
|
133
|
+
csv_mode:
|
134
|
+
- append
|
135
|
+
- create
|
136
|
+
- none
|
137
|
+
|
138
|
+
The configuration options above need some explanation (uuuuugh) but have to follow the YAML standard, so BE CAREFUL(!) about proper indentation (two spaces).
|
139
|
+
So far you can define as many environments as you would like to query. The example above specifies 3 of them [:local, :staging, :production].
|
140
|
+
|
141
|
+
You can specify a :protocol, :host, :port as well as a (URL) :namespace per environment. The namespace option is mandatory, so you can omit it. We introduced it, so we can support different versions of our api at the same time and question different versions on different boxes with one setup.
|
142
|
+
|
143
|
+
The option makes the expectation matcher build ressource URI's like so:
|
144
|
+
|
145
|
+
http://localhost:3000/api1v0
|
146
|
+
http://staging.moviepilot.com/api1v0
|
147
|
+
http://production.moviepilot.com/api1v0
|
72
148
|
|
73
149
|
The ressource pathes are simply appended before the request is sent.
|
74
150
|
|
75
|
-
|
76
|
-
|
77
|
-
api:run:local
|
78
|
-
api:run:staging
|
79
|
-
api:run:production
|
151
|
+
TODO
|
80
152
|
|
81
153
|
== Excludes
|
82
154
|
|
@@ -84,15 +156,6 @@ You may also want to define some excludes for some of your environment. Imageine
|
|
84
156
|
|
85
157
|
Simply define your story to check "Last-Modified" generally and exclude it for
|
86
158
|
|
87
|
-
== Invocation
|
88
|
-
|
89
|
-
Assuming you defined an environment "local" and "staging" you can invoke your masterpiece with:
|
90
|
-
|
91
|
-
rake api:run:local
|
92
|
-
|
93
|
-
and
|
94
|
-
|
95
|
-
rake api:run:staging
|
96
159
|
|
97
160
|
== Testing
|
98
161
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.6
|
data/apirunner.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{apirunner}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["jan@moviepilot.com"]
|
12
|
-
s.date = %q{2010-10-
|
12
|
+
s.date = %q{2010-10-27}
|
13
13
|
s.description = %q{apirunner is a testsuite to query your RESTful JSON API and match response with your defined expectations}
|
14
14
|
s.email = %q{developers@moviepilot.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -31,10 +31,18 @@ Gem::Specification.new do |s|
|
|
31
31
|
"examples/test/api_runner/001_create_user.yml",
|
32
32
|
"examples/test/api_runner/002_update_resources.yml",
|
33
33
|
"examples/test/api_runner/003_update_ratings.yml",
|
34
|
-
"examples/test/api_runner/
|
35
|
-
"examples/test/api_runner/
|
36
|
-
"examples/test/api_runner/
|
37
|
-
"examples/test/api_runner/
|
34
|
+
"examples/test/api_runner/004_update_series_ratings.yml",
|
35
|
+
"examples/test/api_runner/005_rateables_and_pagination.yml",
|
36
|
+
"examples/test/api_runner/006_recommendations.yml",
|
37
|
+
"examples/test/api_runner/007_item_predictions.yml",
|
38
|
+
"examples/test/api_runner/008_discovery.yml",
|
39
|
+
"examples/test/api_runner/009_cacheable_operations.yml",
|
40
|
+
"examples/test/api_runner/010_fsk.yml",
|
41
|
+
"examples/test/api_runner/011_misc.yml",
|
42
|
+
"examples/test/api_runner/012_telekom_error_reports.yml",
|
43
|
+
"examples/test/api_runner/013-extended-unpersonalized-discovery.yml",
|
44
|
+
"examples/test/api_runner/014-extended-personalized-discovery.yml",
|
45
|
+
"examples/test/api_runner/015_create_10000_users.yml",
|
38
46
|
"examples/test/api_runner/999_delete_user.yml",
|
39
47
|
"examples/test/api_runner/excludes.yml",
|
40
48
|
"features/apirunner.feature",
|
@@ -5,8 +5,8 @@ local:
|
|
5
5
|
namespace: api1v0
|
6
6
|
staging:
|
7
7
|
protocol: http
|
8
|
-
host: staging.moviepilot.
|
9
|
-
port:
|
8
|
+
host: staging.premium.moviepilot.com
|
9
|
+
port: 80
|
10
10
|
namespace: api1v0
|
11
11
|
production:
|
12
12
|
protocol: http
|
@@ -18,5 +18,24 @@ general:
|
|
18
18
|
- verbose_on_error
|
19
19
|
- verbose_on_success
|
20
20
|
- rspec
|
21
|
+
- performance
|
21
22
|
- verbose_with_curl
|
22
23
|
priority: 0
|
24
|
+
substitution:
|
25
|
+
substitutes:
|
26
|
+
- duffybasic
|
27
|
+
- daisyduck
|
28
|
+
- duffyduck
|
29
|
+
- duffyduck2
|
30
|
+
- duffyduck3
|
31
|
+
- duffydad
|
32
|
+
- duffykid
|
33
|
+
- roadrunner
|
34
|
+
- teletubby
|
35
|
+
- luckyluke
|
36
|
+
- wileecoyote
|
37
|
+
prefix: abc_
|
38
|
+
csv_mode:
|
39
|
+
- append
|
40
|
+
- create
|
41
|
+
- none
|
@@ -1,4 +1,19 @@
|
|
1
1
|
---
|
2
|
+
- name: 'Create new Basic User'
|
3
|
+
request:
|
4
|
+
headers:
|
5
|
+
Content-Type: 'application/json'
|
6
|
+
path: '/users/duffybasic'
|
7
|
+
method: 'PUT'
|
8
|
+
body:
|
9
|
+
username: 'duffybasic'
|
10
|
+
expires_at: 2011-09-09T22:41:50+00:00
|
11
|
+
response_expectation:
|
12
|
+
status_code: 201
|
13
|
+
headers:
|
14
|
+
Last-Modified: /.*/
|
15
|
+
body:
|
16
|
+
username: 'duffybasic'
|
2
17
|
- name: 'Create new User'
|
3
18
|
request:
|
4
19
|
headers:
|
@@ -8,20 +23,20 @@
|
|
8
23
|
body:
|
9
24
|
username: 'duffyduck'
|
10
25
|
watchlist:
|
11
|
-
-
|
12
|
-
-
|
26
|
+
- m1035
|
27
|
+
- m2087
|
13
28
|
blacklist:
|
14
|
-
-
|
15
|
-
-
|
29
|
+
- m1554
|
30
|
+
- m2981
|
16
31
|
skiplist:
|
17
|
-
-
|
18
|
-
-
|
32
|
+
- m1590
|
33
|
+
- m1056
|
19
34
|
ratings:
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
35
|
+
m12493: 4.0
|
36
|
+
m1875: 2.5
|
37
|
+
m7258: 3.0
|
38
|
+
m7339: 4.0
|
39
|
+
m3642: 5.0
|
25
40
|
expires_at: 2011-09-09T22:41:50+00:00
|
26
41
|
response_expectation:
|
27
42
|
status_code: 201
|
@@ -30,17 +45,20 @@
|
|
30
45
|
body:
|
31
46
|
username: 'duffyduck'
|
32
47
|
watchlist:
|
33
|
-
-
|
34
|
-
-
|
48
|
+
- m1035
|
49
|
+
- m2087
|
35
50
|
blacklist:
|
36
|
-
-
|
37
|
-
-
|
51
|
+
- m1554
|
52
|
+
- m2981
|
38
53
|
skiplist:
|
39
|
-
-
|
40
|
-
-
|
54
|
+
- m1590
|
55
|
+
- m1056
|
41
56
|
ratings:
|
42
|
-
|
43
|
-
|
57
|
+
m12493: 4.0
|
58
|
+
m1875: 2.5
|
59
|
+
m7258: 3.0
|
60
|
+
m7339: 4.0
|
61
|
+
m3642: 5.0
|
44
62
|
fsk: "18"
|
45
63
|
- name: 'Update existing User - Update watchlist'
|
46
64
|
request:
|
@@ -71,14 +89,17 @@
|
|
71
89
|
- m367
|
72
90
|
- m73
|
73
91
|
blacklist:
|
74
|
-
-
|
75
|
-
-
|
92
|
+
- m1554
|
93
|
+
- m2981
|
76
94
|
skiplist:
|
77
|
-
-
|
78
|
-
-
|
95
|
+
- m1590
|
96
|
+
- m1056
|
79
97
|
ratings:
|
80
|
-
|
81
|
-
|
98
|
+
m12493: 4.0
|
99
|
+
m1875: 2.5
|
100
|
+
m7258: 3.0
|
101
|
+
m7339: 4.0
|
102
|
+
m3642: 5.0
|
82
103
|
- name: 'Set 10 Ratings'
|
83
104
|
request:
|
84
105
|
headers:
|
@@ -110,15 +131,6 @@
|
|
110
131
|
body:
|
111
132
|
username: 'duffyduck'
|
112
133
|
fsk: "18"
|
113
|
-
watchlist:
|
114
|
-
- m367
|
115
|
-
- m73
|
116
|
-
blacklist:
|
117
|
-
- m334
|
118
|
-
- m77
|
119
|
-
skiplist:
|
120
|
-
- m335
|
121
|
-
- m78
|
122
134
|
ratings:
|
123
135
|
"m1035": "1.0"
|
124
136
|
"m1554": "2.0"
|
@@ -127,19 +139,17 @@
|
|
127
139
|
"m12493": "4.0"
|
128
140
|
"m1875": "5.0"
|
129
141
|
"m7258": "2.5"
|
130
|
-
- name: 'User creation should fail on
|
131
|
-
priority:
|
142
|
+
- name: 'User creation should fail on bogus characters in username'
|
143
|
+
priority: 3
|
132
144
|
request:
|
133
145
|
headers:
|
134
146
|
Content-Type: 'application/json'
|
135
|
-
path: '/users/
|
147
|
+
path: '/users/duffyduck_fix_me'
|
136
148
|
method: 'PUT'
|
137
149
|
body:
|
138
|
-
username: '!"§$%&/()=?QWERTZUI"§$%& /('
|
139
150
|
response_expectation:
|
140
151
|
status_code: 409
|
141
152
|
- name: 'User creation should fail on wrong fsk'
|
142
|
-
priority: 1
|
143
153
|
request:
|
144
154
|
headers:
|
145
155
|
Content-Type: 'application/json'
|
@@ -151,7 +161,6 @@
|
|
151
161
|
response_expectation:
|
152
162
|
status_code: 409
|
153
163
|
- name: 'User creation should fail on wrong expiration_date'
|
154
|
-
priority: 1
|
155
164
|
request:
|
156
165
|
headers:
|
157
166
|
Content-Type: 'application/json'
|
@@ -10,6 +10,11 @@
|
|
10
10
|
- m73
|
11
11
|
- m42
|
12
12
|
- m23
|
13
|
+
- s70
|
14
|
+
- s71
|
15
|
+
- s86
|
16
|
+
- s87
|
17
|
+
- s88
|
13
18
|
response_expectation:
|
14
19
|
status_code: 204
|
15
20
|
body:
|
@@ -30,6 +35,11 @@
|
|
30
35
|
- m73
|
31
36
|
- m42
|
32
37
|
- m23
|
38
|
+
- s70
|
39
|
+
- s71
|
40
|
+
- s86
|
41
|
+
- s87
|
42
|
+
- s88
|
33
43
|
- name: 'Update existing user - clean watchlist'
|
34
44
|
request:
|
35
45
|
headers:
|
@@ -63,6 +73,11 @@
|
|
63
73
|
- m72
|
64
74
|
- m41
|
65
75
|
- m22
|
76
|
+
- s101
|
77
|
+
- s100
|
78
|
+
- s99
|
79
|
+
- s69
|
80
|
+
- s70
|
66
81
|
response_expectation:
|
67
82
|
status_code: 204
|
68
83
|
body:
|
@@ -83,6 +98,11 @@
|
|
83
98
|
- m72
|
84
99
|
- m41
|
85
100
|
- m22
|
101
|
+
- s101
|
102
|
+
- s100
|
103
|
+
- s99
|
104
|
+
- s69
|
105
|
+
- s70
|
86
106
|
- name: 'Update existing user - clean skiplist'
|
87
107
|
request:
|
88
108
|
headers:
|
@@ -117,6 +137,11 @@
|
|
117
137
|
- m71
|
118
138
|
- m40
|
119
139
|
- m21
|
140
|
+
- s87
|
141
|
+
- s88
|
142
|
+
- s51
|
143
|
+
- s52
|
144
|
+
- s99
|
120
145
|
response_expectation:
|
121
146
|
status_code: 204
|
122
147
|
body:
|
@@ -137,6 +162,11 @@
|
|
137
162
|
- m71
|
138
163
|
- m40
|
139
164
|
- m21
|
165
|
+
- s87
|
166
|
+
- s88
|
167
|
+
- s51
|
168
|
+
- s52
|
169
|
+
- s99
|
140
170
|
- name: 'Update existing user - clean blacklist'
|
141
171
|
request:
|
142
172
|
headers:
|
@@ -170,6 +200,8 @@
|
|
170
200
|
watchlist:
|
171
201
|
- m365
|
172
202
|
- m71
|
203
|
+
- s70
|
204
|
+
- s88
|
173
205
|
response_expectation:
|
174
206
|
status_code: 404
|
175
207
|
- name : 'Skiplist update of a non existing profile should return 404'
|
@@ -182,6 +214,8 @@
|
|
182
214
|
skiplist:
|
183
215
|
- m365
|
184
216
|
- m71
|
217
|
+
- s99
|
218
|
+
- s100
|
185
219
|
response_expectation:
|
186
220
|
status_code: 404
|
187
221
|
- name : 'Blacklist update of a non existing profile should return 404'
|
@@ -194,6 +228,8 @@
|
|
194
228
|
blacklist:
|
195
229
|
- m365
|
196
230
|
- m71
|
231
|
+
- s71
|
232
|
+
- s70
|
197
233
|
response_expectation:
|
198
234
|
status_code: 404
|
199
235
|
- name : 'Watchlist update with non existing movies should return 409'
|
@@ -209,6 +245,35 @@
|
|
209
245
|
- m7777777777777777
|
210
246
|
response_expectation:
|
211
247
|
status_code: 409
|
248
|
+
- name : 'Watchlist update with non existing series should return 409'
|
249
|
+
request:
|
250
|
+
headers:
|
251
|
+
Content-Type: 'application/json'
|
252
|
+
path: '/users/duffyduck/watchlist'
|
253
|
+
method: 'PUT'
|
254
|
+
body:
|
255
|
+
watchlist:
|
256
|
+
- s9999999999999999
|
257
|
+
- s8888888888888888
|
258
|
+
- s7777777777777777
|
259
|
+
response_expectation:
|
260
|
+
status_code: 409
|
261
|
+
- name : 'Watchlist update with non existing movies AND series should return 409'
|
262
|
+
request:
|
263
|
+
headers:
|
264
|
+
Content-Type: 'application/json'
|
265
|
+
path: '/users/duffyduck/watchlist'
|
266
|
+
method: 'PUT'
|
267
|
+
body:
|
268
|
+
watchlist:
|
269
|
+
- m9999999999999999
|
270
|
+
- m8888888888888888
|
271
|
+
- m7777777777777777
|
272
|
+
- s9999999999999999
|
273
|
+
- s8888888888888888
|
274
|
+
- s7777777777777777
|
275
|
+
response_expectation:
|
276
|
+
status_code: 409
|
212
277
|
- name : 'Blacklist update with non existing movies should return 409'
|
213
278
|
request:
|
214
279
|
headers:
|
@@ -222,6 +287,35 @@
|
|
222
287
|
- m7777777777777777
|
223
288
|
response_expectation:
|
224
289
|
status_code: 409
|
290
|
+
- name : 'Blacklist update with non existing series should return 409'
|
291
|
+
request:
|
292
|
+
headers:
|
293
|
+
Content-Type: 'application/json'
|
294
|
+
path: '/users/duffyduck/blacklist'
|
295
|
+
method: 'PUT'
|
296
|
+
body:
|
297
|
+
blacklist:
|
298
|
+
- s9999999999999999
|
299
|
+
- s8888888888888888
|
300
|
+
- s7777777777777777
|
301
|
+
response_expectation:
|
302
|
+
status_code: 409
|
303
|
+
- name : 'Blacklist update with non existing movies AND series should return 409'
|
304
|
+
request:
|
305
|
+
headers:
|
306
|
+
Content-Type: 'application/json'
|
307
|
+
path: '/users/duffyduck/blacklist'
|
308
|
+
method: 'PUT'
|
309
|
+
body:
|
310
|
+
blacklist:
|
311
|
+
- m9999999999999999
|
312
|
+
- m8888888888888888
|
313
|
+
- m7777777777777777
|
314
|
+
- s9999999999999999
|
315
|
+
- s8888888888888888
|
316
|
+
- s7777777777777777
|
317
|
+
response_expectation:
|
318
|
+
status_code: 409
|
225
319
|
- name : 'Skiplist update with non existing movies should return 409'
|
226
320
|
request:
|
227
321
|
headers:
|
@@ -235,3 +329,32 @@
|
|
235
329
|
- m7777777777777777
|
236
330
|
response_expectation:
|
237
331
|
status_code: 409
|
332
|
+
- name : 'Skiplist update with non existing series should return 409'
|
333
|
+
request:
|
334
|
+
headers:
|
335
|
+
Content-Type: 'application/json'
|
336
|
+
path: '/users/duffyduck/skiplist'
|
337
|
+
method: 'PUT'
|
338
|
+
body:
|
339
|
+
skiplist:
|
340
|
+
- s9999999999999999
|
341
|
+
- s8888888888888888
|
342
|
+
- s7777777777777777
|
343
|
+
response_expectation:
|
344
|
+
status_code: 409
|
345
|
+
- name : 'Skiplist update with non existing movies AND series should return 409'
|
346
|
+
request:
|
347
|
+
headers:
|
348
|
+
Content-Type: 'application/json'
|
349
|
+
path: '/users/duffyduck/skiplist'
|
350
|
+
method: 'PUT'
|
351
|
+
body:
|
352
|
+
skiplist:
|
353
|
+
- m9999999999999999
|
354
|
+
- m8888888888888888
|
355
|
+
- m7777777777777777
|
356
|
+
- s9999999999999999
|
357
|
+
- s8888888888888888
|
358
|
+
- s7777777777777777
|
359
|
+
response_expectation:
|
360
|
+
status_code: 409
|
@@ -1,5 +1,5 @@
|
|
1
1
|
---
|
2
|
-
- name: "One putted rating should be createable with 204 response"
|
2
|
+
- name: "One putted movie rating should be createable with 204 response"
|
3
3
|
request:
|
4
4
|
headers:
|
5
5
|
Content-Type: 'application/json'
|
@@ -10,7 +10,7 @@
|
|
10
10
|
response_expectation:
|
11
11
|
status_code: 204
|
12
12
|
body:
|
13
|
-
- name: "There should be exactly one rating in that profile"
|
13
|
+
- name: "There should be exactly one movie rating in that profile"
|
14
14
|
request:
|
15
15
|
headers:
|
16
16
|
Content-Type: 'application/json'
|
@@ -21,7 +21,7 @@
|
|
21
21
|
body:
|
22
22
|
ratings:
|
23
23
|
m765: 1.0
|
24
|
-
- name: "5 putted ratings should be createable with 204 response"
|
24
|
+
- name: "5 putted movie ratings should be createable with 204 response"
|
25
25
|
request:
|
26
26
|
headers:
|
27
27
|
Content-Type: 'application/json'
|
@@ -36,7 +36,7 @@
|
|
36
36
|
response_expectation:
|
37
37
|
status_code: 204
|
38
38
|
body:
|
39
|
-
- name: "There should be exactly 5 ratings in that profile"
|
39
|
+
- name: "There should be exactly 5 movie ratings in that profile"
|
40
40
|
request:
|
41
41
|
headers:
|
42
42
|
Content-Type: 'application/json'
|
@@ -51,7 +51,7 @@
|
|
51
51
|
m89: 3.0
|
52
52
|
m91: 4.0
|
53
53
|
m98: 5.0
|
54
|
-
- name: "It should return a 404 in case ratings for a non existant user are put"
|
54
|
+
- name: "It should return a 404 in case movie ratings for a non existant user are put"
|
55
55
|
request:
|
56
56
|
headers:
|
57
57
|
Content-Type: 'application/json'
|
@@ -62,7 +62,7 @@
|
|
62
62
|
m42: 2.0
|
63
63
|
response_expectation:
|
64
64
|
status_code: 404
|
65
|
-
- name: "It should return a 409 in case ratings are put with ambigous moviemaster_id"
|
65
|
+
- name: "It should return a 409 in case movie ratings are put with ambigous moviemaster_id"
|
66
66
|
request:
|
67
67
|
headers:
|
68
68
|
Content-Type: 'application/json'
|
@@ -74,8 +74,7 @@
|
|
74
74
|
response_expectation:
|
75
75
|
status_code: 409
|
76
76
|
body:
|
77
|
-
- name: "It should return a 409 in case ratings are put with ambigous ratings values"
|
78
|
-
priority: 1
|
77
|
+
- name: "It should return a 409 in case movie ratings are put with ambigous ratings values"
|
79
78
|
request:
|
80
79
|
headers:
|
81
80
|
Content-Type: 'application/json'
|