scorm_engine 0.3.0 → 0.4.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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/lib/scorm_engine/api/endpoints.rb +12 -2
  3. data/lib/scorm_engine/api/endpoints/destinations.rb +225 -0
  4. data/lib/scorm_engine/api/endpoints/dispatches.rb +301 -0
  5. data/lib/scorm_engine/faraday/connection.rb +0 -1
  6. data/lib/scorm_engine/models.rb +3 -0
  7. data/lib/scorm_engine/models/destination.rb +27 -0
  8. data/lib/scorm_engine/models/dispatch.rb +51 -0
  9. data/lib/scorm_engine/models/dispatch_zip.rb +18 -0
  10. data/lib/scorm_engine/version.rb +1 -1
  11. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_delete_destination/raises_ArgumentError_when_destination_id_is_missing.yml +32 -0
  12. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_delete_destination/returns_success_even_when_id_is_invalid.yml +32 -0
  13. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_delete_destination/works.yml +32 -0
  14. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destination/fails_when_id_is_invalid.yml +38 -0
  15. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destination/is_successful.yml +38 -0
  16. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destination/results/sucessfully_creates_the_destination_attributes.yml +38 -0
  17. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destination_dispatches_registration_count/fails_when_invalid.yml +38 -0
  18. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destination_dispatches_registration_count/works.yml +36 -0
  19. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/_more_option_pagination_/returns_all_the_destinations.yml +73 -0
  20. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/_more_option_pagination_/returns_the_more_key_in_the_raw_response.yml +38 -0
  21. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/_since_option/fails_when_passed_an_invalid_value.yml +37 -0
  22. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/_since_option/works.yml +38 -0
  23. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/is_successful.yml +38 -0
  24. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/results/is_an_enumerator_of_Destination_models.yml +38 -0
  25. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_get_destinations/results/sucessfully_creates_the_Destination_attributes.yml +38 -0
  26. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination/is_successful.yml +61 -0
  27. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination/is_successful_even_if_the_destination_id_is_not_unique.yml +32 -0
  28. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination_dispatches_enabled/fails_when_invalid.yml +38 -0
  29. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination_dispatches_enabled/works_when_false.yml +32 -0
  30. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination_dispatches_enabled/works_when_true.yml +32 -0
  31. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination_dispatches_registration_instancing/fails_when_invalid.yml +38 -0
  32. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination_dispatches_registration_instancing/works_when_false.yml +32 -0
  33. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_post_destination_dispatches_registration_instancing/works_when_true.yml +32 -0
  34. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_put_destination/is_successful.yml +32 -0
  35. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Destinations/_put_destination/results/sucessfully_creates_the_destination_attributes.yml +67 -0
  36. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_delete_dispatch/returns_success_even_when_id_is_invalid.yml +30 -0
  37. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_delete_dispatch/works.yml +30 -0
  38. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch/fails_when_id_is_invalid.yml +36 -0
  39. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch/is_successful.yml +36 -0
  40. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch/results/sucessfully_creates_the_dispatch_attributes.yml +36 -0
  41. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_enabled/is_false_when_disabled.yml +63 -0
  42. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_enabled/is_true_when_enabled.yml +63 -0
  43. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/fails_given_an_invalid_id.yml +36 -0
  44. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/fails_given_an_invalid_type.yml +34 -0
  45. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/works.yml +37 -0
  46. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/works_when_type_is_AICC.yml +37 -0
  47. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/works_when_type_is_SCORM12.yml +37 -0
  48. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatch_zip/works_when_type_is_SCORM20043RDEDITION.yml +35 -0
  49. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/_more_option_pagination_/returns_all_the_dispatches.yml +69 -0
  50. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/_more_option_pagination_/returns_the_more_key_in_the_raw_response.yml +36 -0
  51. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/_since_option/fails_when_passed_an_invalid_value.yml +35 -0
  52. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/_since_option/works.yml +36 -0
  53. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/is_successful.yml +36 -0
  54. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/results/is_an_enumerator_of_dispatch_models.yml +36 -0
  55. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_get_dispatches/results/sucessfully_creates_the_dispatch_attributes.yml +69 -0
  56. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_post_dispatch/is_successful.yml +59 -0
  57. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_put_dispatch/is_successful.yml +32 -0
  58. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_put_dispatch/results/sucessfully_creates_the_dispatch_attributes.yml +65 -0
  59. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_put_dispatch_enabled/fails_when_invalid.yml +38 -0
  60. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_put_dispatch_enabled/works_when_false.yml +32 -0
  61. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Dispatches/_put_dispatch_enabled/works_when_true.yml +32 -0
  62. data/spec/fixtures/vcr/ScormEngine_Api_Endpoints_Registrations/_post_registration/is_successful_even_when_given_a_UTF8/slashed_username.yml +97 -0
  63. data/spec/scorm_engine/api/endpoints/destinations_spec.rb +215 -0
  64. data/spec/scorm_engine/api/endpoints/dispatches_spec.rb +286 -0
  65. data/spec/scorm_engine/api/endpoints/registrations_spec.rb +12 -0
  66. data/spec/scorm_engine/models/destination_spec.rb +21 -0
  67. data/spec/scorm_engine/models/dispatch_spec.rb +85 -0
  68. data/spec/scorm_engine/models/dispatch_zip_spec.rb +18 -0
  69. data/spec/support/scorm_engine.rb +21 -0
  70. metadata +78 -2
@@ -0,0 +1,69 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/ScormEngineGemTesting-default/dispatches
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - ScormEngine Ruby Gem 0.3.0
12
+ Authorization:
13
+ - Basic <BASIC_AUTH>
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: ''
18
+ headers:
19
+ content-type:
20
+ - application/json
21
+ date:
22
+ - Mon, 20 Aug 2018 23:05:21 GMT
23
+ server:
24
+ - nginx
25
+ vary:
26
+ - Accept-Encoding
27
+ content-length:
28
+ - '373'
29
+ connection:
30
+ - Close
31
+ body:
32
+ encoding: ASCII-8BIT
33
+ string: '{"dispatches":[{"id":"paginated-dispatch-0","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}},{"id":"paginated-dispatch-1","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}},{"id":"paginated-dispatch-2","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}},{"id":"paginated-dispatch-3","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}},{"id":"paginated-dispatch-4","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}},{"id":"paginated-dispatch-5","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}},{"id":"paginated-dispatch-6","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}},{"id":"paginated-dispatch-7","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}},{"id":"paginated-dispatch-8","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}},{"id":"paginated-dispatch-9","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}}],"more":"https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/scormenginegemtesting-default/dispatches?configuration=ScormEngineGemTesting-default&more=AAABZVly6mAAAAAL"}'
34
+ http_version:
35
+ recorded_at: Mon, 20 Aug 2018 23:05:21 GMT
36
+ - request:
37
+ method: get
38
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/scormenginegemtesting-default/dispatches?configuration=ScormEngineGemTesting-default&more=AAABZVly6mAAAAAL
39
+ body:
40
+ encoding: US-ASCII
41
+ string: ''
42
+ headers:
43
+ User-Agent:
44
+ - ScormEngine Ruby Gem 0.3.0
45
+ Authorization:
46
+ - Basic <BASIC_AUTH>
47
+ response:
48
+ status:
49
+ code: 200
50
+ message: ''
51
+ headers:
52
+ content-type:
53
+ - application/json
54
+ date:
55
+ - Mon, 20 Aug 2018 23:05:21 GMT
56
+ server:
57
+ - nginx
58
+ vary:
59
+ - Accept-Encoding
60
+ content-length:
61
+ - '245'
62
+ connection:
63
+ - Close
64
+ body:
65
+ encoding: ASCII-8BIT
66
+ string: '{"dispatches":[{"id":"paginated-dispatch-10","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}},{"id":"dispatch-to-be-deleted","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}},{"id":"testing-dispatch-id","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":"none","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}}]}'
67
+ http_version:
68
+ recorded_at: Mon, 20 Aug 2018 23:05:21 GMT
69
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,59 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: delete
5
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/ScormEngineGemTesting-default/dispatches/testing-dispatch-id
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - ScormEngine Ruby Gem 0.3.0
12
+ Authorization:
13
+ - Basic <BASIC_AUTH>
14
+ response:
15
+ status:
16
+ code: 204
17
+ message: ''
18
+ headers:
19
+ date:
20
+ - Mon, 20 Aug 2018 23:04:57 GMT
21
+ server:
22
+ - nginx
23
+ connection:
24
+ - Close
25
+ body:
26
+ encoding: UTF-8
27
+ string: ''
28
+ http_version:
29
+ recorded_at: Mon, 20 Aug 2018 23:04:57 GMT
30
+ - request:
31
+ method: post
32
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/ScormEngineGemTesting-default/dispatches
33
+ body:
34
+ encoding: UTF-8
35
+ string: '{"dispatches":[{"id":"testing-dispatch-id","data":{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":0,"expirationDate":null,"externalConfig":null}}]}'
36
+ headers:
37
+ User-Agent:
38
+ - ScormEngine Ruby Gem 0.3.0
39
+ Authorization:
40
+ - Basic <BASIC_AUTH>
41
+ Content-Type:
42
+ - application/json
43
+ response:
44
+ status:
45
+ code: 204
46
+ message: ''
47
+ headers:
48
+ date:
49
+ - Mon, 20 Aug 2018 23:04:57 GMT
50
+ server:
51
+ - nginx
52
+ connection:
53
+ - Close
54
+ body:
55
+ encoding: UTF-8
56
+ string: ''
57
+ http_version:
58
+ recorded_at: Mon, 20 Aug 2018 23:04:57 GMT
59
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,32 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: put
5
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/ScormEngineGemTesting-default/dispatches/testing-dispatch-id
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":123,"expirationDate":"2018-01-01","externalConfig":null}'
9
+ headers:
10
+ User-Agent:
11
+ - ScormEngine Ruby Gem 0.3.0
12
+ Authorization:
13
+ - Basic <BASIC_AUTH>
14
+ Content-Type:
15
+ - application/json
16
+ response:
17
+ status:
18
+ code: 204
19
+ message: ''
20
+ headers:
21
+ date:
22
+ - Mon, 20 Aug 2018 23:04:42 GMT
23
+ server:
24
+ - nginx
25
+ connection:
26
+ - Close
27
+ body:
28
+ encoding: UTF-8
29
+ string: ''
30
+ http_version:
31
+ recorded_at: Mon, 20 Aug 2018 23:04:42 GMT
32
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,65 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: put
5
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/ScormEngineGemTesting-default/dispatches/testing-dispatch-id
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":123,"expirationDate":"2018-01-01","externalConfig":null}'
9
+ headers:
10
+ User-Agent:
11
+ - ScormEngine Ruby Gem 0.3.0
12
+ Authorization:
13
+ - Basic <BASIC_AUTH>
14
+ Content-Type:
15
+ - application/json
16
+ response:
17
+ status:
18
+ code: 204
19
+ message: ''
20
+ headers:
21
+ date:
22
+ - Mon, 20 Aug 2018 23:04:44 GMT
23
+ server:
24
+ - nginx
25
+ connection:
26
+ - Close
27
+ body:
28
+ encoding: UTF-8
29
+ string: ''
30
+ http_version:
31
+ recorded_at: Mon, 20 Aug 2018 23:04:44 GMT
32
+ - request:
33
+ method: get
34
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/ScormEngineGemTesting-default/dispatches/testing-dispatch-id
35
+ body:
36
+ encoding: US-ASCII
37
+ string: ''
38
+ headers:
39
+ User-Agent:
40
+ - ScormEngine Ruby Gem 0.3.0
41
+ Authorization:
42
+ - Basic <BASIC_AUTH>
43
+ response:
44
+ status:
45
+ code: 200
46
+ message: ''
47
+ headers:
48
+ content-type:
49
+ - application/json
50
+ date:
51
+ - Mon, 20 Aug 2018 23:04:44 GMT
52
+ server:
53
+ - nginx
54
+ vary:
55
+ - Accept-Encoding
56
+ content-length:
57
+ - '199'
58
+ connection:
59
+ - Close
60
+ body:
61
+ encoding: ASCII-8BIT
62
+ string: '{"destinationId":"testing-golf-club","courseId":"testing-golf-explained","allowNewRegistrations":false,"instanced":false,"registrationCap":123,"expirationDate":"2018-01-01T00:00:00Z","externalConfig":"scormenginegemtesting-default","enabled":true,"registrationCount":0,"registrationResetDate":"none"}'
63
+ http_version:
64
+ recorded_at: Mon, 20 Aug 2018 23:04:44 GMT
65
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,38 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: put
5
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/ScormEngineGemTesting-default/dispatches/testing-dispatch-id/enabled
6
+ body:
7
+ encoding: UTF-8
8
+ string: oops
9
+ headers:
10
+ User-Agent:
11
+ - ScormEngine Ruby Gem 0.3.0
12
+ Authorization:
13
+ - Basic <BASIC_AUTH>
14
+ Content-Type:
15
+ - application/json
16
+ response:
17
+ status:
18
+ code: 400
19
+ message: ''
20
+ headers:
21
+ content-type:
22
+ - text/plain
23
+ date:
24
+ - Mon, 20 Aug 2018 23:04:49 GMT
25
+ server:
26
+ - nginx
27
+ content-length:
28
+ - '198'
29
+ connection:
30
+ - Close
31
+ body:
32
+ encoding: UTF-8
33
+ string: |-
34
+ Unrecognized token 'oops': was expecting ('true', 'false' or 'null')
35
+ at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@7e3cc9a0; line: 1, column: 9]
36
+ http_version:
37
+ recorded_at: Mon, 20 Aug 2018 23:04:49 GMT
38
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,32 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: put
5
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/ScormEngineGemTesting-default/dispatches/testing-dispatch-id/enabled
6
+ body:
7
+ encoding: US-ASCII
8
+ string: 'false'
9
+ headers:
10
+ User-Agent:
11
+ - ScormEngine Ruby Gem 0.3.0
12
+ Authorization:
13
+ - Basic <BASIC_AUTH>
14
+ Content-Type:
15
+ - application/json
16
+ response:
17
+ status:
18
+ code: 204
19
+ message: ''
20
+ headers:
21
+ date:
22
+ - Mon, 20 Aug 2018 23:04:47 GMT
23
+ server:
24
+ - nginx
25
+ connection:
26
+ - Close
27
+ body:
28
+ encoding: UTF-8
29
+ string: ''
30
+ http_version:
31
+ recorded_at: Mon, 20 Aug 2018 23:04:47 GMT
32
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,32 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: put
5
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/ScormEngineGemTesting-default/dispatches/testing-dispatch-id/enabled
6
+ body:
7
+ encoding: US-ASCII
8
+ string: 'true'
9
+ headers:
10
+ User-Agent:
11
+ - ScormEngine Ruby Gem 0.3.0
12
+ Authorization:
13
+ - Basic <BASIC_AUTH>
14
+ Content-Type:
15
+ - application/json
16
+ response:
17
+ status:
18
+ code: 204
19
+ message: ''
20
+ headers:
21
+ date:
22
+ - Mon, 20 Aug 2018 23:04:46 GMT
23
+ server:
24
+ - nginx
25
+ connection:
26
+ - Close
27
+ body:
28
+ encoding: UTF-8
29
+ string: ''
30
+ http_version:
31
+ recorded_at: Mon, 20 Aug 2018 23:04:46 GMT
32
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,97 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: delete
5
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/ScormEngineGemTesting-default/registrations/testing-golf-explained-registration-1
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Content-Type:
11
+ - application/json
12
+ User-Agent:
13
+ - ScormEngine Ruby Gem 0.3.0
14
+ Authorization:
15
+ - Basic <BASIC_AUTH>
16
+ response:
17
+ status:
18
+ code: 204
19
+ message: ''
20
+ headers:
21
+ date:
22
+ - Fri, 17 Aug 2018 21:40:15 GMT
23
+ server:
24
+ - nginx
25
+ connection:
26
+ - Close
27
+ body:
28
+ encoding: UTF-8
29
+ string: ''
30
+ http_version:
31
+ recorded_at: Fri, 17 Aug 2018 21:40:15 GMT
32
+ - request:
33
+ method: post
34
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/ScormEngineGemTesting-default/registrations
35
+ body:
36
+ encoding: UTF-8
37
+ string: '{"courseId":"testing-golf-explained","registrationId":"testing-golf-explained-registration-1","learner":{"id":"testing-golf-explained-learner-1","firstName":"Släshy","lastName":"Mc/SláshFacę"}}'
38
+ headers:
39
+ Content-Type:
40
+ - application/json
41
+ User-Agent:
42
+ - ScormEngine Ruby Gem 0.3.0
43
+ Authorization:
44
+ - Basic <BASIC_AUTH>
45
+ response:
46
+ status:
47
+ code: 204
48
+ message: ''
49
+ headers:
50
+ date:
51
+ - Fri, 17 Aug 2018 21:40:15 GMT
52
+ server:
53
+ - nginx
54
+ connection:
55
+ - Close
56
+ body:
57
+ encoding: UTF-8
58
+ string: ''
59
+ http_version:
60
+ recorded_at: Fri, 17 Aug 2018 21:40:15 GMT
61
+ - request:
62
+ method: get
63
+ uri: https://<SCORM_ENGINE_HOST>/ScormEngineInterface/api/v1/ScormEngineGemTesting-default/registrations?learnerId=testing-golf-explained-learner-1
64
+ body:
65
+ encoding: US-ASCII
66
+ string: ''
67
+ headers:
68
+ Content-Type:
69
+ - application/json
70
+ User-Agent:
71
+ - ScormEngine Ruby Gem 0.3.0
72
+ Authorization:
73
+ - Basic <BASIC_AUTH>
74
+ response:
75
+ status:
76
+ code: 200
77
+ message: ''
78
+ headers:
79
+ content-type:
80
+ - application/json
81
+ date:
82
+ - Fri, 17 Aug 2018 21:40:16 GMT
83
+ server:
84
+ - nginx
85
+ vary:
86
+ - Accept-Encoding
87
+ content-length:
88
+ - '369'
89
+ connection:
90
+ - Close
91
+ body:
92
+ encoding: ASCII-8BIT
93
+ string: !binary |-
94
+ eyJyZWdpc3RyYXRpb25zIjpbeyJpZCI6InRlc3RpbmctZ29sZi1leHBsYWluZWQtcmVnaXN0cmF0aW9uLTEiLCJpbnN0YW5jZSI6MCwidXBkYXRlZCI6IjIwMTgtMDgtMTdUMjE6NDA6MTYuMDAwWiIsInJlZ2lzdHJhdGlvbkNvbXBsZXRpb24iOiJVTktOT1dOIiwicmVnaXN0cmF0aW9uU3VjY2VzcyI6IlVua25vd24iLCJ0b3RhbFNlY29uZHNUcmFja2VkIjowLjAsImxhc3RBY2Nlc3NEYXRlIjoiMjAxOC0wOC0xN1QyMTo0MDoxNi4wMDBaIiwiY3JlYXRlZERhdGUiOiIyMDE4LTA4LTE3VDIxOjQwOjE2LjAwMFoiLCJjb3Vyc2UiOnsiaWQiOiJ0ZXN0aW5nLWdvbGYtZXhwbGFpbmVkIiwidmVyc2lvbiI6MCwidGl0bGUiOiJHb2xmIEV4cGxhaW5lZCAtIFJ1bi10aW1lIEJhc2ljIENhbGxzIiwiY291cnNlTGVhcm5pbmdTdGFuZGFyZCI6IlNDT1JNXzIwMDRfM1JEX0VESVRJT04iLCJyZWdpc3RyYXRpb25Db3VudCI6MSwidXBkYXRlZCI6IjIwMTgtMDgtMTVUMjM6MTk6NDkuMDAwWiJ9LCJsZWFybmVyIjp7ImlkIjoidGVzdGluZy1nb2xmLWV4cGxhaW5lZC1sZWFybmVyLTEiLCJmaXJzdE5hbWUiOiJTbMOkc2h5IiwibGFzdE5hbWUiOiJNYy9TbMOhc2hGYWPEmSJ9LCJnbG9iYWxPYmplY3RpdmVzIjpbXSwic2hhcmVkRGF0YSI6W119XX0=
95
+ http_version:
96
+ recorded_at: Fri, 17 Aug 2018 21:40:16 GMT
97
+ recorded_with: VCR 4.0.0
@@ -0,0 +1,215 @@
1
+ RSpec.describe ScormEngine::Api::Endpoints::Destinations do
2
+ let(:subject) { scorm_engine_client }
3
+
4
+ let(:destination_options) { {
5
+ destination_id: "testing-golf-club",
6
+ name: "Golf Club",
7
+ } }
8
+
9
+ before do
10
+ against_real_scorm_engine do
11
+ ensure_destination_exists(destination_options.merge(client: subject))
12
+ end
13
+ end
14
+
15
+ describe "#get_destinations" do
16
+ let(:destinations) { subject.get_destinations }
17
+
18
+ it "is successful" do
19
+ expect(destinations.success?).to eq true
20
+ end
21
+
22
+ describe "results" do
23
+ it "is an enumerator of Destination models" do
24
+ expect(destinations.results).to be_a Enumerator
25
+ expect(destinations.results.first).to be_a ScormEngine::Models::Destination
26
+ end
27
+
28
+ it "sucessfully creates the Destination attributes" do
29
+ aggregate_failures do
30
+ destination = destinations.results.detect { |c| c.id == destination_options[:destination_id] }
31
+ expect(destination.name).to eq destination_options[:name]
32
+ end
33
+ end
34
+ end
35
+
36
+ describe ":since option" do
37
+ it "works" do
38
+ destinations = subject.get_destinations(since: Time.parse("2000-01-1 00:00:00 UTC"))
39
+ aggregate_failures do
40
+ expect(destinations.success?).to eq true
41
+ expect(destinations.results.to_a.size).to be >= 0
42
+ end
43
+ end
44
+
45
+ it "fails when passed an invalid value" do
46
+ destinations = subject.get_destinations(since: "invalid")
47
+ aggregate_failures do
48
+ expect(destinations.success?).to eq false
49
+ expect(destinations.status).to eq 400
50
+ expect(destinations.results.to_a).to eq []
51
+ expect(destinations.message).to match(/'invalid' is either not a timestamp or seems to be not formatted according to ISO 8601/)
52
+ end
53
+ end
54
+ end
55
+
56
+ describe ":more option (pagination)" do
57
+ before do
58
+ against_real_scorm_engine do
59
+ 11.times do |idx|
60
+ ensure_destination_exists(client: subject, destination_id: "paginated-destination-#{idx}")
61
+ end
62
+ end
63
+ end
64
+
65
+ it "returns the :more key in the raw response" do
66
+ expect(subject.get_destinations.raw_response.body["more"]).to match(%r{https?://.*&more=.+})
67
+ end
68
+
69
+ it "returns all the destinations" do
70
+ expect(subject.get_destinations.results.to_a.size).to be >= 11 # there may be other ones beyond those we just added
71
+ end
72
+ end
73
+ end
74
+
75
+ describe "#post_destination" do
76
+ it "is successful" do
77
+ subject.delete_destination(destination_options)
78
+ response = subject.post_destination(destination_options)
79
+ aggregate_failures do
80
+ expect(response.success?).to eq true
81
+ expect(response.status).to eq 204
82
+ end
83
+ end
84
+
85
+ it "is successful even if the destination_id is not unique" do
86
+ response = subject.post_destination(destination_options)
87
+ aggregate_failures do
88
+ expect(response.success?).to eq true
89
+ expect(response.status).to eq 204
90
+ end
91
+ end
92
+ end
93
+
94
+ describe "#get_destination" do
95
+ let(:response) { subject.get_destination(destination_id: destination_options[:destination_id]) }
96
+
97
+ it "is successful" do
98
+ expect(response.success?).to eq true
99
+ end
100
+
101
+ describe "results" do
102
+ it "sucessfully creates the destination attributes" do
103
+ aggregate_failures do
104
+ destination = response.result
105
+ expect(destination.name).to eq destination_options[:name]
106
+ end
107
+ end
108
+ end
109
+
110
+ it "fails when id is invalid" do
111
+ response = subject.get_destination(destination_id: "nonexistent-destination")
112
+ expect(response.success?).to eq false
113
+ expect(response.status).to eq 404
114
+ expect(response.message).to match(/No destinations found with ID: nonexistent-destination/)
115
+ expect(response.result).to eq nil
116
+ end
117
+ end
118
+
119
+ describe "#put_destination" do
120
+ let(:response) { subject.put_destination(destination_options.merge(name: "Golf & Country Club")) }
121
+
122
+ it "is successful" do
123
+ expect(response.success?).to eq true
124
+ end
125
+
126
+ describe "results" do
127
+ it "sucessfully creates the destination attributes" do
128
+ response # trigger the put
129
+ response = subject.get_destination(destination_id: destination_options[:destination_id])
130
+ destination = response.result
131
+ expect(destination.name).to eq "Golf & Country Club"
132
+ end
133
+ end
134
+ end
135
+
136
+ describe "#delete_destination" do
137
+ before do
138
+ against_real_scorm_engine do
139
+ ensure_destination_exists(client: subject, destination_id: "destination-to-be-deleted")
140
+ end
141
+ end
142
+
143
+ it "works" do
144
+ response = subject.delete_destination(destination_id: "destination-to-be-deleted")
145
+ expect(response.success?).to eq true
146
+ expect(response.status).to eq 204
147
+ end
148
+
149
+ it "raises ArgumentError when :destination_id is missing" do
150
+ expect { subject.delete_destination }.to raise_error(ArgumentError, /destination_id missing/)
151
+ end
152
+
153
+ it "returns success even when id is invalid" do
154
+ response = subject.delete_destination(destination_id: "nonexistent-destination")
155
+ expect(response.success?).to eq true
156
+ expect(response.status).to eq 204
157
+ end
158
+ end
159
+
160
+ describe "#post_destination_dispatches_enabled" do
161
+ it "works when true" do
162
+ response = subject.post_destination_dispatches_enabled(destination_id: destination_options[:destination_id], enabled: true)
163
+ expect(response.success?).to eq true
164
+ expect(response.status).to eq 204
165
+ end
166
+
167
+ it "works when false" do
168
+ response = subject.post_destination_dispatches_enabled(destination_id: destination_options[:destination_id], enabled: false)
169
+ expect(response.success?).to eq true
170
+ expect(response.status).to eq 204
171
+ end
172
+
173
+ it "fails when invalid" do
174
+ response = subject.post_destination_dispatches_enabled(destination_id: destination_options[:destination_id], enabled: "oops")
175
+ expect(response.success?).to eq false
176
+ expect(response.status).to eq 400
177
+ end
178
+ end
179
+
180
+ describe "#post_destination_dispatches_registration_instancing" do
181
+ it "works when true" do
182
+ response = subject.post_destination_dispatches_registration_instancing(destination_id: destination_options[:destination_id], enabled: true)
183
+ expect(response.success?).to eq true
184
+ expect(response.status).to eq 204
185
+ end
186
+
187
+ it "works when false" do
188
+ response = subject.post_destination_dispatches_registration_instancing(destination_id: destination_options[:destination_id], enabled: false)
189
+ expect(response.success?).to eq true
190
+ expect(response.status).to eq 204
191
+ end
192
+
193
+ it "fails when invalid" do
194
+ response = subject.post_destination_dispatches_registration_instancing(destination_id: destination_options[:destination_id], enabled: "oops")
195
+ expect(response.success?).to eq false
196
+ expect(response.status).to eq 400
197
+ end
198
+ end
199
+
200
+ describe "#get_destination_dispatches_registration_count" do
201
+ it "works" do
202
+ response = subject.get_destination_dispatches_registration_count(destination_id: destination_options[:destination_id])
203
+ expect(response.success?).to eq true
204
+ expect(response.status).to eq 200
205
+ expect(response.result).to be >= 0
206
+ end
207
+
208
+ it "fails when invalid" do
209
+ response = subject.get_destination_dispatches_registration_count(destination_id: "nonexistent-destination")
210
+ expect(response.success?).to eq false
211
+ expect(response.status).to eq 404
212
+ expect(response.message).to match(/No destinations found with ID: nonexistent-destination/)
213
+ end
214
+ end
215
+ end