require File.expand_path('../../test_helper', __FILE__)

class CoursesControllerTest < ActionController::TestCase
	fixtures :courses, 
            :course_infos,
            :course_statuses,
            :users, 
            :user_extensions, 
            :bids,
            :homework_for_courses,
            :journals_for_messages,
            :schools,
            :roles, 
            :members, 
            :member_roles, 
            :enabled_modules, 
            :boards, 
            :messages

  def setup
    @request.session[:user_id] = nil
    @request.session[:ctime] = Time.now.to_i
    @request.session[:atime] = Time.now.to_i
    Setting.default_language = 'en'
  end

  # Get :index
  def test_index_by_anonymous_should_not_show_private_projects
    get :index
    assert_response :success
    assert_template 'index'
    courses = assigns(:courses)
    assert_not_nil courses
    assert courses.all?(&:is_public?)
  end

  # Get :new
	# 人员添加课程的权限是不属于任何角色
	def test_new_course_anyone_temporary
    @request.session[:user_id] = 20
		Role.find_by_name("Non member").add_permission! :add_course #Non member

		get :new
		assert_response :success
		assert_template :new
	end

  # post :create
	def test_create_course_with_access_control
		@request.session[:user_id] = 20
		Role.find_by_name("Non member").add_permission! :add_course #Non member
    course_name = 'course_one'

		post :create,
			:class_period => '32',
			:time => '2014',
			:term => 'spring',
			:course => {
				:name => course_name, # names can't contain space.
				:password => '1234',
				:description => 'description',
				:is_public => '1',
				:course_type => '1'
			}

		assert_response :found
		course = Course.find_by_name(course_name)
    red_url = "courses/#{course.id}/settings"
    assert_match %r(#{red_url}), @response.redirect_url
    # 创建成功跳转settings方法会带参数一枚,故一下方法失败
		# assert_redirected_to "courses/#{course.id}/settings"
	end

  # post :create 403
  def test_create_course_without_access_control
    @request.session[:user_id] = 20
    #Role.find_by_name("Non member").add_permission! :add_course #Non member
    course_name = 'course_one'

    post :create,
      :class_period => '32',
      :time => '2014',
      :term => 'spring',
      :course => {
        :name => course_name, # names can't contain space.
        :password => '1234',
        :description => 'description',
        :is_public => '1',
        :course_type => '1'
      }

    assert_response :forbidden
  end
  test ':homework get by non-member is access' do
    get :homework, {id: 1}
    assert_response :success
  end

  test ':feedback Get by non-member is access' do
    get :feedback, {id: 1}
    assert_response :success
    # 检测留言是否在其中以及不报错
    jfms = JournalsForMessage.where(jour_type: 'Course', jour_id: 1, m_parent_id: nil).reorder('id DESC')
    jfms.take(5).each do |j|
      assert_select "li#word_li_#{j.id}"
    end
  end

  test ':homework get by non-member' do
    get :homework, {id: 1}
    assert_response :success
    course = Course.find(1)
    assert course.homeworks.any?
    course.homeworks.each do |homework|
      assert_select '.bid_path', homework.name
    end
  end

  test ':new_homework by no user should not new_homework course_001' do
    get :new_homework, {id: 1}
    assert_response 403
  end
  test ':new_homework by loged & allowed user should get new_homework course_001' do
    user_id = 25
    member = Member.create(user_id: user_id, project_id: -1, course_id: 1, roles: [Role.last])
    MemberRole.create(member_id: member.id, role_id: 3)
    @request.session[:user_id] = user_id
    get :new_homework, {id: 1}
    assert_response :success
    assert_template 'new_homework'
  end

  test ':member by ano' do
    get :member, {id: 1}
    assert_response :success
    assert_template 'member'
    assert assigns(:members).any?
  end


#  test "#index by non-admin user with view_time_entries permission should show overall spent time link" do
#    @request.session[:user_id] = 3
#    get :index
#    assert_template 'index'
#    assert_select 'a[href=?]', '/time_entries'
#  end
#
#  test "#index by non-admin user without view_time_entries permission should not show overall spent time link" do
#    Role.find(2).remove_permission! :view_time_entries
#    Role.non_member.remove_permission! :view_time_entries
#    Role.anonymous.remove_permission! :view_time_entries
#    @request.session[:user_id] = 3
#
#    get :index
#    assert_template 'index'
#    assert_select 'a[href=?]', '/time_entries', 0
#  end
end