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 CHANGED
@@ -1,8 +1,8 @@
1
1
  = apirunner
2
2
 
3
- *apirunner* let's you test your _JSON_ _API_ from the outside. Sometimes model-, controlle-r 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.
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 header
22
- * proof the occurence and match the content of your app's Body (as long as it responds JSON)
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/001_create_ressource.yml
46
- test/apirunner/002_delete_ressource.yml
47
- test/apirunner/excludes.yml
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: api
100
+ namespace: api1v0
56
101
  staging:
57
102
  protocol: http
58
- host: staging.yourstagingdomain.dom
103
+ host: staging.moviepilot.com
59
104
  port: 80
60
- namespace: api
105
+ namespace: api1v0
61
106
  production:
62
- protocol: https
63
- host: www.yourproductiondomain.dom
107
+ protocol: http
108
+ host: production.moviepilot.com
64
109
  port: 80
65
- namespace: prod_api
66
-
67
- Take a look at "namespace" here. It makes the expectation matcher build ressource URI's like so:
68
-
69
- http://localhost:3000/api
70
- http://staging.yourstagingdomain.dom/api
71
- http://www.yourproductiondomain.dom/prod_api
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
- The file also generates your rake tasks dynamically. The above config will generate 3 new tasks:
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.5
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.5"
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-25}
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/004_rateables_and_pagination.yml",
35
- "examples/test/api_runner/005_recommendations.yml",
36
- "examples/test/api_runner/006_discovery.yml",
37
- "examples/test/api_runner/007_cacheable_operations.yml",
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.dom
9
- port: 8976
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
- - m333
12
- - m79
26
+ - m1035
27
+ - m2087
13
28
  blacklist:
14
- - m334
15
- - m77
29
+ - m1554
30
+ - m2981
16
31
  skiplist:
17
- - m335
18
- - m78
32
+ - m1590
33
+ - m1056
19
34
  ratings:
20
- m336: 4
21
- m79: 2.5
22
- m777: 3.0
23
- m567: 4.0
24
- m354: 5.0
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
- - m333
34
- - m79
48
+ - m1035
49
+ - m2087
35
50
  blacklist:
36
- - m334
37
- - m77
51
+ - m1554
52
+ - m2981
38
53
  skiplist:
39
- - m335
40
- - m78
54
+ - m1590
55
+ - m1056
41
56
  ratings:
42
- m336: 4.0
43
- m79: 2.5
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
- - m334
75
- - m77
92
+ - m1554
93
+ - m2981
76
94
  skiplist:
77
- - m335
78
- - m78
95
+ - m1590
96
+ - m1056
79
97
  ratings:
80
- m336: 4.0
81
- m79: 2.5
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 wrong username'
131
- priority: 1
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/duffyduck'
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'