quiz_api_client 4.3.0 → 4.5.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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -48
  3. data/Rakefile +0 -29
  4. data/lib/quiz_api_client/services/courses_service.rb +37 -0
  5. data/lib/quiz_api_client/version.rb +1 -1
  6. data/lib/quiz_api_client.rb +5 -0
  7. data/spec/quiz_api_client_spec.rb +7 -0
  8. data/spec/services/courses_service_spec.rb +103 -0
  9. data/spec/spec_helper.rb +1 -25
  10. metadata +11 -86
  11. data/spec/contracts/interaction_types_service_spec.rb +0 -22
  12. data/spec/contracts/item_analyses_service_spec.rb +0 -59
  13. data/spec/contracts/items_service_spec.rb +0 -59
  14. data/spec/contracts/qti_imports_service_spec.rb +0 -34
  15. data/spec/contracts/quiz_clone_job_service_spec.rb +0 -20
  16. data/spec/contracts/quiz_clone_jobs_service_spec.rb +0 -21
  17. data/spec/contracts/quiz_entries_service_spec.rb +0 -125
  18. data/spec/contracts/quiz_service_spec.rb +0 -68
  19. data/spec/contracts/quiz_session_events_service_spec.rb +0 -30
  20. data/spec/contracts/quiz_session_result_service_spec.rb +0 -42
  21. data/spec/contracts/quiz_session_service_spec.rb +0 -56
  22. data/spec/contracts/quiz_sessions_service_spec.rb +0 -28
  23. data/spec/contracts/quiz_sync_job_service_spec.rb +0 -21
  24. data/spec/contracts/quiz_sync_jobs_service_spec.rb +0 -21
  25. data/spec/contracts/quizzes_service_spec.rb +0 -80
  26. data/spec/contracts/session_item_results_service_spec.rb +0 -60
  27. data/spec/contracts/session_items_service_spec.rb +0 -21
  28. data/spec/contracts/shared_banks_spec.rb +0 -366
  29. data/spec/contracts/shared_examples/http_delete_example.rb +0 -56
  30. data/spec/contracts/shared_examples/http_get_example.rb +0 -139
  31. data/spec/contracts/shared_examples/http_patch_example.rb +0 -60
  32. data/spec/contracts/shared_examples/http_post_example.rb +0 -68
  33. data/spec/contracts/shared_examples/http_put_example.rb +0 -60
  34. data/spec/support/pact_config.rb +0 -64
  35. data/spec/support/pact_helper.rb +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 11e55f74ad6fd90e5f09e214394d3d44103e7027d83ce03299f5670cbc79111d
4
- data.tar.gz: 836308804ec45f08806c57bf63c6d7b9167e03eee52d955e7bca38b310f75305
3
+ metadata.gz: 316ba7a8bde533e2ef09e6e0a5e2c443a597ae3bfda7c00cf5280c2ab5e75bb0
4
+ data.tar.gz: ec869a63880d44c2fb7920f95dd80b042671c954bb4a5a972d6ebbc00261f5b1
5
5
  SHA512:
6
- metadata.gz: 9ed1d073d41458ff170b5767eec5d37e560af8211f6fa5da0906d7d644411a9a4e589c7d644b807300dd76400374e0e9bcd58d4595bd2e4004d65d228e4afb9f
7
- data.tar.gz: 26d1ce56705ad6a1ba18c93175ae572e4ab54e95438513095c663c6a3d6efda3a57cce29ff432ac6885b5bf139305f954bab53890360b89945fdc0c48878b123
6
+ metadata.gz: 3611bb4fb2775b6a96669bd276cfa513cd47f1177dd98b76757fea5311241e4066184228dce6c9aa78b9f70a004ae908b56981870301f21527ae87068e7a29a0
7
+ data.tar.gz: 4f9988a4c3791f69c25b53eb9db65194643d2d1639c8327f942a71e4264e7662c17f24a6094d6dfd58fd4168a6e53e78da613ba8f268f745d209b615838d62ac
data/README.md CHANGED
@@ -187,51 +187,3 @@ Then, run `bundle exec rake spec` to run the tests.
187
187
  You can also run `bundle exec rake console` for an interactive prompt that will allow you to experiment.
188
188
 
189
189
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
190
-
191
- When you add or modify a service, be sure to add or modify contract tests!
192
-
193
- ## Contract Tests
194
-
195
- We use [Pact](https://docs.pact.io/) for our contract testing. To generate
196
- a Pact file, run `bin/contracts-generate`. The script will generate the Pact
197
- file and place it in the pacts/ directory. It will also attempt to publish the
198
- Pact file to a local Pact Broker.
199
-
200
- ### Development Workflow:
201
-
202
- 1. In the quiz_api repo, spin up the Quiz API service with `bin/dev-setup`
203
- 2. In the quiz_pact_broker repo, spin up a Pact Broker with `bin/dev-setup`
204
- 3. In the quiz_api repo, write Pact provider states in the
205
- spec/service_consumers/api/quiz_api_client_ruby/ directory as needed
206
- 4. In this repo's spec/contracts/ directory, write or modify a contract test
207
- 5. In this repo, run `bin/contracts-generate` to generate a Pact file and
208
- publish it to the Pact Broker
209
- 6. In the quiz_api repo, run `bin/contracts` to pull the new Pact file from
210
- the Pact Broker and run the updated contract tests against the Quiz API service
211
-
212
- Bonus: You can view your Pact file in the Pact Broker at http://pact-broker.docker
213
- along with some cool goodies!
214
-
215
- ### Debugging Failures
216
-
217
- Pact has some basic RSpec output for failed specs. It also keeps a log in
218
- `log/pact.log` and offers general pointers for debugging.
219
-
220
- Above all, learn the Pact [basics](https://docs.pact.io/documentation/matching.html).
221
-
222
- ### What should contract tests cover?
223
-
224
- The aim of contract testing here is *not* to test all functional requirements
225
- of the Quiz API service. Rather, the goal is to ensure changes to the Quiz API
226
- service don't break its clients. We can best accomplish this with the
227
- following contract test coverage:
228
-
229
- - Basic happy path requests for all endpoints (POST, GET, PUT, DELETE)
230
- - Basic error paths for all endpoints (verify the error messages and/or HTTP
231
- response codes are accurate)
232
- - Resource state management; for example, when a quiz attempt is submitted but
233
- not yet graded
234
- - Special edge case errors
235
-
236
- Again, what *not* to test: the functional behavior of the service; for
237
- example, a series of sequential API calls to test a full user scenario.
data/Rakefile CHANGED
@@ -1,7 +1,5 @@
1
1
  require 'bundler/gem_tasks'
2
- require 'pact_broker/client/tasks'
3
2
  require 'rspec/core/rake_task'
4
- require_relative './spec/support/pact_config'
5
3
 
6
4
  RSpec::Core::RakeTask.new(:spec)
7
5
 
@@ -19,30 +17,3 @@ task :console do
19
17
  ARGV.clear
20
18
  Pry.start
21
19
  end
22
-
23
- # see https://github.com/pact-foundation/pact_broker-client/blob/master/README.md
24
- namespace :broker do
25
- PactBroker::Client::PublicationTask.new(:local) do |task|
26
- prepare_pact_files_for_publishing(task)
27
- end
28
-
29
- PactBroker::Client::PublicationTask.new(:jenkins_post_merge) do |task|
30
- prepare_pact_files_for_publishing(task)
31
- end
32
-
33
- def prepare_pact_files_for_publishing(task)
34
- task.pattern = 'pacts/*.json'
35
-
36
- task.pact_broker_base_url = PactConfig.broker_host
37
- task.pact_broker_basic_auth = {
38
- username: PactConfig.broker_username,
39
- password: PactConfig.broker_password
40
- }
41
-
42
- task.consumer_version = PactConfig.consumer_version
43
- puts "Consumer version: #{task.consumer_version}"
44
-
45
- task.tag = PactConfig.consumer_tag
46
- puts "Pact file tagged with: #{task.tag}"
47
- end
48
- end
@@ -0,0 +1,37 @@
1
+ module QuizApiClient::Services
2
+ class CoursesService < BaseApiService
3
+ def create(params:, token: nil)
4
+ post_to_quiz_api(params: params, token: token)
5
+ end
6
+
7
+ def update(params:, token: nil)
8
+ patch_to_quiz_api(params: params, token: token)
9
+ end
10
+
11
+ def destroy(params:, token: nil)
12
+ delete_from_quiz_api(params: params, token: token)
13
+ end
14
+
15
+ private
16
+
17
+ def post_to_quiz_api(params:, token:)
18
+ client(token: token).post(
19
+ '/api/courses',
20
+ course: params
21
+ )
22
+ end
23
+
24
+ def patch_to_quiz_api(params:, token:)
25
+ client(token: token).patch(
26
+ "/api/courses/#{params[:canvas_id]}",
27
+ course: params.dup.tap { |p| p.delete(:canvas_id) }
28
+ )
29
+ end
30
+
31
+ def delete_from_quiz_api(params:, token:)
32
+ client(token: token).delete(
33
+ "/api/courses/#{params[:canvas_id]}"
34
+ )
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module QuizApiClient
2
- VERSION = '4.3.0'.freeze
2
+ VERSION = '4.5.1'.freeze
3
3
  end
@@ -22,6 +22,10 @@ module QuizApiClient
22
22
  @_config ||= QuizApiClient::Config.new
23
23
  end
24
24
 
25
+ def courses_service
26
+ @_courses_service ||= Services::CoursesService.new(config)
27
+ end
28
+
25
29
  def jwt_service
26
30
  @_jwt_service ||= QuizApiClient::Services::JwtService.new(config)
27
31
  end
@@ -114,6 +118,7 @@ require 'quiz_api_client/http_request/metrics'
114
118
  require 'quiz_api_client/services/jwt_service'
115
119
  require 'quiz_api_client/services/base_api_service'
116
120
 
121
+ require 'quiz_api_client/services/courses_service'
117
122
  require 'quiz_api_client/services/interaction_types_service'
118
123
  require 'quiz_api_client/services/item_analyses_service'
119
124
  require 'quiz_api_client/services/items_service'
@@ -51,6 +51,13 @@ describe QuizApiClient do
51
51
  end
52
52
  end
53
53
 
54
+ describe '#courses_service' do
55
+ it 'creates the service' do
56
+ expect(QuizApiClient::Services::CoursesService).to receive(:new).with(subject.config)
57
+ subject.courses_service
58
+ end
59
+ end
60
+
54
61
  describe '#quizzes_service' do
55
62
  it 'should create the service' do
56
63
  expect(QuizApiClient::Services::QuizzesService).to receive(:new).with(subject.config)
@@ -0,0 +1,103 @@
1
+ describe QuizApiClient::Services::CoursesService do
2
+ let(:host) { 'api.host' }
3
+ let(:config) { QuizApiClient::Config.new { |c| c.host = host } }
4
+ let(:subject) { described_class.new(config) }
5
+
6
+ describe '#create' do
7
+ let(:params) do
8
+ {
9
+ title: 'foo',
10
+ canvas_id: 2,
11
+ is_blueprint: true
12
+ }
13
+ end
14
+
15
+ let(:response) do
16
+ {
17
+ 'id' => '4',
18
+ 'title' => 'foo',
19
+ 'canvas_id' => '2',
20
+ 'is_blueprint' => true,
21
+ 'created_at' => '2022-06-22T18:59:27.577Z',
22
+ 'updated_at' => '2022-06-22T18:59:27.577Z'
23
+ }
24
+ end
25
+
26
+ let(:expected_url) { "https://#{host}/api/courses" }
27
+
28
+ before do
29
+ stub_request(:post, expected_url)
30
+ .with(body: { course: params }.to_json)
31
+ .to_return(
32
+ status: 201,
33
+ body: response.to_json,
34
+ headers: { 'Content-Type' => 'application/json' }
35
+ )
36
+ end
37
+
38
+ it 'posts to the correct endpoint and returns the response' do
39
+ expect(
40
+ subject.create(params: params, token: 'token').parsed_response
41
+ ).to eq(response)
42
+ end
43
+ end
44
+
45
+ describe '#update' do
46
+ let(:params) do
47
+ {
48
+ canvas_id: 4,
49
+ title: 'foo',
50
+ is_blueprint: true
51
+ }
52
+ end
53
+
54
+ let(:response) do
55
+ {
56
+ 'id' => '4',
57
+ 'title' => 'foo',
58
+ 'canvas_id' => '2',
59
+ 'is_blueprint' => true,
60
+ 'created_at' => '2022-06-22T18:59:27.577Z',
61
+ 'updated_at' => '2022-06-22T18:59:27.577Z'
62
+ }
63
+ end
64
+
65
+ let(:expected_url) { "https://#{host}/api/courses/4" }
66
+
67
+ before do
68
+ stub_request(:patch, expected_url)
69
+ .with(body: { course: params.slice(:title, :is_blueprint) }.to_json)
70
+ .to_return(
71
+ status: 200,
72
+ body: response.to_json,
73
+ headers: { 'Content-Type' => 'application/json' }
74
+ )
75
+ end
76
+
77
+ it 'pathces to the correct endpoint and returns the response' do
78
+ expect(
79
+ subject.update(params: params, token: 'token').parsed_response
80
+ ).to eq(response)
81
+ end
82
+
83
+ it 'does not modify params' do
84
+ subject.update(params: params, token: 'token')
85
+ expect(params).to eq params
86
+ end
87
+ end
88
+
89
+ describe '#destroy' do
90
+ let(:params) { { canvas_id: 1 } }
91
+ let(:expected_url) { "https://#{host}/api/courses/1" }
92
+
93
+ before do
94
+ stub_request(:delete, expected_url).to_return(status: 204)
95
+ end
96
+
97
+ it 'deletes to the correct endpoint and returns the response' do
98
+ response = subject.destroy(params: params, token: 'token')
99
+ expect(response.code).to eq 204
100
+ expect(response.body).to be_nil
101
+ end
102
+ end
103
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,3 @@
1
- require 'pact/consumer/rspec'
2
1
  require 'pry'
3
2
  require 'simplecov'
4
3
  require 'webmock/rspec'
@@ -10,33 +9,10 @@ end
10
9
  $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
11
10
  require 'quiz_api_client'
12
11
 
13
- Dir[File.dirname(__FILE__) + '/support/*.rb'].each { |f| require f }
14
- Dir[File.dirname(__FILE__) + '/contracts/shared_examples/*.rb'].each { |f| require f }
15
-
16
12
  WebMock.disable_net_connect!(
17
- allow_localhost: true,
18
- allow: [PactConfig.broker_host]
13
+ allow_localhost: true
19
14
  )
20
15
 
21
- # see https://github.com/realestate-com-au/pact/blob/master/documentation/configuration.md
22
- Pact.configure do |config|
23
- config.diff_formatter = :list
24
- config.logger.level = Logger::DEBUG
25
- config.pact_dir = 'pacts'
26
- config.pactfile_write_mode = :overwrite
27
- config.pactfile_write_order = :chronological
28
- end
29
-
30
- Pact.service_consumer PactConfig::QUIZ_API_CLIENT_RUBY do
31
- has_pact_with PactConfig::Providers::QUIZ_API do
32
- mock_service :quiz_api do
33
- port 1234
34
- pact_specification_version '2.0.0'
35
- end
36
- end
37
- end
38
-
39
16
  RSpec.configure do |config|
40
- config.filter_run_excluding :pact
41
17
  config.before { allow_any_instance_of(::Logger).to receive(:info) }
42
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quiz_api_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0
4
+ version: 4.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Slaughter
@@ -11,10 +11,10 @@ authors:
11
11
  - Michael Hargiss
12
12
  - Robin Kuss
13
13
  - Ryan Taylor
14
- autorequire:
14
+ autorequire:
15
15
  bindir: exe
16
16
  cert_chain: []
17
- date: 2022-06-17 00:00:00.000000000 Z
17
+ date: 2022-08-08 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: httparty
@@ -72,34 +72,6 @@ dependencies:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
- - !ruby/object:Gem::Dependency
76
- name: pact
77
- requirement: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '1.41'
82
- type: :development
83
- prerelease: false
84
- version_requirements: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '1.41'
89
- - !ruby/object:Gem::Dependency
90
- name: pact_broker-client
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '1.19'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '1.19'
103
75
  - !ruby/object:Gem::Dependency
104
76
  name: rake
105
77
  requirement: !ruby/object:Gem::Requirement
@@ -184,7 +156,7 @@ dependencies:
184
156
  - - ">="
185
157
  - !ruby/object:Gem::Version
186
158
  version: '0'
187
- description:
159
+ description:
188
160
  email:
189
161
  - aslaughter@instructure.com
190
162
  - jhiggins@instructure.com
@@ -206,6 +178,7 @@ files:
206
178
  - lib/quiz_api_client/http_request/metrics.rb
207
179
  - lib/quiz_api_client/json_formatter.rb
208
180
  - lib/quiz_api_client/services/base_api_service.rb
181
+ - lib/quiz_api_client/services/courses_service.rb
209
182
  - lib/quiz_api_client/services/interaction_types_service.rb
210
183
  - lib/quiz_api_client/services/item_analyses_service.rb
211
184
  - lib/quiz_api_client/services/items_service.rb
@@ -228,35 +201,13 @@ files:
228
201
  - lib/quiz_api_client/services/shared_banks.rb
229
202
  - lib/quiz_api_client/version.rb
230
203
  - spec/config_spec.rb
231
- - spec/contracts/interaction_types_service_spec.rb
232
- - spec/contracts/item_analyses_service_spec.rb
233
- - spec/contracts/items_service_spec.rb
234
- - spec/contracts/qti_imports_service_spec.rb
235
- - spec/contracts/quiz_clone_job_service_spec.rb
236
- - spec/contracts/quiz_clone_jobs_service_spec.rb
237
- - spec/contracts/quiz_entries_service_spec.rb
238
- - spec/contracts/quiz_service_spec.rb
239
- - spec/contracts/quiz_session_events_service_spec.rb
240
- - spec/contracts/quiz_session_result_service_spec.rb
241
- - spec/contracts/quiz_session_service_spec.rb
242
- - spec/contracts/quiz_sessions_service_spec.rb
243
- - spec/contracts/quiz_sync_job_service_spec.rb
244
- - spec/contracts/quiz_sync_jobs_service_spec.rb
245
- - spec/contracts/quizzes_service_spec.rb
246
- - spec/contracts/session_item_results_service_spec.rb
247
- - spec/contracts/session_items_service_spec.rb
248
- - spec/contracts/shared_banks_spec.rb
249
- - spec/contracts/shared_examples/http_delete_example.rb
250
- - spec/contracts/shared_examples/http_get_example.rb
251
- - spec/contracts/shared_examples/http_patch_example.rb
252
- - spec/contracts/shared_examples/http_post_example.rb
253
- - spec/contracts/shared_examples/http_put_example.rb
254
204
  - spec/http_client_spec.rb
255
205
  - spec/json_formatter_spec.rb
256
206
  - spec/quiz_api_client/http_request/failure_spec.rb
257
207
  - spec/quiz_api_client/http_request/metrics_spec.rb
258
208
  - spec/quiz_api_client_spec.rb
259
209
  - spec/services/base_api_service_spec.rb
210
+ - spec/services/courses_service_spec.rb
260
211
  - spec/services/interaction_types_service_spec.rb
261
212
  - spec/services/item_analyses_service_spec.rb
262
213
  - spec/services/items_service_spec.rb
@@ -277,12 +228,10 @@ files:
277
228
  - spec/services/session_item_results_service_spec.rb
278
229
  - spec/services/session_items_service_spec.rb
279
230
  - spec/spec_helper.rb
280
- - spec/support/pact_config.rb
281
- - spec/support/pact_helper.rb
282
- homepage:
231
+ homepage:
283
232
  licenses: []
284
233
  metadata: {}
285
- post_install_message:
234
+ post_install_message:
286
235
  rdoc_options: []
287
236
  require_paths:
288
237
  - lib
@@ -297,41 +246,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
297
246
  - !ruby/object:Gem::Version
298
247
  version: '0'
299
248
  requirements: []
300
- rubygems_version: 3.1.4
301
- signing_key:
249
+ rubygems_version: 3.1.6
250
+ signing_key:
302
251
  specification_version: 4
303
252
  summary: Ruby client for quiz_api
304
253
  test_files:
305
254
  - spec/config_spec.rb
306
- - spec/contracts/interaction_types_service_spec.rb
307
- - spec/contracts/item_analyses_service_spec.rb
308
- - spec/contracts/items_service_spec.rb
309
- - spec/contracts/qti_imports_service_spec.rb
310
- - spec/contracts/quiz_clone_job_service_spec.rb
311
- - spec/contracts/quiz_clone_jobs_service_spec.rb
312
- - spec/contracts/quiz_entries_service_spec.rb
313
- - spec/contracts/quiz_service_spec.rb
314
- - spec/contracts/quiz_session_events_service_spec.rb
315
- - spec/contracts/quiz_session_result_service_spec.rb
316
- - spec/contracts/quiz_session_service_spec.rb
317
- - spec/contracts/quiz_sessions_service_spec.rb
318
- - spec/contracts/quiz_sync_job_service_spec.rb
319
- - spec/contracts/quiz_sync_jobs_service_spec.rb
320
- - spec/contracts/quizzes_service_spec.rb
321
- - spec/contracts/session_item_results_service_spec.rb
322
- - spec/contracts/session_items_service_spec.rb
323
- - spec/contracts/shared_banks_spec.rb
324
- - spec/contracts/shared_examples/http_delete_example.rb
325
- - spec/contracts/shared_examples/http_get_example.rb
326
- - spec/contracts/shared_examples/http_patch_example.rb
327
- - spec/contracts/shared_examples/http_post_example.rb
328
- - spec/contracts/shared_examples/http_put_example.rb
329
255
  - spec/http_client_spec.rb
330
256
  - spec/json_formatter_spec.rb
331
257
  - spec/quiz_api_client/http_request/failure_spec.rb
332
258
  - spec/quiz_api_client/http_request/metrics_spec.rb
333
259
  - spec/quiz_api_client_spec.rb
334
260
  - spec/services/base_api_service_spec.rb
261
+ - spec/services/courses_service_spec.rb
335
262
  - spec/services/interaction_types_service_spec.rb
336
263
  - spec/services/item_analyses_service_spec.rb
337
264
  - spec/services/items_service_spec.rb
@@ -352,5 +279,3 @@ test_files:
352
279
  - spec/services/session_item_results_service_spec.rb
353
280
  - spec/services/session_items_service_spec.rb
354
281
  - spec/spec_helper.rb
355
- - spec/support/pact_config.rb
356
- - spec/support/pact_helper.rb
@@ -1,22 +0,0 @@
1
- describe QuizApiClient::Services::InteractionTypesService, :pact do
2
- include PactHelper
3
-
4
- it_behaves_like 'a http get request to quiz_api collection endpoint' do
5
- let(:provider_state) { 'a set of interaction types' }
6
- let(:request_description) { 'a request to retrieve a list of interaction types' }
7
- let(:quizzes_api_path) { '/api/interaction_types' }
8
- let(:scope) { 'quiz.build' }
9
- let(:params) { nil }
10
- let(:response_body) do
11
- Pact.each_like(
12
- id: '1',
13
- slug: 'choice',
14
- name: 'Multiple Choice',
15
- properties_schema: {},
16
- scoring_algorithm_default: 'Equivalence',
17
- user_response_type_options: ['Uuid']
18
- )
19
- end
20
- let(:service_name) { :interaction_types_service }
21
- end
22
- end
@@ -1,59 +0,0 @@
1
- describe QuizApiClient::Services::ItemAnalysesService, :pact do
2
- include PactHelper
3
-
4
- it_behaves_like 'a http get request to quiz_api collection endpoint', testrail_id: %w[3402546] do
5
- let(:request_description) { 'a request to retrieve item analyses all quiz_id items' }
6
- let(:quiz_id) { 1 }
7
- let(:quizzes_api_path) { "/api/quizzes/#{quiz_id}/stats/item_analyses" }
8
- let(:provider_state) { 'quiz with item analysis' }
9
- let(:resource_id) { '1' }
10
- let(:scope) { 'quiz.analysis' }
11
- let(:params) { { quiz_id: '1' } }
12
- let(:response_body) do
13
- [
14
- {
15
- item_id: Pact.like('1'),
16
- points_possible: Pact.like(1.0),
17
- item_body: Pact.like('item body'),
18
- interaction_type: 'choice',
19
- item_analysis: {},
20
- batch_timestamp: Pact.like('2017-06-15T22:14:51.215Z'),
21
- outcome_alignment_set_guid: Pact.like('cbedd9b0-d1ab-43a9-a3b2-89c3134a722a')
22
- },
23
- {
24
- item_id: Pact.like('1'),
25
- points_possible: Pact.like(1.0),
26
- item_body: Pact.like('item body'),
27
- interaction_type: 'choice',
28
- item_analysis: {},
29
- batch_timestamp: Pact.like('2017-06-15T22:14:51.215Z'),
30
- outcome_alignment_set_guid: Pact.like('cbedd9b0-d1ab-43a9-a3b2-89c3134a722a')
31
- }
32
- ]
33
- end
34
- let(:service_name) { :item_analyses_service }
35
- end
36
-
37
- it_behaves_like 'a http get only request to quiz_api', testrail_id: %w[3402547] do
38
- let(:request_description) { 'a request to retrieve item analyses for a quiz item' }
39
- let(:quiz_id) { 1 }
40
- let(:id) { 1 }
41
- let(:quizzes_api_path) { "/api/quizzes/#{quiz_id}/stats/item_analyses/#{id}" }
42
- let(:provider_state) { 'quiz with item analysis' }
43
- let(:resource_id) { '1' }
44
- let(:scope) { 'quiz.analysis' }
45
- let(:params) { { quiz_id: '1', id: '1' } }
46
- let(:response_body) do
47
- {
48
- item_id: Pact.like('1'),
49
- points_possible: Pact.like(1.0),
50
- item_body: Pact.like('item body'),
51
- interaction_type: 'choice',
52
- item_analysis: {},
53
- batch_timestamp: Pact.like('2017-06-15T22:14:51.215Z'),
54
- outcome_alignment_set_guid: Pact.like('cbedd9b0-d1ab-43a9-a3b2-89c3134a722a')
55
- }
56
- end
57
- let(:service_name) { :item_analyses_service }
58
- end
59
- end
@@ -1,59 +0,0 @@
1
- describe QuizApiClient::Services::ItemsService, :pact do
2
- include PactHelper
3
-
4
- it_behaves_like 'a http post request to quiz_api' do
5
- let(:provider_state) { 'a quiz and a multiple choice interaction type' }
6
- let(:request_description) { 'a request to create an item' }
7
- let(:quizzes_api_path) { "/api/quizzes/#{quiz_id}/items" }
8
- let(:resource_id) { '1' }
9
- let(:scope) { 'quiz.build' }
10
- let(:quiz_id) { 1 }
11
- let(:params) do
12
- {
13
- quiz_id: quiz_id,
14
- interaction_data: {
15
- choices: [{
16
- id: 'guid',
17
- itemBody: '<p>Choice</p>',
18
- position: 1
19
- }]
20
- },
21
- interaction_type_id: 1, # we'll seed InteractionType::MultipleChoice
22
- item_body: 'Some kind of stem',
23
- properties: {},
24
- scoring_algorithm: 'Equivalence',
25
- scoring_data: {
26
- value: 'another guid'
27
- },
28
- title: 'A perfectly cromulent title',
29
- user_response_type: 'Uuid'
30
- }
31
- end
32
- let(:item_params) { params.clone.tap { |p| p.delete(:quiz_id) } }
33
- let(:body) { { quiz_id: quiz_id, item: item_params } }
34
- let(:response_body) do
35
- {
36
- id: Pact.like('1'),
37
- interaction_data: {
38
- choices: Pact.each_like(
39
- id: 'a guid',
40
- item_body: 'choice description',
41
- position: 1
42
- )
43
- },
44
- item_body: Pact.like(''),
45
- properties: Pact.like({}),
46
- status: Pact.like(''),
47
- title: Pact.like(''),
48
- user_response_type: Pact.like(''),
49
- stimulus_id: Pact.like(''),
50
- interaction_type: Pact.like({}),
51
- scoring_data: {
52
- value: Pact.like('')
53
- },
54
- scoring_algorithm: Pact.like('')
55
- }
56
- end
57
- let(:service_name) { :items_service }
58
- end
59
- end
@@ -1,34 +0,0 @@
1
- describe QuizApiClient::Services::QtiImportsService, :pact do
2
- include PactHelper
3
-
4
- it_behaves_like 'a http post request to quiz_api', testrail_id: %w[3402548] do
5
- let(:request_description) { 'a request to import a QTI' }
6
- let(:provider_state) { 'a quiz' }
7
- let(:quiz_id) { 1 }
8
- let(:url) { 'http://fake.url' }
9
- let(:quizzes_api_path) { "/api/quizzes/#{quiz_id}/qti_imports" }
10
- let(:scope) { 'qti_import.create' }
11
- let(:resource_id) { quiz_id }
12
- let(:params) do
13
- {
14
- quiz_id: quiz_id,
15
- url: url
16
- }
17
- end
18
- let(:body) { { qti_import: params } }
19
- let(:response_body) do
20
- {
21
- id: Pact.like('1'),
22
- parent_id: quiz_id.to_s,
23
- parent_type: Pact.like('Quiz'),
24
- status: 'scheduled',
25
- url: url,
26
- message: Pact.like(''),
27
- created_at: Pact.like(''),
28
- updated_at: Pact.like(''),
29
- progress: Pact.like(0.0)
30
- }
31
- end
32
- let(:service_name) { :qti_imports_service }
33
- end
34
- end