mezuro_plugin_profile_controller_test.rb 8.25 KB
require 'test_helper'

require "#{Rails.root}/plugins/mezuro/test/fixtures/module_result_fixtures"
require "#{Rails.root}/plugins/mezuro/test/fixtures/project_result_fixtures"
require "#{Rails.root}/plugins/mezuro/test/fixtures/error_fixtures"
require "#{Rails.root}/plugins/mezuro/test/fixtures/repository_fixtures"

class MezuroPluginProfileControllerTest < ActionController::TestCase

  def setup
    @controller = MezuroPluginProfileController.new
    @request = ActionController::TestRequest.new
    @response = ActionController::TestResponse.new
    @profile = fast_create(Community)

    @project_result = ProjectResultFixtures.project_result
    @module_result = ModuleResultFixtures.module_result
    @repository_url = RepositoryFixtures.repository.address
    @project = @project_result.project
    @date = "2012-04-13T20:39:41+04:00"
    
    Kalibro::Project.expects(:all_names).returns([])
    @content = MezuroPlugin::ProjectContent.new(:profile => @profile, :name => @project.name, :repository_url => @repository_url)
    @content.expects(:send_project_to_service).returns(nil)
    @content.save
  end

  should 'test project state without kalibro_error' do
    Kalibro::Project.expects(:request).with("Project", :get_project, :project_name => @project.name).returns({:project => @project.to_hash})
    get :project_state, :profile => @profile.identifier, :id => @content.id
    assert_response 200
    assert_equal @content, assigns(:content)
  end

  should 'test project state with kalibro_error' do
    Kalibro::Project.expects(:request).with("Project", :get_project, :project_name => @project.name).returns({:project => @project.to_hash.merge({:error => ErrorFixtures.error_hash})})
    get :project_state, :profile => @profile.identifier, :id => @content.id
    assert_response 200
    assert_equal "ERROR", @response.body
    assert_equal @content, assigns(:content)
  end

  should 'test project error' do
    Kalibro::Project.expects(:request).with("Project", :get_project, :project_name => @project.name).returns({:project => @project.to_hash.merge({:error => ErrorFixtures.error_hash})})
    get :project_error, :profile => @profile.identifier, :id => @content.id
    assert_response 200
    assert_select('h3', 'ERROR')
    assert_equal @content, assigns(:content)
    assert_equal @project.name, assigns(:project).name
  end

  should 'test project result without date' do
    Kalibro::ProjectResult.expects(:request).with("ProjectResult", :get_last_result_of, {:project_name => @project.name}).returns({:project_result => @project_result.to_hash})
    get :project_result, :profile => @profile.identifier, :id => @content.id, :date => nil
    assert_equal @content, assigns(:content)
    assert_equal @project_result.project.name, assigns(:project_result).project.name
    assert_response 200
    assert_select('h4', 'Last Result')
  end
  
  should 'test project results from a specific date' do
    request_body = {:project_name => @project.name, :date => @date}
    Kalibro::ProjectResult.expects(:request).with("ProjectResult", :has_results_before, request_body).returns({:has_results => true})
    Kalibro::ProjectResult.expects(:request).with("ProjectResult", :get_last_result_before, request_body).returns({:project_result => @project_result.to_hash})
    get :project_result, :profile => @profile.identifier, :id => @content.id, :date => @date
    assert_equal @content, assigns(:content)
    assert_equal @project_result.project.name, assigns(:project_result).project.name
    assert_response 200
    assert_select('h4', 'Last Result')
  end


  should 'get module result without date' do
    date_with_milliseconds = Kalibro::ProjectResult.date_with_milliseconds(@project_result.date)
    Kalibro::ProjectResult.expects(:request).
      with("ProjectResult", :get_last_result_of, {:project_name => @project.name}).
      returns({:project_result => @project_result.to_hash})
    Kalibro::ModuleResult.expects(:request).
      with("ModuleResult", :get_module_result, {:project_name => @project.name, :module_name => @project.name, :date => date_with_milliseconds}).
      returns({:module_result => @module_result.to_hash})
    get :module_result, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name, :date => nil
    assert_equal @content, assigns(:content)
    assert_equal @module_result.grade, assigns(:module_result).grade
    assert_response 200
    assert_select('h5', 'Metric results for: Qt-Calculator (APPLICATION)')
  end

  should 'get module result with a specific date' do
	  date_with_milliseconds = Kalibro::ProjectResult.date_with_milliseconds(@project_result.date)
    request_body = {:project_name => @project.name, :date => @project_result.date}
    Kalibro::ProjectResult.expects(:request).with("ProjectResult", :has_results_before, request_body).returns({:has_results => true})
    Kalibro::ProjectResult.expects(:request).with("ProjectResult", :get_last_result_before, request_body).returns({:project_result => @project_result.to_hash})
    Kalibro::ModuleResult.expects(:request).with("ModuleResult", :get_module_result, {:project_name => @project.name, :module_name => @project.name, :date => date_with_milliseconds}).returns({:module_result => @module_result.to_hash})
    get :module_result, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name, :date => @project_result.date
    assert_equal @content, assigns(:content)
    assert_equal @module_result.grade, assigns(:module_result).grade
    assert_response 200
    assert_select('h5', 'Metric results for: Qt-Calculator (APPLICATION)')
  end

  should 'test project tree without date' do
    Kalibro::ProjectResult.expects(:request).with("ProjectResult", :get_last_result_of, {:project_name => @project.name}).returns({:project_result => @project_result.to_hash})
    Kalibro::Project.expects(:request).with("Project", :get_project, :project_name => @project.name).returns({:project => @project.to_hash})
  	get :project_tree, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name, :date => nil
    assert_equal @content, assigns(:content)
    assert_equal @project.name, assigns(:project_name)
    assert_equal @project_result.source_tree.module.name, assigns(:source_tree).module.name
	  assert_response 200
  	assert_select('h2', /Qt-Calculator/)
  end

  should 'test project tree with a specific date' do
    request_body = {:project_name => @project.name, :date => @project_result.date}
    Kalibro::Project.expects(:request).with("Project", :get_project, :project_name => @project.name).returns({:project => @project.to_hash})
    Kalibro::ProjectResult.expects(:request).with("ProjectResult", :has_results_before, request_body).returns({:has_results => true})
    Kalibro::ProjectResult.expects(:request).with("ProjectResult", :get_last_result_before, request_body).returns({:project_result => @project_result.to_hash})
    get :project_tree, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name, :date => @project_result.date
    assert_equal @content, assigns(:content)
    assert_equal @project.name, assigns(:project_name)
    assert_equal @project_result.source_tree.module.name, assigns(:source_tree).module.name    
	  assert_response 200
  end

  should 'test module metrics history' do
    Kalibro::ModuleResult.expects(:request).with("ModuleResult", :get_result_history, {:project_name => @project.name, :module_name => @project.name}).returns({:module_result => @module_result})
    get :module_metrics_history, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name,
    :metric_name => @module_result.metric_result.first.metric.name.delete("() ")
    assert_equal @content, assigns(:content)
    assert_equal [[@module_result.metric_result[0].value, @module_result.date.to_s[0..9]]], assigns(:score_history)
    assert_response 200
  end
  
  should 'test grade history' do
    Kalibro::ModuleResult.expects(:request).with("ModuleResult", :get_result_history, {:project_name => @project.name, :module_name => @project.name}).returns({:module_result => @module_result})
    get :module_grade_history, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name
    assert_equal @content, assigns(:content)
    assert_equal [[@module_result.grade, @module_result.date.to_s[0..9]]], assigns(:score_history)
    assert_response 200
  end

end