ims_caliper 0.1.1 → 0.1.2
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 +8 -8
- data/.gitignore +37 -0
- data/.idea/caliper-ruby.iml +98 -0
- data/.idea/encodings.xml +5 -0
- data/.idea/misc.xml +5 -0
- data/.idea/modules.xml +9 -0
- data/.idea/scopes/scope_settings.xml +5 -0
- data/.idea/vcs.xml +7 -0
- data/Gemfile +12 -1
- data/Gemfile.lock +42 -1
- data/LICENSE +67 -0
- data/NOTICE +15 -0
- data/README.md +13 -5
- data/caliper.gemspec +2 -8
- data/lib/caliper/defaults.rb +4 -4
- data/lib/caliper/entities/annotation/annotation.rb +14 -4
- data/lib/caliper/entities/annotation/bookmark_annotation.rb +14 -4
- data/lib/caliper/entities/annotation/highlight_annotation.rb +14 -3
- data/lib/caliper/entities/annotation/shared_annotation.rb +12 -3
- data/lib/caliper/entities/annotation/tag_annotation.rb +13 -3
- data/lib/caliper/entities/assessment/assessment.rb +27 -0
- data/lib/caliper/entities/assessment/assessment_item.rb +26 -0
- data/lib/caliper/entities/assignable/assignable_digital_resource.rb +47 -0
- data/lib/caliper/entities/assignable/attempt.rb +32 -0
- data/lib/caliper/entities/digital_resource.rb +36 -35
- data/lib/caliper/entities/entity.rb +50 -36
- data/lib/caliper/entities/foaf/agent.rb +1 -1
- data/lib/caliper/entities/jsonable.rb +56 -0
- data/lib/caliper/entities/learning_objective.rb +26 -0
- data/lib/caliper/entities/lis/course_offering.rb +30 -0
- data/lib/caliper/entities/lis/course_section.rb +27 -15
- data/lib/caliper/entities/lis/group.rb +27 -0
- data/lib/caliper/entities/lis/membership.rb +32 -0
- data/lib/caliper/entities/lis/organization.rb +20 -17
- data/lib/caliper/entities/lis/person.rb +23 -10
- data/lib/caliper/entities/lis/roles.rb +77 -0
- data/lib/caliper/entities/lis/status.rb +19 -0
- data/lib/caliper/entities/media/audio_object.rb +21 -0
- data/lib/caliper/entities/media/image_object.rb +21 -0
- data/lib/caliper/entities/media/media_location.rb +23 -0
- data/lib/caliper/entities/media/media_object.rb +38 -0
- data/lib/caliper/entities/media/video_object.rb +21 -0
- data/lib/caliper/entities/reading/epub_volume.rb +15 -7
- data/lib/caliper/entities/reading/frame.rb +7 -15
- data/lib/caliper/entities/response/fillin_blank_response.rb +20 -0
- data/lib/caliper/entities/response/multiple_choice_response.rb +20 -0
- data/lib/caliper/entities/response/multiple_response_response.rb +20 -0
- data/lib/caliper/entities/response/response.rb +23 -0
- data/lib/caliper/entities/response/response_type.rb +13 -0
- data/lib/caliper/entities/response/select_type_response.rb +20 -0
- data/lib/caliper/entities/response/true_false_response.rb +21 -0
- data/lib/caliper/entities/schemadotorg/software_application.rb +8 -8
- data/lib/caliper/entities/session.rb +25 -17
- data/lib/caliper/entities/software_application.rb +16 -7
- data/lib/caliper/entities/web_page.rb +2 -0
- data/lib/caliper/entity_envelope.rb +21 -0
- data/lib/caliper/event/annotation_event.rb +10 -6
- data/lib/caliper/event/assessment_event.rb +19 -0
- data/lib/caliper/event/assessment_item_event.rb +19 -0
- data/lib/caliper/event/assignable_event.rb +19 -0
- data/lib/caliper/event/event.rb +70 -50
- data/lib/caliper/event/jsonable.rb +55 -0
- data/lib/caliper/event/navigation_event.rb +2 -7
- data/lib/caliper/event/outcome_event.rb +1 -1
- data/lib/caliper/event/session_event.rb +13 -14
- data/lib/caliper/event/view_event.rb +6 -7
- data/lib/caliper/event_envelope.rb +22 -0
- data/lib/caliper/jsonable.rb +53 -0
- data/lib/caliper/profiles/annotation_profile.rb +56 -53
- data/lib/caliper/profiles/assessment_profile.rb +48 -0
- data/lib/caliper/profiles/assignable_profile.rb +44 -0
- data/lib/caliper/profiles/media_profile.rb +54 -0
- data/lib/caliper/profiles/profile.rb +38 -38
- data/lib/caliper/profiles/reading_profile.rb +31 -28
- data/lib/caliper/profiles/session_profile.rb +17 -18
- data/lib/caliper/request/event_store_requestor.rb +26 -26
- data/lib/caliper/sensor.rb +46 -35
- data/lib/caliper/version.rb +1 -1
- data/spec/lib/entities/entity.json +9 -0
- data/spec/lib/entities/entity_spec.rb +37 -0
- data/spec/lib/entities/lis/person_spec.rb +37 -0
- data/spec/lib/entities/lis/student.json +11 -0
- data/spec/lib/event/annotation_event_bookmark_spec.rb +159 -0
- data/spec/lib/event/annotation_event_highlight_spec.rb +160 -0
- data/spec/lib/event/annotation_event_shared_spec.rb +172 -0
- data/spec/lib/event/annotation_event_tag_spec.rb +159 -0
- data/spec/lib/event/assessment_event_spec.rb +207 -0
- data/spec/lib/event/assessment_item_completed_event_spec.rb +223 -0
- data/spec/lib/event/assessment_item_started_event_spec.rb +207 -0
- data/spec/lib/event/media_event_spec.rb +157 -0
- data/spec/lib/event/navigated_event_spec.rb +160 -0
- data/spec/lib/event/session_event_login_spec.rb +160 -0
- data/spec/lib/event/session_event_logout_spec.rb +145 -0
- data/spec/lib/event/session_event_timeout_spec.rb +145 -0
- data/spec/lib/event/viewed_event_spec.rb +149 -0
- data/spec/lib/event_helper.rb +145 -0
- data/spec/lib/sensor_spec.rb +30 -0
- data/spec/spec_helper.rb +3 -2
- metadata +84 -61
- data/lib/caliper/client.rb +0 -33
- data/lib/caliper/consumer/base.rb +0 -46
- data/lib/caliper/consumer/queue.rb +0 -40
- data/lib/caliper/consumer/socket.rb +0 -132
- data/lib/caliper/entities/annotation/text_position_selector.rb +0 -14
- data/lib/caliper/entities/schemadotorg/audio_object.rb +0 -15
- data/lib/caliper/entities/schemadotorg/image_object.rb +0 -15
- data/lib/caliper/entities/schemadotorg/media_object.rb +0 -19
- data/lib/caliper/entities/schemadotorg/video_object.rb +0 -15
- data/lib/caliper/event/.shared.rb.swp +0 -0
- data/spec/lib/client_spec.rb +0 -35
- data/spec/lib/consumer/base_spec.rb +0 -28
- data/spec/lib/consumer/queue_spec.rb +0 -16
- data/spec/lib/event/annotation_spec.rb +0 -12
- data/spec/lib/event/bookmarked_spec.rb +0 -17
- data/spec/lib/event/commented_spec.rb +0 -19
- data/spec/lib/event/highlighted_spec.rb +0 -18
- data/spec/lib/event/navigation_spec.rb +0 -15
- data/spec/lib/event/shared_spec.rb +0 -18
- data/spec/lib/event/tagged_spec.rb +0 -17
- data/spec/lib/event/used_spec.rb +0 -15
- data/spec/lib/event/viewed_spec.rb +0 -15
- data/test/caliper/events/session_login_event_test.rb +0 -58
- data/test/caliper/events/session_logout_event_test.rb +0 -55
- data/test/caliper/events/session_timeout_event_test.rb +0 -55
- data/test/caliper/request/http_requestor_test.rb +0 -59
- data/test/caliper/test_event.rb +0 -53
- data/test/caliper/test_utils.rb +0 -198
- data/test/fixtures/caliper_session_login_event.json +0 -71
- data/test/fixtures/caliper_session_logout_event.json +0 -52
- data/test/fixtures/caliper_session_timeout_event.json +0 -52
- data/test/fixtures/event_store_payload.json +0 -85
@@ -0,0 +1,223 @@
|
|
1
|
+
require 'require_all'
|
2
|
+
require_all 'lib/caliper/entities/entity.rb'
|
3
|
+
require_all 'lib/caliper/entities/software_application.rb'
|
4
|
+
require_all 'lib/caliper/entities/lis/person.rb'
|
5
|
+
require_all 'lib/caliper/entities/lis/membership.rb'
|
6
|
+
require_all 'lib/caliper/entities/lis/roles.rb'
|
7
|
+
require_all 'lib/caliper/entities/lis/status.rb'
|
8
|
+
require_all 'lib/caliper/entities/lis/course_section.rb'
|
9
|
+
require_all 'lib/caliper/entities/lis/course_offering.rb'
|
10
|
+
require_all 'lib/caliper/entities/lis/group.rb'
|
11
|
+
require_all 'lib/caliper/entities/reading/epub_volume.rb'
|
12
|
+
require_all 'lib/caliper/entities/assessment/assessment.rb'
|
13
|
+
require_all 'lib/caliper/entities/assessment/assessment_item.rb'
|
14
|
+
require_all 'lib/caliper/entities/assignable/attempt.rb'
|
15
|
+
require_all 'lib/caliper/entities/assignable/assignable_digital_resource.rb'
|
16
|
+
require_all 'lib/caliper/entities/response/Response.rb'
|
17
|
+
require_all 'lib/caliper/entities/response/fillin_blank_response.rb'
|
18
|
+
require_all 'lib/caliper/event/assessment_item_event.rb'
|
19
|
+
require_all 'lib/caliper/profiles/assessment_profile.rb'
|
20
|
+
require 'json_spec'
|
21
|
+
|
22
|
+
module Caliper
|
23
|
+
module Event
|
24
|
+
|
25
|
+
describe AssessmentItemEvent do
|
26
|
+
|
27
|
+
it 'should ensure that a AssessmentItemEvent (Completed) is correctly created and serialized' do
|
28
|
+
|
29
|
+
# The Actor = Person/Student))
|
30
|
+
student = Caliper::Entities::LIS::Person.new
|
31
|
+
student.id = 'https://some-university.edu/user/554433'
|
32
|
+
membership1 = Caliper::Entities::LIS::Membership.new
|
33
|
+
membership1.id = "https://some-university.edu/membership/001"
|
34
|
+
membership1.member = "https://some-university.edu/user/554433"
|
35
|
+
membership1.organization = "https://some-university.edu/politicalScience/2015/american-revolution-101"
|
36
|
+
membership1.roles = [Caliper::Entities::LIS::Roles::LEARNER]
|
37
|
+
membership1.status = Caliper::Entities::LIS::Status::ACTIVE
|
38
|
+
membership1.dateCreated = "2015-08-01T06:00:00.000Z"
|
39
|
+
membership1.dateModified = nil;
|
40
|
+
membership2 = Caliper::Entities::LIS::Membership.new
|
41
|
+
membership2.id = "https://some-university.edu/membership/002"
|
42
|
+
membership2.member = "https://some-university.edu/user/554433"
|
43
|
+
membership2.organization = "https://some-university.edu/politicalScience/2015/american-revolution-101/section/001"
|
44
|
+
membership2.roles = [Caliper::Entities::LIS::Roles::LEARNER]
|
45
|
+
membership2.status = Caliper::Entities::LIS::Status::ACTIVE
|
46
|
+
membership2.dateCreated = "2015-08-01T06:00:00.000Z"
|
47
|
+
membership2.dateModified = nil
|
48
|
+
membership3 = Caliper::Entities::LIS::Membership.new
|
49
|
+
membership3.id = "https://some-university.edu/membership/003"
|
50
|
+
membership3.member = "https://some-university.edu/user/554433"
|
51
|
+
membership3.organization = "https://some-university.edu/politicalScience/2015/american-revolution-101/section/001/group/001"
|
52
|
+
membership3.roles = [Caliper::Entities::LIS::Roles::LEARNER]
|
53
|
+
membership3.status = Caliper::Entities::LIS::Status::ACTIVE
|
54
|
+
membership3.dateCreated = "2015-08-01T06:00:00.000Z"
|
55
|
+
membership3.dateModified = nil
|
56
|
+
student.hasMembership = [membership1, membership2, membership3]
|
57
|
+
student.dateCreated = '2015-08-01T06:00:00.000Z'
|
58
|
+
student.dateModified = '2015-09-02T11:30:00.000Z'
|
59
|
+
# puts "new student = #{student.to_json}"
|
60
|
+
|
61
|
+
# The Action
|
62
|
+
action = Caliper::Profiles::AssessmentItemActions::COMPLETED
|
63
|
+
|
64
|
+
# # The Object being interacted with by the Actor = Assessment)
|
65
|
+
# assessment = Caliper::Entities::Assessment::Assessment.new
|
66
|
+
# assessment.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1"
|
67
|
+
# assessment.name = "American Revolution - Key Figures Assessment"
|
68
|
+
# assessment.dateModified = '2015-09-02T11:30:00.000Z'
|
69
|
+
# assessment.dateCreated = '2015-08-01T06:00:00.000Z'
|
70
|
+
# assessment.datePublished = '2015-08-15T09:30:00.000Z'
|
71
|
+
# assessment.version = "1.0"
|
72
|
+
# assessment.dateToActivate = '2015-08-16T05:00:00.000Z'
|
73
|
+
# assessment.dateToShow = '2015-08-16T05:00:00.000Z'
|
74
|
+
# assessment.dateToStartOn = "2015-08-16T05:00:00.000Z"
|
75
|
+
# assessment.dateToSubmit = "2015-09-28T11:59:59.000Z"
|
76
|
+
# assessment.maxAttempts = 2
|
77
|
+
# assessment.maxSubmits = 2
|
78
|
+
# assessment.maxScore = 3.0
|
79
|
+
|
80
|
+
# # The Assessment has three items
|
81
|
+
assessmentItem1 = Caliper::Entities::Assessment::AssessmentItem.new
|
82
|
+
assessmentItem1.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1/item1"
|
83
|
+
assessmentItem1.name = "Assessment Item 1"
|
84
|
+
assessmentItem1.isPartOf = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1"#assessment.id
|
85
|
+
assessmentItem1.maxAttempts = 2
|
86
|
+
assessmentItem1.maxSubmits = 2
|
87
|
+
assessmentItem1.maxScore = 1.0
|
88
|
+
assessmentItem1.dateCreated = nil
|
89
|
+
assessmentItem1.dateModified = nil
|
90
|
+
assessmentItem1.version = "1.0"
|
91
|
+
assessmentItem1.isTimeDependent = false
|
92
|
+
|
93
|
+
# assessmentItem2 = Caliper::Entities::Assessment::AssessmentItem.new
|
94
|
+
# assessmentItem2.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1/item2"
|
95
|
+
# assessmentItem2.name = "Assessment Item 2"
|
96
|
+
# assessmentItem2.isPartOf = assessment.id
|
97
|
+
# assessmentItem2.maxAttempts = 2
|
98
|
+
# assessmentItem2.maxSubmits = 2
|
99
|
+
# assessmentItem2.maxScore = 1.0
|
100
|
+
# assessmentItem2.dateCreated = nil
|
101
|
+
# assessmentItem2.dateModified = nil
|
102
|
+
# assessmentItem2.version = "1.0"
|
103
|
+
# assessmentItem2.isTimeDependent = false
|
104
|
+
|
105
|
+
# assessmentItem3 = Caliper::Entities::Assessment::AssessmentItem.new
|
106
|
+
# assessmentItem3.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1/item3"
|
107
|
+
# assessmentItem3.name = "Assessment Item 3"
|
108
|
+
# assessmentItem3.isPartOf = assessment.id
|
109
|
+
# assessmentItem3.maxAttempts = 2
|
110
|
+
# assessmentItem3.maxSubmits = 2
|
111
|
+
# assessmentItem3.maxScore = 1.0
|
112
|
+
# assessmentItem3.dateCreated = nil
|
113
|
+
# assessmentItem3.dateModified = nil
|
114
|
+
# assessmentItem3.version = "1.0"
|
115
|
+
# assessmentItem3.isTimeDependent = false
|
116
|
+
|
117
|
+
# assessment.assessmentItems = [assessmentItem1, assessmentItem2, assessmentItem3]
|
118
|
+
|
119
|
+
# # The target object within the Event Object
|
120
|
+
# target = nil;
|
121
|
+
# # The attempt object = Attempt) within the Event Object
|
122
|
+
attempt = Caliper::Entities::Assignable::Attempt.new
|
123
|
+
attempt.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1/item1/attempt1"
|
124
|
+
attempt.actor = "https://some-university.edu/user/554433"
|
125
|
+
attempt.assignable = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1"
|
126
|
+
attempt.dateCreated = "2015-08-01T06:00:00.000Z"
|
127
|
+
attempt.dateModified = nil
|
128
|
+
attempt.count = 1
|
129
|
+
attempt.startedAtTime = "2015-09-15T10:15:00.000Z"
|
130
|
+
attempt.duration = nil
|
131
|
+
attempt.endedAtTime = nil
|
132
|
+
attempt.extensions = {}
|
133
|
+
attempt.name = nil
|
134
|
+
|
135
|
+
response = Caliper::Entities::Response::FillinBlankResponse.new
|
136
|
+
response.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1/item1/response1"
|
137
|
+
response.name = nil
|
138
|
+
response.description = nil
|
139
|
+
response.extensions = {}
|
140
|
+
response.dateCreated = "2015-08-01T06:00:00.000Z"
|
141
|
+
response.dateModified = nil
|
142
|
+
response.assignable = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1"
|
143
|
+
response.actor = "https://some-university.edu/user/554433"
|
144
|
+
response.attempt = attempt
|
145
|
+
response.duration = nil
|
146
|
+
response.startedAtTime = "2015-09-15T10:15:00.000Z"
|
147
|
+
response.endedAtTime = nil
|
148
|
+
response.values = ["2 July 1776"]
|
149
|
+
|
150
|
+
# The Object (edApp)
|
151
|
+
edApp = Caliper::Entities::SoftwareApplication.new
|
152
|
+
edApp.id = 'https://com.sat/super-assessment-tool'
|
153
|
+
edApp.name = 'Super Assessment Tool'
|
154
|
+
edApp.hasMembership = []
|
155
|
+
edApp.dateCreated = '2015-08-01T06:00:00.000Z'
|
156
|
+
edApp.dateModified = nil
|
157
|
+
|
158
|
+
#LIS Course Offering
|
159
|
+
courseOffering = Caliper::Entities::LIS::CourseOffering.new
|
160
|
+
courseOffering.id = "https://some-university.edu/politicalScience/2015/american-revolution-101"
|
161
|
+
courseOffering.name = "Political Science 101: The American Revolution"
|
162
|
+
courseOffering.courseNumber = "POL101"
|
163
|
+
courseOffering.academicSession = "Fall-2015"
|
164
|
+
courseOffering.membership = []
|
165
|
+
courseOffering.subOrganizationOf = nil
|
166
|
+
courseOffering.dateCreated = '2015-08-01T06:00:00.000Z'
|
167
|
+
courseOffering.dateModified = '2015-09-02T11:30:00.000Z'
|
168
|
+
|
169
|
+
# The LIS Course Section for the Caliper Event
|
170
|
+
course = Caliper::Entities::LIS::CourseSection.new
|
171
|
+
course.id = 'https://some-university.edu/politicalScience/2015/american-revolution-101/section/001'
|
172
|
+
course.name = 'American Revolution 101'
|
173
|
+
course.courseNumber = "POL101"
|
174
|
+
course.academicSession = "Fall-2015"
|
175
|
+
course.category = nil
|
176
|
+
course.membership = [membership2]
|
177
|
+
course.subOrganizationOf = courseOffering
|
178
|
+
course.dateCreated = '2015-08-01T06:00:00.000Z'
|
179
|
+
course.dateModified = '2015-09-02T11:30:00.000Z'
|
180
|
+
|
181
|
+
# LIS Group
|
182
|
+
group = Caliper::Entities::LIS::Group.new
|
183
|
+
group.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/section/001/group/001"
|
184
|
+
group.name = "Discussion Group 001"
|
185
|
+
group.membership = [membership3]
|
186
|
+
group.subOrganizationOf = course
|
187
|
+
group.dateCreated = '2015-08-01T06:00:00.000Z'
|
188
|
+
group.dateModified = nil
|
189
|
+
|
190
|
+
# The Assessment Event
|
191
|
+
assessment_event = AssessmentItemEvent.new
|
192
|
+
assessment_event.actor = student
|
193
|
+
assessment_event.action = action
|
194
|
+
assessment_event.object = assessmentItem1
|
195
|
+
assessment_event.target = nil
|
196
|
+
assessment_event.generated = response
|
197
|
+
assessment_event.edApp = edApp
|
198
|
+
assessment_event.group = group
|
199
|
+
assessment_event.startedAtTime = '2015-09-15T10:15:00.000Z'
|
200
|
+
assessment_event.endedAtTime = nil
|
201
|
+
assessment_event.duration = nil
|
202
|
+
# puts "Event JSON = #{assessment_event.to_json}'"
|
203
|
+
|
204
|
+
# Load JSON from caliper-common-fixtures for comparison
|
205
|
+
# NOTE - sym link to caliper-common-fixtures needs to exist under spec/fixtures
|
206
|
+
file = File.read('spec/fixtures/caliperAssessmentItemCompletedEvent.json')
|
207
|
+
data_hash = JSON.parse(file)
|
208
|
+
expected_json = data_hash.to_json # convert hash back to JSON string after parse
|
209
|
+
assessment_event.to_json.should be_json_eql(expected_json)#.excluding("actor", "action", "object", "target", "generated", "edApp", "group")
|
210
|
+
|
211
|
+
# puts "JSON from file = #{data_hash}"
|
212
|
+
deser_assessment_event = AssessmentItemEvent.new
|
213
|
+
deser_assessment_event.from_json data_hash
|
214
|
+
# puts "AssessmentItemEvent from JSON = #{deser_assessment_event.to_json}"
|
215
|
+
|
216
|
+
# Ensure that the deserialized bookmark event object conforms
|
217
|
+
expect(assessment_event).to eql(deser_assessment_event)
|
218
|
+
|
219
|
+
end
|
220
|
+
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
@@ -0,0 +1,207 @@
|
|
1
|
+
require 'require_all'
|
2
|
+
require_all 'lib/caliper/entities/entity.rb'
|
3
|
+
require_all 'lib/caliper/entities/software_application.rb'
|
4
|
+
require_all 'lib/caliper/entities/lis/person.rb'
|
5
|
+
require_all 'lib/caliper/entities/lis/membership.rb'
|
6
|
+
require_all 'lib/caliper/entities/lis/roles.rb'
|
7
|
+
require_all 'lib/caliper/entities/lis/status.rb'
|
8
|
+
require_all 'lib/caliper/entities/lis/course_section.rb'
|
9
|
+
require_all 'lib/caliper/entities/lis/course_offering.rb'
|
10
|
+
require_all 'lib/caliper/entities/lis/group.rb'
|
11
|
+
require_all 'lib/caliper/entities/reading/epub_volume.rb'
|
12
|
+
require_all 'lib/caliper/entities/assessment/assessment.rb'
|
13
|
+
require_all 'lib/caliper/entities/assessment/assessment_item.rb'
|
14
|
+
require_all 'lib/caliper/entities/assignable/attempt.rb'
|
15
|
+
require_all 'lib/caliper/entities/assignable/assignable_digital_resource.rb'
|
16
|
+
require_all 'lib/caliper/event/assessment_item_event.rb'
|
17
|
+
require_all 'lib/caliper/profiles/assessment_profile.rb'
|
18
|
+
require 'json_spec'
|
19
|
+
|
20
|
+
module Caliper
|
21
|
+
module Event
|
22
|
+
|
23
|
+
describe AssessmentItemEvent do
|
24
|
+
|
25
|
+
it 'should ensure that a AssessmentItemEvent (Started) is correctly created and serialized' do
|
26
|
+
|
27
|
+
# The Actor = Person/Student))
|
28
|
+
student = Caliper::Entities::LIS::Person.new
|
29
|
+
student.id = 'https://some-university.edu/user/554433'
|
30
|
+
membership1 = Caliper::Entities::LIS::Membership.new
|
31
|
+
membership1.id = "https://some-university.edu/membership/001"
|
32
|
+
membership1.member = "https://some-university.edu/user/554433"
|
33
|
+
membership1.organization = "https://some-university.edu/politicalScience/2015/american-revolution-101"
|
34
|
+
membership1.roles = [Caliper::Entities::LIS::Roles::LEARNER]
|
35
|
+
membership1.status = Caliper::Entities::LIS::Status::ACTIVE
|
36
|
+
membership1.dateCreated = "2015-08-01T06:00:00.000Z"
|
37
|
+
membership1.dateModified = nil;
|
38
|
+
membership2 = Caliper::Entities::LIS::Membership.new
|
39
|
+
membership2.id = "https://some-university.edu/membership/002"
|
40
|
+
membership2.member = "https://some-university.edu/user/554433"
|
41
|
+
membership2.organization = "https://some-university.edu/politicalScience/2015/american-revolution-101/section/001"
|
42
|
+
membership2.roles = [Caliper::Entities::LIS::Roles::LEARNER]
|
43
|
+
membership2.status = Caliper::Entities::LIS::Status::ACTIVE
|
44
|
+
membership2.dateCreated = "2015-08-01T06:00:00.000Z"
|
45
|
+
membership2.dateModified = nil
|
46
|
+
membership3 = Caliper::Entities::LIS::Membership.new
|
47
|
+
membership3.id = "https://some-university.edu/membership/003"
|
48
|
+
membership3.member = "https://some-university.edu/user/554433"
|
49
|
+
membership3.organization = "https://some-university.edu/politicalScience/2015/american-revolution-101/section/001/group/001"
|
50
|
+
membership3.roles = [Caliper::Entities::LIS::Roles::LEARNER]
|
51
|
+
membership3.status = Caliper::Entities::LIS::Status::ACTIVE
|
52
|
+
membership3.dateCreated = "2015-08-01T06:00:00.000Z"
|
53
|
+
membership3.dateModified = nil
|
54
|
+
student.hasMembership = [membership1, membership2, membership3]
|
55
|
+
student.dateCreated = '2015-08-01T06:00:00.000Z'
|
56
|
+
student.dateModified = '2015-09-02T11:30:00.000Z'
|
57
|
+
# puts "new student = #{student.to_json}"
|
58
|
+
|
59
|
+
# The Action
|
60
|
+
action = Caliper::Profiles::AssessmentActions::STARTED
|
61
|
+
|
62
|
+
# # The Object being interacted with by the Actor = Assessment)
|
63
|
+
# assessment = Caliper::Entities::Assessment::Assessment.new
|
64
|
+
# assessment.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1"
|
65
|
+
# assessment.name = "American Revolution - Key Figures Assessment"
|
66
|
+
# assessment.dateModified = '2015-09-02T11:30:00.000Z'
|
67
|
+
# assessment.dateCreated = '2015-08-01T06:00:00.000Z'
|
68
|
+
# assessment.datePublished = '2015-08-15T09:30:00.000Z'
|
69
|
+
# assessment.version = "1.0"
|
70
|
+
# assessment.dateToActivate = '2015-08-16T05:00:00.000Z'
|
71
|
+
# assessment.dateToShow = '2015-08-16T05:00:00.000Z'
|
72
|
+
# assessment.dateToStartOn = "2015-08-16T05:00:00.000Z"
|
73
|
+
# assessment.dateToSubmit = "2015-09-28T11:59:59.000Z"
|
74
|
+
# assessment.maxAttempts = 2
|
75
|
+
# assessment.maxSubmits = 2
|
76
|
+
# assessment.maxScore = 3.0
|
77
|
+
|
78
|
+
# # The Assessment has three items
|
79
|
+
assessmentItem1 = Caliper::Entities::Assessment::AssessmentItem.new
|
80
|
+
assessmentItem1.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1/item1"
|
81
|
+
assessmentItem1.name = "Assessment Item 1"
|
82
|
+
assessmentItem1.isPartOf = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1"#assessment.id
|
83
|
+
assessmentItem1.maxAttempts = 2
|
84
|
+
assessmentItem1.maxSubmits = 2
|
85
|
+
assessmentItem1.maxScore = 1.0
|
86
|
+
assessmentItem1.dateCreated = nil
|
87
|
+
assessmentItem1.dateModified = nil
|
88
|
+
assessmentItem1.version = "1.0"
|
89
|
+
assessmentItem1.isTimeDependent = false
|
90
|
+
|
91
|
+
# assessmentItem2 = Caliper::Entities::Assessment::AssessmentItem.new
|
92
|
+
# assessmentItem2.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1/item2"
|
93
|
+
# assessmentItem2.name = "Assessment Item 2"
|
94
|
+
# assessmentItem2.isPartOf = assessment.id
|
95
|
+
# assessmentItem2.maxAttempts = 2
|
96
|
+
# assessmentItem2.maxSubmits = 2
|
97
|
+
# assessmentItem2.maxScore = 1.0
|
98
|
+
# assessmentItem2.dateCreated = nil
|
99
|
+
# assessmentItem2.dateModified = nil
|
100
|
+
# assessmentItem2.version = "1.0"
|
101
|
+
# assessmentItem2.isTimeDependent = false
|
102
|
+
|
103
|
+
# assessmentItem3 = Caliper::Entities::Assessment::AssessmentItem.new
|
104
|
+
# assessmentItem3.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1/item3"
|
105
|
+
# assessmentItem3.name = "Assessment Item 3"
|
106
|
+
# assessmentItem3.isPartOf = assessment.id
|
107
|
+
# assessmentItem3.maxAttempts = 2
|
108
|
+
# assessmentItem3.maxSubmits = 2
|
109
|
+
# assessmentItem3.maxScore = 1.0
|
110
|
+
# assessmentItem3.dateCreated = nil
|
111
|
+
# assessmentItem3.dateModified = nil
|
112
|
+
# assessmentItem3.version = "1.0"
|
113
|
+
# assessmentItem3.isTimeDependent = false
|
114
|
+
|
115
|
+
# assessment.assessmentItems = [assessmentItem1, assessmentItem2, assessmentItem3]
|
116
|
+
|
117
|
+
# # The target object within the Event Object
|
118
|
+
# target = nil;
|
119
|
+
|
120
|
+
# # The attempt object = Attempt) within the Event Object
|
121
|
+
attempt = Caliper::Entities::Assignable::Attempt.new
|
122
|
+
attempt.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1/item1/attempt1"
|
123
|
+
attempt.actor = "https://some-university.edu/user/554433"
|
124
|
+
attempt.assignable = "https://some-university.edu/politicalScience/2015/american-revolution-101/assessment1"
|
125
|
+
attempt.dateCreated = "2015-08-01T06:00:00.000Z"
|
126
|
+
attempt.dateModified = nil
|
127
|
+
attempt.count = 1
|
128
|
+
attempt.startedAtTime = "2015-09-15T10:15:00.000Z"
|
129
|
+
attempt.duration = nil
|
130
|
+
attempt.endedAtTime = nil
|
131
|
+
attempt.extensions = {}
|
132
|
+
attempt.name = nil
|
133
|
+
|
134
|
+
# The Object (edApp)
|
135
|
+
edApp = Caliper::Entities::SoftwareApplication.new
|
136
|
+
edApp.id = 'https://com.sat/super-assessment-tool'
|
137
|
+
edApp.name = 'Super Assessment Tool'
|
138
|
+
edApp.hasMembership = []
|
139
|
+
edApp.dateCreated = '2015-08-01T06:00:00.000Z'
|
140
|
+
edApp.dateModified = nil
|
141
|
+
|
142
|
+
#LIS Course Offering
|
143
|
+
courseOffering = Caliper::Entities::LIS::CourseOffering.new
|
144
|
+
courseOffering.id = "https://some-university.edu/politicalScience/2015/american-revolution-101"
|
145
|
+
courseOffering.name = "Political Science 101: The American Revolution"
|
146
|
+
courseOffering.courseNumber = "POL101"
|
147
|
+
courseOffering.academicSession = "Fall-2015"
|
148
|
+
courseOffering.membership = []
|
149
|
+
courseOffering.subOrganizationOf = nil
|
150
|
+
courseOffering.dateCreated = '2015-08-01T06:00:00.000Z'
|
151
|
+
courseOffering.dateModified = '2015-09-02T11:30:00.000Z'
|
152
|
+
|
153
|
+
# The LIS Course Section for the Caliper Event
|
154
|
+
course = Caliper::Entities::LIS::CourseSection.new
|
155
|
+
course.id = 'https://some-university.edu/politicalScience/2015/american-revolution-101/section/001'
|
156
|
+
course.name = 'American Revolution 101'
|
157
|
+
course.courseNumber = "POL101"
|
158
|
+
course.academicSession = "Fall-2015"
|
159
|
+
course.category = nil
|
160
|
+
course.membership = [membership2]
|
161
|
+
course.subOrganizationOf = courseOffering
|
162
|
+
course.dateCreated = '2015-08-01T06:00:00.000Z'
|
163
|
+
course.dateModified = '2015-09-02T11:30:00.000Z'
|
164
|
+
|
165
|
+
# LIS Group
|
166
|
+
group = Caliper::Entities::LIS::Group.new
|
167
|
+
group.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/section/001/group/001"
|
168
|
+
group.name = "Discussion Group 001"
|
169
|
+
group.membership = [membership3]
|
170
|
+
group.subOrganizationOf = course
|
171
|
+
group.dateCreated = '2015-08-01T06:00:00.000Z'
|
172
|
+
group.dateModified = nil
|
173
|
+
|
174
|
+
# The Assessment Event
|
175
|
+
assessment_item_started_event = AssessmentItemEvent.new
|
176
|
+
assessment_item_started_event.actor = student
|
177
|
+
assessment_item_started_event.action = action
|
178
|
+
assessment_item_started_event.object = assessmentItem1
|
179
|
+
assessment_item_started_event.target = nil
|
180
|
+
assessment_item_started_event.generated = attempt
|
181
|
+
assessment_item_started_event.edApp = edApp
|
182
|
+
assessment_item_started_event.group = group
|
183
|
+
assessment_item_started_event.startedAtTime = '2015-09-15T10:15:00.000Z'
|
184
|
+
assessment_item_started_event.endedAtTime = nil
|
185
|
+
assessment_item_started_event.duration = nil
|
186
|
+
# puts "Event JSON = #{assessment_item_started_event.to_json}'"
|
187
|
+
|
188
|
+
# Load JSON from caliper-common-fixtures for comparison
|
189
|
+
# NOTE - sym link to caliper-common-fixtures needs to exist under spec/fixtures
|
190
|
+
file = File.read('spec/fixtures/caliperAssessmentItemStartedEvent.json')
|
191
|
+
data_hash = JSON.parse(file)
|
192
|
+
expected_json = data_hash.to_json # convert hash back to JSON string after parse
|
193
|
+
assessment_item_started_event.to_json.should be_json_eql(expected_json)#.excluding("actor", "action", "object", "target", "generated", "edApp", "group")
|
194
|
+
|
195
|
+
# puts "JSON from file = #{data_hash}"
|
196
|
+
deser_assessment_item_started_event = AssessmentItemEvent.new
|
197
|
+
deser_assessment_item_started_event.from_json data_hash
|
198
|
+
# puts "AssessmentItemEvent from JSON = #{deser_assessment_item_started_event.to_json}"
|
199
|
+
|
200
|
+
# Ensure that the deserialized bookmark event object conforms
|
201
|
+
expect(assessment_item_started_event).to eql(deser_assessment_item_started_event)
|
202
|
+
|
203
|
+
end
|
204
|
+
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
require 'require_all'
|
2
|
+
require_all 'lib/caliper/entities/entity.rb'
|
3
|
+
require_all 'lib/caliper/entities/software_application.rb'
|
4
|
+
require_all 'lib/caliper/entities/learning_objective.rb'
|
5
|
+
require_all 'lib/caliper/entities/lis/person.rb'
|
6
|
+
require_all 'lib/caliper/entities/lis/membership.rb'
|
7
|
+
require_all 'lib/caliper/entities/lis/roles.rb'
|
8
|
+
require_all 'lib/caliper/entities/lis/status.rb'
|
9
|
+
require_all 'lib/caliper/entities/lis/course_section.rb'
|
10
|
+
require_all 'lib/caliper/entities/lis/course_offering.rb'
|
11
|
+
require_all 'lib/caliper/entities/lis/group.rb'
|
12
|
+
require_all 'lib/caliper/entities/media/media_object.rb'
|
13
|
+
require_all 'lib/caliper/entities/media/video_object.rb'
|
14
|
+
require_all 'lib/caliper/entities/media/media_location.rb'
|
15
|
+
require_all 'lib/caliper/event/media_event.rb'
|
16
|
+
require_all 'lib/caliper/profiles/media_profile.rb'
|
17
|
+
require 'json_spec'
|
18
|
+
|
19
|
+
module Caliper
|
20
|
+
module Event
|
21
|
+
|
22
|
+
describe MediaEvent do
|
23
|
+
|
24
|
+
it 'should ensure that a Media Event (Video Paused) is correctly created and serialized' do
|
25
|
+
|
26
|
+
# The Actor (Person/Student))
|
27
|
+
student = Caliper::Entities::LIS::Person.new
|
28
|
+
student.id = 'https://some-university.edu/user/554433'
|
29
|
+
membership1 = Caliper::Entities::LIS::Membership.new
|
30
|
+
membership1.id = "https://some-university.edu/membership/001"
|
31
|
+
membership1.member = "https://some-university.edu/user/554433"
|
32
|
+
membership1.organization = "https://some-university.edu/politicalScience/2015/american-revolution-101"
|
33
|
+
membership1.roles = [Caliper::Entities::LIS::Roles::LEARNER]
|
34
|
+
membership1.status = Caliper::Entities::LIS::Status::ACTIVE
|
35
|
+
membership1.dateCreated = "2015-08-01T06:00:00.000Z"
|
36
|
+
membership1.dateModified = nil;
|
37
|
+
membership2 = Caliper::Entities::LIS::Membership.new
|
38
|
+
membership2.id = "https://some-university.edu/membership/002"
|
39
|
+
membership2.member = "https://some-university.edu/user/554433"
|
40
|
+
membership2.organization = "https://some-university.edu/politicalScience/2015/american-revolution-101/section/001"
|
41
|
+
membership2.roles = [Caliper::Entities::LIS::Roles::LEARNER]
|
42
|
+
membership2.status = Caliper::Entities::LIS::Status::ACTIVE
|
43
|
+
membership2.dateCreated = "2015-08-01T06:00:00.000Z"
|
44
|
+
membership2.dateModified = nil
|
45
|
+
membership3 = Caliper::Entities::LIS::Membership.new
|
46
|
+
membership3.id = "https://some-university.edu/membership/003"
|
47
|
+
membership3.member = "https://some-university.edu/user/554433"
|
48
|
+
membership3.organization = "https://some-university.edu/politicalScience/2015/american-revolution-101/section/001/group/001"
|
49
|
+
membership3.roles = [Caliper::Entities::LIS::Roles::LEARNER]
|
50
|
+
membership3.status = Caliper::Entities::LIS::Status::ACTIVE
|
51
|
+
membership3.dateCreated = "2015-08-01T06:00:00.000Z"
|
52
|
+
membership3.dateModified = nil
|
53
|
+
student.hasMembership = [membership1, membership2, membership3]
|
54
|
+
student.dateCreated = '2015-08-01T06:00:00.000Z'
|
55
|
+
student.dateModified = '2015-09-02T11:30:00.000Z'
|
56
|
+
# puts "new student = #{student.to_json}"
|
57
|
+
|
58
|
+
# The Action
|
59
|
+
action = Caliper::Profiles::MediaActions::PAUSED
|
60
|
+
|
61
|
+
# The Object viewed (Video)
|
62
|
+
video = Caliper::Entities::Media::VideoObject.new
|
63
|
+
video.id = 'https://com.sat/super-media-tool/video/video1'
|
64
|
+
video.name = 'American Revolution - Key Figures Video'
|
65
|
+
video.version = '1.0'
|
66
|
+
video.duration = 1420
|
67
|
+
video.dateCreated = '2015-08-01T06:00:00.000Z'
|
68
|
+
video.dateModified = '2015-09-02T11:30:00.000Z'
|
69
|
+
|
70
|
+
learnObjective = Caliper::Entities::LearningObjective.new
|
71
|
+
learnObjective.id = 'http://americanrevolution.com/personalities/learn'
|
72
|
+
learnObjective.dateCreated = '2015-08-01T06:00:00.000Z'
|
73
|
+
learnObjective.dateModified = nil
|
74
|
+
video.alignedLearningObjective = [learnObjective]
|
75
|
+
|
76
|
+
# The Target within the Object (MediaLocation)
|
77
|
+
videoLocation = Caliper::Entities::Media::MediaLocation.new
|
78
|
+
videoLocation.id = 'https://com.sat/super-media-tool/video/video1'
|
79
|
+
videoLocation.version = '1.0'
|
80
|
+
videoLocation.dateCreated = '2015-08-01T06:00:00.000Z'
|
81
|
+
videoLocation.dateModified = nil
|
82
|
+
videoLocation.currentTime = 710
|
83
|
+
|
84
|
+
# The course that is part of the Learning Context (edApp)
|
85
|
+
edApp = Caliper::Entities::SoftwareApplication.new
|
86
|
+
edApp.id = 'https://com.sat/super-media-tool'
|
87
|
+
edApp.name = 'Super Media Tool'
|
88
|
+
edApp.hasMembership = []
|
89
|
+
edApp.dateCreated = '2015-08-01T06:00:00.000Z'
|
90
|
+
edApp.dateModified = '2015-09-02T11:30:00.000Z'
|
91
|
+
|
92
|
+
#LIS Course Offering
|
93
|
+
courseOffering = Caliper::Entities::LIS::CourseOffering.new
|
94
|
+
courseOffering.id = "https://some-university.edu/politicalScience/2015/american-revolution-101"
|
95
|
+
courseOffering.name = "Political Science 101: The American Revolution"
|
96
|
+
courseOffering.courseNumber = "POL101"
|
97
|
+
courseOffering.academicSession = "Fall-2015"
|
98
|
+
courseOffering.membership = []
|
99
|
+
courseOffering.subOrganizationOf = nil
|
100
|
+
courseOffering.dateCreated = '2015-08-01T06:00:00.000Z'
|
101
|
+
courseOffering.dateModified = '2015-09-02T11:30:00.000Z'
|
102
|
+
|
103
|
+
# The LIS Course Section for the Caliper Event
|
104
|
+
course = Caliper::Entities::LIS::CourseSection.new
|
105
|
+
course.id = 'https://some-university.edu/politicalScience/2015/american-revolution-101/section/001'
|
106
|
+
course.name = 'American Revolution 101'
|
107
|
+
course.courseNumber = "POL101"
|
108
|
+
course.academicSession = "Fall-2015"
|
109
|
+
course.category = nil
|
110
|
+
course.membership = [membership2]
|
111
|
+
course.subOrganizationOf = courseOffering
|
112
|
+
course.dateCreated = '2015-08-01T06:00:00.000Z'
|
113
|
+
course.dateModified = '2015-09-02T11:30:00.000Z'
|
114
|
+
|
115
|
+
# LIS Group
|
116
|
+
group = Caliper::Entities::LIS::Group.new
|
117
|
+
group.id = "https://some-university.edu/politicalScience/2015/american-revolution-101/section/001/group/001"
|
118
|
+
group.name = "Discussion Group 001"
|
119
|
+
group.membership = [membership3]
|
120
|
+
group.subOrganizationOf = course
|
121
|
+
group.dateCreated = '2015-08-01T06:00:00.000Z'
|
122
|
+
group.dateModified = nil
|
123
|
+
|
124
|
+
# The (Reading::BookmarkReading) Event
|
125
|
+
media_event = Caliper::Event::MediaEvent.new
|
126
|
+
media_event.actor = student
|
127
|
+
media_event.action = action
|
128
|
+
media_event.object = video
|
129
|
+
media_event.target = videoLocation
|
130
|
+
media_event.generated = nil
|
131
|
+
media_event.edApp = edApp
|
132
|
+
media_event.group = group
|
133
|
+
media_event.startedAtTime = '2015-09-15T10:15:00.000Z'
|
134
|
+
media_event.endedAtTime = nil
|
135
|
+
media_event.duration = nil
|
136
|
+
# puts "Event JSON = #{media_event.to_json}'"
|
137
|
+
|
138
|
+
# Load JSON from caliper-common-fixtures for comparison
|
139
|
+
# NOTE - sym link to caliper-common-fixtures needs to exist under spec/fixtures
|
140
|
+
file = File.read('spec/fixtures/caliperMediaEvent.json')
|
141
|
+
data_hash = JSON.parse(file)
|
142
|
+
expected_json = data_hash.to_json # convert hash back to JSON string after parse
|
143
|
+
media_event.to_json.should be_json_eql(expected_json)#.excluding("actor", "action", "object", "target", "generated", "edApp", "group")
|
144
|
+
|
145
|
+
# puts "JSON from file = #{data_hash}"
|
146
|
+
deser_media_event = Caliper::Event::MediaEvent.new
|
147
|
+
deser_media_event.from_json data_hash
|
148
|
+
# puts "ReadingEvent from JSON = #{deser_media_event.to_json}"
|
149
|
+
|
150
|
+
# Ensure that the deserialized shared event object conforms
|
151
|
+
expect(media_event).to eql(deser_media_event)
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|