From 2bd36ec96d42f0b4585a15759f33ff7f89075dcc Mon Sep 17 00:00:00 2001
From: Azul <azul@leap.se>
Date: Tue, 2 Apr 2013 12:45:58 +0200
Subject: return token on successful login via api

---
 core/lib/extensions/testing.rb                     |  9 +++++++-
 users/app/controllers/v1/sessions_controller.rb    |  3 ++-
 .../test/functional/v1/sessions_controller_test.rb | 25 ++++++++++++++--------
 3 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/core/lib/extensions/testing.rb b/core/lib/extensions/testing.rb
index 925c023..aad7fc1 100644
--- a/core/lib/extensions/testing.rb
+++ b/core/lib/extensions/testing.rb
@@ -14,10 +14,17 @@ module LeapWebCore
         get_response.headers["Content-Disposition"]
     end
 
+    def json_response
+      response = JSON.parse(get_response.body)
+      response.respond_to?(:with_indifferent_access) ?
+        response.with_indifferent_access :
+        response
+    end
+
     def assert_json_response(object)
       if object.is_a? Hash
         object.stringify_keys! if object.respond_to? :stringify_keys!
-        assert_equal object, JSON.parse(get_response.body)
+        assert_equal object, json_response
       else
         assert_equal object.to_json, get_response.body
       end
diff --git a/users/app/controllers/v1/sessions_controller.rb b/users/app/controllers/v1/sessions_controller.rb
index 9365d76..e3459d6 100644
--- a/users/app/controllers/v1/sessions_controller.rb
+++ b/users/app/controllers/v1/sessions_controller.rb
@@ -23,6 +23,7 @@ module V1
 
     def update
       authenticate!
+      @token = Token.create(:user_id => current_user.id)
       render :json => login_response
     end
 
@@ -35,7 +36,7 @@ module V1
 
     def login_response
       handshake = session.delete(:handshake)
-      handshake.to_hash.merge(:id => current_user.id)
+      handshake.to_hash.merge(:id => current_user.id, :token => @token.id)
     end
 
   end
diff --git a/users/test/functional/v1/sessions_controller_test.rb b/users/test/functional/v1/sessions_controller_test.rb
index 1226c9d..7c6b595 100644
--- a/users/test/functional/v1/sessions_controller_test.rb
+++ b/users/test/functional/v1/sessions_controller_test.rb
@@ -11,6 +11,22 @@ class V1::SessionsControllerTest < ActionController::TestCase
     @client_hex = 'a123'
   end
 
+  test "renders json" do
+    request.env['warden'].expects(:winning_strategy)
+    get :new, :format => :json
+    assert_response :success
+    assert_json_error nil
+  end
+
+  test "renders warden errors" do
+    strategy = stub :message => {:field => :translate_me}
+    request.env['warden'].stubs(:winning_strategy).returns(strategy)
+    I18n.expects(:t).with(:translate_me).at_least_once.returns("translation stub")
+    get :new, :format => :json
+    assert_response 422
+    assert_json_error :field => "translation stub"
+  end
+
   # Warden takes care of parsing the params and
   # rendering the response. So not much to test here.
   test "should perform handshake" do
@@ -20,15 +36,6 @@ class V1::SessionsControllerTest < ActionController::TestCase
     post :create, :login => @user.login, 'A' => @client_hex
   end
 
-  test "should send salt" do
-    User.expects(:find_by_login).with(@user.login).returns(@user)
-
-    post :create, :login => @user.login
-
-    assert_equal @user, assigns(:user)
-    assert_json_response salt: @user.salt
-  end
-
   test "should authorize" do
     request.env['warden'].expects(:authenticate!)
     @controller.expects(:current_user).returns(@user)
-- 
cgit v1.2.3