ruby-iactionable 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/.gitignore +4 -0
  2. data/.rvmrc +3 -0
  3. data/CHANGELOG.md +5 -0
  4. data/Gemfile +4 -0
  5. data/Gemfile.lock +43 -0
  6. data/README.md +49 -0
  7. data/Rakefile +1 -0
  8. data/lib/iactionable/api.rb +170 -0
  9. data/lib/iactionable/connection.rb +114 -0
  10. data/lib/iactionable/error.rb +17 -0
  11. data/lib/iactionable/objects/achievement.rb +29 -0
  12. data/lib/iactionable/objects/awardable.rb +50 -0
  13. data/lib/iactionable/objects/challenge.rb +27 -0
  14. data/lib/iactionable/objects/goal.rb +30 -0
  15. data/lib/iactionable/objects/i_actionable_object.rb +36 -0
  16. data/lib/iactionable/objects/identifier.rb +17 -0
  17. data/lib/iactionable/objects/leaderboard.rb +15 -0
  18. data/lib/iactionable/objects/leaderboard_report.rb +30 -0
  19. data/lib/iactionable/objects/level.rb +24 -0
  20. data/lib/iactionable/objects/level_type.rb +15 -0
  21. data/lib/iactionable/objects/point_type.rb +15 -0
  22. data/lib/iactionable/objects/profile_achievements.rb +20 -0
  23. data/lib/iactionable/objects/profile_challenges.rb +20 -0
  24. data/lib/iactionable/objects/profile_goals.rb +20 -0
  25. data/lib/iactionable/objects/profile_level.rb +20 -0
  26. data/lib/iactionable/objects/profile_notifications.rb +29 -0
  27. data/lib/iactionable/objects/profile_points.rb +29 -0
  28. data/lib/iactionable/objects/profile_summary.rb +32 -0
  29. data/lib/iactionable/objects/progress.rb +46 -0
  30. data/lib/iactionable/objects.rb +27 -0
  31. data/lib/iactionable/settings.rb +30 -0
  32. data/lib/iactionable/version.rb +3 -0
  33. data/lib/iactionable.rb +9 -0
  34. data/ruby_iactionable.gemspec +28 -0
  35. data/spec/api/get_achievements_api_response_spec.rb +46 -0
  36. data/spec/api/get_challenges_api_response_spec.rb +42 -0
  37. data/spec/api/get_goals_api_response_spec.rb +46 -0
  38. data/spec/api/get_leaderboard_api_response_spec.rb +76 -0
  39. data/spec/api/get_profile_achievements_api_response_spec.rb +99 -0
  40. data/spec/api/get_profile_api_response_spec.rb +103 -0
  41. data/spec/api/get_profile_challenges_api_response_spec.rb +85 -0
  42. data/spec/api/get_profile_goals_api_response_spec.rb +89 -0
  43. data/spec/api/get_profile_notifications_api_response_spec.rb +75 -0
  44. data/spec/api/get_profile_points_api_response_spec.rb +67 -0
  45. data/spec/api_spec.rb +314 -0
  46. data/spec/connection_spec.rb +111 -0
  47. data/spec/settings_spec.rb +52 -0
  48. data/spec/spec_helper.rb +1 -0
  49. metadata +163 -0
@@ -0,0 +1,99 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe "API response to get_profile_achievements" do
4
+ before do
5
+ @sample_response = {
6
+ "Available" => [
7
+ {
8
+ "Key" => "super_user",
9
+ "Description" => "Post 35 Photos and make 50 Comments",
10
+ "ImageURL" => "http://iactionable.blob.core.windows.net/achievementimages/99999",
11
+ "Name" => "Super User",
12
+ "Progress" => [
13
+ {
14
+ "ConditionMetDate" => nil,
15
+ "CurrentValue" => 12,
16
+ "Description" => "Post 35 Photos",
17
+ "RequiredValue" => "35"
18
+ },
19
+ {
20
+ "ConditionMetDate" => nil,
21
+ "CurrentValue" => 6,
22
+ "Description" => "Make 50 Comments",
23
+ "RequiredValue" => "50"
24
+ }
25
+ ]
26
+ }
27
+ ],
28
+ "Completed" => [
29
+ {
30
+ "Key" => "you_can_talk",
31
+ "Description" => "Post a Comment on any blog post.",
32
+ "ImageURL" => "http://iactionable.blob.core.windows.net/achievementimages/99998",
33
+ "Name" => "You can talk!",
34
+ "Progress" => [
35
+ {
36
+ "ConditionMetDate" => "/Date(1275706032317-0600)/",
37
+ "CurrentValue" => 1,
38
+ "Description" => "Make 1 Comment",
39
+ "RequiredValue" => "1"
40
+ }
41
+ ],
42
+ "AwardDate" => "/Date(1275706032317-0600)/"
43
+ }
44
+ ]
45
+ }
46
+ end
47
+
48
+ it "should not raise error on wrapping in an object" do
49
+ lambda { IActionable::Objects::ProfileAchievements.new(@sample_response) }.should_not raise_error
50
+ end
51
+
52
+ describe "when wrapped in an object" do
53
+ before do
54
+ @wrapped = IActionable::Objects::ProfileAchievements.new(Marshal.load(Marshal.dump(@sample_response)))
55
+ end
56
+
57
+ it "should contain ar array of available achievements" do
58
+ @wrapped.available.should be_instance_of Array
59
+ @wrapped.available.first.key.should == @sample_response["Available"][0]["Key"]
60
+ @wrapped.available.first.description.should == @sample_response["Available"][0]["Description"]
61
+ @wrapped.available.first.image_url.should == @sample_response["Available"][0]["ImageURL"]
62
+ @wrapped.available.first.name.should == @sample_response["Available"][0]["Name"]
63
+ @wrapped.available.first.award_date.should be_nil
64
+ end
65
+
66
+ it "should contain an array of progresses within each available achievement" do
67
+ @wrapped.available.first.progress.should be_instance_of Array
68
+ @wrapped.available.first.progress.first.condition_met_date.should be_nil
69
+ @wrapped.available.first.progress.first.current_value.should == @sample_response["Available"][0]["Progress"][0]["CurrentValue"]
70
+ @wrapped.available.first.progress.first.description.should == @sample_response["Available"][0]["Progress"][0]["Description"]
71
+ @wrapped.available.first.progress.first.required_value.should == @sample_response["Available"][0]["Progress"][0]["RequiredValue"]
72
+ @wrapped.available.first.progress.last.condition_met_date.should be_nil
73
+ @wrapped.available.first.progress.last.current_value.should == @sample_response["Available"][0]["Progress"][1]["CurrentValue"]
74
+ @wrapped.available.first.progress.last.description.should == @sample_response["Available"][0]["Progress"][1]["Description"]
75
+ @wrapped.available.first.progress.last.required_value.should == @sample_response["Available"][0]["Progress"][1]["RequiredValue"]
76
+ end
77
+
78
+ it "should contain ar array of completed achievements" do
79
+ @wrapped.completed.should be_instance_of Array
80
+ @wrapped.completed.first.key.should == @sample_response["Completed"][0]["Key"]
81
+ @wrapped.completed.first.description.should == @sample_response["Completed"][0]["Description"]
82
+ @wrapped.completed.first.image_url.should == @sample_response["Completed"][0]["ImageURL"]
83
+ @wrapped.completed.first.name.should == @sample_response["Completed"][0]["Name"]
84
+ @wrapped.completed.first.award_date.should_not be_nil
85
+ end
86
+
87
+ it "should contain an array of progresses within each completed achievement" do
88
+ @wrapped.completed.first.progress.should be_instance_of Array
89
+ @wrapped.completed.first.progress.first.condition_met_date.should_not be_nil
90
+ @wrapped.completed.first.progress.first.current_value.should == @sample_response["Completed"][0]["Progress"][0]["CurrentValue"]
91
+ @wrapped.completed.first.progress.first.description.should == @sample_response["Completed"][0]["Progress"][0]["Description"]
92
+ @wrapped.completed.first.progress.first.required_value.should == @sample_response["Completed"][0]["Progress"][0]["RequiredValue"]
93
+ end
94
+
95
+ it "should convert to a hash equal to the original" do
96
+ hash_including(@sample_response).should == @wrapped.to_hash
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,103 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe "API response to get_profile" do
4
+ before do
5
+ @sample_response = {
6
+ "DisplayName" => "Jason",
7
+ "Identifiers" => [
8
+ {
9
+ "ID" => "jason@example.com",
10
+ "IDHash" => "eba69e62f8bc92297b7a97659b5d6130",
11
+ "IDType" => "Email"
12
+ }
13
+ ],
14
+ "Points" => [
15
+ {
16
+ "Level" => {
17
+ "Current" => {
18
+ "LevelType" => {
19
+ "Key" => "player_experience_level",
20
+ "Name" => "Experience Level"
21
+ },
22
+ "Name" => "Noobie",
23
+ "Number" => 1,
24
+ "RequiredPoints" => 10
25
+ },
26
+ "Next" => {
27
+ "LevelType" => {
28
+ "Key" => "player_experience_level",
29
+ "Name" => "Experience Level"
30
+ },
31
+ "Name" => "Expert",
32
+ "Number" => 2,
33
+ "RequiredPoints" => 100
34
+ },
35
+ },
36
+ "PointType" => {
37
+ "Key" => "experience_points",
38
+ "Name" => "Experience Points"
39
+ },
40
+ "Points" => 12
41
+ }
42
+ ],
43
+ "RecentAchievements" => [
44
+ {
45
+ "Key" => "i_love_stuff",
46
+ "Description" => "Favorite 10 Items",
47
+ "ImageURL" => "http://iactionable.blob.core.windows.net/achievementimages/9999",
48
+ "Name" => "I love stuff!"
49
+ }
50
+ ]
51
+ }
52
+ end
53
+
54
+ it "should not raise error on wrapping in an object" do
55
+ lambda { IActionable::Objects::ProfileSummary.new(@sample_response) }.should_not raise_error
56
+ end
57
+
58
+ describe "when wrapped in an object" do
59
+ before do
60
+ @wrapped = IActionable::Objects::ProfileSummary.new(Marshal.load(Marshal.dump(@sample_response)))
61
+ end
62
+
63
+ it "should contain the display name" do
64
+ @wrapped.display_name.should == @sample_response["DisplayName"]
65
+ end
66
+
67
+ it "should contain ar array of identifiers" do
68
+ @wrapped.identifiers.should be_instance_of Array
69
+ @wrapped.identifiers.first.id.should == @sample_response["Identifiers"][0]["ID"]
70
+ @wrapped.identifiers.first.id_hash.should == @sample_response["Identifiers"][0]["IDHash"]
71
+ @wrapped.identifiers.first.id_type.should == @sample_response["Identifiers"][0]["IDType"]
72
+ end
73
+
74
+ it "should contain an array of point summaries" do
75
+ @wrapped.points.should be_instance_of Array
76
+ @wrapped.points.first.points.should == @sample_response["Points"][0]["Points"]
77
+ @wrapped.points.first.point_type.key.should == @sample_response["Points"][0]["PointType"]["Key"]
78
+ @wrapped.points.first.point_type.name.should == @sample_response["Points"][0]["PointType"]["Name"]
79
+ @wrapped.points.first.level.current.name.should == @sample_response["Points"][0]["Level"]["Current"]["Name"]
80
+ @wrapped.points.first.level.current.number.should == @sample_response["Points"][0]["Level"]["Current"]["Number"]
81
+ @wrapped.points.first.level.current.required_points.should == @sample_response["Points"][0]["Level"]["Current"]["RequiredPoints"]
82
+ @wrapped.points.first.level.current.level_type.key.should == @sample_response["Points"][0]["Level"]["Current"]["LevelType"]["Key"]
83
+ @wrapped.points.first.level.current.level_type.name.should == @sample_response["Points"][0]["Level"]["Current"]["LevelType"]["Name"]
84
+ @wrapped.points.first.level.next.name.should == @sample_response["Points"][0]["Level"]["Next"]["Name"]
85
+ @wrapped.points.first.level.next.number.should == @sample_response["Points"][0]["Level"]["Next"]["Number"]
86
+ @wrapped.points.first.level.next.required_points.should == @sample_response["Points"][0]["Level"]["Next"]["RequiredPoints"]
87
+ @wrapped.points.first.level.next.level_type.key.should == @sample_response["Points"][0]["Level"]["Next"]["LevelType"]["Key"]
88
+ @wrapped.points.first.level.next.level_type.name.should == @sample_response["Points"][0]["Level"]["Next"]["LevelType"]["Name"]
89
+ end
90
+
91
+ it "should contain an array of recent achievements" do
92
+ @wrapped.recent_achievements.should be_instance_of Array
93
+ @wrapped.recent_achievements.first.key.should == @sample_response["RecentAchievements"][0]["Key"]
94
+ @wrapped.recent_achievements.first.description.should == @sample_response["RecentAchievements"][0]["Description"]
95
+ @wrapped.recent_achievements.first.image_url.should == @sample_response["RecentAchievements"][0]["ImageURL"]
96
+ @wrapped.recent_achievements.first.name.should == @sample_response["RecentAchievements"][0]["Name"]
97
+ end
98
+
99
+ it "should convert to a hash equal to the original" do
100
+ hash_including(@sample_response).should == @wrapped.to_hash
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,85 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe "API response to get_profile_challenges" do
4
+ before do
5
+ @sample_response = {
6
+ "Available" => [
7
+ {
8
+ "Key" => "hard_challenge",
9
+ "Description" => "Do something hard 10 times and earn 200 points",
10
+ "Name" => "Easy Challenge",
11
+ "Progress" => [
12
+ {
13
+ "ConditionMetDate" => nil,
14
+ "CurrentValue" => 9,
15
+ "Description" => "Do something hard 10 times",
16
+ "RequiredValue" => 10
17
+ }
18
+ ]
19
+ }
20
+ ],
21
+ "Completed" => [
22
+ {
23
+ "Key" => "easy_challenge",
24
+ "Description" => "Do something easy 5 times and earn 100 points",
25
+ "Name" => "Easy Challenge",
26
+ "Progress" => [
27
+ {
28
+ "ConditionMetDate" => "/Date(1275706032317-0600)/",
29
+ "CurrentValue" => 5,
30
+ "Description" => "Do something easy 5 times",
31
+ "RequiredValue" => "5"
32
+ }
33
+ ],
34
+ "AwardDate" => "/Date(1275706032317-0600)/"
35
+ }
36
+ ]
37
+ }
38
+ end
39
+
40
+ it "should not raise error on wrapping in an object" do
41
+ lambda { IActionable::Objects::ProfileChallenges.new(@sample_response) }.should_not raise_error
42
+ end
43
+
44
+ describe "when wrapped in an object" do
45
+ before do
46
+ @wrapped = IActionable::Objects::ProfileChallenges.new(Marshal.load(Marshal.dump(@sample_response)))
47
+ end
48
+
49
+ it "should contain ar array of available challenges" do
50
+ @wrapped.available.should be_instance_of Array
51
+ @wrapped.available.first.key.should == @sample_response["Available"][0]["Key"]
52
+ @wrapped.available.first.description.should == @sample_response["Available"][0]["Description"]
53
+ @wrapped.available.first.name.should == @sample_response["Available"][0]["Name"]
54
+ @wrapped.available.first.award_date.should be_nil
55
+ end
56
+
57
+ it "should contain an array of progresses within each available challenge" do
58
+ @wrapped.available.first.progress.should be_instance_of Array
59
+ @wrapped.available.first.progress.first.condition_met_date.should be_nil
60
+ @wrapped.available.first.progress.first.current_value.should == @sample_response["Available"][0]["Progress"][0]["CurrentValue"]
61
+ @wrapped.available.first.progress.first.description.should == @sample_response["Available"][0]["Progress"][0]["Description"]
62
+ @wrapped.available.first.progress.first.required_value.should == @sample_response["Available"][0]["Progress"][0]["RequiredValue"]
63
+ end
64
+
65
+ it "should contain ar array of completed challenges" do
66
+ @wrapped.completed.should be_instance_of Array
67
+ @wrapped.completed.first.key.should == @sample_response["Completed"][0]["Key"]
68
+ @wrapped.completed.first.description.should == @sample_response["Completed"][0]["Description"]
69
+ @wrapped.completed.first.name.should == @sample_response["Completed"][0]["Name"]
70
+ @wrapped.completed.first.award_date.should_not be_nil
71
+ end
72
+
73
+ it "should contain an array of progresses within each completed achievement" do
74
+ @wrapped.completed.first.progress.should be_instance_of Array
75
+ @wrapped.completed.first.progress.first.condition_met_date.should_not be_nil
76
+ @wrapped.completed.first.progress.first.current_value.should == @sample_response["Completed"][0]["Progress"][0]["CurrentValue"]
77
+ @wrapped.completed.first.progress.first.description.should == @sample_response["Completed"][0]["Progress"][0]["Description"]
78
+ @wrapped.completed.first.progress.first.required_value.should == @sample_response["Completed"][0]["Progress"][0]["RequiredValue"]
79
+ end
80
+
81
+ it "should convert to a hash equal to the original" do
82
+ hash_including(@sample_response).should == @wrapped.to_hash
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,89 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe "API response to get_profile_goals" do
4
+ before do
5
+ @sample_response = {
6
+ "Available" => [
7
+ {
8
+ "Key" => "hard_goal",
9
+ "Description" => "Do something hard 10 times within a week and earn 200 points",
10
+ "Name" => "Hard Goal",
11
+ "Interval" => "Weekly",
12
+ "Progress" => [
13
+ {
14
+ "ConditionMetDate" => nil,
15
+ "CurrentValue" => 9,
16
+ "Description" => "Do something hard 10 times",
17
+ "RequiredValue" => 10
18
+ }
19
+ ]
20
+ }
21
+ ],
22
+ "Completed" => [
23
+ {
24
+ "Key" => "easy_goal",
25
+ "Description" => "Do something easy 5 times today and earn 100 points",
26
+ "Name" => "Easy Goal",
27
+ "Interval" => "Daily",
28
+ "Progress" => [
29
+ {
30
+ "ConditionMetDate" => "/Date(1275706032317-0600)/",
31
+ "CurrentValue" => 5,
32
+ "Description" => "Do something easy 5 times",
33
+ "RequiredValue" => "5"
34
+ }
35
+ ],
36
+ "AwardDate" => "/Date(1275706032317-0600)/"
37
+ }
38
+ ]
39
+ }
40
+ end
41
+
42
+ it "should not raise error on wrapping in an object" do
43
+ lambda { IActionable::Objects::ProfileGoals.new(@sample_response) }.should_not raise_error
44
+ end
45
+
46
+ describe "when wrapped in an object" do
47
+ before do
48
+ @wrapped = IActionable::Objects::ProfileGoals.new(Marshal.load(Marshal.dump(@sample_response)))
49
+ end
50
+
51
+ it "should contain ar array of available goals" do
52
+ @wrapped.available.should be_instance_of Array
53
+ @wrapped.available.first.key.should == @sample_response["Available"][0]["Key"]
54
+ @wrapped.available.first.description.should == @sample_response["Available"][0]["Description"]
55
+ @wrapped.available.first.name.should == @sample_response["Available"][0]["Name"]
56
+ @wrapped.available.first.interval.should == @sample_response["Available"][0]["Interval"]
57
+ @wrapped.available.first.award_date.should be_nil
58
+ end
59
+
60
+ it "should contain an array of progresses within each available goals" do
61
+ @wrapped.available.first.progress.should be_instance_of Array
62
+ @wrapped.available.first.progress.first.condition_met_date.should be_nil
63
+ @wrapped.available.first.progress.first.current_value.should == @sample_response["Available"][0]["Progress"][0]["CurrentValue"]
64
+ @wrapped.available.first.progress.first.description.should == @sample_response["Available"][0]["Progress"][0]["Description"]
65
+ @wrapped.available.first.progress.first.required_value.should == @sample_response["Available"][0]["Progress"][0]["RequiredValue"]
66
+ end
67
+
68
+ it "should contain ar array of completed goals" do
69
+ @wrapped.completed.should be_instance_of Array
70
+ @wrapped.completed.first.key.should == @sample_response["Completed"][0]["Key"]
71
+ @wrapped.completed.first.description.should == @sample_response["Completed"][0]["Description"]
72
+ @wrapped.completed.first.name.should == @sample_response["Completed"][0]["Name"]
73
+ @wrapped.available.first.interval.should == @sample_response["Available"][0]["Interval"]
74
+ @wrapped.completed.first.award_date.should_not be_nil
75
+ end
76
+
77
+ it "should contain an array of progresses within each completed goals" do
78
+ @wrapped.completed.first.progress.should be_instance_of Array
79
+ @wrapped.completed.first.progress.first.condition_met_date.should_not be_nil
80
+ @wrapped.completed.first.progress.first.current_value.should == @sample_response["Completed"][0]["Progress"][0]["CurrentValue"]
81
+ @wrapped.completed.first.progress.first.description.should == @sample_response["Completed"][0]["Progress"][0]["Description"]
82
+ @wrapped.completed.first.progress.first.required_value.should == @sample_response["Completed"][0]["Progress"][0]["RequiredValue"]
83
+ end
84
+
85
+ it "should convert to a hash equal to the original" do
86
+ hash_including(@sample_response).should == @wrapped.to_hash
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe "API response to get_profile_notifications" do
4
+ before do
5
+ @sample_response = {
6
+ "Achievements" => {
7
+ "Available" => [ ],
8
+ "Completed" => [
9
+ {
10
+ "Description" => "Achieve the impossible",
11
+ "ImageURL" => "http://iactionable.blob.core.windows.net/achievementimages/99999",
12
+ "Key" => "mission_impossible",
13
+ "Name" => "Mission Impossible"
14
+ }
15
+ ]
16
+ },
17
+ "Challenges" => {
18
+ "Available" => [ ],
19
+ "Completed" => [
20
+ {
21
+ "Description" => "Do something extraordinary",
22
+ "Key" => "super_challenge",
23
+ "Name" => "Super Challenge"
24
+ }
25
+ ]
26
+ },
27
+ "Goals" => {
28
+ "Available" => [ ],
29
+ "Completed" => [
30
+ {
31
+ "Description" => "Complete an awesome goal",
32
+ "Key" => "awesome_goal",
33
+ "Name" => "Awesome Goal"
34
+ }
35
+ ]
36
+ },
37
+ "Levels" => [
38
+ {
39
+ "LevelType" => {
40
+ "Key" => "player_experience_points",
41
+ "Name" => "Player Experience Points"
42
+ },
43
+ "Name" => "Noobie",
44
+ "Number" => 2,
45
+ "RequiredPoints" => 10
46
+ }
47
+ ],
48
+ "Points" => [
49
+ {
50
+ "PointType" => {
51
+ "Key" => "experience_points",
52
+ "Name" => "Experience Points"
53
+ },
54
+ "Points" => 20,
55
+ "Reason" => "Achieve the impossible"
56
+ }
57
+ ]
58
+ }
59
+ end
60
+
61
+ it "should not raise error on wrapping in an object" do
62
+ lambda { IActionable::Objects::ProfileNotifications.new(@sample_response) }.should_not raise_error
63
+ end
64
+
65
+ describe "when wrapped in an object" do
66
+ before do
67
+ @wrapped = IActionable::Objects::ProfileNotifications.new(Marshal.load(Marshal.dump(@sample_response)))
68
+ end
69
+
70
+
71
+ it "should convert to a hash equal to the original" do
72
+ hash_including(@sample_response).should == @wrapped.to_hash
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,67 @@
1
+ require 'spec_helper.rb'
2
+
3
+ describe "API response to get_profile_points" do
4
+ before do
5
+ @sample_response = {
6
+ "Level" => {
7
+ "Current" =>
8
+ {
9
+ "Name" => "Beginner",
10
+ "Number" => 1,
11
+ "RequiredPoints" => 200,
12
+ "LevelType" =>
13
+ {
14
+ "Key" => "player_experience_level",
15
+ "Name" => "Experience Level"
16
+ },
17
+ },
18
+ "Next" =>
19
+ {
20
+ "Name" => "Member",
21
+ "Number" => 2,
22
+ "RequiredPoints" => 300,
23
+ "LevelType" =>
24
+ {
25
+ "Key" => "player_experience_level",
26
+ "Name" => "Experience Level"
27
+ },
28
+ }
29
+ },
30
+ "PointType" => {
31
+ "Key" => "experience_points",
32
+ "Name" => "Experience Points"
33
+ },
34
+ "Points" => 200
35
+ }
36
+ end
37
+
38
+ it "should not raise error on wrapping in an object" do
39
+ lambda { IActionable::Objects::ProfilePoints.new(@sample_response) }.should_not raise_error
40
+ end
41
+
42
+ describe "when wrapped in an object" do
43
+ before do
44
+ @wrapped = IActionable::Objects::ProfilePoints.new(Marshal.load(Marshal.dump(@sample_response)))
45
+ end
46
+
47
+ it "should contain all the correct fields for a profile point summary" do
48
+ @wrapped.points.should == @sample_response["Points"]
49
+ @wrapped.point_type.key.should == @sample_response["PointType"]["Key"]
50
+ @wrapped.point_type.name.should == @sample_response["PointType"]["Name"]
51
+ @wrapped.level.current.name.should == @sample_response["Level"]["Current"]["Name"]
52
+ @wrapped.level.current.number.should == @sample_response["Level"]["Current"]["Number"]
53
+ @wrapped.level.current.required_points.should == @sample_response["Level"]["Current"]["RequiredPoints"]
54
+ @wrapped.level.current.level_type.key.should == @sample_response["Level"]["Current"]["LevelType"]["Key"]
55
+ @wrapped.level.current.level_type.name.should == @sample_response["Level"]["Current"]["LevelType"]["Name"]
56
+ @wrapped.level.next.name.should == @sample_response["Level"]["Next"]["Name"]
57
+ @wrapped.level.next.number.should == @sample_response["Level"]["Next"]["Number"]
58
+ @wrapped.level.next.required_points.should == @sample_response["Level"]["Next"]["RequiredPoints"]
59
+ @wrapped.level.next.level_type.key.should == @sample_response["Level"]["Next"]["LevelType"]["Key"]
60
+ @wrapped.level.next.level_type.name.should == @sample_response["Level"]["Next"]["LevelType"]["Name"]
61
+ end
62
+
63
+ it "should convert to a hash equal to the original" do
64
+ hash_including(@sample_response).should == @wrapped.to_hash
65
+ end
66
+ end
67
+ end