lifen 0.2.1 → 1.0.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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +3 -1
  3. data/README.md +11 -11
  4. data/lib/lifen.rb +7 -4
  5. data/lib/lifen/app_authenticated_client.rb +15 -27
  6. data/lib/lifen/client.rb +44 -0
  7. data/lib/lifen/configuration.rb +1 -1
  8. data/lib/lifen/error.rb +1 -0
  9. data/lib/lifen/flow.rb +41 -44
  10. data/lib/lifen/flows.rb +4 -8
  11. data/lib/lifen/status.rb +5 -3
  12. data/lib/lifen/token.rb +44 -0
  13. data/lib/lifen/user.rb +34 -23
  14. data/lib/lifen/user_authenticated_client.rb +17 -27
  15. data/lib/lifen/version.rb +1 -1
  16. data/lifen.gemspec +1 -0
  17. data/spec/cassettes/flows/attach_users/invalid_flow_uuid.yml +11 -13
  18. data/spec/cassettes/flows/attach_users/invalid_user_uuid.yml +12 -14
  19. data/spec/cassettes/flows/attach_users/valid.yml +14 -16
  20. data/spec/cassettes/flows/create.yml +13 -15
  21. data/spec/cassettes/flows/create_with_users.yml +12 -13
  22. data/spec/cassettes/flows/detach_users/valid.yml +14 -16
  23. data/spec/cassettes/flows/internal_error.yml +4 -2
  24. data/spec/cassettes/flows/internal_error_without_trace_id.yml +4 -2
  25. data/spec/cassettes/flows/invalid_token.yml +18 -14
  26. data/spec/cassettes/flows/valid_token.yml +14 -17
  27. data/spec/cassettes/messages/valid_message.yml +13 -15
  28. data/spec/cassettes/users/create/existing_user.yml +11 -11
  29. data/spec/cassettes/users/create/invalid_token.yml +16 -10
  30. data/spec/cassettes/users/create/missing_fields.yml +19 -14
  31. data/spec/cassettes/users/create/valid_attributes.yml +12 -12
  32. data/spec/cassettes/users/{refresh_unread_messages → status/refresh}/invalid_token.yml +16 -12
  33. data/spec/cassettes/users/{refresh_unread_messages → status/refresh}/valid_token.yml +10 -12
  34. data/spec/cassettes/users/token/refresh/invalid_user_uuid.yml +40 -0
  35. data/spec/cassettes/users/{refresh/invalid_user_uuid.yml → token/refresh/valid_user_uuid.yml} +16 -15
  36. data/spec/flows_spec.rb +43 -25
  37. data/spec/messages_spec.rb +10 -5
  38. data/spec/spec_helper.rb +1 -1
  39. data/spec/users_spec.rb +46 -26
  40. metadata +25 -13
  41. data/lib/lifen/authentication.rb +0 -29
  42. data/spec/cassettes/flows/detach_users/valid_again.yml +0 -57
  43. data/spec/cassettes/users/refresh/valid_user_uuid.yml +0 -54
data/spec/users_spec.rb CHANGED
@@ -2,15 +2,20 @@ require 'spec_helper'
2
2
 
3
3
  describe Lifen::User do
4
4
 
5
+ let(:valid_token_value) { "valid_token" }
6
+
7
+ let(:invalid_token) { Lifen::Token.new(value: "invalid_token", expires_at: Time.now.to_i + 60) }
8
+ let(:valid_token) { Lifen::Token.new(value: valid_token_value, expires_at: Time.now.to_i + 60) }
9
+
5
10
  describe ':create' do
6
11
  context 'missing field' do
7
12
 
8
- let(:user) { Lifen::User.new() }
13
+ let(:user) { Lifen::User.new(first_name: "Marc") }
9
14
 
10
15
  it 'raises an error' do
11
16
  expect{
12
17
  VCR.use_cassette "users/create/missing_fields" do
13
- user.create!
18
+ user.create
14
19
  end
15
20
  }.to raise_error(Lifen::Error)
16
21
  end
@@ -22,42 +27,41 @@ describe Lifen::User do
22
27
 
23
28
  before do
24
29
  Lifen.configure do |config|
25
- config.secret_key = "invalid-secret-key"
30
+ config.application_access_token = "invalid-secret-key"
26
31
  end
27
32
  end
28
33
 
29
34
  it 'raises an error' do
30
35
  expect{
31
36
  VCR.use_cassette "users/create/invalid_token" do
32
- user.create!
37
+ user.create
33
38
  end
34
39
  }.to raise_error(Lifen::InvalidSecretTokenError)
35
40
  end
36
41
  end
37
42
 
38
43
  context 'exisiting user' do
39
- let(:user) { Lifen::User.new(email: "existing-user@domain.tld") }
44
+ let(:user) { Lifen::User.new(email: "existing-user@domain.tld", first_name: "Existing", last_name: "User") }
40
45
 
41
46
  it 'creates the user' do
42
47
 
43
48
  expect{
44
49
  VCR.use_cassette "users/create/existing_user" do
45
- user.create!
50
+ user.create
46
51
  end
47
52
  }.to raise_error(Lifen::UserAlreadyExistingError)
48
53
  end
49
54
  end
50
55
 
51
56
  context 'valid attributes' do
52
- let(:user) { Lifen::User.new(email: "valid-email-spec@domain.tld") }
57
+ let(:user) { Lifen::User.new(email: "valid-email-spec@domain.tld", first_name: "Valid", last_name: "User") }
53
58
 
54
59
  it 'creates the user' do
55
60
 
56
61
  VCR.use_cassette "users/create/valid_attributes" do
57
- user.create!
62
+ user.create
58
63
  end
59
64
 
60
- expect(user.token).to_not be_nil
61
65
  expect(user.uuid).to_not be_nil
62
66
  end
63
67
  end
@@ -65,7 +69,7 @@ describe Lifen::User do
65
69
  end
66
70
 
67
71
 
68
- describe ':refresh_token' do
72
+ describe ':token.refresh' do
69
73
 
70
74
  context 'invalid user uuid' do
71
75
 
@@ -73,8 +77,8 @@ describe Lifen::User do
73
77
 
74
78
  it 'raises an error' do
75
79
  expect{
76
- VCR.use_cassette "users/refresh/invalid_user_uuid" do
77
- user.refresh_token
80
+ VCR.use_cassette "users/token/refresh/invalid_user_uuid" do
81
+ user.token.refresh
78
82
  end
79
83
  }.to raise_error(Lifen::Error)
80
84
  end
@@ -82,33 +86,48 @@ describe Lifen::User do
82
86
 
83
87
  context 'valid user uuid' do
84
88
 
85
- let(:user) { Lifen::User.new(uuid: "valid_uuid") }
89
+ let(:user) { Lifen::User.new(uuid: "11e6be14-8267-25ee-a3bd-0242ac110002") }
86
90
 
87
91
  it 'raises an error' do
88
92
 
89
- previous_token = user.token
93
+ previous_token_value = user.token.value
94
+
95
+ VCR.use_cassette "users/token/refresh/valid_user_uuid" do
96
+ user.token.refresh
97
+ end
98
+
99
+ expect(user.token.value).to_not be_nil
100
+ expect(user.token.value).to_not eq previous_token_value
101
+ end
102
+ end
103
+
104
+ describe 'expired token' do
105
+
106
+ let(:expired_token) { Lifen::Token.new(value: "valid_token", expires_at: Time.now.to_i - 60) }
107
+ let(:user) { Lifen::User.new(token: expired_token) }
90
108
 
91
- VCR.use_cassette "users/refresh/valid_user_uuid" do
92
- user.refresh_token
109
+
110
+ it 'refreshs the token' do
111
+ expect(expired_token).to receive(:refresh) do
112
+ expired_token.expires_at = Time.now.to_i + 60
93
113
  end
94
114
 
95
- expect(user.token).to_not be_nil
96
- expect(user.token).to_not eq previous_token
115
+ expired_token.refresh_once_if_needed
97
116
  end
117
+
98
118
  end
99
119
 
100
120
  end
101
121
 
102
- describe ':refresh_unread_messages' do
122
+ describe ':status.refresh' do
103
123
 
104
124
  context 'invalid token' do
105
-
106
- let(:user) { Lifen::User.new(token: "invalid_token") }
125
+ let(:user) { Lifen::User.new(token: invalid_token) }
107
126
 
108
127
  it 'raises an error' do
109
128
  expect{
110
- VCR.use_cassette "users/refresh_unread_messages/invalid_token" do
111
- user.refresh_unread_messages
129
+ VCR.use_cassette "users/status/refresh/invalid_token" do
130
+ user.status.refresh
112
131
  end
113
132
  }.to raise_error(Lifen::Error)
114
133
  end
@@ -116,11 +135,12 @@ describe Lifen::User do
116
135
 
117
136
  context 'valid token' do
118
137
 
119
- let(:user) { Lifen::User.new(token: "valid_token") }
138
+ # let(:valid_token_value) { "REPLACE_ME" }
139
+ let(:user) { Lifen::User.new(token: valid_token) }
120
140
 
121
141
  it 'raises an error' do
122
- VCR.use_cassette "users/refresh_unread_messages/valid_token" do
123
- user.refresh_unread_messages
142
+ VCR.use_cassette "users/status/refresh/valid_token" do
143
+ user.status.refresh
124
144
  end
125
145
 
126
146
  expect(user.unread_messages).to eq 2
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lifen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Etienne Depaulis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-02 00:00:00.000000000 Z
11
+ date: 2016-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '1.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: inflecto
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: faraday
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -139,7 +153,6 @@ files:
139
153
  - Rakefile
140
154
  - lib/lifen.rb
141
155
  - lib/lifen/app_authenticated_client.rb
142
- - lib/lifen/authentication.rb
143
156
  - lib/lifen/base.rb
144
157
  - lib/lifen/client.rb
145
158
  - lib/lifen/configuration.rb
@@ -148,6 +161,7 @@ files:
148
161
  - lib/lifen/flows.rb
149
162
  - lib/lifen/message.rb
150
163
  - lib/lifen/status.rb
164
+ - lib/lifen/token.rb
151
165
  - lib/lifen/user.rb
152
166
  - lib/lifen/user_authenticated_client.rb
153
167
  - lib/lifen/version.rb
@@ -158,7 +172,6 @@ files:
158
172
  - spec/cassettes/flows/create.yml
159
173
  - spec/cassettes/flows/create_with_users.yml
160
174
  - spec/cassettes/flows/detach_users/valid.yml
161
- - spec/cassettes/flows/detach_users/valid_again.yml
162
175
  - spec/cassettes/flows/internal_error.yml
163
176
  - spec/cassettes/flows/internal_error_without_trace_id.yml
164
177
  - spec/cassettes/flows/invalid_token.yml
@@ -168,10 +181,10 @@ files:
168
181
  - spec/cassettes/users/create/invalid_token.yml
169
182
  - spec/cassettes/users/create/missing_fields.yml
170
183
  - spec/cassettes/users/create/valid_attributes.yml
171
- - spec/cassettes/users/refresh/invalid_user_uuid.yml
172
- - spec/cassettes/users/refresh/valid_user_uuid.yml
173
- - spec/cassettes/users/refresh_unread_messages/invalid_token.yml
174
- - spec/cassettes/users/refresh_unread_messages/valid_token.yml
184
+ - spec/cassettes/users/status/refresh/invalid_token.yml
185
+ - spec/cassettes/users/status/refresh/valid_token.yml
186
+ - spec/cassettes/users/token/refresh/invalid_user_uuid.yml
187
+ - spec/cassettes/users/token/refresh/valid_user_uuid.yml
175
188
  - spec/flows_spec.rb
176
189
  - spec/messages_spec.rb
177
190
  - spec/spec_helper.rb
@@ -207,7 +220,6 @@ test_files:
207
220
  - spec/cassettes/flows/create.yml
208
221
  - spec/cassettes/flows/create_with_users.yml
209
222
  - spec/cassettes/flows/detach_users/valid.yml
210
- - spec/cassettes/flows/detach_users/valid_again.yml
211
223
  - spec/cassettes/flows/internal_error.yml
212
224
  - spec/cassettes/flows/internal_error_without_trace_id.yml
213
225
  - spec/cassettes/flows/invalid_token.yml
@@ -217,10 +229,10 @@ test_files:
217
229
  - spec/cassettes/users/create/invalid_token.yml
218
230
  - spec/cassettes/users/create/missing_fields.yml
219
231
  - spec/cassettes/users/create/valid_attributes.yml
220
- - spec/cassettes/users/refresh/invalid_user_uuid.yml
221
- - spec/cassettes/users/refresh/valid_user_uuid.yml
222
- - spec/cassettes/users/refresh_unread_messages/invalid_token.yml
223
- - spec/cassettes/users/refresh_unread_messages/valid_token.yml
232
+ - spec/cassettes/users/status/refresh/invalid_token.yml
233
+ - spec/cassettes/users/status/refresh/valid_token.yml
234
+ - spec/cassettes/users/token/refresh/invalid_user_uuid.yml
235
+ - spec/cassettes/users/token/refresh/valid_user_uuid.yml
224
236
  - spec/flows_spec.rb
225
237
  - spec/messages_spec.rb
226
238
  - spec/spec_helper.rb
@@ -1,29 +0,0 @@
1
- module Lifen
2
- class Authentication < Base
3
-
4
- attribute :user, Lifen::User
5
-
6
- attribute :uuid, String
7
- attribute :token, String
8
-
9
- def register!
10
- json = client.post("authentication/api/register/third_party", {emailAddress: user.email, lastName: user.last_name, firstName: user.first_name})
11
-
12
- self.token = json["token"]
13
- self.uuid = json["accountUuid"]
14
- end
15
-
16
- def refresh_token
17
- json = client.post("authentication/api/authenticate/third_party", {accountUuid: user.uuid})
18
-
19
- self.token = json.first["token"]
20
- end
21
-
22
- private
23
-
24
- def client
25
- @client ||= AppAuthenticatedClient.new
26
- end
27
-
28
- end
29
- end
@@ -1,57 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: post
5
- uri: https://develop.lifen.fr/central/api/chats/11e65eca-4af7-d795-bf1a-0242ac110002/detach_users?rel=activeUsers
6
- body:
7
- encoding: UTF-8
8
- string: '["25588996-4ff1-2dbb-9643-eabb809fa654"]'
9
- headers:
10
- User-Agent:
11
- - Faraday v0.9.2
12
- X-Auth-Token:
13
- - valid_token
14
- Content-Type:
15
- - application/json
16
- Accept-Encoding:
17
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
- Accept:
19
- - "*/*"
20
- response:
21
- status:
22
- code: 200
23
- message: OK
24
- headers:
25
- Server:
26
- - Apache-Coyote/1.1
27
- X-B3-Sampled:
28
- - '1'
29
- X-B3-Spanid:
30
- - 65008d9ee1e9b85c
31
- X-B3-Traceid:
32
- - 65008d9ee1e9b85c
33
- X-Content-Type-Options:
34
- - nosniff
35
- X-Xss-Protection:
36
- - 1; mode=block
37
- Cache-Control:
38
- - no-cache, no-store, max-age=0, must-revalidate
39
- Pragma:
40
- - no-cache
41
- Expires:
42
- - '0'
43
- Content-Type:
44
- - application/hal+json;charset=UTF-8
45
- Transfer-Encoding:
46
- - chunked
47
- Date:
48
- - Wed, 10 Aug 2016 07:37:16 GMT
49
- Connection:
50
- - close
51
- body:
52
- encoding: UTF-8
53
- string: '{"uuid":"11e65eca-4af7-d795-bf1a-0242ac110002","version":0,"title":"Rspec
54
- Flow","activeUsers":[],"type":"regular"}'
55
- http_version:
56
- recorded_at: Wed, 10 Aug 2016 07:37:16 GMT
57
- recorded_with: VCR 3.0.3
@@ -1,54 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: post
5
- uri: https://develop.lifen.fr/authentication/api/authenticate/third_party
6
- body:
7
- encoding: UTF-8
8
- string: '{"accountUuid":"valid_uuid"}'
9
- headers:
10
- User-Agent:
11
- - Faraday v0.9.2
12
- Secret-Key:
13
- - valid_secret_key
14
- Content-Type:
15
- - application/json
16
- Accept-Encoding:
17
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
- Accept:
19
- - "*/*"
20
- response:
21
- status:
22
- code: 200
23
- message: OK
24
- headers:
25
- Server:
26
- - Apache-Coyote/1.1
27
- X-B3-Sampled:
28
- - '1'
29
- X-B3-Spanid:
30
- - 510282ea864e9c04
31
- X-B3-Traceid:
32
- - 510282ea864e9c04
33
- X-Content-Type-Options:
34
- - nosniff
35
- X-Xss-Protection:
36
- - 1; mode=block
37
- Cache-Control:
38
- - no-cache, no-store, max-age=0, must-revalidate
39
- Pragma:
40
- - no-cache
41
- Expires:
42
- - '0'
43
- Content-Type:
44
- - application/hal+json;charset=UTF-8
45
- Transfer-Encoding:
46
- - chunked
47
- Date:
48
- - Wed, 07 Sep 2016 12:46:43 GMT
49
- body:
50
- encoding: UTF-8
51
- string: '[{"uuid":"valid_uuid","version":0,"token":"2VHHqKwuYeTsi+N35FAyjhKK3LCVsXbZXqwYpJtCvgRXAYW5/JJxCtHD0O7or9ej/YGYg31tHQhbUiTH+4sCSUzPLkaqw0DSAzgAD1+mSOH9k6C4TggCEieUJqpzXR2ipJ2nt36eOgda8GuqXhvQKpkh5Y8lDbJZEN0G6rj+tTIHim+577ypcoJbSTgTGDnx9DtwkwK3iPZhZOPgh3VIUXcsCjV0LV3u","role":"THIRD_PARTY","profilePicUrl":"","firstName":"N/A","lastName":"N/A","locale":"fr","registered":true,"activated":true,"informed":false,"email":"valid-email-spec@domain.tld","default":true}]'
52
- http_version:
53
- recorded_at: Wed, 07 Sep 2016 12:46:40 GMT
54
- recorded_with: VCR 3.0.3