quiz_api_client 4.1.0 → 4.3.0
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/README.md +4 -0
- data/lib/quiz_api_client/config.rb +29 -8
- data/lib/quiz_api_client/http_client.rb +11 -40
- data/lib/quiz_api_client/http_request/failure.rb +65 -0
- data/lib/quiz_api_client/http_request/metrics.rb +67 -0
- data/lib/quiz_api_client/services/items_service.rb +11 -0
- data/lib/quiz_api_client/services/quiz_clone_jobs_service.rb +11 -0
- data/lib/quiz_api_client/services/quiz_sync_job_service.rb +17 -0
- data/lib/quiz_api_client/services/quiz_sync_jobs_service.rb +16 -0
- data/lib/quiz_api_client/version.rb +1 -1
- data/lib/quiz_api_client.rb +12 -0
- data/spec/config_spec.rb +66 -0
- data/spec/contracts/interaction_types_service_spec.rb +22 -0
- data/spec/contracts/item_analyses_service_spec.rb +59 -0
- data/spec/contracts/items_service_spec.rb +59 -0
- data/spec/contracts/qti_imports_service_spec.rb +34 -0
- data/spec/contracts/quiz_clone_job_service_spec.rb +20 -0
- data/spec/contracts/quiz_clone_jobs_service_spec.rb +21 -0
- data/spec/contracts/quiz_entries_service_spec.rb +125 -0
- data/spec/contracts/quiz_service_spec.rb +68 -0
- data/spec/contracts/quiz_session_events_service_spec.rb +30 -0
- data/spec/contracts/quiz_session_result_service_spec.rb +42 -0
- data/spec/contracts/quiz_session_service_spec.rb +56 -0
- data/spec/contracts/quiz_sessions_service_spec.rb +28 -0
- data/spec/contracts/quiz_sync_job_service_spec.rb +21 -0
- data/spec/contracts/quiz_sync_jobs_service_spec.rb +21 -0
- data/spec/contracts/quizzes_service_spec.rb +80 -0
- data/spec/contracts/session_item_results_service_spec.rb +60 -0
- data/spec/contracts/session_items_service_spec.rb +21 -0
- data/spec/contracts/shared_banks_spec.rb +366 -0
- data/spec/contracts/shared_examples/http_delete_example.rb +56 -0
- data/spec/contracts/shared_examples/http_get_example.rb +139 -0
- data/spec/contracts/shared_examples/http_patch_example.rb +60 -0
- data/spec/contracts/shared_examples/http_post_example.rb +68 -0
- data/spec/contracts/shared_examples/http_put_example.rb +60 -0
- data/spec/http_client_spec.rb +347 -0
- data/spec/json_formatter_spec.rb +32 -0
- data/spec/quiz_api_client/http_request/failure_spec.rb +100 -0
- data/spec/quiz_api_client/http_request/metrics_spec.rb +75 -0
- data/spec/quiz_api_client_spec.rb +117 -0
- data/spec/services/base_api_service_spec.rb +50 -0
- data/spec/services/interaction_types_service_spec.rb +25 -0
- data/spec/services/item_analyses_service_spec.rb +76 -0
- data/spec/services/items_service_spec.rb +56 -0
- data/spec/services/jwt_service_spec.rb +66 -0
- data/spec/services/qti_imports_service_spec.rb +114 -0
- data/spec/services/quiz_analyses_service_spec.rb +44 -0
- data/spec/services/quiz_clone_job_service_spec.rb +41 -0
- data/spec/services/quiz_clone_jobs_service_spec.rb +77 -0
- data/spec/services/quiz_entries_service_spec.rb +71 -0
- data/spec/services/quiz_service_spec.rb +49 -0
- data/spec/services/quiz_session_events_service_spec.rb +42 -0
- data/spec/services/quiz_session_result_service_spec.rb +26 -0
- data/spec/services/quiz_session_service_spec.rb +49 -0
- data/spec/services/quiz_sessions_service_spec.rb +42 -0
- data/spec/services/quiz_sync_job_service_spec.rb +41 -0
- data/spec/services/quiz_sync_jobs_service_spec.rb +77 -0
- data/spec/services/quizzes_service_spec.rb +71 -0
- data/spec/services/session_item_results_service_spec.rb +33 -0
- data/spec/services/session_items_service_spec.rb +26 -0
- data/spec/spec_helper.rb +42 -0
- data/spec/support/pact_config.rb +64 -0
- data/spec/support/pact_helper.rb +19 -0
- metadata +130 -35
- data/.dockerignore +0 -7
- data/.editorconfig +0 -16
- data/.gitignore +0 -13
- data/.rspec +0 -3
- data/.rubocop.yml +0 -72
- data/CHANGELOG.md +0 -28
- data/Dockerfile +0 -12
- data/Gemfile +0 -5
- data/Jenkinsfile +0 -86
- data/bin/console +0 -7
- data/bin/contracts-generate +0 -26
- data/bin/setup +0 -65
- data/docker-compose.dev.override.yml +0 -11
- data/docker-compose.yml +0 -10
- data/quiz_api_client.gemspec +0 -59
@@ -0,0 +1,20 @@
|
|
1
|
+
describe QuizApiClient::Services::QuizCloneJobService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
|
4
|
+
it_behaves_like 'a http get request to quiz_api' do
|
5
|
+
let(:request_description) { 'a request to retrieve a quiz clone job' }
|
6
|
+
let(:quizzes_api_path) { "/api/quiz_clone_jobs/#{resource_id}" }
|
7
|
+
let(:provider_state) { 'a quiz clone job' }
|
8
|
+
let(:scope) { 'quiz_clone_job.show' }
|
9
|
+
let(:params) { { id: resource_id } }
|
10
|
+
let(:resource_id) { '1' }
|
11
|
+
let(:response_body) do
|
12
|
+
{
|
13
|
+
id: Pact.like('1'),
|
14
|
+
original_quiz_id: Pact.like('1'),
|
15
|
+
status: Pact.like('scheduled')
|
16
|
+
}
|
17
|
+
end
|
18
|
+
let(:service_name) { :quiz_clone_job_service }
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
describe QuizApiClient::Services::QuizCloneJobsService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
|
4
|
+
it_behaves_like 'a http post request to quiz_api' do
|
5
|
+
let(:request_description) { 'a request to clone a quiz' }
|
6
|
+
let(:quizzes_api_path) { "/api/quizzes/#{resource_id}/quiz_clone_jobs" }
|
7
|
+
let(:provider_state) { 'a quiz' }
|
8
|
+
let(:scope) { 'quiz.clone' }
|
9
|
+
let(:params) { { quiz_id: resource_id } }
|
10
|
+
let(:body) { {} }
|
11
|
+
let(:resource_id) { '1' }
|
12
|
+
let(:response_body) do
|
13
|
+
{
|
14
|
+
id: Pact.like('1'),
|
15
|
+
original_quiz_id: Pact.like('1'),
|
16
|
+
status: Pact.like('scheduled')
|
17
|
+
}
|
18
|
+
end
|
19
|
+
let(:service_name) { :quiz_clone_jobs_service }
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
describe QuizApiClient::Services::QuizEntriesService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
|
4
|
+
it_behaves_like 'a http get request to quiz_api collection endpoint', testrail_id: %w[3402549] do
|
5
|
+
let(:request_description) { 'a request to retrieve a list of quiz entries' }
|
6
|
+
let(:quiz_id) { 1 }
|
7
|
+
let(:quizzes_api_path) { "/api/quizzes/#{quiz_id}/quiz_entries" }
|
8
|
+
let(:provider_state) { 'a set of quiz entries' }
|
9
|
+
let(:resource_id) { '1' }
|
10
|
+
let(:scope) { 'quiz.build' }
|
11
|
+
let(:params) { { id: '1' } }
|
12
|
+
let(:response_body) do
|
13
|
+
[
|
14
|
+
{
|
15
|
+
entry_editable: Pact.like(true),
|
16
|
+
entry_type: 'Item',
|
17
|
+
id: Pact.like('1'),
|
18
|
+
position: Pact.like(0),
|
19
|
+
properties: {},
|
20
|
+
regrade_adjusted_points_possible: nil,
|
21
|
+
status: 'mutable',
|
22
|
+
stimulus_quiz_entry_id: Pact.like('1'),
|
23
|
+
entry: {
|
24
|
+
id: Pact.like('1'),
|
25
|
+
title: Pact.like('item 1 title'),
|
26
|
+
label: Pact.like('item 1 label'),
|
27
|
+
user_response_type: Pact.like('Uuid'),
|
28
|
+
item_body: Pact.like('item 1 body'),
|
29
|
+
interaction_data: Pact.like({}),
|
30
|
+
interaction_type: {
|
31
|
+
id: Pact.like('1')
|
32
|
+
}
|
33
|
+
}
|
34
|
+
},
|
35
|
+
{
|
36
|
+
entry_editable: Pact.like(true),
|
37
|
+
entry_type: 'Item',
|
38
|
+
id: Pact.like('1'),
|
39
|
+
position: Pact.like(0),
|
40
|
+
properties: {},
|
41
|
+
regrade_adjusted_points_possible: nil,
|
42
|
+
status: 'mutable',
|
43
|
+
stimulus_quiz_entry_id: Pact.like('1'),
|
44
|
+
entry: {
|
45
|
+
id: Pact.like('1'),
|
46
|
+
title: Pact.like('item 1 title'),
|
47
|
+
label: Pact.like('item 1 label'),
|
48
|
+
user_response_type: Pact.like('Uuid'),
|
49
|
+
item_body: Pact.like('item 1 body'),
|
50
|
+
interaction_data: Pact.like({}),
|
51
|
+
interaction_type: {
|
52
|
+
id: Pact.like('1')
|
53
|
+
}
|
54
|
+
}
|
55
|
+
}
|
56
|
+
]
|
57
|
+
end
|
58
|
+
let(:service_name) { :quiz_entries_service }
|
59
|
+
end
|
60
|
+
|
61
|
+
it_behaves_like 'a http post request to quiz_api' do
|
62
|
+
let(:request_description) { 'a request to create a quiz entry' }
|
63
|
+
let(:quiz_id) { 1 }
|
64
|
+
let(:resource_id) { quiz_id }
|
65
|
+
let(:provider_state) { 'a quiz with an item' }
|
66
|
+
let(:quizzes_api_path) { "/api/quizzes/#{quiz_id}/quiz_entries" }
|
67
|
+
let(:scope) { 'quiz.build' }
|
68
|
+
let(:params) do
|
69
|
+
{
|
70
|
+
id: quiz_id,
|
71
|
+
quiz_id: quiz_id,
|
72
|
+
entry_type: 'Item',
|
73
|
+
entry_id: 1,
|
74
|
+
points_possible: 1,
|
75
|
+
position: 1,
|
76
|
+
properties: {
|
77
|
+
points_possible: 1,
|
78
|
+
position: 1
|
79
|
+
}
|
80
|
+
}
|
81
|
+
end
|
82
|
+
let(:body) { { quiz_entry: params } }
|
83
|
+
let(:response_body) do
|
84
|
+
{
|
85
|
+
entry_editable: Pact.like(true),
|
86
|
+
entry_type: 'Item',
|
87
|
+
id: Pact.like('1'),
|
88
|
+
position: Pact.like(0),
|
89
|
+
properties: Pact.like({}),
|
90
|
+
regrade_adjusted_points_possible: nil,
|
91
|
+
status: 'mutable',
|
92
|
+
stimulus_quiz_entry_id: Pact.like('1'),
|
93
|
+
entry: {
|
94
|
+
id: Pact.like('1'),
|
95
|
+
title: Pact.like('item 1 title'),
|
96
|
+
label: Pact.like('item 1 label'),
|
97
|
+
user_response_type: Pact.like('Uuid'),
|
98
|
+
item_body: Pact.like('item 1 body'),
|
99
|
+
interaction_data: Pact.like({}),
|
100
|
+
interaction_type: {
|
101
|
+
id: Pact.like('1')
|
102
|
+
}
|
103
|
+
}
|
104
|
+
}
|
105
|
+
end
|
106
|
+
let(:service_name) { :quiz_entries_service }
|
107
|
+
end
|
108
|
+
|
109
|
+
it_behaves_like 'a http delete request to quiz_api' do
|
110
|
+
let(:request_description) { 'a request to delete a quiz entry' }
|
111
|
+
let(:quiz_id) { 1 }
|
112
|
+
let(:item_id) { 1 }
|
113
|
+
let(:resource_id) { quiz_id }
|
114
|
+
let(:provider_state) { 'a set of quiz entries' }
|
115
|
+
let(:quizzes_api_path) { "/api/quizzes/#{quiz_id}/quiz_entries/#{item_id}" }
|
116
|
+
let(:scope) { 'quiz.build' }
|
117
|
+
let(:params) do
|
118
|
+
{
|
119
|
+
quiz_id: quiz_id,
|
120
|
+
id: item_id
|
121
|
+
}
|
122
|
+
end
|
123
|
+
let(:service_name) { :quiz_entries_service }
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
describe QuizApiClient::Services::QuizService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
|
4
|
+
it_behaves_like 'a http get request to quiz_api', testrail_id: %w[3402550] do
|
5
|
+
let(:service_name) { :quiz_service }
|
6
|
+
let(:request_description) { 'a request to retrieve a single quiz' }
|
7
|
+
let(:quizzes_api_path) { '/api/quizzes/1' }
|
8
|
+
let(:provider_state) { 'a quiz' }
|
9
|
+
let(:scope) { 'quiz.build' }
|
10
|
+
let(:params) { { id: '1' } }
|
11
|
+
let(:resource_id) { '1' }
|
12
|
+
let(:response_body) do
|
13
|
+
{
|
14
|
+
id: Pact.like('1'),
|
15
|
+
title: Pact.like('quiz title'),
|
16
|
+
context_id: Pact.like('1'),
|
17
|
+
session_time_limit_in_seconds: Pact.like(1),
|
18
|
+
instructions: Pact.like('quiz instructions'),
|
19
|
+
shuffle_questions: Pact.like(false),
|
20
|
+
shuffle_answers: Pact.like(false),
|
21
|
+
status: 'uninitialized',
|
22
|
+
owner: Pact.like('teacher'),
|
23
|
+
has_time_limit: Pact.like(false),
|
24
|
+
outcome_alignment_set_guid: Pact.like('cbedd9b0-d1ab-43a9-a3b2-89c3134a722a'),
|
25
|
+
one_at_a_time_type: 'question',
|
26
|
+
allow_backtracking: Pact.like(true)
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it_behaves_like 'a http patch request to quiz_api', testrail_id: %w[3402551] do
|
32
|
+
let(:service_name) { :quiz_service }
|
33
|
+
let(:request_description) { 'a request to update a quiz' }
|
34
|
+
let(:quizzes_api_path) { '/api/quizzes/1' }
|
35
|
+
let(:provider_state) { 'a quiz' }
|
36
|
+
let(:scope) { 'quiz.build' }
|
37
|
+
let(:title) { 'some new title' }
|
38
|
+
let(:params) do
|
39
|
+
{
|
40
|
+
id: '1',
|
41
|
+
title: title
|
42
|
+
}
|
43
|
+
end
|
44
|
+
let(:resource_id) { '1' }
|
45
|
+
let(:body) { { quiz: params } }
|
46
|
+
let(:response_body) do
|
47
|
+
{
|
48
|
+
id: Pact.like('1'),
|
49
|
+
title: title,
|
50
|
+
instructions: Pact.like('quiz instructions'),
|
51
|
+
context_id: Pact.like('1'),
|
52
|
+
owner: Pact.like('teacher1'),
|
53
|
+
has_time_limit: Pact.like(false),
|
54
|
+
allow_backtracking: Pact.like(true),
|
55
|
+
one_at_a_time_type: 'question',
|
56
|
+
session_time_limit_in_seconds: 0,
|
57
|
+
outcome_alignment_set_guid: Pact.like('cbedd9b0-d1ab-43a9-a3b2-89c3134a722a'),
|
58
|
+
require_student_access_code: Pact.like(false),
|
59
|
+
filter_ip_address: Pact.like(false),
|
60
|
+
shuffle_questions: Pact.like(false),
|
61
|
+
shuffle_answers: Pact.like(false),
|
62
|
+
status: 'unpublished',
|
63
|
+
student_access_code: Pact.like('3uXc15S3B'),
|
64
|
+
filters: Pact.like({})
|
65
|
+
}
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
describe QuizApiClient::Services::QuizSessionEventsService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
|
4
|
+
it_behaves_like 'a http get request to quiz_api collection endpoint', testrail_id: %w[3402552] do
|
5
|
+
let(:request_description) { 'a request to retrieve a list of quiz entries' }
|
6
|
+
let(:quiz_session_id) { 1 }
|
7
|
+
let(:quizzes_api_path) { "/api/quiz_sessions/#{quiz_session_id}/quiz_session_events" }
|
8
|
+
let(:provider_state) { 'set of session events' }
|
9
|
+
let(:resource_id) { '1' }
|
10
|
+
let(:scope) { 'quiz_sessions.log' }
|
11
|
+
let(:params) { { quiz_session_id: '1' } }
|
12
|
+
let(:response_body) do
|
13
|
+
[
|
14
|
+
{
|
15
|
+
created_at: Pact.like(''),
|
16
|
+
event_type: Pact.like(''),
|
17
|
+
event_data: {},
|
18
|
+
quiz_session_id: Pact.like('1')
|
19
|
+
},
|
20
|
+
{
|
21
|
+
created_at: Pact.like(''),
|
22
|
+
event_type: Pact.like(''),
|
23
|
+
event_data: {},
|
24
|
+
quiz_session_id: Pact.like('1')
|
25
|
+
}
|
26
|
+
]
|
27
|
+
end
|
28
|
+
let(:service_name) { :quiz_session_events_service }
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
describe QuizApiClient::Services::QuizSessionResultService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
|
4
|
+
it_behaves_like 'a http get request to quiz_api', testrail_id: %w[3402553] do
|
5
|
+
let(:request_description) { 'a request to retrieve a quiz session result' }
|
6
|
+
let(:id) { 1 }
|
7
|
+
let(:quizzes_api_path) { "/api/results/#{id}" }
|
8
|
+
let(:provider_state) { 'a quiz session result' }
|
9
|
+
let(:resource_id) { '1' }
|
10
|
+
let(:scope) { 'quiz_session_result.show' }
|
11
|
+
let(:params) { { id: '1' } }
|
12
|
+
let(:response_body) do
|
13
|
+
{
|
14
|
+
created_at: Pact.like(''),
|
15
|
+
fudge_points: Pact.like(1.0),
|
16
|
+
grading_method: 'autograde',
|
17
|
+
id: Pact.like('1'),
|
18
|
+
percentage: Pact.like(1.0),
|
19
|
+
quiz_session_id: Pact.like('1'),
|
20
|
+
score: Pact.like(1.0),
|
21
|
+
status: 'graded',
|
22
|
+
quiz_session: {
|
23
|
+
id: Pact.like('1'),
|
24
|
+
account_uuid: Pact.like('cbedd9b0-d1ab-43a9-a3b2-89c3134a722a'),
|
25
|
+
end_at: nil,
|
26
|
+
start_at: Pact.like(''),
|
27
|
+
status: 'graded',
|
28
|
+
metadata: nil,
|
29
|
+
accepted_student_access_code: Pact.like(false),
|
30
|
+
attempt: Pact.like(1),
|
31
|
+
disable_timer: nil,
|
32
|
+
extra_time_in_seconds: nil,
|
33
|
+
timer_multiplier: nil,
|
34
|
+
elapsed_time: Pact.like(3600),
|
35
|
+
allow_backtracking: nil,
|
36
|
+
one_at_a_time_type: nil
|
37
|
+
}
|
38
|
+
}
|
39
|
+
end
|
40
|
+
let(:service_name) { :quiz_session_result_service }
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
describe QuizApiClient::Services::QuizSessionService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
|
4
|
+
it_behaves_like 'a http get request to quiz_api', testrail_id: %w[3402554] do
|
5
|
+
let(:request_description) { 'a request to retrieve the graded quiz session' }
|
6
|
+
let(:quizzes_api_path) { '/api/quiz_sessions/1' }
|
7
|
+
let(:provider_state) { 'a graded quiz session' }
|
8
|
+
let(:scope) { 'quiz_session.show' }
|
9
|
+
let(:params) { { id: '1' } }
|
10
|
+
let(:resource_id) { '1' }
|
11
|
+
let(:response_body) do
|
12
|
+
{
|
13
|
+
id: Pact.like('1'),
|
14
|
+
account_uuid: Pact.like('cbedd9b0-d1ab-43a9-a3b2-89c3134a722a'),
|
15
|
+
end_at: nil,
|
16
|
+
start_at: Pact.like(''),
|
17
|
+
status: 'graded',
|
18
|
+
metadata: nil,
|
19
|
+
accepted_student_access_code: Pact.like(false),
|
20
|
+
attempt: Pact.like(1),
|
21
|
+
disable_timer: nil,
|
22
|
+
extra_time_in_seconds: nil,
|
23
|
+
timer_multiplier: nil,
|
24
|
+
elapsed_time: Pact.like(3600),
|
25
|
+
allow_backtracking: nil,
|
26
|
+
one_at_a_time_type: nil
|
27
|
+
}
|
28
|
+
end
|
29
|
+
let(:service_name) { :quiz_session_service }
|
30
|
+
end
|
31
|
+
|
32
|
+
it_behaves_like 'a http patch request to quiz_api', testrail_id: %w[3402555] do
|
33
|
+
let(:request_description) { 'a request to update a quiz session' }
|
34
|
+
let(:quizzes_api_path) { '/api/quiz_sessions/1' }
|
35
|
+
let(:provider_state) { 'a quiz session' }
|
36
|
+
let(:scope) { 'quiz_session.update' }
|
37
|
+
let(:attempt) { 2 }
|
38
|
+
let(:params) do
|
39
|
+
{
|
40
|
+
id: '1',
|
41
|
+
attempt: { attempt: 2 }
|
42
|
+
}
|
43
|
+
end
|
44
|
+
let(:resource_id) { '1' }
|
45
|
+
let(:body) { { quiz_session: params } }
|
46
|
+
let(:response_body) do
|
47
|
+
{
|
48
|
+
id: Pact.like('1'),
|
49
|
+
status: 'graded',
|
50
|
+
start_at: Pact.like(''),
|
51
|
+
end_at: Pact.like('')
|
52
|
+
}
|
53
|
+
end
|
54
|
+
let(:service_name) { :quiz_session_service }
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
describe QuizApiClient::Services::QuizSessionsService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
|
4
|
+
it_behaves_like 'a http post request to quiz_api', testrail_id: %w[3402556] do
|
5
|
+
let(:request_description) { 'a request to create a quiz session' }
|
6
|
+
let(:provider_state) { 'a quiz' }
|
7
|
+
let(:quiz_id) { 1 }
|
8
|
+
let(:quizzes_api_path) { "/api/quizzes/#{quiz_id}/quiz_sessions" }
|
9
|
+
let(:scope) { 'quiz_session.create' }
|
10
|
+
let(:resource_id) { quiz_id }
|
11
|
+
let(:params) do
|
12
|
+
{
|
13
|
+
quiz_id: quiz_id,
|
14
|
+
attempt: 1
|
15
|
+
}
|
16
|
+
end
|
17
|
+
let(:body) { { quiz_session: params } }
|
18
|
+
let(:response_body) do
|
19
|
+
{
|
20
|
+
id: Pact.like('1'),
|
21
|
+
status: 'pending',
|
22
|
+
start_at: Pact.like(''),
|
23
|
+
end_at: Pact.like('')
|
24
|
+
}
|
25
|
+
end
|
26
|
+
let(:service_name) { :quiz_sessions_service }
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
describe QuizApiClient::Services::QuizSyncJobService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
|
4
|
+
it_behaves_like 'a http get request to quiz_api' do
|
5
|
+
let(:request_description) { 'a request to retrieve a quiz sync job' }
|
6
|
+
let(:quizzes_api_path) { "/api/quiz_sync_jobs/#{resource_id}" }
|
7
|
+
let(:provider_state) { 'a quiz sync job' }
|
8
|
+
let(:scope) { 'quiz_sync_job.show' }
|
9
|
+
let(:params) { { id: resource_id } }
|
10
|
+
let(:resource_id) { '1' }
|
11
|
+
let(:response_body) do
|
12
|
+
{
|
13
|
+
id: Pact.like('1'),
|
14
|
+
original_quiz_id: Pact.like('1'),
|
15
|
+
cloned_quiz_id: Pact.like('2'),
|
16
|
+
status: Pact.like('scheduled')
|
17
|
+
}
|
18
|
+
end
|
19
|
+
let(:service_name) { :quiz_sync_job_service }
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
describe QuizApiClient::Services::QuizSyncJobsService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
|
4
|
+
it_behaves_like 'a http post request to quiz_api' do
|
5
|
+
let(:batch) { true }
|
6
|
+
let(:request_description) { 'a request to sync many quizzes' }
|
7
|
+
let(:quizzes_api_path) { '/api/quiz_sync_jobs/create_batch' }
|
8
|
+
let(:provider_state) { 'a completed quiz clone job' }
|
9
|
+
let(:scope) { 'quiz_sync_job.create_batch' }
|
10
|
+
let(:params) { { quiz_ids: ['1'] } }
|
11
|
+
let(:body) { { quiz_ids: ['1'] } }
|
12
|
+
let(:response_body) do
|
13
|
+
[
|
14
|
+
{
|
15
|
+
id: Pact.like('1')
|
16
|
+
}
|
17
|
+
]
|
18
|
+
end
|
19
|
+
let(:service_name) { :quiz_sync_jobs_service }
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
describe QuizApiClient::Services::QuizzesService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
|
4
|
+
it_behaves_like 'a http get request to quiz_api collection endpoint', testrail_id: %w[3402557] do
|
5
|
+
let(:request_description) { 'a request specifying a quiz id' }
|
6
|
+
let(:quizzes_api_path) { '/api/quizzes' }
|
7
|
+
let(:provider_state) { 'a quiz' }
|
8
|
+
let(:scope) { 'quiz.list' }
|
9
|
+
let(:params) { { 'id' => '1' } }
|
10
|
+
let(:query_params) { { 'id' => '1' } }
|
11
|
+
let(:response_body) do
|
12
|
+
[
|
13
|
+
{
|
14
|
+
# TODO: figure out why Pact specs' responses for GET requests from
|
15
|
+
# quiz_api have integers for *ID fields given quiz_api actually returns strings
|
16
|
+
id: Pact.like(1),
|
17
|
+
title: Pact.like('quiz title'),
|
18
|
+
context_id: Pact.like(1),
|
19
|
+
outcome_declaration: nil,
|
20
|
+
session_time_limit_in_seconds: Pact.like(1),
|
21
|
+
quiz_type: nil,
|
22
|
+
minimum_passing_score: nil,
|
23
|
+
lti_resource_id: nil,
|
24
|
+
created_at: Pact.like('2017-06-15T22:14:51.215Z'),
|
25
|
+
updated_at: Pact.like('2017-06-15T22:14:51.215Z'),
|
26
|
+
instructions: Pact.like('quiz instructions'),
|
27
|
+
shuffle_questions: Pact.like(false),
|
28
|
+
shuffle_answers: Pact.like(false),
|
29
|
+
status: 'uninitialized',
|
30
|
+
owner: Pact.like('teacher'),
|
31
|
+
has_time_limit: Pact.like(false),
|
32
|
+
outcome_alignment_set_guid: Pact.like('cbedd9b0-d1ab-43a9-a3b2-89c3134a722a'),
|
33
|
+
one_at_a_time_type: 'question',
|
34
|
+
allow_backtracking: Pact.like(true)
|
35
|
+
}
|
36
|
+
]
|
37
|
+
end
|
38
|
+
let(:service_name) { :quizzes_service }
|
39
|
+
end
|
40
|
+
|
41
|
+
it_behaves_like 'a http post request to quiz_api', testrails_id: %w[3402558] do
|
42
|
+
let(:request_description) { 'a request to create a quiz' }
|
43
|
+
let(:quizzes_api_path) { '/api/quizzes' }
|
44
|
+
let(:provider_state) { 'a context' }
|
45
|
+
let(:scope) { 'quiz.create' }
|
46
|
+
let(:title) { 'Pop Quiz' }
|
47
|
+
let(:instructions) { 'Select the best answer.' }
|
48
|
+
let(:context_id) { '1' }
|
49
|
+
let(:params) do
|
50
|
+
{
|
51
|
+
'title' => title,
|
52
|
+
'instructions' => instructions,
|
53
|
+
'context_id' => context_id
|
54
|
+
}
|
55
|
+
end
|
56
|
+
let(:body) { { quiz: params } }
|
57
|
+
let(:response_body) do
|
58
|
+
{
|
59
|
+
id: Pact.like('1'),
|
60
|
+
title: title,
|
61
|
+
instructions: instructions,
|
62
|
+
context_id: context_id,
|
63
|
+
owner: Pact.like('teacher1'),
|
64
|
+
has_time_limit: Pact.like(false),
|
65
|
+
allow_backtracking: Pact.like(true),
|
66
|
+
one_at_a_time_type: 'none',
|
67
|
+
session_time_limit_in_seconds: 0,
|
68
|
+
outcome_alignment_set_guid: nil,
|
69
|
+
require_student_access_code: Pact.like(false),
|
70
|
+
filter_ip_address: Pact.like(false),
|
71
|
+
shuffle_questions: Pact.like(false),
|
72
|
+
shuffle_answers: Pact.like(false),
|
73
|
+
status: 'uninitialized',
|
74
|
+
student_access_code: nil,
|
75
|
+
filters: Pact.like({})
|
76
|
+
}
|
77
|
+
end
|
78
|
+
let(:service_name) { :quizzes_service }
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
describe QuizApiClient::Services::SessionItemResultsService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
it_behaves_like 'a http get request to quiz_api collection endpoint', testrail_id: %w[3402559] do
|
4
|
+
let(:request_description) { 'a request to retrieve a session item result' }
|
5
|
+
let(:quizzes_api_path) { '/api/quiz_sessions/1/results/1/session_item_results' }
|
6
|
+
let(:provider_state) { 'a set of session_item_results' }
|
7
|
+
let(:resource_id) { '1' }
|
8
|
+
let(:scope) { 'quiz_session.results' }
|
9
|
+
let(:params) { { quiz_session_id: '1', quiz_session_result_id: '1' } }
|
10
|
+
let(:response_body) do
|
11
|
+
[
|
12
|
+
{
|
13
|
+
position: Pact.like(1),
|
14
|
+
attempt: Pact.like(1),
|
15
|
+
item_id: Pact.like('1'),
|
16
|
+
graded_at: Pact.like('2017-06-15T22:14:51.215Z'),
|
17
|
+
grading_method: 'autograde',
|
18
|
+
points_possible: Pact.like(1.0),
|
19
|
+
score: Pact.like(1.0),
|
20
|
+
scored_data: {},
|
21
|
+
feedback: {}
|
22
|
+
}
|
23
|
+
]
|
24
|
+
end
|
25
|
+
let(:service_name) { :session_item_results_service }
|
26
|
+
end
|
27
|
+
|
28
|
+
it_behaves_like 'a http get request to quiz_api collection endpoint' do
|
29
|
+
let(:request_description) { 'a request to retrieve a session item result for all interaction_types' }
|
30
|
+
let(:quizzes_api_path) { '/api/quiz_sessions/1/results/1/session_item_results' }
|
31
|
+
let(:provider_state) { 'a set of session_item_results of autograded interaction_types' }
|
32
|
+
let(:resource_id) { '1' }
|
33
|
+
let(:scope) { 'quiz_session.results' }
|
34
|
+
let(:params) { { quiz_session_id: '1', quiz_session_result_id: '1' } }
|
35
|
+
let(:response_body) do
|
36
|
+
Pact.each_like(
|
37
|
+
grading_method: 'autograde',
|
38
|
+
score: Pact.like(1.0)
|
39
|
+
)
|
40
|
+
end
|
41
|
+
let(:service_name) { :session_item_results_service }
|
42
|
+
end
|
43
|
+
|
44
|
+
it_behaves_like 'a http get request to quiz_api collection endpoint' do
|
45
|
+
let(:request_description) { 'a request to retrieve a session item result for manually graded interaction_types' }
|
46
|
+
let(:quizzes_api_path) { '/api/quiz_sessions/1/results/1/session_item_results' }
|
47
|
+
let(:provider_state) { 'a set of session_item_results of manually graded interaction_types' }
|
48
|
+
let(:resource_id) { '1' }
|
49
|
+
let(:scope) { 'quiz_session.results' }
|
50
|
+
let(:params) { { quiz_session_id: '1', quiz_session_result_id: '1' } }
|
51
|
+
let(:response_body) do
|
52
|
+
Pact.each_like(
|
53
|
+
graded_at: Pact.like('2017-06-15T22:14:51.215Z'),
|
54
|
+
grading_method: 'manual_grading',
|
55
|
+
score: Pact.like(1.0)
|
56
|
+
)
|
57
|
+
end
|
58
|
+
let(:service_name) { :session_item_results_service }
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
describe QuizApiClient::Services::SessionItemsService, :pact do
|
2
|
+
include PactHelper
|
3
|
+
it_behaves_like 'a http get request to quiz_api collection endpoint', testrail_id: %w[3402560] do
|
4
|
+
let(:request_description) { 'a request to retrieve a session item' }
|
5
|
+
let(:quizzes_api_path) { '/api/quiz_sessions/1/session_items' }
|
6
|
+
let(:provider_state) { 'a set of session_items' }
|
7
|
+
let(:scope) { 'quiz_session.results' }
|
8
|
+
let(:resource_id) { '1' }
|
9
|
+
let(:params) { { quiz_session_id: '1' } }
|
10
|
+
let(:response_body) do
|
11
|
+
[
|
12
|
+
{
|
13
|
+
position: Pact.like(1),
|
14
|
+
item: {},
|
15
|
+
points_possible: Pact.like(1.0)
|
16
|
+
}
|
17
|
+
]
|
18
|
+
end
|
19
|
+
let(:service_name) { :session_items_service }
|
20
|
+
end
|
21
|
+
end
|