lifen 0.2.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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