Commit 0a137744

mo khan <mo@mokhan.ca>
2014-08-16 19:17:23
allow admins to revoke a users session.
1 parent f793b7d
Changed files (4)
app/controllers/admin/sessions_controller.rb
@@ -3,5 +3,10 @@ module Admin
     def index
       @sessions = UserSession.active
     end
+
+    def destroy
+      UserSession.find(params[:id]).revoke!
+      redirect_to admin_sessions_path
+    end
   end
 end
config/routes.rb
@@ -67,7 +67,7 @@ Cake::Application.routes.draw do
     resources :photos, only: [:index, :show]
     resources :blobs, only: [:index, :show]
     resources :errors, only: [:index, :create]
-    resources :sessions, only: [:index]
+    resources :sessions, only: [:index, :destroy]
   end
 
   namespace :my do
spec/controllers/admin/sessions_controller_spec.rb
@@ -9,7 +9,7 @@ module Admin
         http_login(admin)
       end
 
-      describe "index" do
+      describe "#index" do
         let(:active_session) { build(:user_session) }
 
         before :each do
@@ -21,6 +21,24 @@ module Admin
           expect(assigns(:sessions)).to include(active_session)
         end
       end
+
+      describe "#destroy" do
+        let(:user_session) { create(:active_session) }
+
+        before :each do
+          UserSession.stub(:find).with(user_session.id).and_return(user_session)
+          user_session.stub(:revoke!).and_return(true)
+          delete :destroy, id: user_session.id
+        end
+
+        it "revokes the specified session" do
+          expect(user_session).to have_received(:revoke!)
+        end
+
+        it "redirects to the index page" do
+          expect(response).to redirect_to(admin_sessions_path)
+        end
+      end
     end
   end
 end
spec/factories.rb
@@ -23,9 +23,8 @@ FactoryGirl.define do
 
   factory :user_session, class: UserSession do
     association :user
-    key SecureRandom.hex(32)
+    key SecureRandom.urlsafe_base64(32)
     ip Faker::Internet.ip_v4_address
-    user_agent Faker::Internet
     factory :active_session do
       accessed_at Time.now
     end