Commit 54bdf4c4714f25d0b36aa8e8b0bc6c75131a2859

Authored by Diego Camarinha
Committed by Paulo Meireles
1 parent 57daefcb

[Mezuro] Finished refactoring mezuro_profile controller functional tests.

plugins/mezuro/controllers/mezuro_plugin_profile_controller.rb
... ... @@ -18,14 +18,14 @@ class MezuroPluginProfileController < ProfileController
18 18 def project_result
19 19 @content = profile.articles.find(params[:id])
20 20 date = params[:date]
21   - @project_result = date.nil? ? @content.project_result : @content.get_date_result(date)
  21 + @project_result = date.nil? ? @content.project_result : @content.project_result_with_date(date)
22 22 render :partial => 'content_viewer/project_result'
23 23 end
24 24  
25 25 def module_result
26 26 @content = profile.articles.find(params[:id])
27 27 date = params[:date]
28   - date.nil? ? @content.project_result : @content.get_date_result(date)
  28 + date.nil? ? @content.project_result : @content.project_result_with_date(date)
29 29 @module_result = @content.module_result(params[:module_name])
30 30 render :partial => 'content_viewer/module_result'
31 31 end
... ... @@ -33,7 +33,7 @@ class MezuroPluginProfileController < ProfileController
33 33 def project_tree
34 34 @content = profile.articles.find(params[:id])
35 35 date = params[:date]
36   - project_result = date.nil? ? @content.project_result : @content.get_date_result(date)
  36 + project_result = date.nil? ? @content.project_result : @content.project_result_with_date(date)
37 37 @project_name = @content.project.name
38 38 @source_tree = project_result.node_of(params[:module_name])
39 39 render :partial =>'content_viewer/source_tree'
... ...
plugins/mezuro/lib/kalibro/module_result.rb
... ... @@ -3,7 +3,7 @@ class Kalibro::ModuleResult < Kalibro::Model
3 3 attr_accessor :module, :date, :grade, :metric_result, :compound_metric_with_error
4 4  
5 5 def self.find_by_project_name_and_module_name_and_date(project_name, module_name, date)
6   - response = request(
  6 + new request(
7 7 'ModuleResult',
8 8 :get_module_result,
9 9 {
... ... @@ -11,7 +11,6 @@ class Kalibro::ModuleResult < Kalibro::Model
11 11 :module_name => module_name,
12 12 :date => date_with_milliseconds(date)
13 13 })[:module_result]
14   - new response
15 14 end
16 15  
17 16 def self.all_by_project_name_and_module_name(project_name, module_name)
... ... @@ -20,7 +19,7 @@ class Kalibro::ModuleResult < Kalibro::Model
20 19 :get_result_history,
21 20 {
22 21 :project_name => project_name,
23   - :module_name => module_name,
  22 + :module_name => module_name
24 23 })[:module_result]
25 24 Kalibro::ModuleResult.to_objects_array(response)
26 25 end
... ...
plugins/mezuro/lib/kalibro/project.rb
... ... @@ -40,4 +40,8 @@ class Kalibro::Project < Kalibro::Model
40 40 @repository = Kalibro::Repository.to_object value
41 41 end
42 42  
  43 + def error=(value)
  44 + @error = Kalibro::Error.to_object value
  45 + end
  46 +
43 47 end
... ...
plugins/mezuro/lib/kalibro/project_result.rb
... ... @@ -3,35 +3,31 @@ class Kalibro::ProjectResult < Kalibro::Model
3 3 attr_accessor :project, :date, :load_time, :analysis_time, :source_tree, :collect_time
4 4  
5 5 def self.last_result(project_name)
6   - last_result = request('ProjectResult', :get_last_result_of, {:project_name => project_name})[:project_result]
7   - new last_result
  6 + new request('ProjectResult', :get_last_result_of, {:project_name => project_name})[:project_result]
8 7 end
9 8  
10 9 def self.first_result(project_name)
11   - first_result = request('ProjectResult',:get_first_result_of, {:project_name => project_name})[:project_result]
12   - new first_result
  10 + new request('ProjectResult', :get_first_result_of, {:project_name => project_name})[:project_result]
13 11 end
14 12  
15 13 def self.first_result_after(project_name, date)
16   - first_result_after = request('ProjectResult',:get_first_result_after, {:project_name => project_name, :date => date})[:project_result]
17   - new first_result_after
  14 + new request('ProjectResult', :get_first_result_after, {:project_name => project_name, :date => date})[:project_result]
18 15 end
19 16  
20 17 def self.last_result_before(project_name, date)
21   - last_result_before = request('ProjectResult',:get_last_result_before, {:project_name => project_name, :date => date})[:project_result]
22   - new last_result_before
  18 + new request('ProjectResult', :get_last_result_before, {:project_name => project_name, :date => date})[:project_result]
23 19 end
24 20  
25 21 def self.has_results?(project_name)
26   - request('ProjectResult',:has_results_for, {:project_name => project_name})[:has_results]
  22 + request('ProjectResult', :has_results_for, {:project_name => project_name})[:has_results]
27 23 end
28 24  
29 25 def self.has_results_before?(project_name, date)
30   - request('ProjectResult',:has_results_before, {:project_name => project_name, :date => date})[:has_results]
  26 + request('ProjectResult', :has_results_before, {:project_name => project_name, :date => date})[:has_results]
31 27 end
32 28  
33 29 def self.has_results_after?(project_name, date)
34   - request('ProjectResult',:has_results_after, {:project_name => project_name, :date => date})[:has_results]
  30 + request('ProjectResult', :has_results_after, {:project_name => project_name, :date => date})[:has_results]
35 31 end
36 32  
37 33 def project=(value)
... ...
plugins/mezuro/lib/mezuro_plugin/project_content.rb
... ... @@ -35,9 +35,9 @@ class MezuroPlugin::ProjectContent < Article
35 35 end
36 36 end
37 37  
38   - def get_date_result(date)
  38 + def project_result_with_date(date)
39 39 begin
40   - @project_result ||= Kalibro::ProjectResult.has_results_before?(name, date) ? Kalibro::ProjectResult.last_result_before?(name, date) :
  40 + @project_result ||= Kalibro::ProjectResult.has_results_before?(name, date) ? Kalibro::ProjectResult.last_result_before(name, date) :
41 41 Kalibro::ProjectResult.first_result_after(name, date)
42 42 rescue Exception => error
43 43 errors.add_to_base(error.message)
... ... @@ -46,11 +46,11 @@ Kalibro::ProjectResult.first_result_after(name, date)
46 46  
47 47 def module_result(module_name)
48 48 module_name = project.name if module_name.nil?
49   - @module_client ||= module_result_client.module_result(project.name, module_name, project_result.date)
  49 + @module_client ||= Kalibro::ModuleResult.find_by_project_name_and_module_name_and_date(project.name, module_name, @project_result.date)
50 50 end
51 51  
52 52 def result_history(module_name)
53   - @result_history ||= module_result_client.result_history(project.name, module_name)
  53 + @result_history ||= Kalibro::ModuleResult.all_by_project_name_and_module_name(project.name, module_name)
54 54 end
55 55  
56 56 after_save :send_project_to_service
... ... @@ -78,7 +78,7 @@ Kalibro::ProjectResult.first_result_after(name, date)
78 78  
79 79 def send_project_to_service
80 80 begin
81   - Kalibro::Project.create(self).save
  81 + Kalibro::Project.create(self)
82 82 Kalibro::Kalibro.process_project(name, periodicity_in_days)
83 83 rescue Exception => error
84 84 errors.add_to_base(error.message)
... ... @@ -94,11 +94,4 @@ Kalibro::ProjectResult.first_result_after(name, date)
94 94 end
95 95 end
96 96  
97   - def module_result_client
98   - begin
99   - @module_result_client ||= Kalibro::Client::ModuleResultClient.new
100   - rescue Exception => error
101   - errors.add_to_base(error.message)
102   - end
103   - end
104 97 end
... ...
plugins/mezuro/test/functional/mezuro_plugin_profile_controller_test.rb
... ... @@ -13,167 +13,123 @@ class MezuroPluginProfileControllerTest < ActionController::TestCase
13 13 @response = ActionController::TestResponse.new
14 14 @profile = fast_create(Community)
15 15  
16   - @project_result = ProjectResultFixtures.qt_calculator
17   - @module_result = ModuleResultFixtures.create
  16 + @project_result = ProjectResultFixtures.project_result
  17 + @module_result = ModuleResultFixtures.module_result
18 18 @repository_url = RepositoryFixtures.repository.address
19 19 @project = @project_result.project
20   - @name = @project.name
21   -
22 20 @date = "2012-04-13T20:39:41+04:00"
23   -
  21 +
  22 + Kalibro::Project.expects(:all_names).returns([])
  23 + @content = MezuroPlugin::ProjectContent.new(:profile => @profile, :name => @project.name, :repository_url => @repository_url)
  24 + @content.expects(:send_project_to_service).returns(nil)
  25 + @content.save
24 26 end
25 27  
26   - should 'not find project state for inexistent project content' do
27   - get :project_state, :profile => '', :id => -1
28   - assert_response 404
29   - end
30   -
31   - should 'get project state' do
32   - create_project_content
33   - Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
  28 + should 'test project state without error' do
  29 + Kalibro::Project.expects(:request).with("Project", :get_project, :project_name => @project.name).returns({:project => @project.to_hash})
34 30 get :project_state, :profile => @profile.identifier, :id => @content.id
35 31 assert_response 200
  32 + assert_equal @content, assigns(:content)
36 33 end
37 34  
38   - should 'get error state if project has error' do
39   - create_project_content
40   - Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
41   - @project.expects(:error).returns(ErrorFixtures.create)
  35 + should 'test project state with error' do
  36 + Kalibro::Project.expects(:request).with("Project", :get_project, :project_name => @project.name).returns({:project => @project.to_hash.merge({:error => ErrorFixtures.error_hash})})
42 37 get :project_state, :profile => @profile.identifier, :id => @content.id
43 38 assert_response 200
  39 + assert_equal "ERROR", @response.body
  40 + assert_equal @content, assigns(:content)
44 41 end
45 42  
46   - should 'not find content in project error for inexistent project content' do
47   - get :project_error, :profile => '', :id => -1
48   - assert_response 404
49   - end
50   -
51   - should 'get project error' do
52   - create_project_content
53   - Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
54   - @project.expects(:error).returns(ErrorFixtures.create)
  43 + should 'test project error' do
  44 + Kalibro::Project.expects(:request).with("Project", :get_project, :project_name => @project.name).returns({:project => @project.to_hash.merge({:error => ErrorFixtures.error_hash})})
55 45 get :project_error, :profile => @profile.identifier, :id => @content.id
56 46 assert_response 200
57 47 assert_select('h3', 'ERROR')
  48 + assert_equal @content, assigns(:content)
  49 + assert_equal @project.name, assigns(:project).name
58 50 end
59 51  
60   - should 'not find project result for inexistent project content' do
61   - get :project_result, :profile => '', :id => -1
62   - assert_response 404
63   - end
64   -
65   - should 'get project results without date' do
66   - create_project_content
67   - Kalibro::Client::ProjectResultClient.expects(:last_result).with(@name).returns(@project_result)
68   - get :project_result, :profile => @profile.identifier, :id => @content.id
  52 + should 'test project result without date' do
  53 + Kalibro::ProjectResult.expects(:request).with("ProjectResult", :get_last_result_of, {:project_name => @project.name}).returns({:project_result => @project_result.to_hash})
  54 + get :project_result, :profile => @profile.identifier, :id => @content.id, :date => nil
  55 + assert_equal @content, assigns(:content)
  56 + assert_equal @project_result.project.name, assigns(:project_result).project.name
69 57 assert_response 200
70 58 assert_select('h4', 'Last Result')
71 59 end
72 60  
73   - should 'get project results from a specific date' do
74   - create_project_content
75   - mock_project_result
76   - get :project_result, :profile => @profile.identifier, :id => @content.id, :date => @project_result.date
  61 + should 'test project results from a specific date' do
  62 + request_body = {:project_name => @project.name, :date => @date}
  63 + Kalibro::ProjectResult.expects(:request).with("ProjectResult", :has_results_before, request_body).returns({:has_results => true})
  64 + Kalibro::ProjectResult.expects(:request).with("ProjectResult", :get_last_result_before, request_body).returns({:project_result => @project_result.to_hash})
  65 + get :project_result, :profile => @profile.identifier, :id => @content.id, :date => @date
  66 + assert_equal @content, assigns(:content)
  67 + assert_equal @project_result.project.name, assigns(:project_result).project.name
77 68 assert_response 200
  69 + assert_select('h4', 'Last Result')
78 70 end
79 71  
80   - should 'not find module result for inexistent project content' do
81   - get :module_result, :profile => '', :id => -1, :module_name => ''
82   - assert_response 404
83   - end
84 72  
85 73 should 'get module result without date' do
86   - create_project_content
87   - mock_module_result
88   - Kalibro::Client::ProjectResultClient.expects(:last_result).with(@name).returns(@project_result)
89   - Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
90   - get :module_result, :profile => @profile.identifier, :id => @content.id, :module_name => @name
  74 + date_with_milliseconds = Kalibro::ProjectResult.date_with_milliseconds(@project_result.date)
  75 + Kalibro::ProjectResult.expects(:request).with("ProjectResult", :get_last_result_of, {:project_name => @project.name}).returns({:project_result => @project_result.to_hash})
  76 + 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})
  77 + get :module_result, :profile => @profile.identifier, :id => @content.id, :module_name => @name, :date => nil
  78 + assert_equal @content, assigns(:content)
  79 + assert_equal @module_result.grade, assigns(:module_result).grade
91 80 assert_response 200
92 81 assert_select('h5', 'Metric results for: Qt-Calculator (APPLICATION)')
93 82 end
94 83  
95   - should 'get module result from a specific date' do
96   - create_project_content
97   - Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
98   - mock_module_result
99   - mock_project_result
100   - get :module_result, :profile => @profile.identifier, :id => @content.id, :date => @project_result.date, :module_name => @name
101   - assert_response 200
102   - assert_select('h5', 'Metric results for: Qt-Calculator (APPLICATION)')
103   - end
104   -
105   - should 'not find project tree for inexistent project content' do
106   - get :project_tree, :profile => '', :id => -1, :module_name => ''
107   - assert_response 404
  84 + should 'get module result with a specific date' do
  85 + date_with_milliseconds = Kalibro::ProjectResult.date_with_milliseconds(@project_result.date)
  86 + request_body = {:project_name => @project.name, :date => @project_result.date}
  87 + Kalibro::ProjectResult.expects(:request).with("ProjectResult", :has_results_before, request_body).returns({:has_results => true})
  88 + Kalibro::ProjectResult.expects(:request).with("ProjectResult", :get_last_result_before, request_body).returns({:project_result => @project_result.to_hash})
  89 + 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})
  90 + get :module_result, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name, :date => @project_result.date
  91 + assert_equal @content, assigns(:content)
  92 + assert_equal @module_result.grade, assigns(:module_result).grade
  93 + assert_response 200
  94 + assert_select('h5', 'Metric results for: Qt-Calculator (APPLICATION)')
108 95 end
109 96  
110   - should 'get project tree without date' do
111   - create_project_content
112   - Kalibro::Client::ProjectResultClient.expects(:last_result).with(@name).returns(@project_result)
113   - Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
114   - get :project_tree, :profile => @profile.identifier, :id => @content.id, :module_name => @name
  97 + should 'test project tree without date' do
  98 + Kalibro::ProjectResult.expects(:request).with("ProjectResult", :get_last_result_of, {:project_name => @project.name}).returns({:project_result => @project_result.to_hash})
  99 + get :project_tree, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name, :date => nil
  100 + assert_equal @content, assigns(:content)
  101 + assert_equal @project.name, assigns(:project_name)
  102 + assert_equal @project_result.source_tree.module.name, assigns(:source_tree).module.name
115 103 assert_response 200
116 104 assert_select('h2', /Qt-Calculator/)
117 105 end
118 106  
119   - should 'get project tree from a specific date' do
120   - create_project_content
121   - mock_project_result
122   - Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
123   - get :project_tree, :profile => @profile.identifier, :id => @content.id, :module_name => @name, :date => "2012-04-13T20:39:41+04:00"
  107 + should 'test project tree with a specific date' do
  108 + request_body = {:project_name => @project.name, :date => @project_result.date}
  109 + Kalibro::ProjectResult.expects(:request).with("ProjectResult", :has_results_before, request_body).returns({:has_results => true})
  110 + Kalibro::ProjectResult.expects(:request).with("ProjectResult", :get_last_result_before, request_body).returns({:project_result => @project_result.to_hash})
  111 + get :project_tree, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name, :date => @project_result.date
  112 + assert_equal @content, assigns(:content)
  113 + assert_equal @project.name, assigns(:project_name)
  114 + assert_equal @project_result.source_tree.module.name, assigns(:source_tree).module.name
124 115 assert_response 200
125 116 end
126 117  
127   - should 'get grade history' do
128   - create_project_content
129   - mock_module_result_history
130   - Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
131   - get :module_grade_history, :profile => @profile.identifier, :id => @content.id, :module_name => @name
132   - assert_response 200
133   - end
134   -
135   - should 'not find metrics history for inexistent project content' do
136   - get :module_metrics_history, :profile => '', :id => -1, :module_name => ''
137   - assert_response 404
138   - end
139   - #copied from 'get grade history' test
140   - should 'get metrics history' do
141   - create_project_content
142   - mock_module_result_history
143   - Kalibro::Client::ProjectClient.expects(:project).with(@name).returns(@project)
144   - get :module_metrics_history, :profile => @profile.identifier, :id => @content.id, :module_name => @name,
  118 + should 'test module metrics history' do
  119 + Kalibro::ModuleResult.expects(:request).with("ModuleResult", :get_result_history, {:project_name => @project.name, :module_name => @project.name}).returns({:module_result => @module_result})
  120 + get :module_metrics_history, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name,
145 121 :metric_name => @module_result.metric_result.first.metric.name.delete("() ")
  122 + assert_equal @content, assigns(:content)
  123 + assert_equal [@module_result.metric_result[0].value], assigns(:score_history)
146 124 assert_response 200
147 125 end
148   -
149   - private
150   -
151   - def create_project_content
152   - client = mock
153   - @content = MezuroPlugin::ProjectContent.new(:profile => @profile, :name => @name)
154   - @content.expects(:send_project_to_service).returns(nil)
155   - Kalibro::Client::ProjectClient.expects(:new).returns(client)
156   - @content.repository_url = @repository_url
157   - client.expects(:project_names).returns([])
158   - @content.save
159   - end
160 126  
161   - def mock_project_result
162   - project_result_client = mock
163   - Kalibro::Client::ProjectResultClient.expects(:new).returns(project_result_client)
164   - project_result_client.expects(:has_results_before).returns(true)
165   - project_result_client.expects(:last_result_before).returns(@project_result)
166   - end
167   -
168   - def mock_module_result
169   - module_result_client = mock
170   - Kalibro::Client::ModuleResultClient.expects(:new).returns(module_result_client)
171   - module_result_client.expects(:module_result).with(@name, @name, @project_result.date).returns(@module_result)
  127 + should 'test grade history' do
  128 + Kalibro::ModuleResult.expects(:request).with("ModuleResult", :get_result_history, {:project_name => @project.name, :module_name => @project.name}).returns({:module_result => @module_result})
  129 + get :module_grade_history, :profile => @profile.identifier, :id => @content.id, :module_name => @project.name
  130 + assert_equal @content, assigns(:content)
  131 + assert_equal [@module_result.grade], assigns(:score_history)
  132 + assert_response 200
172 133 end
173 134  
174   - def mock_module_result_history
175   - module_result_client = mock
176   - module_result_client.expects(:result_history).with(@name, @name).returns([@module_result])
177   - Kalibro::Client::ModuleResultClient.expects(:new).returns(module_result_client)
178   - end
179 135 end
... ...