OSDN Git Service

Create new achievement via PUT /tasks/:task_id/achievement
authoreagletmt <eagletmt@gmail.com>
Sat, 4 Aug 2012 05:15:19 +0000 (14:15 +0900)
committereagletmt <eagletmt@gmail.com>
Sat, 4 Aug 2012 05:26:58 +0000 (14:26 +0900)
This is useful for clients since there is no need to change their
request depending on creating new achievement or updating existing one.

CutenServer/app/controllers/achievements_controller.rb
CutenServer/test/integration/access_achievement_json_test.rb

index 86fcb63..1468e2d 100644 (file)
@@ -69,12 +69,18 @@ class AchievementsController < ApplicationController
   # PUT /achievements/1.json
   def update
     @achievement = find_achievement params
+    if @achievement.nil? and params.has_key?(:task_id)
+      # create new achievement
+      @achievement = Achievement.new
+      @achievement.user_id = current_user.id
+      @achievement.task_id = params[:task_id]
+    end
     check_user!
 
     respond_to do |format|
       if @achievement.update_attributes(params[:achievement])
         format.html { redirect_to @achievement, notice: 'Achievement was successfully updated.' }
-        format.json { head :no_content }
+        format.json { render :json => @achievement }
       else
         format.html { render action: "edit" }
         format.json { render json: @achievement.errors, status: :unprocessable_entity }
index cc7d89f..1ebd7f8 100644 (file)
@@ -63,4 +63,16 @@ class AccessAchievementJsonTest < ActionDispatch::IntegrationTest
     alt = JSON.parse @response.body
     assert_equal achievement['result'], alt['result']
   end
+
+  test 'create new achievement via /tasks/:task_id/achievement' do
+    auth_token = obtaion_auth_token @user.email, @password
+
+    task = tasks :two
+    assert_difference('Achievement.count') do
+      put "/tasks/#{task.id}/achievement.json", :auth_token => auth_token, :achievement => { :result => '1, 4, 7' }
+    end
+    assert_response :success
+    achievement = JSON.parse @response.body
+    assert_equal achievement['task_id'], task.id
+  end
 end