kalibro_client 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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