cybercoach 0.2.0 → 0.3.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 (41) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +45 -0
  3. data/.rspec +2 -0
  4. data/CHANGELOG.md +8 -0
  5. data/Gemfile +23 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +31 -0
  8. data/Rakefile +2 -0
  9. data/cybercoach.gemspec +27 -0
  10. data/lib/cybercoach/abstract_resource.rb +162 -0
  11. data/lib/cybercoach/entry.rb +166 -0
  12. data/lib/cybercoach/format_not_supported_error.rb +7 -0
  13. data/lib/cybercoach/http_error.rb +27 -0
  14. data/lib/cybercoach/pageable.rb +38 -0
  15. data/lib/cybercoach/partnership.rb +151 -0
  16. data/lib/cybercoach/post_createable.rb +49 -0
  17. data/lib/cybercoach/privacy_level.rb +21 -0
  18. data/lib/cybercoach/put_createable.rb +48 -0
  19. data/lib/cybercoach/resource.rb +94 -0
  20. data/lib/cybercoach/resource_page.rb +191 -0
  21. data/lib/cybercoach/settings.rb +16 -0
  22. data/lib/cybercoach/sport.rb +104 -0
  23. data/lib/cybercoach/subclass_responsibility_error.rb +7 -0
  24. data/lib/cybercoach/subscription.rb +145 -0
  25. data/lib/cybercoach/user.rb +159 -0
  26. data/lib/cybercoach/version.rb +10 -0
  27. data/lib/cybercoach.rb +19 -0
  28. data/spec/lib/cybercoach/entry_spec.rb +95 -0
  29. data/spec/lib/cybercoach/partnership_spec.rb +79 -0
  30. data/spec/lib/cybercoach/privacy_level_spec.rb +15 -0
  31. data/spec/lib/cybercoach/resource_helper.rb +11 -0
  32. data/spec/lib/cybercoach/resource_page_spec.rb +44 -0
  33. data/spec/lib/cybercoach/settings_spec.rb +10 -0
  34. data/spec/lib/cybercoach/sport_spec.rb +29 -0
  35. data/spec/lib/cybercoach/subscription_spec.rb +129 -0
  36. data/spec/lib/cybercoach/user_helper.rb +22 -0
  37. data/spec/lib/cybercoach/user_spec.rb +82 -0
  38. data/spec/lib/cybercoach_helper.rb +2 -0
  39. data/spec/lib/integration_spec.rb +56 -0
  40. data/spec/spec_helper.rb +19 -0
  41. metadata +56 -4
@@ -0,0 +1,129 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Subscription' do
4
+ before(:context) do
5
+ @proposer = UserHelper.make(6)
6
+ @proposed = UserHelper.make(7)
7
+ ResourceHelper.safe_delete(@proposer)
8
+ ResourceHelper.safe_delete(@proposed)
9
+ @proposer.create
10
+ @proposed.create
11
+ @partnership = CyberCoach::Partnership.new
12
+ @partnership.proposer = @proposer
13
+ @partnership.proposed = @proposed
14
+ @partnership.privacy_level = CyberCoach::PrivacyLevel::REGISTERED_USER
15
+ ResourceHelper.safe_delete(@partnership, UserHelper.options(@proposer))
16
+ ResourceHelper.safe_delete(@partnership, UserHelper.options(@proposed))
17
+ @partnership.create(UserHelper.options(@proposer))
18
+ @partnership.update(UserHelper.options(@proposed))
19
+ @sport = CyberCoach::Sport.new
20
+ @sport.name = 'Running'
21
+ @sport.read
22
+ end
23
+
24
+ after(:context) do
25
+ ResourceHelper.safe_delete(@partnership, UserHelper.options(@proposer))
26
+ ResourceHelper.safe_delete(@partnership, UserHelper.options(@proposed))
27
+ ResourceHelper.safe_delete(@proposer)
28
+ ResourceHelper.safe_delete(@proposed)
29
+ end
30
+
31
+ before(:example) do
32
+ @subscription = CyberCoach::Subscription.new
33
+ @subscription.subscriber = @partnership
34
+ @subscription.sport = @sport
35
+ @subscription.privacy_level = CyberCoach::PrivacyLevel::REGISTERED_USER
36
+ end
37
+
38
+ it 'should raise an error if it does not exist' do
39
+ expect { @subscription.read(UserHelper.options(@proposer)) }.to raise_error(CyberCoach::HttpError)
40
+ end
41
+
42
+ describe 'crud' do
43
+ before(:example) do
44
+ ResourceHelper.safe_delete(@subscription, UserHelper.options(@proposer))
45
+ end
46
+
47
+ after(:example) do
48
+ ResourceHelper.safe_delete(@subscription, UserHelper.options(@proposer))
49
+ end
50
+
51
+ describe 'with partnership subscriber' do
52
+ before(:example) do
53
+ @subscription.subscriber = @partnership
54
+ end
55
+
56
+ it 'should create itself' do
57
+ @subscription.create(UserHelper.options(@proposer))
58
+ expect(@subscription.id).not_to be_nil
59
+ end
60
+
61
+ it 'should read itself' do
62
+ @subscription.create(UserHelper.options(@proposer))
63
+ @subscription.read(UserHelper.options(@proposer))
64
+ expect(@subscription.id).not_to be_nil
65
+ expect(@subscription.uri).not_to be_nil
66
+ expect(@subscription.subscriber.uri).to eq(@partnership.uri)
67
+ expect(@subscription.sport.uri).to eq(@sport.uri)
68
+ expect(@subscription.entries).to be_empty
69
+ expect(@subscription.privacy_level).not_to be_nil
70
+ expect(@subscription.date_created).not_to be_nil
71
+ end
72
+
73
+ it 'should update itself' do
74
+ @subscription.create(UserHelper.options(@proposer))
75
+ old_privacy_level = @subscription.privacy_level
76
+ new_privacy_level = CyberCoach::PrivacyLevel::EVERYBODY
77
+ @subscription.privacy_level = new_privacy_level
78
+ @subscription.update(UserHelper.options(@proposer))
79
+ expect(@subscription.privacy_level).not_to eq(old_privacy_level)
80
+ expect(@subscription.privacy_level).to eq(new_privacy_level)
81
+ end
82
+
83
+ it 'should delete itself' do
84
+ @subscription.create(UserHelper.options(@proposer))
85
+ @subscription.delete(UserHelper.options(@proposer))
86
+ expect { @subscription.read(UserHelper.options(@proposer)) }.to raise_error(CyberCoach::HttpError)
87
+ end
88
+ end
89
+
90
+ describe 'with user subscriber' do
91
+ before(:example) do
92
+ @subscription.subscriber = @proposer
93
+ end
94
+
95
+ it 'should create itself' do
96
+ @subscription.create(UserHelper.options(@proposer))
97
+ expect(@subscription.id).not_to be_nil
98
+ end
99
+
100
+ it 'should read itself' do
101
+ @subscription.create(UserHelper.options(@proposer))
102
+ @subscription.read(UserHelper.options(@proposer))
103
+ expect(@subscription.id).not_to be_nil
104
+ expect(@subscription.uri).not_to be_nil
105
+ expect(@subscription.subscriber.uri).to eq(@proposer.uri)
106
+ expect(@subscription.sport.uri).to eq(@sport.uri)
107
+ expect(@subscription.entries).to be_empty
108
+ expect(@subscription.privacy_level).not_to be_nil
109
+ expect(@subscription.date_created).not_to be_nil
110
+ end
111
+
112
+ it 'should update itself' do
113
+ @subscription.create(UserHelper.options(@proposer))
114
+ old_privacy_level = @subscription.privacy_level
115
+ new_privacy_level = CyberCoach::PrivacyLevel::EVERYBODY
116
+ @subscription.privacy_level = new_privacy_level
117
+ @subscription.update(UserHelper.options(@proposer))
118
+ expect(@subscription.privacy_level).not_to eq(old_privacy_level)
119
+ expect(@subscription.privacy_level).to eq(new_privacy_level)
120
+ end
121
+
122
+ it 'should delete itself' do
123
+ @subscription.create(UserHelper.options(@proposer))
124
+ @subscription.delete(UserHelper.options(@proposer))
125
+ expect { @subscription.read(UserHelper.options(@proposer)) }.to raise_error(CyberCoach::HttpError)
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,22 @@
1
+ require 'cybercoach'
2
+
3
+ class UserHelper
4
+ def self.make(i)
5
+ user = CyberCoach::User.new
6
+ user.username = "newyorkfalconstest#{i}"
7
+ user.password = 'fancypants'
8
+ user.email = "newyorkfalconstest#{i}@newyorkfalcons.ch"
9
+ user.privacy_level = CyberCoach::PrivacyLevel::REGISTERED_USER
10
+ user.real_name = "New York Falcons Test #{i}"
11
+ user
12
+ end
13
+
14
+ def self.options(user)
15
+ {
16
+ basic_auth: {
17
+ username: user.username,
18
+ password: user.password
19
+ }
20
+ }
21
+ end
22
+ end
@@ -0,0 +1,82 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'User' do
4
+ before(:example) do
5
+ @user = CyberCoach::User.new
6
+ end
7
+
8
+ it 'should raise an error if it does not exist' do
9
+ @user.username = 'gnirloff'
10
+ expect{@user.read}.to raise_error(CyberCoach::HttpError)
11
+ end
12
+
13
+ it 'should read all' do
14
+ users = CyberCoach::User.read_all
15
+ expect(users.resources.size).to eq(5)
16
+ expect(users.next).not_to be_nil
17
+ expect{users.previous}.to raise_error(CyberCoach::ResourcePage::NoPreviousPageError)
18
+ end
19
+
20
+ it 'should get the authentication options' do
21
+ @user = UserHelper.make(6)
22
+ @user.create
23
+ expect(@user.authentication).to eq({
24
+ basic_auth: {
25
+ username: @user.username,
26
+ password: @user.password
27
+ }
28
+ })
29
+ end
30
+
31
+ describe 'crud' do
32
+ before(:example) do
33
+ @user = UserHelper.make(6)
34
+ ResourceHelper.safe_delete(@user)
35
+ end
36
+
37
+ after(:example) do
38
+ ResourceHelper.safe_delete(@user)
39
+ end
40
+
41
+ it 'should create itself without nilling the password' do
42
+ old_uri = @user.uri
43
+ old_password = @user.password
44
+ @user.create
45
+ expect(@user.uri).to eq(old_uri)
46
+ expect(@user.password).to eq(old_password)
47
+ end
48
+
49
+ it 'should read itself without nilling the password' do
50
+ old_password = @user.password
51
+ @user.create
52
+ @user.read
53
+ # users do not have an id
54
+ expect(@user.id).to be_nil
55
+ expect(@user.uri).not_to be_nil
56
+ expect(@user.username).not_to be_nil
57
+ expect(@user.email).not_to be_nil
58
+ expect(@user.password).to eq(old_password)
59
+ expect(@user.privacy_level).not_to be_nil
60
+ expect(@user.real_name).not_to be_nil
61
+ expect(@user.date_created).not_to be_nil
62
+ end
63
+
64
+ it 'should update itself without nilling the password' do
65
+ @user.create
66
+ old_password = @user.password
67
+ old_real_name = @user.real_name
68
+ new_real_name = 'habakuck'
69
+ @user.real_name = new_real_name
70
+ @user.update
71
+ expect(@user.password).to eq(old_password)
72
+ expect(@user.real_name).not_to eq(old_real_name)
73
+ expect(@user.real_name).to eq(new_real_name)
74
+ end
75
+
76
+ it 'should delete itself' do
77
+ @user.create
78
+ @user.delete
79
+ expect{@user.read}.to raise_error(CyberCoach::HttpError)
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,2 @@
1
+ require 'lib/cybercoach/resource_helper'
2
+ require 'lib/cybercoach/user_helper'
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Integration' do
4
+ before(:context) do
5
+ @proposer = UserHelper.make(6)
6
+ @proposed = UserHelper.make(7)
7
+ ResourceHelper.safe_delete(@proposer)
8
+ ResourceHelper.safe_delete(@proposed)
9
+ @proposer.create
10
+ @proposed.create
11
+ @partnership = CyberCoach::Partnership.new
12
+ @partnership.proposer = @proposer
13
+ @partnership.proposed = @proposed
14
+ @partnership.privacy_level = CyberCoach::PrivacyLevel::REGISTERED_USER
15
+ ResourceHelper.safe_delete(@partnership, UserHelper.options(@proposer))
16
+ ResourceHelper.safe_delete(@partnership, UserHelper.options(@proposed))
17
+ @partnership.create(UserHelper.options(@proposer))
18
+ @partnership.update(UserHelper.options(@proposed))
19
+ @sport = CyberCoach::Sport.new
20
+ @sport.name = 'Running'
21
+ @sport.read
22
+ @subscription = CyberCoach::Subscription.new
23
+ @subscription.subscriber = @partnership
24
+ @subscription.sport = @sport
25
+ @subscription.privacy_level = CyberCoach::PrivacyLevel::REGISTERED_USER
26
+ @subscription.create(UserHelper.options(@proposer))
27
+ @entry = CyberCoach::Entry.new
28
+ @entry.subscription = @subscription
29
+ @entry.comment = 'I like pants'
30
+ @entry.location = 'In your pants'
31
+ @entry.duration = 1
32
+ @entry.privacy_level = CyberCoach::PrivacyLevel::REGISTERED_USER
33
+ @entry.create(UserHelper.options(@proposer))
34
+ end
35
+
36
+ after(:context) do
37
+ ResourceHelper.safe_delete(@entry, UserHelper.options(@proposer))
38
+ ResourceHelper.safe_delete(@subscription, UserHelper.options(@proposer))
39
+ ResourceHelper.safe_delete(@partnership, UserHelper.options(@proposer))
40
+ ResourceHelper.safe_delete(@partnership, UserHelper.options(@proposed))
41
+ ResourceHelper.safe_delete(@proposer)
42
+ ResourceHelper.safe_delete(@proposed)
43
+ end
44
+
45
+ it 'should add the subscription to the partnership' do
46
+ @partnership.read(UserHelper.options(@proposer))
47
+ expect(@partnership.subscriptions).not_to be_empty
48
+ expect(@partnership.subscriptions[0].uri).to eq(@subscription.uri)
49
+ end
50
+
51
+ it 'should add the entry to the subscription' do
52
+ @subscription.read(UserHelper.options(@proposer))
53
+ expect(@subscription.entries).not_to be_empty
54
+ expect(@subscription.entries[0].uri).to eq(@entry.uri)
55
+ end
56
+ end
@@ -0,0 +1,19 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require 'simplecov'
5
+ SimpleCov.start do
6
+ add_group 'lib' do |file|
7
+ file.filename.start_with? "#{Dir.pwd}/lib"
8
+ end
9
+ add_group 'spec' do |file|
10
+ file.filename.start_with? "#{Dir.pwd}/spec"
11
+ end
12
+ end
13
+
14
+ require 'pry'
15
+ require 'cybercoach'
16
+ require 'lib/cybercoach_helper'
17
+
18
+ RSpec.configure do |config|
19
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cybercoach
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Manuel Leuenberger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-19 00:00:00.000000000 Z
11
+ date: 2014-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -58,7 +58,46 @@ email:
58
58
  executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
- files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rspec"
64
+ - CHANGELOG.md
65
+ - Gemfile
66
+ - LICENSE.txt
67
+ - README.md
68
+ - Rakefile
69
+ - cybercoach.gemspec
70
+ - lib/cybercoach.rb
71
+ - lib/cybercoach/abstract_resource.rb
72
+ - lib/cybercoach/entry.rb
73
+ - lib/cybercoach/format_not_supported_error.rb
74
+ - lib/cybercoach/http_error.rb
75
+ - lib/cybercoach/pageable.rb
76
+ - lib/cybercoach/partnership.rb
77
+ - lib/cybercoach/post_createable.rb
78
+ - lib/cybercoach/privacy_level.rb
79
+ - lib/cybercoach/put_createable.rb
80
+ - lib/cybercoach/resource.rb
81
+ - lib/cybercoach/resource_page.rb
82
+ - lib/cybercoach/settings.rb
83
+ - lib/cybercoach/sport.rb
84
+ - lib/cybercoach/subclass_responsibility_error.rb
85
+ - lib/cybercoach/subscription.rb
86
+ - lib/cybercoach/user.rb
87
+ - lib/cybercoach/version.rb
88
+ - spec/lib/cybercoach/entry_spec.rb
89
+ - spec/lib/cybercoach/partnership_spec.rb
90
+ - spec/lib/cybercoach/privacy_level_spec.rb
91
+ - spec/lib/cybercoach/resource_helper.rb
92
+ - spec/lib/cybercoach/resource_page_spec.rb
93
+ - spec/lib/cybercoach/settings_spec.rb
94
+ - spec/lib/cybercoach/sport_spec.rb
95
+ - spec/lib/cybercoach/subscription_spec.rb
96
+ - spec/lib/cybercoach/user_helper.rb
97
+ - spec/lib/cybercoach/user_spec.rb
98
+ - spec/lib/cybercoach_helper.rb
99
+ - spec/lib/integration_spec.rb
100
+ - spec/spec_helper.rb
62
101
  homepage: https://github.com/New-York-Falcons/cybercoach
63
102
  licenses:
64
103
  - MIT
@@ -83,4 +122,17 @@ rubygems_version: 2.2.2
83
122
  signing_key:
84
123
  specification_version: 4
85
124
  summary: CyberCoach proxy
86
- test_files: []
125
+ test_files:
126
+ - spec/lib/cybercoach/entry_spec.rb
127
+ - spec/lib/cybercoach/partnership_spec.rb
128
+ - spec/lib/cybercoach/privacy_level_spec.rb
129
+ - spec/lib/cybercoach/resource_helper.rb
130
+ - spec/lib/cybercoach/resource_page_spec.rb
131
+ - spec/lib/cybercoach/settings_spec.rb
132
+ - spec/lib/cybercoach/sport_spec.rb
133
+ - spec/lib/cybercoach/subscription_spec.rb
134
+ - spec/lib/cybercoach/user_helper.rb
135
+ - spec/lib/cybercoach/user_spec.rb
136
+ - spec/lib/cybercoach_helper.rb
137
+ - spec/lib/integration_spec.rb
138
+ - spec/spec_helper.rb