Browse Source

Refactoring: Clean up User.authenticate spec

Ryan Lue 6 years ago
parent
commit
296f37ef23
1 changed files with 28 additions and 19 deletions
  1. 28 19
      spec/models/user_spec.rb

+ 28 - 19
spec/models/user_spec.rb

@@ -62,30 +62,39 @@ RSpec.describe User, type: :model do
           end
         end
 
-        it "updates user's updates last_login and updated_at attributes" do
-          expect { described_class.authenticate(user.login, password) }
-            .to change { user.reload.last_login }
-            .and change { user.reload.updated_at }
-        end
-
-        context 'when authenticated multiple after another' do
-
-          before { described_class.authenticate(user.login, password) }
+        context 'when previous login was' do
+          context 'never' do
+            it 'updates #last_login and #updated_at' do
+              expect { described_class.authenticate(user.login, password) }
+                .to change { user.reload.last_login }
+                .and change { user.reload.updated_at }
+            end
+          end
 
-          it "doesn't update last_login and updated_at when last login was less than 10 minutes ago" do
-            travel 9.minutes
+          context 'less than 10 minutes ago' do
+            before do
+              described_class.authenticate(user.login, password)
+              travel 9.minutes
+            end
 
-            expect { described_class.authenticate(user.login, password) }
-              .to not_change { user.reload.last_login }
-              .and not_change { user.reload.updated_at }
+            it 'does not update #last_login and #updated_at' do
+              expect { described_class.authenticate(user.login, password) }
+                .to not_change { user.reload.last_login }
+                .and not_change { user.reload.updated_at }
+            end
           end
 
-          it 'updates last_login and updated_at when last login was more than 10 minutes ago' do
-            travel 11.minutes
+          context 'more than 10 minutes ago' do
+            before do
+              described_class.authenticate(user.login, password)
+              travel 11.minutes
+            end
 
-            expect { described_class.authenticate(user.login, password) }
-              .to change { user.reload.last_login }
-              .and change { user.reload.updated_at }
+            it 'updates #last_login and #updated_at' do
+              expect { described_class.authenticate(user.login, password) }
+                .to change { user.reload.last_login }
+                .and change { user.reload.updated_at }
+            end
           end
         end
       end