openstax_exchange 0.0.2 → 0.1.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.
Files changed (18) hide show
  1. data/.gitignore +1 -0
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +3 -1
  4. data/exchange-client.gemspec +1 -0
  5. data/lib/openstax/exchange/exchange.rb +4 -4
  6. data/lib/openstax/exchange/fake_client/fake_client.rb +11 -10
  7. data/lib/openstax/exchange/real_client/real_client.rb +14 -4
  8. data/lib/openstax/exchange/version.rb +1 -1
  9. data/spec/cassettes/OpenStax_Exchange_RealClient/behaves_like_exchange_client_api_v1/{_create_identifier → _create_identifiers}/success/creates_and_returns_a_new_identifier.yml +27 -20
  10. data/spec/cassettes/OpenStax_Exchange_RealClient/behaves_like_exchange_client_api_v1/{_create_identifier/success/creates_a_distinct_identifer_per_invokation.yml → _create_identifiers/success/creates_distinct_identifiers_per_invokation.yml} +42 -31
  11. data/spec/cassettes/OpenStax_Exchange_RealClient/behaves_like_exchange_client_api_v1/_record_multiple_choice_answer/duplicate_identifer_resource_trial_triplet/{raises_an_exception.yml → records_the_new_answer.yml} +44 -40
  12. data/spec/cassettes/OpenStax_Exchange_RealClient/behaves_like_exchange_client_api_v1/_record_multiple_choice_answer/invalid_resource_string/raises_an_exception.yml +40 -31
  13. data/spec/cassettes/OpenStax_Exchange_RealClient/behaves_like_exchange_client_api_v1/_record_multiple_choice_answer/success/allows_answers_with_distinct_identifiers_to_be_saved.yml +70 -55
  14. data/spec/cassettes/OpenStax_Exchange_RealClient/behaves_like_exchange_client_api_v1/_record_multiple_choice_answer/success/allows_answers_with_distinct_resources_to_be_saved.yml +55 -44
  15. data/spec/cassettes/OpenStax_Exchange_RealClient/behaves_like_exchange_client_api_v1/_record_multiple_choice_answer/success/allows_answers_with_distinct_trials_to_be_saved.yml +55 -44
  16. data/spec/cassettes/OpenStax_Exchange_RealClient/behaves_like_exchange_client_api_v1/_record_multiple_choice_answer/success/creates_a_multiple_choice_answer_associated_with_the_given_identifier.yml +41 -32
  17. data/spec/lib/openstax/exchange/shared_examples_for_exchange_client_v1.rb +40 -24
  18. metadata +26 -10
@@ -4,15 +4,17 @@ http_interactions:
4
4
  method: post
5
5
  uri: http://123:abc@localhost:3003/oauth/token
6
6
  body:
7
- encoding: US-ASCII
7
+ encoding: UTF-8
8
8
  string: grant_type=client_credentials
9
9
  headers:
10
10
  User-Agent:
11
- - Faraday v0.9.0
11
+ - Faraday v0.9.1
12
12
  Content-Type:
13
13
  - application/x-www-form-urlencoded
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
16
  Accept:
15
- - ! '*/*'
17
+ - "*/*"
16
18
  response:
17
19
  status:
18
20
  code: 200
@@ -31,35 +33,40 @@ http_interactions:
31
33
  Content-Type:
32
34
  - application/json; charset=utf-8
33
35
  Etag:
34
- - W/"ab1b4891590a9b55ed3b68cdea0797dc"
36
+ - W/"01a3dc6120131867d799eeb81ededd7c"
35
37
  X-Request-Id:
36
- - eae23034-415c-41d8-b753-c1c2db718bef
38
+ - 50b8abb8-2581-4563-9fb3-b2c8aaaf110c
37
39
  X-Runtime:
38
- - '0.015784'
40
+ - '0.016761'
39
41
  Connection:
40
42
  - close
41
43
  Server:
42
44
  - thin
43
45
  body:
44
- encoding: US-ASCII
45
- string: ! '{"access_token":"b59697ce884560cd4ffb45d25429eac6e7748b02b92515435b878ecefdc5b744","token_type":"bearer"}'
46
+ encoding: UTF-8
47
+ string: '{"access_token":"63f9dbd18dbdb22c5edf9c16a89754405d388e9185639d748590edac6e94b640","token_type":"bearer","scope":"read
48
+ write","created_at":1430246610}'
46
49
  http_version:
47
- recorded_at: Mon, 12 Jan 2015 21:08:53 GMT
50
+ recorded_at: Tue, 28 Apr 2015 18:43:30 GMT
48
51
  - request:
49
52
  method: post
50
53
  uri: http://localhost:3003/api/identifiers
51
54
  body:
52
- encoding: US-ASCII
55
+ encoding: UTF-8
53
56
  string: ''
54
57
  headers:
55
58
  User-Agent:
56
- - Faraday v0.9.0
59
+ - Faraday v0.9.1
57
60
  Accept:
58
61
  - application/vnd.exchange.openstax.v1
62
+ Content-Type:
63
+ - application/json
59
64
  Authorization:
60
- - Bearer b59697ce884560cd4ffb45d25429eac6e7748b02b92515435b878ecefdc5b744
65
+ - Bearer 63f9dbd18dbdb22c5edf9c16a89754405d388e9185639d748590edac6e94b640
61
66
  Content-Length:
62
67
  - '0'
68
+ Accept-Encoding:
69
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
63
70
  response:
64
71
  status:
65
72
  code: 201
@@ -71,44 +78,46 @@ http_interactions:
71
78
  - 1; mode=block
72
79
  X-Content-Type-Options:
73
80
  - nosniff
81
+ Date:
82
+ - Tue, 28 Apr 2015 18:43:30 GMT
74
83
  Content-Type:
75
84
  - application/json; charset=utf-8
76
85
  Etag:
77
- - W/"23bf8a5c1f6c37c77f932fb457c2cf9c"
86
+ - W/"4ce5b4a127b4a8b4217b22febac168e2"
78
87
  Cache-Control:
79
88
  - max-age=0, private, must-revalidate
80
89
  Set-Cookie:
81
- - _exercises_session=MXhFZHZROXBOL0htVUZURkN6c1EvVkl4emF4WjlCcEpEeld6R21CVWlmZVltWUt1ODZ0cnh6WVl2d3Jka0dIOVVEdStRbXFGZ0pxUCtHTmhzUllZTkE9PS0taGNnRlhPTU9VMWNwTzM3a2ZjK2x1dz09--96afdd88799321242558c51063c5740eb5628341;
82
- path=/; HttpOnly
83
90
  - request_method=POST; path=/
84
91
  X-Request-Id:
85
- - 43446333-8184-48d5-9967-5dc67b1821a3
92
+ - db6a9b5f-7fb9-46f4-adaf-f89eb9db4c20
86
93
  X-Runtime:
87
- - '0.043338'
94
+ - '0.055572'
88
95
  Connection:
89
96
  - close
90
97
  Server:
91
98
  - thin
92
99
  body:
93
- encoding: US-ASCII
94
- string: ! '{"identifier":"abea60a1e7d41a4bc1e08dac7d5503f2d4d1b980525040ffd0a518ccc56cfa21"}'
100
+ encoding: UTF-8
101
+ string: '{"read":"18252758189f85fb48d2a5536d5f09630a72e321dffa89223067aa02efc542ab","write":"697ed8df8b11bf5efe110c397c838b4f09ad88fb0997cff4ff512d8249d5f662"}'
95
102
  http_version:
96
- recorded_at: Mon, 12 Jan 2015 21:08:53 GMT
103
+ recorded_at: Tue, 28 Apr 2015 18:43:30 GMT
97
104
  - request:
98
105
  method: post
99
106
  uri: http://localhost:3003/api/events/platforms/multiple_choices
100
107
  body:
101
108
  encoding: UTF-8
102
- string: ! '{"identifier":"abea60a1e7d41a4bc1e08dac7d5503f2d4d1b980525040ffd0a518ccc56cfa21","resource":"http://exercises.openstax.org/exercises/1234","trial":"1","answer":"answer_string"}'
109
+ string: '{"identifier":"697ed8df8b11bf5efe110c397c838b4f09ad88fb0997cff4ff512d8249d5f662","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"1","answer":"answer_string"}'
103
110
  headers:
104
111
  User-Agent:
105
- - Faraday v0.9.0
112
+ - Faraday v0.9.1
106
113
  Accept:
107
114
  - application/vnd.exchange.openstax.v1
108
115
  Authorization:
109
- - Bearer b59697ce884560cd4ffb45d25429eac6e7748b02b92515435b878ecefdc5b744
116
+ - Bearer 63f9dbd18dbdb22c5edf9c16a89754405d388e9185639d748590edac6e94b640
110
117
  Content-Type:
111
- - application/x-www-form-urlencoded
118
+ - application/json
119
+ Accept-Encoding:
120
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
112
121
  response:
113
122
  status:
114
123
  code: 201
@@ -120,44 +129,46 @@ http_interactions:
120
129
  - 1; mode=block
121
130
  X-Content-Type-Options:
122
131
  - nosniff
132
+ Date:
133
+ - Tue, 28 Apr 2015 18:43:30 GMT
123
134
  Content-Type:
124
135
  - application/json; charset=utf-8
125
136
  Etag:
126
- - W/"4738777d6ef383aacb01235f3f0aecc9"
137
+ - W/"8a8ac413619079b24604116af205df89"
127
138
  Cache-Control:
128
139
  - max-age=0, private, must-revalidate
129
140
  Set-Cookie:
130
- - _exercises_session=NTJxQU1LM3VLRmJZYmZveHl5RFkxWkorVWNxMUZYQWpuNWx3OVZrbFlDT0tVYWhucXpMTXZ2SXY2SUdXVStxZ0VzZlJNYTg5ckIzaVdiWC92dy95V0E9PS0tK1hLVWRzRDA4MzRhWWhBbUEwenRuUT09--5629f468e0c0390f0e8503de735c2de2bb61fdb8;
131
- path=/; HttpOnly
132
141
  - request_method=POST; path=/
133
142
  X-Request-Id:
134
- - eba4d4cc-b391-40e1-bf64-7960a35f4d8d
143
+ - bec18dd1-93e3-4d47-934b-81be11d63a92
135
144
  X-Runtime:
136
- - '0.121233'
145
+ - '0.077400'
137
146
  Connection:
138
147
  - close
139
148
  Server:
140
149
  - thin
141
150
  body:
142
- encoding: US-ASCII
143
- string: ! '{"identifier":"abea60a1e7d41a4bc1e08dac7d5503f2d4d1b980525040ffd0a518ccc56cfa21","resource":"http://exercises.openstax.org/exercises/1234","trial":"1","created_at":"2015-01-12T21:08:53.287Z","answer_type":"multiple-choice","answer":"answer_string"}'
151
+ encoding: UTF-8
152
+ string: '{"identifier":"697ed8df8b11bf5efe110c397c838b4f09ad88fb0997cff4ff512d8249d5f662","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"1","created_at":"2015-04-28T18:43:30.206Z","answer_type":"multiple-choice","answer":"answer_string"}'
144
153
  http_version:
145
- recorded_at: Mon, 12 Jan 2015 21:08:53 GMT
154
+ recorded_at: Tue, 28 Apr 2015 18:43:30 GMT
146
155
  - request:
147
156
  method: post
148
157
  uri: http://localhost:3003/api/events/platforms/multiple_choices
149
158
  body:
150
159
  encoding: UTF-8
151
- string: ! '{"identifier":"abea60a1e7d41a4bc1e08dac7d5503f2d4d1b980525040ffd0a518ccc56cfa21","resource":"http://exercises.openstax.org/exercises/1234","trial":"2","answer":"answer_string"}'
160
+ string: '{"identifier":"697ed8df8b11bf5efe110c397c838b4f09ad88fb0997cff4ff512d8249d5f662","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"2","answer":"answer_string"}'
152
161
  headers:
153
162
  User-Agent:
154
- - Faraday v0.9.0
163
+ - Faraday v0.9.1
155
164
  Accept:
156
165
  - application/vnd.exchange.openstax.v1
157
166
  Authorization:
158
- - Bearer b59697ce884560cd4ffb45d25429eac6e7748b02b92515435b878ecefdc5b744
167
+ - Bearer 63f9dbd18dbdb22c5edf9c16a89754405d388e9185639d748590edac6e94b640
159
168
  Content-Type:
160
- - application/x-www-form-urlencoded
169
+ - application/json
170
+ Accept-Encoding:
171
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
161
172
  response:
162
173
  status:
163
174
  code: 201
@@ -169,27 +180,27 @@ http_interactions:
169
180
  - 1; mode=block
170
181
  X-Content-Type-Options:
171
182
  - nosniff
183
+ Date:
184
+ - Tue, 28 Apr 2015 18:43:30 GMT
172
185
  Content-Type:
173
186
  - application/json; charset=utf-8
174
187
  Etag:
175
- - W/"37e4b819d2e843dfc999ec163249a53f"
188
+ - W/"c72abbf5393222af122d2d4811ff78da"
176
189
  Cache-Control:
177
190
  - max-age=0, private, must-revalidate
178
191
  Set-Cookie:
179
- - _exercises_session=TUd2eDhvNUVSdjVTaXFrQUdXRTVBYUlqdE40UnV0N0ptZXc0SXBYV3BWaW54VVJ4Tzh4RFk5K3ZMUzhIbS9Pd1VoS2N6aWZWeVN6Y0NkRERkMFBwMUE9PS0tbEh6cnlaMUZiSU43Qmx4QXlxeFdOdz09--158b91791d386dbb96fbf65af3db126c7cd9b8f0;
180
- path=/; HttpOnly
181
192
  - request_method=POST; path=/
182
193
  X-Request-Id:
183
- - 3f6b2acd-73bf-434e-a4c9-13cd9d5e8800
194
+ - b9796968-8924-47e3-bf69-52571db62d1e
184
195
  X-Runtime:
185
- - '0.073191'
196
+ - '0.088069'
186
197
  Connection:
187
198
  - close
188
199
  Server:
189
200
  - thin
190
201
  body:
191
- encoding: US-ASCII
192
- string: ! '{"identifier":"abea60a1e7d41a4bc1e08dac7d5503f2d4d1b980525040ffd0a518ccc56cfa21","resource":"http://exercises.openstax.org/exercises/1234","trial":"2","created_at":"2015-01-12T21:08:53.370Z","answer_type":"multiple-choice","answer":"answer_string"}'
202
+ encoding: UTF-8
203
+ string: '{"identifier":"697ed8df8b11bf5efe110c397c838b4f09ad88fb0997cff4ff512d8249d5f662","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"2","created_at":"2015-04-28T18:43:30.298Z","answer_type":"multiple-choice","answer":"answer_string"}'
193
204
  http_version:
194
- recorded_at: Mon, 12 Jan 2015 21:08:53 GMT
205
+ recorded_at: Tue, 28 Apr 2015 18:43:30 GMT
195
206
  recorded_with: VCR 2.9.3
@@ -4,15 +4,17 @@ http_interactions:
4
4
  method: post
5
5
  uri: http://123:abc@localhost:3003/oauth/token
6
6
  body:
7
- encoding: US-ASCII
7
+ encoding: UTF-8
8
8
  string: grant_type=client_credentials
9
9
  headers:
10
10
  User-Agent:
11
- - Faraday v0.9.0
11
+ - Faraday v0.9.1
12
12
  Content-Type:
13
13
  - application/x-www-form-urlencoded
14
+ Accept-Encoding:
15
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
14
16
  Accept:
15
- - ! '*/*'
17
+ - "*/*"
16
18
  response:
17
19
  status:
18
20
  code: 200
@@ -31,35 +33,40 @@ http_interactions:
31
33
  Content-Type:
32
34
  - application/json; charset=utf-8
33
35
  Etag:
34
- - W/"e463908024e5712415722596d2aa197d"
36
+ - W/"815cacdcae868316d9283b4c4234be07"
35
37
  X-Request-Id:
36
- - e0cc9069-fabe-447e-8f39-3ea55a2ae601
38
+ - 8ff577cb-4792-454d-aaa8-d18229200ca4
37
39
  X-Runtime:
38
- - '0.015996'
40
+ - '0.015656'
39
41
  Connection:
40
42
  - close
41
43
  Server:
42
44
  - thin
43
45
  body:
44
- encoding: US-ASCII
45
- string: ! '{"access_token":"63cf088605315a592d872458afbdd26eb691a7ebd4db117215ebc2cd84829d45","token_type":"bearer"}'
46
+ encoding: UTF-8
47
+ string: '{"access_token":"5552d62289d2c8e4ccbc676e1624dbf145da58cbce820e76dd004ecbddfd8078","token_type":"bearer","scope":"read
48
+ write","created_at":1430246609}'
46
49
  http_version:
47
- recorded_at: Mon, 12 Jan 2015 21:08:52 GMT
50
+ recorded_at: Tue, 28 Apr 2015 18:43:29 GMT
48
51
  - request:
49
52
  method: post
50
53
  uri: http://localhost:3003/api/identifiers
51
54
  body:
52
- encoding: US-ASCII
55
+ encoding: UTF-8
53
56
  string: ''
54
57
  headers:
55
58
  User-Agent:
56
- - Faraday v0.9.0
59
+ - Faraday v0.9.1
57
60
  Accept:
58
61
  - application/vnd.exchange.openstax.v1
62
+ Content-Type:
63
+ - application/json
59
64
  Authorization:
60
- - Bearer 63cf088605315a592d872458afbdd26eb691a7ebd4db117215ebc2cd84829d45
65
+ - Bearer 5552d62289d2c8e4ccbc676e1624dbf145da58cbce820e76dd004ecbddfd8078
61
66
  Content-Length:
62
67
  - '0'
68
+ Accept-Encoding:
69
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
63
70
  response:
64
71
  status:
65
72
  code: 201
@@ -71,44 +78,46 @@ http_interactions:
71
78
  - 1; mode=block
72
79
  X-Content-Type-Options:
73
80
  - nosniff
81
+ Date:
82
+ - Tue, 28 Apr 2015 18:43:29 GMT
74
83
  Content-Type:
75
84
  - application/json; charset=utf-8
76
85
  Etag:
77
- - W/"94c76c22e48adee6850f7f758130929a"
86
+ - W/"fe30d78c0c6dfa5d263ef6f2f272ef41"
78
87
  Cache-Control:
79
88
  - max-age=0, private, must-revalidate
80
89
  Set-Cookie:
81
- - _exercises_session=Y0FCSkN1L21TRkp0S2xJNkxuRGJUZkdNSjJML3F5NVRsdmd4WUlqaTdiczZ2WDRXcE1MTDFhVFFHRmxzL1R5Y0pHRlpRTzJYRzNKSmxnUzZIUFlHR1E9PS0tVFRkTkdBWk9YaGw3Q1A4M29NWmxiUT09--a105cf2f6eb8f7307466b070661c139095608ea5;
82
- path=/; HttpOnly
83
90
  - request_method=POST; path=/
84
91
  X-Request-Id:
85
- - ecbb2f11-eb79-4f06-91ed-3a511c13e2f3
92
+ - b063040f-9657-4688-b184-13598fdfaaa5
86
93
  X-Runtime:
87
- - '0.040816'
94
+ - '0.055653'
88
95
  Connection:
89
96
  - close
90
97
  Server:
91
98
  - thin
92
99
  body:
93
- encoding: US-ASCII
94
- string: ! '{"identifier":"3aa2504cbe2e8b8e2f7e3834c6c1324ffcd50b29872bcdbe77d1c3587bd719ae"}'
100
+ encoding: UTF-8
101
+ string: '{"read":"029aa6a1917fdad644ffecbf6a65a670700e24c91bd7382009308ef5e48791b2","write":"c7a0b2e50c5cb79da5dc9f7d0794ef45189f2077e3eac7df23cb3914a78ced9c"}'
95
102
  http_version:
96
- recorded_at: Mon, 12 Jan 2015 21:08:52 GMT
103
+ recorded_at: Tue, 28 Apr 2015 18:43:29 GMT
97
104
  - request:
98
105
  method: post
99
106
  uri: http://localhost:3003/api/events/platforms/multiple_choices
100
107
  body:
101
108
  encoding: UTF-8
102
- string: ! '{"identifier":"3aa2504cbe2e8b8e2f7e3834c6c1324ffcd50b29872bcdbe77d1c3587bd719ae","resource":"http://exercises.openstax.org/exercises/1234","trial":"1","answer":"answer_string"}'
109
+ string: '{"identifier":"c7a0b2e50c5cb79da5dc9f7d0794ef45189f2077e3eac7df23cb3914a78ced9c","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"1","answer":"answer_string"}'
103
110
  headers:
104
111
  User-Agent:
105
- - Faraday v0.9.0
112
+ - Faraday v0.9.1
106
113
  Accept:
107
114
  - application/vnd.exchange.openstax.v1
108
115
  Authorization:
109
- - Bearer 63cf088605315a592d872458afbdd26eb691a7ebd4db117215ebc2cd84829d45
116
+ - Bearer 5552d62289d2c8e4ccbc676e1624dbf145da58cbce820e76dd004ecbddfd8078
110
117
  Content-Type:
111
- - application/x-www-form-urlencoded
118
+ - application/json
119
+ Accept-Encoding:
120
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
112
121
  response:
113
122
  status:
114
123
  code: 201
@@ -120,27 +129,27 @@ http_interactions:
120
129
  - 1; mode=block
121
130
  X-Content-Type-Options:
122
131
  - nosniff
132
+ Date:
133
+ - Tue, 28 Apr 2015 18:43:29 GMT
123
134
  Content-Type:
124
135
  - application/json; charset=utf-8
125
136
  Etag:
126
- - W/"d044e24bdcdf0b2ff8316bbf53e25f14"
137
+ - W/"caf97912c3657c4d0bbaab554f64e444"
127
138
  Cache-Control:
128
139
  - max-age=0, private, must-revalidate
129
140
  Set-Cookie:
130
- - _exercises_session=RUdNUXpxRkR1YzRlcE05MFJKV3NRQnJIaUU4RzhHTW9pREtzWUd2TjRiMGdZM2RsZlhmaHZKdlJ1dDRRRi9GUVlkZUo2anBFbkw5ZjErdU1Sb3Q1VVE9PS0tb3NIaTJoQ3djbkpzaWZhU0dkQ3hXUT09--b863b16466f2fc8176a22fa602c21184415f14ed;
131
- path=/; HttpOnly
132
141
  - request_method=POST; path=/
133
142
  X-Request-Id:
134
- - 3b6c238a-5709-4d7c-a8fe-69c8e96e9669
143
+ - 7c475370-105f-47ce-845e-9f991408395a
135
144
  X-Runtime:
136
- - '0.086874'
145
+ - '0.074384'
137
146
  Connection:
138
147
  - close
139
148
  Server:
140
149
  - thin
141
150
  body:
142
- encoding: US-ASCII
143
- string: ! '{"identifier":"3aa2504cbe2e8b8e2f7e3834c6c1324ffcd50b29872bcdbe77d1c3587bd719ae","resource":"http://exercises.openstax.org/exercises/1234","trial":"1","created_at":"2015-01-12T21:08:52.423Z","answer_type":"multiple-choice","answer":"answer_string"}'
151
+ encoding: UTF-8
152
+ string: '{"identifier":"c7a0b2e50c5cb79da5dc9f7d0794ef45189f2077e3eac7df23cb3914a78ced9c","resource":"https://exercises-dev1.openstax.org/api/exercises/123@1","trial":"1","created_at":"2015-04-28T18:43:29.466Z","answer_type":"multiple-choice","answer":"answer_string"}'
144
153
  http_version:
145
- recorded_at: Mon, 12 Jan 2015 21:08:52 GMT
154
+ recorded_at: Tue, 28 Apr 2015 18:43:29 GMT
146
155
  recorded_with: VCR 2.9.3
@@ -61,16 +61,29 @@ RSpec.shared_examples "exchange client api v1" do
61
61
  end
62
62
  end
63
63
 
64
- describe "#create_identifier" do
64
+ describe "#create_identifiers" do
65
65
  context "success" do
66
66
  it "creates and returns a new identifier" do
67
- identifier = OpenStax::Exchange.create_identifier
68
- expect(identifier).to match(/^[a-fA-F0-9]+$/)
67
+ response = OpenStax::Exchange.create_identifiers
68
+ read_identifier = response.read
69
+ write_identifier = response.write
70
+ expect(read_identifier).to match(/^[a-fA-F0-9]+$/)
71
+ expect(write_identifier).to match(/^[a-fA-F0-9]+$/)
69
72
  end
70
- it "creates a distinct identifer per invokation" do
71
- identifier1 = OpenStax::Exchange.create_identifier
72
- identifier2 = OpenStax::Exchange.create_identifier
73
+
74
+ it "creates distinct identifiers per invokation" do
75
+ response1 = OpenStax::Exchange.create_identifiers
76
+ response2 = OpenStax::Exchange.create_identifiers
77
+ identifier1 = response1.read
78
+ identifier2 = response1.write
79
+ identifier3 = response2.read
80
+ identifier4 = response2.write
73
81
  expect(identifier1).to_not eq(identifier2)
82
+ expect(identifier1).to_not eq(identifier3)
83
+ expect(identifier1).to_not eq(identifier4)
84
+ expect(identifier2).to_not eq(identifier3)
85
+ expect(identifier2).to_not eq(identifier4)
86
+ expect(identifier3).to_not eq(identifier4)
74
87
  end
75
88
  end
76
89
  end
@@ -78,11 +91,11 @@ RSpec.shared_examples "exchange client api v1" do
78
91
  describe "#record_multiple_choice_answer" do
79
92
  context "success" do
80
93
  it "creates a multiple choice answer associated with the given identifier" do
81
- identifier = OpenStax::Exchange.create_identifier
94
+ identifier = OpenStax::Exchange.create_identifiers.write
82
95
 
83
96
  # must have the form of a "trusted resource"
84
97
  # (Exchange app/routines/find_or_create_resource_from_url.rb:35)
85
- resource_string = 'http://exercises.openstax.org/exercises/1234'
98
+ resource_string = 'https://exercises-dev1.openstax.org/api/exercises/123@1'
86
99
  trial = '1'
87
100
  answer_string = 'answer_string'
88
101
 
@@ -95,12 +108,12 @@ RSpec.shared_examples "exchange client api v1" do
95
108
  expect(response['answer']).to eq(answer_string)
96
109
  end
97
110
  it "allows answers with distinct identifiers to be saved" do
98
- identifier1 = OpenStax::Exchange.create_identifier
99
- identifier2 = OpenStax::Exchange.create_identifier
111
+ identifier1 = OpenStax::Exchange.create_identifiers.write
112
+ identifier2 = OpenStax::Exchange.create_identifiers.write
100
113
 
101
114
  # must have the form of a "trusted resource"
102
115
  # (Exchange app/routines/find_or_create_resource_from_url.rb:35)
103
- resource_string = 'http://exercises.openstax.org/exercises/1234'
116
+ resource_string = 'https://exercises-dev1.openstax.org/api/exercises/123@1'
104
117
  trial = '1'
105
118
  answer_string = 'answer_string'
106
119
 
@@ -119,12 +132,12 @@ RSpec.shared_examples "exchange client api v1" do
119
132
  expect(response['identifier']).to eq(identifier2)
120
133
  end
121
134
  it "allows answers with distinct resources to be saved" do
122
- identifier = OpenStax::Exchange.create_identifier
135
+ identifier = OpenStax::Exchange.create_identifiers.write
123
136
 
124
137
  # must have the form of a "trusted resource"
125
138
  # (Exchange app/routines/find_or_create_resource_from_url.rb:35)
126
- resource_string1 = 'http://exercises.openstax.org/exercises/1234'
127
- resource_string2 = 'http://exercises.openstax.org/exercises/3456'
139
+ resource_string1 = 'https://exercises-dev1.openstax.org/api/exercises/12@1'
140
+ resource_string2 = 'https://exercises-dev1.openstax.org/api/exercises/123@1'
128
141
  trial = '1'
129
142
  answer_string = 'answer_string'
130
143
 
@@ -143,11 +156,11 @@ RSpec.shared_examples "exchange client api v1" do
143
156
  expect(response['resource']).to eq(resource_string2)
144
157
  end
145
158
  it "allows answers with distinct trials to be saved" do
146
- identifier = OpenStax::Exchange.create_identifier
159
+ identifier = OpenStax::Exchange.create_identifiers.write
147
160
 
148
161
  # must have the form of a "trusted resource"
149
162
  # (Exchange app/routines/find_or_create_resource_from_url.rb:35)
150
- resource_string = 'http://exercises.openstax.org/exercises/1234'
163
+ resource_string = 'https://exercises-dev1.openstax.org/api/exercises/123@1'
151
164
  trial1 = '1'
152
165
  trial2 = '2'
153
166
  answer_string = 'answer_string'
@@ -168,33 +181,36 @@ RSpec.shared_examples "exchange client api v1" do
168
181
  end
169
182
  end
170
183
  context "duplicate (identifer,resource,trial) triplet" do
171
- it "raises an exception" do
172
- identifier = OpenStax::Exchange.create_identifier
184
+ it "records the new answer" do
185
+ identifier = OpenStax::Exchange.create_identifiers.write
173
186
 
174
187
  # must have the form of a "trusted resource"
175
188
  # (Exchange app/routines/find_or_create_resource_from_url.rb:35)
176
- resource_string = 'http://exercises.openstax.org/exercises/1234'
189
+ resource_string = 'https://exercises-dev1.openstax.org/api/exercises/123@1'
177
190
  trial = '1'
178
191
  answer_string = 'answer_string'
192
+ answer_string_2 = 'another_string'
179
193
 
180
194
  expect {
181
195
  response = OpenStax::Exchange.record_multiple_choice_answer(
182
- identifier, resource_string, trial, answer_string)
196
+ identifier, resource_string, trial, answer_string
197
+ )
183
198
  }.to_not raise_error
184
199
 
185
200
  expect {
186
201
  response = OpenStax::Exchange.record_multiple_choice_answer(
187
- identifier, resource_string, trial, answer_string)
188
- }.to raise_error(OpenStax::Exchange::ClientError)
202
+ identifier, resource_string, trial, answer_string_2
203
+ )
204
+ }.to_not raise_error
189
205
  end
190
206
  end
191
207
  context "invalid resource string" do
192
208
  it "raises an exception" do
193
- identifier = OpenStax::Exchange.create_identifier
209
+ identifier = OpenStax::Exchange.create_identifiers.write
194
210
 
195
211
  # must have the form of a "trusted resource"
196
212
  # (Exchange app/routines/find_or_create_resource_from_url.rb:35)
197
- resource_string = 'http://example.com/exercises/1234'
213
+ resource_string = 'https://example.com/api/exercises/123@1'
198
214
  trial = '1'
199
215
  answer_string = 'answer_string'
200
216