ruby-iactionable 0.0.1

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 (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