kalibro_client 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.rspec +2 -0
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +27 -0
  7. data/AUTHORS +4 -0
  8. data/COPYING +674 -0
  9. data/COPYING.LESSER +165 -0
  10. data/Gemfile +4 -0
  11. data/README.md +77 -0
  12. data/Rakefile +6 -0
  13. data/cucumber.yml +1 -0
  14. data/features/kalibro_configuration/all.feature +10 -0
  15. data/features/kalibro_configuration/creation.feature +9 -0
  16. data/features/kalibro_configuration/destroy.feature +10 -0
  17. data/features/kalibro_configuration/metric_configurations.feature +12 -0
  18. data/features/metric_collector_details/all_names.feature +8 -0
  19. data/features/metric_collector_details/find_by_name.feature +12 -0
  20. data/features/metric_configuration/creation.feature +11 -0
  21. data/features/metric_configuration/destroy.feature +12 -0
  22. data/features/metric_configuration/find.feature +18 -0
  23. data/features/metric_configuration/metric_configurations_of.feature +18 -0
  24. data/features/metric_result/descendant_values.feature +19 -0
  25. data/features/metric_result/history_of.feature +20 -0
  26. data/features/metric_result/metric_results_of.feature +20 -0
  27. data/features/module_result/children.feature +19 -0
  28. data/features/module_result/find.feature +22 -0
  29. data/features/module_result/history_of.feature +19 -0
  30. data/features/processing/first_processing_after.feature +18 -0
  31. data/features/processing/first_processing_of.feature +18 -0
  32. data/features/processing/has_processing.feature +18 -0
  33. data/features/processing/has_processing_after.feature +18 -0
  34. data/features/processing/has_processing_before.feature +18 -0
  35. data/features/processing/has_ready_processing.feature +18 -0
  36. data/features/processing/last_processing_before.feature +18 -0
  37. data/features/processing/last_processing_of.feature +18 -0
  38. data/features/processing/last_processing_state_of.feature +18 -0
  39. data/features/processing/last_ready_processing_of.feature +19 -0
  40. data/features/processing/processing_of.feature +32 -0
  41. data/features/processing/processing_with_date_of.feature +32 -0
  42. data/features/project/all.feature +10 -0
  43. data/features/project/creation.feature +9 -0
  44. data/features/project/destroy.feature +10 -0
  45. data/features/project/exists.feature +9 -0
  46. data/features/project/find.feature +10 -0
  47. data/features/range/destroy.feature +14 -0
  48. data/features/range/exists.feature +13 -0
  49. data/features/range/find.feature +14 -0
  50. data/features/range/ranges_of.feature +22 -0
  51. data/features/range/save.feature +14 -0
  52. data/features/reading/destroy.feature +13 -0
  53. data/features/reading/exists.feature +13 -0
  54. data/features/reading/find.feature +11 -0
  55. data/features/reading/readings_of.feature +11 -0
  56. data/features/reading_group/all.feature +10 -0
  57. data/features/reading_group/creation.feature +9 -0
  58. data/features/reading_group/destroy.feature +11 -0
  59. data/features/repository/all.feature +14 -0
  60. data/features/repository/cancel_processing.feature +14 -0
  61. data/features/repository/destroy.feature +14 -0
  62. data/features/repository/exists.feature +14 -0
  63. data/features/repository/find.feature +14 -0
  64. data/features/repository/of.feature +15 -0
  65. data/features/repository/process.feature +16 -0
  66. data/features/repository/types.feature +8 -0
  67. data/features/step_definitions/configuration_steps.rb +40 -0
  68. data/features/step_definitions/metric_collector_details_steps.rb +28 -0
  69. data/features/step_definitions/metric_configuration_steps.rb +61 -0
  70. data/features/step_definitions/metric_result_steps.rb +33 -0
  71. data/features/step_definitions/metric_steps.rb +3 -0
  72. data/features/step_definitions/module_result_steps.rb +46 -0
  73. data/features/step_definitions/processing_steps.rb +95 -0
  74. data/features/step_definitions/project_steps.rb +48 -0
  75. data/features/step_definitions/range_steps.rb +72 -0
  76. data/features/step_definitions/reading_group_steps.rb +36 -0
  77. data/features/step_definitions/reading_steps.rb +47 -0
  78. data/features/step_definitions/repository_steps.rb +71 -0
  79. data/features/support/env.rb +25 -0
  80. data/features/support/kalibro_cucumber_helpers.yml.sample +3 -0
  81. data/kalibro_client.gemspec +49 -0
  82. data/lib/kalibro_client.rb +62 -0
  83. data/lib/kalibro_client/entities.rb +40 -0
  84. data/lib/kalibro_client/entities/base.rb +196 -0
  85. data/lib/kalibro_client/entities/configurations/base.rb +13 -0
  86. data/lib/kalibro_client/entities/configurations/kalibro_configuration.rb +37 -0
  87. data/lib/kalibro_client/entities/configurations/kalibro_range.rb +77 -0
  88. data/lib/kalibro_client/entities/configurations/metric_configuration.rb +93 -0
  89. data/lib/kalibro_client/entities/configurations/range_snapshot.rb +37 -0
  90. data/lib/kalibro_client/entities/configurations/reading.rb +56 -0
  91. data/lib/kalibro_client/entities/configurations/reading_group.rb +34 -0
  92. data/lib/kalibro_client/entities/miscellaneous/base.rb +57 -0
  93. data/lib/kalibro_client/entities/miscellaneous/compound_metric.rb +21 -0
  94. data/lib/kalibro_client/entities/miscellaneous/date_metric_result.rb +14 -0
  95. data/lib/kalibro_client/entities/miscellaneous/date_module_result.rb +18 -0
  96. data/lib/kalibro_client/entities/miscellaneous/granularity.rb +54 -0
  97. data/lib/kalibro_client/entities/miscellaneous/metric.rb +19 -0
  98. data/lib/kalibro_client/entities/miscellaneous/native_metric.rb +24 -0
  99. data/lib/kalibro_client/entities/processor/base.rb +16 -0
  100. data/lib/kalibro_client/entities/processor/kalibro_module.rb +27 -0
  101. data/lib/kalibro_client/entities/processor/metric_collector_details.rb +53 -0
  102. data/lib/kalibro_client/entities/processor/metric_result.rb +79 -0
  103. data/lib/kalibro_client/entities/processor/module_result.rb +82 -0
  104. data/lib/kalibro_client/entities/processor/process_time.rb +31 -0
  105. data/lib/kalibro_client/entities/processor/processing.rb +109 -0
  106. data/lib/kalibro_client/entities/processor/project.rb +34 -0
  107. data/lib/kalibro_client/entities/processor/repository.rb +75 -0
  108. data/lib/kalibro_client/errors.rb +18 -0
  109. data/lib/kalibro_client/errors/record_not_found.rb +22 -0
  110. data/lib/kalibro_client/errors/standard.rb +24 -0
  111. data/lib/kalibro_client/helpers/aggregation_options.rb +25 -0
  112. data/lib/kalibro_client/helpers/hash_converters.rb +48 -0
  113. data/lib/kalibro_client/helpers/request_methods.rb +55 -0
  114. data/lib/kalibro_client/helpers/xml_converters.rb +20 -0
  115. data/lib/kalibro_client/kalibro_cucumber_helpers.rb +60 -0
  116. data/lib/kalibro_client/kalibro_cucumber_helpers/configuration.rb +30 -0
  117. data/lib/kalibro_client/kalibro_cucumber_helpers/hooks.rb +25 -0
  118. data/lib/kalibro_client/version.rb +19 -0
  119. data/lib/rake/test_task.rb +57 -0
  120. data/spec/entities/base_spec.rb +313 -0
  121. data/spec/entities/configurations/base_spec.rb +26 -0
  122. data/spec/entities/configurations/kalibro_configuration_spec.rb +91 -0
  123. data/spec/entities/configurations/kalibro_range_spec.rb +174 -0
  124. data/spec/entities/configurations/metric_configuration_spec.rb +230 -0
  125. data/spec/entities/configurations/range_snapshot_spec.rb +50 -0
  126. data/spec/entities/configurations/reading_group_spec.rb +60 -0
  127. data/spec/entities/configurations/reading_spec.rb +87 -0
  128. data/spec/entities/miscellaneous/base_spec.rb +49 -0
  129. data/spec/entities/miscellaneous/compound_metric_spec.rb +36 -0
  130. data/spec/entities/miscellaneous/date_metric_result_spec.rb +4 -0
  131. data/spec/entities/miscellaneous/date_module_result_spec.rb +0 -0
  132. data/spec/entities/miscellaneous/granularity_spec.rb +96 -0
  133. data/spec/entities/miscellaneous/metric_spec.rb +15 -0
  134. data/spec/entities/miscellaneous/native_metric_spec.rb +37 -0
  135. data/spec/entities/processor/base_spec.rb +26 -0
  136. data/spec/entities/processor/metric_collector_details_spec.rb +146 -0
  137. data/spec/entities/processor/metric_result_spec.rb +209 -0
  138. data/spec/entities/processor/module_result_spec.rb +178 -0
  139. data/spec/entities/processor/process_time_spec.rb +33 -0
  140. data/spec/entities/processor/processing_spec.rb +333 -0
  141. data/spec/entities/processor/project_spec.rb +68 -0
  142. data/spec/entities/processor/repository_spec.rb +140 -0
  143. data/spec/factories/date_metric_results.rb +30 -0
  144. data/spec/factories/date_module_results.rb +24 -0
  145. data/spec/factories/granularities.rb +23 -0
  146. data/spec/factories/kalibro_configurations.rb +34 -0
  147. data/spec/factories/kalibro_module.rb +28 -0
  148. data/spec/factories/kalibro_ranges.rb +40 -0
  149. data/spec/factories/metric_collector_details.rb +30 -0
  150. data/spec/factories/metric_configurations.rb +31 -0
  151. data/spec/factories/metric_results.rb +24 -0
  152. data/spec/factories/metrics.rb +48 -0
  153. data/spec/factories/models.rb +23 -0
  154. data/spec/factories/module_results.rb +43 -0
  155. data/spec/factories/process_times.rb +27 -0
  156. data/spec/factories/processings.rb +24 -0
  157. data/spec/factories/projects.rb +35 -0
  158. data/spec/factories/ranges_snapshot.rb +26 -0
  159. data/spec/factories/reading_groups.rb +28 -0
  160. data/spec/factories/readings.rb +30 -0
  161. data/spec/factories/repositories.rb +39 -0
  162. data/spec/helpers/aggregation_options_spec.rb +31 -0
  163. data/spec/helpers/hash_converters_spec.rb +111 -0
  164. data/spec/helpers/xml_converters_spec.rb +64 -0
  165. data/spec/kalibro_entities_spec.rb +112 -0
  166. data/spec/savon/fixtures/config.yml +2 -0
  167. data/spec/savon/fixtures/invalid_config.yml +2 -0
  168. data/spec/savon/fixtures/project/does_not_exists.xml +1 -0
  169. data/spec/savon/savon_test_helper.rb +14 -0
  170. data/spec/spec_helper.rb +111 -0
  171. metadata +479 -0
@@ -0,0 +1,26 @@
1
+ # This file is part of KalibroClient
2
+ # Copyright (C) 2013 it's respectives authors (please see the AUTHORS file)
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ require 'spec_helper'
18
+
19
+ describe KalibroClient::Entities::Processor::Base do
20
+
21
+ describe 'client' do
22
+ it 'returns a Faraday::Connection' do
23
+ expect(KalibroClient::Entities::Processor::Base.client).to be_a(Faraday::Connection)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,146 @@
1
+ # This file is part of KalibroClient
2
+ # Copyright (C) 2013 it's respectives authors (please see the AUTHORS file)
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ require 'spec_helper'
18
+
19
+ describe KalibroClient::Entities::Processor::MetricCollectorDetails do
20
+ describe 'all_names' do
21
+ context 'with no metric collector details' do
22
+ before :each do
23
+ KalibroClient::Entities::Processor::MetricCollectorDetails.
24
+ expects(:request).
25
+ with(:names, {}, :get).
26
+ returns({'names' => nil}.to_json)
27
+ end
28
+
29
+ it 'should return empty array' do
30
+ expect(KalibroClient::Entities::Processor::MetricCollectorDetails.all_names).to be_empty
31
+ end
32
+ end
33
+
34
+ context 'with many metric collector details' do
35
+ let(:metric_collector_details_hash) { FactoryGirl.build(:metric_collector_details).to_hash }
36
+ let(:another_metric_collector_details_hash) { FactoryGirl.build(:another_metric_collector_details).to_hash }
37
+
38
+ before :each do
39
+ KalibroClient::Entities::Processor::MetricCollectorDetails.
40
+ expects(:request).
41
+ with(:names, {}, :get).
42
+ returns({'metric_collector_names' => [metric_collector_details_hash[:name], another_metric_collector_details_hash[:name]]})
43
+ end
44
+
45
+ it 'should return the two elements' do
46
+ names = KalibroClient::Entities::Processor::MetricCollectorDetails.all_names
47
+
48
+ expect(names.size).to eq(2)
49
+ expect(names.first).to eq(metric_collector_details_hash[:name])
50
+ expect(names.last).to eq(another_metric_collector_details_hash[:name])
51
+ end
52
+ end
53
+ end
54
+
55
+ describe 'all' do
56
+ context 'with no metric collector details' do
57
+ before :each do
58
+ KalibroClient::Entities::Processor::MetricCollectorDetails.
59
+ expects(:request).
60
+ with('', {}, :get).
61
+ returns({"metric_collector_details" => nil})
62
+ end
63
+
64
+ it 'should return empty array' do
65
+ expect(KalibroClient::Entities::Processor::MetricCollectorDetails.all).to be_empty
66
+ end
67
+ end
68
+
69
+ context 'with many metric collector details' do
70
+ let!(:metric_collector_details_hash) { FactoryGirl.attributes_for(:metric_collector_details) }
71
+ let!(:another_metric_collector_details_hash) { FactoryGirl.attributes_for(:another_metric_collector_details) }
72
+
73
+ before :each do
74
+ KalibroClient::Entities::Processor::MetricCollectorDetails.
75
+ expects(:request).
76
+ with('', {}, :get).
77
+ returns({"metric_collector_details" => [metric_collector_details_hash, another_metric_collector_details_hash]})
78
+ end
79
+
80
+ it 'should return the two elements' do
81
+ metric_collector_details = KalibroClient::Entities::Processor::MetricCollectorDetails.all
82
+
83
+ expect(metric_collector_details.size).to eq(2)
84
+ expect(metric_collector_details.first.name).to eq(metric_collector_details_hash[:name])
85
+ expect(metric_collector_details.last.name).to eq(another_metric_collector_details_hash[:name])
86
+ end
87
+ end
88
+ end
89
+
90
+ describe 'find_by_name' do
91
+ subject { FactoryGirl.build(:metric_collector_details) }
92
+
93
+ context 'with an inexistent name' do
94
+ before :each do
95
+ KalibroClient::Entities::Processor::MetricCollectorDetails.
96
+ expects(:request).
97
+ with(:find, {name: subject.name}).
98
+ returns(nil)
99
+ end
100
+
101
+ it 'should raise a RecordNotFound error' do
102
+ expect { KalibroClient::Entities::Processor::MetricCollectorDetails.find_by_name(subject.name)}.
103
+ to raise_error(KalibroClient::Errors::RecordNotFound)
104
+ end
105
+ end
106
+
107
+ context 'with an existent name' do
108
+ before :each do
109
+ KalibroClient::Entities::Processor::MetricCollectorDetails.
110
+ expects(:request).
111
+ with(:find,{name: subject.name}).
112
+ returns({"metric_collector_details" => subject.to_hash({except: ["supported_metrics"]})})
113
+ end
114
+
115
+ it 'should return a metric_collector_details' do
116
+ expect(KalibroClient::Entities::Processor::MetricCollectorDetails.find_by_name(subject.name).name).to eq(subject.name)
117
+ end
118
+ end
119
+ end
120
+
121
+ describe 'Supported Metrics' do
122
+ let(:code_and_metric) { { "total_abstract_classes" => FactoryGirl.build(:metric) } }
123
+ #FIXME: Mocha is creating the expectations with strings, but FactoryGirl returns everything with sybols and integers
124
+ let(:code_and_metric_parameter) { { "total_abstract_classes" => Hash[FactoryGirl.attributes_for(:metric)] } }
125
+
126
+ context 'supported_metrics acessors' do
127
+ it 'should set the value of the array of supported metrics' do
128
+ subject.supported_metrics = code_and_metric_parameter
129
+ expect(subject.supported_metrics["total_abstract_classes"].to_hash).to eql(code_and_metric["total_abstract_classes"].to_hash)
130
+ end
131
+ end
132
+ end
133
+
134
+ describe 'metric' do
135
+ subject { FactoryGirl.build(:metric_collector_details) }
136
+ let(:metric) { subject.supported_metrics["loc"] }
137
+
138
+ it 'should return nil with an inexistent name' do
139
+ expect(subject.metric("fake name")).to be_nil
140
+ end
141
+
142
+ it 'should return a metric with an existent name' do
143
+ expect(subject.metric(metric.name).name).to eq(metric.name)
144
+ end
145
+ end
146
+ end
@@ -0,0 +1,209 @@
1
+ # This file is part of KalibroClient
2
+ # Copyright (C) 2013 it's respectives authors (please see the AUTHORS file)
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ require 'spec_helper'
18
+
19
+ describe KalibroClient::Entities::Processor::MetricResult do
20
+ let(:metric_configuration) { FactoryGirl.build(:metric_configuration_with_id) }
21
+ subject { FactoryGirl.build(:metric_result, metric_configuration_id: metric_configuration.id) }
22
+
23
+ describe 'new' do
24
+ context 'with value NaN' do
25
+ it 'should set the value with aggregated_value' do
26
+ attributes_hash = FactoryGirl.build(:metric_result, {"aggregated_value" => 1.6}).to_hash
27
+ attributes_hash["value"] = "NaN"
28
+ metric_result = KalibroClient::Entities::Processor::MetricResult.new(attributes_hash)
29
+ expect(metric_result.value).to eq(1.6)
30
+ end
31
+ end
32
+ end
33
+
34
+ describe 'id=' do
35
+ it 'should set the value of the attribute id' do
36
+ subject.id = 42
37
+ expect(subject.id).to eq(42)
38
+ end
39
+ end
40
+
41
+ describe 'metric_configuration=' do
42
+ it 'should set the metric configuration' do
43
+ subject.metric_configuration = metric_configuration
44
+ expect(subject.metric_configuration.weight).to eq(metric_configuration.weight)
45
+ expect(subject.metric_configuration.aggregation_form).to eq(metric_configuration.aggregation_form)
46
+ expect(subject.metric_configuration.reading_group_id).to eq(metric_configuration.reading_group_id)
47
+ expect(subject.metric_configuration.kalibro_configuration_id).to eq(metric_configuration.kalibro_configuration_id)
48
+ expect(subject.metric_configuration_id).to eq(metric_configuration.id)
49
+ end
50
+ end
51
+
52
+ describe 'metric_configuration' do
53
+
54
+ context 'without a set metric configuration' do
55
+ it 'should fetch and return the metric configuration' do
56
+ KalibroClient::Entities::Configurations::MetricConfiguration.expects(:find).with(metric_configuration.id).returns(metric_configuration)
57
+ expect(subject.metric_configuration).to eq(metric_configuration)
58
+ end
59
+ end
60
+
61
+ context 'with a set metric configuration' do
62
+ before :each do
63
+ subject.metric_configuration = metric_configuration
64
+ end
65
+
66
+ it 'should only return the metric configuration' do
67
+ expect(subject.metric_configuration).to eq(metric_configuration)
68
+ end
69
+
70
+ it 'should set the metric configuration id' do
71
+ expect(subject.metric_configuration_id).to eq(metric_configuration.id)
72
+ end
73
+ end
74
+ end
75
+
76
+ describe 'value=' do
77
+ it 'should set the value of the attribute value' do
78
+ subject.value = 42
79
+ expect(subject.value).to eq(42)
80
+ end
81
+ end
82
+
83
+ describe 'aggregated_value=' do
84
+ it 'should set the value of the attribute aggregated_value' do
85
+ subject.aggregated_value = 42
86
+ expect(subject.aggregated_value).to eq(42)
87
+ end
88
+ end
89
+
90
+ describe 'descendant_values' do
91
+ context 'when there is one descendant value for the given metric_result' do
92
+ before :each do
93
+ KalibroClient::Entities::Processor::MetricResult.
94
+ expects(:request).
95
+ with(':id/descendant_values', { id: subject.id }, :get).
96
+ returns({'descendant_values' => [13.3]})
97
+ end
98
+
99
+ it 'should return an unitary list with the descendant value' do
100
+ expect(subject.descendant_values).to eq([13.3])
101
+ end
102
+ end
103
+
104
+ context 'when there is no descendant value for the given metric_result' do
105
+ before :each do
106
+ KalibroClient::Entities::Processor::MetricResult.
107
+ expects(:request).
108
+ with(':id/descendant_values', { id: subject.id }, :get).
109
+ returns({'descendant_values' => []})
110
+ end
111
+
112
+ it 'should return an empty list' do
113
+ expect(subject.descendant_values).to eq([])
114
+ end
115
+ end
116
+ end
117
+
118
+ describe 'metric_results_of' do
119
+ context 'when there is one metric result for the given module_result' do
120
+ before :each do
121
+ KalibroClient::Entities::Processor::ModuleResult.
122
+ expects(:request).
123
+ with(':id/metric_results', { id: 123 }, :get).
124
+ returns({'metric_results' => [subject.to_hash]})
125
+ end
126
+
127
+ it 'should return an unitary list with the metric result' do
128
+ expect(KalibroClient::Entities::Processor::MetricResult.metric_results_of(123).first.value).to eq(subject.value)
129
+ end
130
+ end
131
+
132
+ context 'when there is no metric result for the given module_result' do
133
+ before :each do
134
+ KalibroClient::Entities::Processor::ModuleResult.
135
+ expects(:request).
136
+ with(':id/metric_results', { :id => 42 }, :get).
137
+ returns({'metric_results' => []})
138
+ end
139
+
140
+ it 'should return an empty list' do
141
+ expect(KalibroClient::Entities::Processor::MetricResult.metric_results_of(42)).to eq([])
142
+ end
143
+ end
144
+
145
+ context 'when there are many metric results for the given module_result' do
146
+ before :each do
147
+ KalibroClient::Entities::Processor::ModuleResult.
148
+ expects(:request).
149
+ with(':id/metric_results', { :id => 28 }, :get).
150
+ returns({'metric_results' => [subject.to_hash, subject.to_hash]})
151
+ end
152
+
153
+ it 'should return a list with the descendant results' do
154
+ expect(KalibroClient::Entities::Processor::MetricResult.metric_results_of(28).first.value).to eq(subject.value)
155
+ end
156
+ end
157
+ end
158
+
159
+ describe 'history_of' do
160
+ let(:kalibro_module) { FactoryGirl.build(:kalibro_module_with_id) }
161
+ let(:metric) { FactoryGirl.build(:metric) }
162
+ let(:repository) { FactoryGirl.build(:repository_with_id) }
163
+
164
+ context 'when there is not a date metric result' do
165
+ before :each do
166
+ KalibroClient::Entities::Processor::Repository.
167
+ expects(:request).
168
+ with(':id/metric_result_history_of', {:metric_name => metric.name, :kalibro_module_id => kalibro_module.id, id: repository.id}).
169
+ returns({'metric_result_history_of' => []})
170
+ end
171
+
172
+ it 'should return an empty list' do
173
+ expect(KalibroClient::Entities::Processor::MetricResult.history_of(metric.name, kalibro_module.id, repository.id)).to eq([])
174
+ end
175
+ end
176
+
177
+ context 'when there is only one date metric result' do
178
+ let!(:date_metric_result) { FactoryGirl.build(:date_metric_result, metric_result: subject.to_hash) }
179
+
180
+ before :each do
181
+ KalibroClient::Entities::Processor::Repository.
182
+ expects(:request).with(':id/metric_result_history_of', {:metric_name => metric.name, :kalibro_module_id => kalibro_module.id, id: repository.id})
183
+ .returns({'metric_result_history_of' => [date_metric_result.to_hash]})
184
+ end
185
+
186
+ it 'should return the date metric result as an object into a list' do
187
+ expect(KalibroClient::Entities::Processor::MetricResult.history_of(metric.name, kalibro_module.id, repository.id).first.metric_result.id).to eq(subject.id)
188
+ end
189
+ end
190
+
191
+ context 'when there are many date metric results' do
192
+ let(:date_metric_result) { FactoryGirl.build(:date_metric_result, {metric_result: subject.to_hash}) }
193
+ let(:another_date_metric_result) { FactoryGirl.build(:another_date_metric_result, {metric_result: subject.to_hash}) }
194
+
195
+ before :each do
196
+ KalibroClient::Entities::Processor::Repository.
197
+ expects(:request).
198
+ with(':id/metric_result_history_of', {:metric_name => metric.name, :kalibro_module_id => kalibro_module.id, id: repository.id}).
199
+ returns({'metric_result_history_of' => [date_metric_result.to_hash, another_date_metric_result.to_hash]})
200
+ end
201
+
202
+ it 'should return a list of date metric results as objects' do
203
+ response = KalibroClient::Entities::Processor::MetricResult.history_of(metric.name, kalibro_module.id, repository.id)
204
+ expect(response.first.metric_result.id).to eq(date_metric_result.metric_result.id)
205
+ expect(response.last.metric_result.id).to eq(another_date_metric_result.metric_result.id)
206
+ end
207
+ end
208
+ end
209
+ end
@@ -0,0 +1,178 @@
1
+ # This file is part of KalibroClient
2
+ # Copyright (C) 2013 it's respectives authors (please see the AUTHORS file)
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ require 'spec_helper'
18
+
19
+ describe KalibroClient::Entities::Processor::ModuleResult do
20
+ subject { FactoryGirl.build(:module_result, id: rand(Time.now.to_i)) }
21
+
22
+ describe 'find' do
23
+ context 'when there is a module result for the given id' do
24
+ before :each do
25
+ KalibroClient::Entities::Processor::ModuleResult.
26
+ expects(:request).
27
+ with(':id/exists', { id: subject.id }, :get).
28
+ returns("exists" => true)
29
+ KalibroClient::Entities::Processor::ModuleResult.
30
+ expects(:request).
31
+ with(':id', { id: subject.id }, :get).
32
+ returns("module_result" => subject.to_hash)
33
+ end
34
+
35
+ it 'should return a hash with module result' do
36
+ expect(KalibroClient::Entities::Processor::ModuleResult.
37
+ find(subject.id).id).to eq(subject.id)
38
+ end
39
+ end
40
+
41
+ context "when there isn't a module result for the given id" do
42
+ before :each do
43
+ KalibroClient::Entities::Processor::ModuleResult.
44
+ expects(:request).
45
+ with(':id/exists', { id: subject.id }, :get).
46
+ returns("exists" => false)
47
+ end
48
+
49
+ it 'should raise an error' do
50
+ expect {KalibroClient::Entities::Processor::ModuleResult.find(subject.id)}.
51
+ to raise_error KalibroClient::Errors::RecordNotFound
52
+ end
53
+ end
54
+ end
55
+
56
+ describe 'children' do
57
+ before :each do
58
+ KalibroClient::Entities::Processor::ModuleResult.
59
+ expects(:request).
60
+ with(':id/children', {id: subject.id}, :get).
61
+ returns({'module_results' => subject.to_hash})
62
+ end
63
+
64
+ it 'should return a list of objects' do
65
+ expect(subject.children).to eq [subject]
66
+ end
67
+ end
68
+
69
+ describe 'parents' do
70
+ let(:root_module_result) { FactoryGirl.build(:root_module_result) }
71
+
72
+ context 'when module result has a parent' do
73
+ before :each do
74
+ KalibroClient::Entities::Processor::ModuleResult.
75
+ expects(:request).
76
+ with(':id/exists', { id: subject.parent_id }, :get).
77
+ returns("exists" => true)
78
+ KalibroClient::Entities::Processor::ModuleResult.
79
+ expects(:request).at_least_once.
80
+ with(':id', { id: subject.parent_id }, :get).
81
+ returns("module_result" => root_module_result.to_hash)
82
+ end
83
+
84
+ it 'should return its parent' do
85
+ expect(subject.parents).to eq [root_module_result]
86
+ end
87
+ end
88
+
89
+ context 'when module result does not have a parent' do
90
+ it 'should return an empty list' do
91
+ expect(root_module_result.parents).to eq []
92
+ end
93
+ end
94
+ end
95
+
96
+ describe 'id=' do
97
+ it 'should set the id attribute as integer' do
98
+ subject.id = 23
99
+ expect(subject.id).to eq 23
100
+ end
101
+ end
102
+
103
+ describe 'kalibro_module' do
104
+ let(:kalibro_module) { FactoryGirl.build(:kalibro_module) }
105
+
106
+ before :each do
107
+ KalibroClient::Entities::Processor::ModuleResult.
108
+ expects(:request).once.
109
+ with(':id/kalibro_module', { id: subject.id }, :get).
110
+ returns("kalibro_module" => kalibro_module.to_hash)
111
+ end
112
+
113
+ it 'should return the kalibro_module' do
114
+ expect(subject.kalibro_module).to eq(kalibro_module)
115
+ end
116
+
117
+ it 'should not request the kalibro_module in cache' do
118
+ expect(subject.kalibro_module).to eq(kalibro_module)
119
+ end
120
+ end
121
+
122
+ describe 'grade=' do
123
+ it 'should set the grade attribute as float' do
124
+ subject.grade = 12.5
125
+ expect(subject.grade).to eq 12.5
126
+ end
127
+ end
128
+
129
+ describe 'parent_id=' do
130
+ it 'should set the parent_id attribute as integer' do
131
+ subject.parent_id = 73
132
+ expect(subject.parent_id).to eq 73
133
+ end
134
+ end
135
+
136
+ describe 'history_of' do
137
+ let(:date_module_result) { FactoryGirl.build(:date_module_result) }
138
+ before :each do
139
+ KalibroClient::Entities::Processor::ModuleResult.
140
+ expects(:request).
141
+ with('history_of', {id: subject.id}).
142
+ returns({'date_module_results' => [[date_module_result.date, date_module_result.module_result.to_hash]]})
143
+ end
144
+
145
+ it 'should return a list of date_module_results' do
146
+ date_module_results = KalibroClient::Entities::Processor::ModuleResult.history_of subject.id
147
+ expect(date_module_results.first.result).to eq date_module_result.result
148
+ end
149
+ end
150
+
151
+ describe 'folder? & file?' do
152
+ context 'when the module result has childrens' do
153
+ subject { FactoryGirl.build(:root_module_result) }
154
+
155
+ before :each do
156
+ subject.expects(:children).twice.returns([FactoryGirl.build(:module_result)])
157
+ end
158
+
159
+ it 'should return true for folder? and false for file?' do
160
+ expect(subject.folder?).to be_truthy
161
+ expect(subject.file?).to be_falsey
162
+ end
163
+ end
164
+
165
+ context 'when the module result has no childrens' do
166
+ subject { FactoryGirl.build(:module_result) }
167
+
168
+ before :each do
169
+ subject.expects(:children).twice.returns([])
170
+ end
171
+
172
+ it 'should return true for folder? and false for file?' do
173
+ expect(subject.folder?).to be_falsey
174
+ expect(subject.file?).to be_truthy
175
+ end
176
+ end
177
+ end
178
+ end