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
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