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

class ProjectsControllerTest < ActionController::TestCase
  fixtures :projects, 
           :issues, 
           :issue_statuses,
           :enumerations, 
           :users, 
           :issue_categories,
           :trackers,
           :projects_trackers,
           :roles,
           :member_roles,
           :members,
           :enabled_modules,
           :journals, 
           :journal_details,
           :journals_for_messages

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

  test 'get :index' do
    get :index
    assert_response :success
  end
  test ':new by admin should accept get' do
    @request.session[:user_id] = 1
    get :new
    assert_response :success
  end
  test ':new by non-admin user with add_project permission should accept get' do
    Role.non_member.add_permission! :add_project
    @request.session[:user_id] = 9
    get :new
    assert_response :success
    assert_template 'new'
  end

  test ':create by admin user should create a new project' do
    @request.session[:user_id] = 1
    post :create, :project => {
      name: "blog1",
      description: 'weblog',
      homepage: 'http://weblog',
      identifier: 'blog',
      is_public: 1,
      custom_field_values: {'3' => 'Beta'},
      tracker_ids: ['1', '3'],
      :issue_custom_field_ids => ['9'],
      :enabled_module_names => ['issue_tracking', 'news', 'repository']
    }
    project = Project.find_by_name(blog)
    assert_not_nil project
    assert_redirected_to "/projects/#{project.id}/settings"

    assert_kind_of Project, project
    assert project.active?
    assert_equal 'weblog', project.description
    assert_equal 'http://weblog', project.homepage
    assert_equal true, project.is_public?
    assert_nil project.parent
    assert_equal 'Beta', project.custom_value_for(3).value
    assert_equal [1, 3], project.trackers.map(&:id).sort
    assert_equal ['issue_tracking', 'news', 'repository'], project.enabled_module_names.sort
    assert project.issue_custom_fields.include?(IssueCustomField.find(9))
  end

  test 'get :show trustie' do
    get :show, {id: 2}
    assert_response :success
  end

  test 'get :search, forge' do
    query_condition = "forge"
    get :search, {'name' => query_condition }
    projects = assigns(:projects_all)
    assert projects.any?, "projects should have anything."
    projects.each do |project|
      assert project.name.downcase.include?(query_condition), "project name is invalid: #{project.name}"
    end
  end

  test 'get :feedback' do
    get :feedback, {id: 2}
    assert_response :success
    # prject_id = 2 总有8个留言
    assert_equal assigns(:jour).count, 8
  end

end
