OSDN Git Service

Add tests creating a new task
authoreagletmt <eagletmt@gmail.com>
Sat, 20 Oct 2012 05:11:07 +0000 (14:11 +0900)
committereagletmt <eagletmt@gmail.com>
Sat, 20 Oct 2012 05:11:07 +0000 (14:11 +0900)
CutenServer/test/functional/tasks_controller_test.rb
CutenServer/test/test_helper.rb

index 5513b8a..2757b94 100644 (file)
@@ -1,8 +1,12 @@
 require 'test_helper'
 
 class TasksControllerTest < ActionController::TestCase
+  include Devise::TestHelpers
+
   setup do
     @task = FactoryGirl.create :task
+    @lecture = @task.lecture
+    @teacher = @lecture.teacher
   end
 
   test "should NOT get index" do
@@ -39,4 +43,145 @@ class TasksControllerTest < ActionController::TestCase
       delete :destroy, id: @task
     end
   end
+
+  test "non-teacher should not get new" do
+    user = FactoryGirl.create :user
+    sign_in user
+
+    get :new, :lecture_id => @lecture.id
+    assert_redirected_to @lecture
+  end
+
+  test "teacher should get his new task" do
+    user = FactoryGirl.create :user, :teacher => @teacher
+    sign_in user
+
+    get :new, :lecture_id => @lecture.id
+    assert_response :success
+    assert_not_nil assigns(:task)
+  end
+
+  test "teacher should not get new another teacher's task" do
+    another_teacher = FactoryGirl.create :teacher
+    user = FactoryGirl.create :user, :teacher => another_teacher
+    sign_in user
+
+    get :new, :lecture_id => @lecture.id
+    assert_redirected_to @lecture
+  end
+
+  test "non-teacher should not create task" do
+    user = FactoryGirl.create :user
+    sign_in user
+
+    task = FactoryGirl.build :task, :lecture => @lecture
+    apk = FactoryGirl.build :apk, :task => task
+    apkfile = fixture_file_upload 'dummy.apk', Apk::MIME_TYPE
+    assert_difference('Task.count', 0) do
+      assert_difference('Apk.count', 0) do
+        create_apk apk, apkfile
+        assert_redirected_to @lecture
+      end
+    end
+  end
+
+  test "teacher should create his task" do
+    user = FactoryGirl.create :user, :teacher => @teacher
+    sign_in user
+
+    task = FactoryGirl.build :task, :lecture => @lecture
+    apk = FactoryGirl.build :apk, :task => task
+    apkfile = fixture_file_upload 'dummy.apk', Apk::MIME_TYPE
+    assert_difference('Task.count') do
+      assert_difference('Apk.count') do
+        create_apk apk, apkfile
+        created_apk = assigns :apk
+        created_task = assigns :task
+        assert_not_nil created_apk
+        assert_not_nil created_task
+        assert_equal task.name, created_task.name
+        assert_equal apk.name, created_apk.name
+        assert_equal apk.revision, created_apk.revision
+        assert File.readable?(created_apk.path)
+        assert_equal @lecture.id, created_task.lecture.id
+      end
+    end
+  end
+
+  test "teacher should not create another teacher's task" do
+    another_teacher = FactoryGirl.create :teacher
+    user = FactoryGirl.create :user, :teacher => another_teacher
+    sign_in user
+
+    task = FactoryGirl.build :task, :lecture => @lecture
+    apk = FactoryGirl.build :apk, :task => task
+    apkfile = fixture_file_upload 'dummy.apk', Apk::MIME_TYPE
+    assert_difference('Task.count', 0) do
+      assert_difference('Apk.count', 0) do
+        create_apk apk, apkfile
+        assert_redirected_to @lecture
+      end
+    end
+  end
+
+  test "should reject empty apkfile" do
+    user = FactoryGirl.create :user, :teacher => @teacher
+    sign_in user
+
+    task = FactoryGirl.build :task, :lecture => @lecture
+    apk = FactoryGirl.build :apk, :task => task
+    assert_difference('Task.count', 0) do
+      assert_difference('Apk.count', 0) do
+        create_apk apk, nil
+      end
+    end
+  end
+
+  test "should reject empty task name" do
+    user = FactoryGirl.create :user, :teacher => @teacher
+    sign_in user
+
+    task = FactoryGirl.build :task, :name => nil, :lecture => @lecture
+    apk = FactoryGirl.build :apk, :task => task
+    apkfile = fixture_file_upload 'dummy.apk', Apk::MIME_TYPE
+    assert_difference('Task.count', 0) do
+      assert_difference('Apk.count', 0) do
+        create_apk apk, apkfile
+      end
+    end
+  end
+
+  test "should reject empty apk class name" do
+    user = FactoryGirl.create :user, :teacher => @teacher
+    sign_in user
+
+    task = FactoryGirl.build :task, :lecture => @lecture
+    apk = FactoryGirl.build :apk, :name => nil, :task => task
+    apkfile = fixture_file_upload 'dummy.apk', Apk::MIME_TYPE
+    assert_difference('Task.count', 0) do
+      assert_difference('Apk.count', 0) do
+        create_apk apk, apkfile
+      end
+    end
+  end
+
+  test "should reject empty apk revision" do
+    user = FactoryGirl.create :user, :teacher => @teacher
+    sign_in user
+
+    task = FactoryGirl.build :task, :lecture => @lecture
+    apk = FactoryGirl.build :apk, :revision => nil, :task => task
+    apkfile = fixture_file_upload 'dummy.apk', Apk::MIME_TYPE
+    assert_difference('Task.count', 0) do
+      assert_difference('Apk.count', 0) do
+        create_apk apk, apkfile
+      end
+    end
+  end
+
+  def create_apk(apk, apkfile)
+    task = apk.task
+    lecture = task.lecture
+    post :create, :lecture_id => lecture.id, :task => { :name => task.name }, :apk => { :name => apk.name, :revision => apk.revision }, :apkfile => { :file => apkfile }
+  end
 end
index 6a6967b..3551197 100644 (file)
@@ -37,6 +37,11 @@ Spork.prefork do
       FileUtils.rm_rf Apk.directory
     end
   end
+
+  class Rack::Test::UploadedFile
+    # monkey patch for this issue: https://github.com/brynary/rack-test/issues/30
+    attr_reader :tempfile
+  end
 end
 
 Spork.each_run do