kalibro_entities 0.0.1.rc1

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 (159) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +19 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +21 -0
  6. data/AUTHORS +4 -0
  7. data/COPYING +674 -0
  8. data/COPYING.LESSER +165 -0
  9. data/Gemfile +4 -0
  10. data/README.md +77 -0
  11. data/Rakefile +6 -0
  12. data/cucumber.yml +1 -0
  13. data/features/base_tool/all_names.feature +8 -0
  14. data/features/base_tool/find_by_name.feature +12 -0
  15. data/features/configuration/all.feature +10 -0
  16. data/features/metric_configuration/find.feature +18 -0
  17. data/features/metric_configuration/metric_configurations_of.feature +18 -0
  18. data/features/metric_result/descendant_results.feature +19 -0
  19. data/features/metric_result/history_of.feature +20 -0
  20. data/features/metric_result/metric_results_of.feature +19 -0
  21. data/features/module_result/children.feature +18 -0
  22. data/features/module_result/find.feature +15 -0
  23. data/features/module_result/history_of.feature +11 -0
  24. data/features/processing/first_processing_after.feature +18 -0
  25. data/features/processing/first_processing_of.feature +18 -0
  26. data/features/processing/has_processing.feature +18 -0
  27. data/features/processing/has_processing_after.feature +18 -0
  28. data/features/processing/has_processing_before.feature +18 -0
  29. data/features/processing/has_ready_processing.feature +18 -0
  30. data/features/processing/last_processing_before.feature +18 -0
  31. data/features/processing/last_processing_of.feature +18 -0
  32. data/features/processing/last_processing_state_of.feature +18 -0
  33. data/features/processing/last_ready_processing_of.feature +18 -0
  34. data/features/processing/processing_of.feature +32 -0
  35. data/features/processing/processing_with_date_of.feature +32 -0
  36. data/features/project/all.feature +10 -0
  37. data/features/project/creation.feature +9 -0
  38. data/features/project/destroy.feature +10 -0
  39. data/features/project/exists.feature +9 -0
  40. data/features/project/find.feature +10 -0
  41. data/features/range/ranges_of.feature +22 -0
  42. data/features/range/save.feature +32 -0
  43. data/features/reading/find.feature +11 -0
  44. data/features/reading/readings_of.feature +11 -0
  45. data/features/reading_group/all.feature +10 -0
  46. data/features/repository/all.feature +14 -0
  47. data/features/repository/cancel_processing.feature +14 -0
  48. data/features/repository/find.feature +14 -0
  49. data/features/repository/of.feature +15 -0
  50. data/features/repository/process.feature +16 -0
  51. data/features/repository/types.feature +9 -0
  52. data/features/step_definitions/base_tool_steps.rb +28 -0
  53. data/features/step_definitions/configuration_steps.rb +11 -0
  54. data/features/step_definitions/metric_configuration_steps.rb +52 -0
  55. data/features/step_definitions/metric_result_steps.rb +29 -0
  56. data/features/step_definitions/metric_steps.rb +3 -0
  57. data/features/step_definitions/module_result_steps.rb +30 -0
  58. data/features/step_definitions/processing_steps.rb +91 -0
  59. data/features/step_definitions/project_steps.rb +48 -0
  60. data/features/step_definitions/range_steps.rb +41 -0
  61. data/features/step_definitions/reading_group_steps.rb +19 -0
  62. data/features/step_definitions/reading_steps.rb +20 -0
  63. data/features/step_definitions/repository_steps.rb +57 -0
  64. data/features/support/env.rb +25 -0
  65. data/features/support/kalibro_cucumber_helpers.yml.sample +10 -0
  66. data/kalibro_entities.gemspec +48 -0
  67. data/lib/kalibro_entities.rb +61 -0
  68. data/lib/kalibro_entities/entities.rb +37 -0
  69. data/lib/kalibro_entities/entities/base_tool.rb +54 -0
  70. data/lib/kalibro_entities/entities/configuration.rb +33 -0
  71. data/lib/kalibro_entities/entities/date_metric_result.rb +39 -0
  72. data/lib/kalibro_entities/entities/date_module_result.rb +39 -0
  73. data/lib/kalibro_entities/entities/metric.rb +21 -0
  74. data/lib/kalibro_entities/entities/metric_configuration.rb +70 -0
  75. data/lib/kalibro_entities/entities/metric_configuration_snapshot.rb +57 -0
  76. data/lib/kalibro_entities/entities/metric_result.rb +63 -0
  77. data/lib/kalibro_entities/entities/model.rb +162 -0
  78. data/lib/kalibro_entities/entities/module.rb +27 -0
  79. data/lib/kalibro_entities/entities/module_result.rb +69 -0
  80. data/lib/kalibro_entities/entities/process_time.rb +31 -0
  81. data/lib/kalibro_entities/entities/processing.rb +113 -0
  82. data/lib/kalibro_entities/entities/project.rb +34 -0
  83. data/lib/kalibro_entities/entities/range.rb +75 -0
  84. data/lib/kalibro_entities/entities/range_snapshot.rb +37 -0
  85. data/lib/kalibro_entities/entities/reading.rb +51 -0
  86. data/lib/kalibro_entities/entities/reading_group.rb +43 -0
  87. data/lib/kalibro_entities/entities/repository.rb +78 -0
  88. data/lib/kalibro_entities/entities/repository_observer.rb +50 -0
  89. data/lib/kalibro_entities/entities/stack_trace_element.rb +31 -0
  90. data/lib/kalibro_entities/entities/throwable.rb +42 -0
  91. data/lib/kalibro_entities/errors.rb +18 -0
  92. data/lib/kalibro_entities/errors/record_not_found.rb +22 -0
  93. data/lib/kalibro_entities/errors/standard.rb +24 -0
  94. data/lib/kalibro_entities/helpers/aggregation_options.rb +25 -0
  95. data/lib/kalibro_entities/helpers/hash_converters.rb +48 -0
  96. data/lib/kalibro_entities/helpers/request_methods.rb +47 -0
  97. data/lib/kalibro_entities/helpers/xml_converters.rb +20 -0
  98. data/lib/kalibro_entities/kalibro_cucumber_helpers.rb +40 -0
  99. data/lib/kalibro_entities/kalibro_cucumber_helpers/configuration.rb +39 -0
  100. data/lib/kalibro_entities/kalibro_cucumber_helpers/hooks.rb +50 -0
  101. data/lib/kalibro_entities/kalibro_cucumber_helpers/scripts/delete_all_kalibro_entries.sh +23 -0
  102. data/lib/kalibro_entities/kalibro_cucumber_helpers/scripts/prepare_kalibro_query_file.sh +38 -0
  103. data/lib/kalibro_entities/kalibro_cucumber_helpers/scripts/put_kalibro_on_test_mode.sh +35 -0
  104. data/lib/kalibro_entities/kalibro_cucumber_helpers/scripts/return_kalibro_from_test_mode.sh +26 -0
  105. data/lib/kalibro_entities/version.rb +19 -0
  106. data/lib/rake/test_task.rb +57 -0
  107. data/spec/entities/base_tool_spec.rb +168 -0
  108. data/spec/entities/configuration_spec.rb +61 -0
  109. data/spec/entities/date_metric_result_spec.rb +62 -0
  110. data/spec/entities/date_module_result_spec.rb +61 -0
  111. data/spec/entities/metric_configuration_snapshot_spec.rb +107 -0
  112. data/spec/entities/metric_configuration_spec.rb +149 -0
  113. data/spec/entities/metric_result_spec.rb +193 -0
  114. data/spec/entities/metric_spec.rb +47 -0
  115. data/spec/entities/model_spec.rb +275 -0
  116. data/spec/entities/module_result_spec.rb +135 -0
  117. data/spec/entities/process_time_spec.rb +33 -0
  118. data/spec/entities/processing_spec.rb +334 -0
  119. data/spec/entities/project_spec.rb +68 -0
  120. data/spec/entities/range_snapshot_spec.rb +50 -0
  121. data/spec/entities/range_spec.rb +181 -0
  122. data/spec/entities/reading_group_spec.rb +90 -0
  123. data/spec/entities/reading_spec.rb +106 -0
  124. data/spec/entities/repository_observer_spec.rb +123 -0
  125. data/spec/entities/repository_spec.rb +167 -0
  126. data/spec/entities/stack_trace_element_spec.rb +26 -0
  127. data/spec/entities/throwable_spec.rb +51 -0
  128. data/spec/factories/base_tools.rb +31 -0
  129. data/spec/factories/configurations.rb +29 -0
  130. data/spec/factories/date_metric_results.rb +28 -0
  131. data/spec/factories/date_module_results.rb +22 -0
  132. data/spec/factories/metric_configurations.rb +28 -0
  133. data/spec/factories/metric_configurations_snapshot.rb +26 -0
  134. data/spec/factories/metric_results.rb +24 -0
  135. data/spec/factories/metrics.rb +35 -0
  136. data/spec/factories/models.rb +20 -0
  137. data/spec/factories/module_results.rb +33 -0
  138. data/spec/factories/modules.rb +22 -0
  139. data/spec/factories/process_times.rb +27 -0
  140. data/spec/factories/processings.rb +25 -0
  141. data/spec/factories/projects.rb +29 -0
  142. data/spec/factories/ranges.rb +30 -0
  143. data/spec/factories/ranges_snapshot.rb +26 -0
  144. data/spec/factories/reading_groups.rb +23 -0
  145. data/spec/factories/readings.rb +25 -0
  146. data/spec/factories/repositories.rb +34 -0
  147. data/spec/factories/repository_observers.rb +24 -0
  148. data/spec/factories/stack_trace_elements.rb +24 -0
  149. data/spec/factories/throwables.rb +23 -0
  150. data/spec/helpers/aggregation_options_spec.rb +31 -0
  151. data/spec/helpers/hash_converters_spec.rb +111 -0
  152. data/spec/helpers/xml_converters_spec.rb +64 -0
  153. data/spec/kalibro_entities_spec.rb +108 -0
  154. data/spec/savon/fixtures/config.yml +1 -0
  155. data/spec/savon/fixtures/invalid_config.yml +2 -0
  156. data/spec/savon/fixtures/project/does_not_exists.xml +1 -0
  157. data/spec/savon/savon_test_helper.rb +14 -0
  158. data/spec/spec_helper.rb +60 -0
  159. metadata +461 -0
@@ -0,0 +1,107 @@
1
+ # This file is part of KalibroEntities
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 KalibroEntities::Entities::MetricConfigurationSnapshot do
20
+ describe 'weight=' do
21
+ it 'should set the value of the attribute weight' do
22
+ subject.weight = "0.6"
23
+ subject.weight.should eq(0.6)
24
+ end
25
+ end
26
+
27
+ describe 'metric=' do
28
+ let(:metric) { FactoryGirl.build(:metric) }
29
+
30
+ context 'when it is not a hash' do
31
+ it 'should set the value of the attribute metric' do
32
+ subject.metric = metric
33
+ subject.metric.should eq(metric)
34
+ end
35
+ end
36
+
37
+ context 'When it is a hash' do
38
+ before :each do
39
+ KalibroEntities::Entities::Metric.
40
+ expects(:to_object).
41
+ at_least_once.
42
+ with(metric.to_hash).
43
+ returns(metric)
44
+ end
45
+
46
+ it 'should set the value of the attribute metric as an object' do
47
+ subject.metric = metric.to_hash
48
+ subject.metric.should eq(metric)
49
+ end
50
+ end
51
+ end
52
+
53
+ describe 'range=' do
54
+ let(:range_snapshot) { FactoryGirl.build(:range_snapshot) }
55
+ let(:range_snapshot_hash) { range_snapshot.to_hash }
56
+
57
+ context 'with a single range' do
58
+ before :each do
59
+ KalibroEntities::Entities::RangeSnapshot.
60
+ expects(:to_object).
61
+ with(range_snapshot_hash).
62
+ returns(range_snapshot)
63
+ end
64
+
65
+ it 'should set the value of the attribute range' do
66
+ subject.range = range_snapshot_hash
67
+ subject.range.should eq([range_snapshot])
68
+ end
69
+ end
70
+
71
+ context 'with a list of many ranges' do
72
+ before :each do
73
+ KalibroEntities::Entities::RangeSnapshot.
74
+ expects(:to_object).
75
+ twice.with(range_snapshot_hash).
76
+ returns(range_snapshot)
77
+ end
78
+
79
+ it 'should set the value of the attribute range' do
80
+ subject.range = [range_snapshot_hash, range_snapshot_hash]
81
+ ranges = subject.range
82
+ ranges.size.should eq(2)
83
+ ranges.first.should eq (range_snapshot)
84
+ ranges.last.should eq (range_snapshot)
85
+ end
86
+ end
87
+ end
88
+
89
+ describe 'range_snapshot' do
90
+ subject { FactoryGirl.build(:metric_configuration_snapshot) }
91
+
92
+ it 'should return the value of the range attribute' do
93
+ subject.range_snapshot.should eq(subject.range)
94
+ end
95
+ end
96
+
97
+ describe 'to_hash' do
98
+ subject {FactoryGirl.build(:metric_configuration_snapshot)}
99
+
100
+ it 'should override the default to_hash method' do
101
+ hash = subject.to_hash
102
+ hash[:attributes!][:range].
103
+ should eq({'xmlns:xsi'=> 'http://www.w3.org/2001/XMLSchema-instance',
104
+ 'xsi:type' => 'kalibro:rangeSnapshotXml' })
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,149 @@
1
+ # This file is part of KalibroEntities
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 KalibroEntities::Entities::MetricConfiguration do
20
+ describe 'id=' do
21
+ it 'should set the id as an Integer' do
22
+ subject.id = "42"
23
+ subject.id.should eq(42)
24
+ end
25
+ end
26
+
27
+ describe 'reading_group_id=' do
28
+ it 'should set the reading group id' do
29
+ subject.reading_group_id = "1"
30
+ subject.reading_group_id.should eq(1)
31
+ end
32
+ end
33
+
34
+ describe 'metric=' do
35
+ let(:metric) { FactoryGirl.build(:metric) }
36
+
37
+ before :each do
38
+ KalibroEntities::Entities::Metric.
39
+ expects(:to_object).at_least_once.
40
+ with(metric.to_hash).
41
+ returns(metric)
42
+ end
43
+
44
+ it 'should convert the argument and set the metric' do
45
+ subject.metric = metric.to_hash
46
+ subject.metric.should eq(metric)
47
+ end
48
+ end
49
+
50
+ describe 'weight=' do
51
+ it 'should set the weight' do
52
+ subject.weight = "10"
53
+ subject.weight.should eq(10)
54
+ end
55
+ end
56
+
57
+ describe 'update_attributes' do
58
+ let(:metric_configuration) { FactoryGirl.build(:metric_configuration) }
59
+
60
+ before :each do
61
+ KalibroEntities::Entities::MetricConfiguration.any_instance.
62
+ expects(:save).
63
+ returns(true)
64
+ end
65
+
66
+ it 'should set the attributes and save' do
67
+ subject.update_attributes(metric_configuration.to_hash)
68
+ subject.code.should eq(metric_configuration.code)
69
+ end
70
+ end
71
+
72
+ describe 'to_hash' do
73
+ subject {FactoryGirl.build(:metric_configuration)}
74
+
75
+ it 'should not include the configuration_id' do
76
+ subject.to_hash[:configuration_id].should be_nil
77
+ end
78
+ end
79
+
80
+ describe 'find' do
81
+ let(:metric_configuration) { FactoryGirl.build(:metric_configuration) }
82
+
83
+ context 'with and existant MetricConfiguration' do
84
+ before :each do
85
+ KalibroEntities::Entities::MetricConfiguration.
86
+ expects(:request).
87
+ with(:get_metric_configuration, {:metric_configuration_id => metric_configuration.id}).
88
+ returns({metric_configuration: metric_configuration.to_hash})
89
+ end
90
+
91
+ it 'should return the metric_configuration' do
92
+ KalibroEntities::Entities::MetricConfiguration.find(metric_configuration.id).
93
+ id.should eq(metric_configuration.id)
94
+ end
95
+ end
96
+
97
+ context 'with an inexistant MetricConfiguration' do
98
+ before :each do
99
+ any_code = rand(Time.now.to_i)
100
+ any_error_message = ""
101
+ KalibroEntities::Entities::MetricConfiguration.
102
+ expects(:request).
103
+ with(:get_metric_configuration, {:metric_configuration_id => metric_configuration.id}).
104
+ raises(Savon::SOAPFault.new(any_error_message, any_code))
105
+ end
106
+
107
+ it 'should raise the RecordNotFound error' do
108
+ expect {KalibroEntities::Entities::MetricConfiguration.find(metric_configuration.id)}.
109
+ to raise_error(KalibroEntities::Errors::RecordNotFound)
110
+ end
111
+ end
112
+ end
113
+
114
+ describe 'metric_configurations_of' do
115
+ let(:metric_configuration) { FactoryGirl.build(:metric_configuration) }
116
+ let(:configuration) { FactoryGirl.build(:configuration) }
117
+
118
+ before :each do
119
+ KalibroEntities::Entities::MetricConfiguration.
120
+ expects(:request).
121
+ with(:metric_configurations_of, {:configuration_id => configuration.id}).
122
+ returns({metric_configuration: metric_configuration.to_hash})
123
+ end
124
+
125
+ it 'should return a array with a metric configuration' do
126
+ metric_configurations = KalibroEntities::Entities::MetricConfiguration.metric_configurations_of(configuration.id)
127
+
128
+ metric_configurations.should be_an(Array)
129
+ metric_configurations.first.id.should eq(metric_configuration.id)
130
+ end
131
+ end
132
+
133
+ # The only purpose of this test is to cover the overrided save_params method
134
+ describe 'save' do
135
+ subject {FactoryGirl.build(:metric_configuration, {id: nil})}
136
+
137
+ before :each do
138
+ KalibroEntities::Entities::MetricConfiguration.
139
+ expects(:request).
140
+ with(:save_metric_configuration, {:metric_configuration => subject.to_hash, :configuration_id => subject.configuration_id}).
141
+ returns({:metric_configuration_id => 1})
142
+ end
143
+
144
+ it 'should make a request to save model with id and return true without errors' do
145
+ subject.save.should be(true)
146
+ subject.kalibro_errors.should be_empty
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,193 @@
1
+ # This file is part of KalibroEntities
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 KalibroEntities::Entities::MetricResult do
20
+ subject { FactoryGirl.build(:metric_result) }
21
+ let(:metric_configuration_snapshot) { FactoryGirl.build(:metric_configuration_snapshot) }
22
+
23
+ describe 'id=' do
24
+ it 'should set the value of the attribute id' do
25
+ subject.id = 42
26
+ subject.id.should eq(42)
27
+ end
28
+ end
29
+
30
+ describe 'configuration=' do
31
+ it 'should set the configuration' do
32
+ subject.configuration = metric_configuration_snapshot.to_hash
33
+ subject.configuration.code.should eq(metric_configuration_snapshot.code)
34
+ end
35
+ end
36
+
37
+ describe 'metric_configuration_snapshot' do
38
+ it 'should be an alias to configuration' do
39
+ subject.configuration = metric_configuration_snapshot.to_hash
40
+ subject.metric_configuration_snapshot.code.should eq(metric_configuration_snapshot.code)
41
+ end
42
+ end
43
+
44
+ describe 'value=' do
45
+ it 'should set the value of the attribute value' do
46
+ subject.value = 42
47
+ subject.value.should eq(42)
48
+ end
49
+ end
50
+
51
+ describe 'aggregated_value=' do
52
+ it 'should set the value of the attribute aggregated_value' do
53
+ subject.aggregated_value = 42
54
+ subject.aggregated_value.should eq(42)
55
+ end
56
+ end
57
+
58
+ describe 'descendant_results_of' do
59
+ context 'when there is one descendant result for the given metric_result' do
60
+ before :each do
61
+ KalibroEntities::Entities::MetricResult.
62
+ expects(:request).
63
+ with(:descendant_results_of, { :metric_result_id => subject.id }).
64
+ returns({descendant_result: "13.3"})
65
+ end
66
+
67
+ it 'should return an unitary list with the descendant result' do
68
+ subject.descendant_results.should eq([13.3])
69
+ end
70
+ end
71
+
72
+ context 'when there is no descendant result for the given metric_result' do
73
+ before :each do
74
+ KalibroEntities::Entities::MetricResult.
75
+ expects(:request).
76
+ with(:descendant_results_of, { :metric_result_id => subject.id }).
77
+ returns({})
78
+ end
79
+
80
+ it 'should return an empty list' do
81
+ subject.descendant_results.should eq([])
82
+ end
83
+ end
84
+
85
+ context 'when there are many descendant results for the given metric_result' do
86
+ before :each do
87
+ KalibroEntities::Entities::MetricResult.
88
+ expects(:request).
89
+ with(:descendant_results_of, { :metric_result_id => subject.id }).
90
+ returns({descendant_result: ["-13.3", "42.42", "1"]})
91
+ end
92
+
93
+ it 'should return a list with the descendant results' do
94
+ subject.descendant_results.should eq([-13.3, 42.42, 1])
95
+ end
96
+ end
97
+ end
98
+
99
+ describe 'metric_results_of' do
100
+ context 'when there is one metric result for the given module_result' do
101
+ before :each do
102
+ KalibroEntities::Entities::MetricResult.
103
+ expects(:request).
104
+ with(:metric_results_of, { :module_result_id => 123 }).
105
+ returns({metric_result: subject.to_hash})
106
+ end
107
+
108
+ it 'should return an unitary list with the metric result' do
109
+ KalibroEntities::Entities::MetricResult.metric_results_of(123).first.value.should eq(subject.value)
110
+ end
111
+ end
112
+
113
+ context 'when there is no metric result for the given module_result' do
114
+ before :each do
115
+ KalibroEntities::Entities::MetricResult.
116
+ expects(:request).
117
+ with(:metric_results_of, { :module_result_id => 42 }).
118
+ returns({})
119
+ end
120
+
121
+ it 'should return an empty list' do
122
+ KalibroEntities::Entities::MetricResult.metric_results_of(42).should eq([])
123
+ end
124
+ end
125
+
126
+ context 'when there are many metric results for the given module_result' do
127
+ let(:metric_results) { KalibroEntities::Entities::MetricResult.metric_results_of(28) }
128
+ before :each do
129
+ KalibroEntities::Entities::MetricResult.
130
+ expects(:request).
131
+ with(:metric_results_of, { :module_result_id => 28 }).
132
+ returns({metric_result: [subject.to_hash, subject.to_hash]})
133
+ end
134
+
135
+ it 'should return a list with the descendant results' do
136
+ metric_results.first.value.should eq(subject.value)
137
+ metric_results.last.aggregated_value.should eq(subject.aggregated_value)
138
+ end
139
+ end
140
+ end
141
+
142
+ describe 'history_of' do
143
+ let(:module_result) { FactoryGirl.build(:module_result) }
144
+ let(:metric) { FactoryGirl.build(:metric) }
145
+
146
+ context 'when there is not a date metric result' do
147
+ before :each do
148
+ KalibroEntities::Entities::MetricResult.
149
+ expects(:request).
150
+ with(:history_of_metric, {:metric_name => metric.name, :module_result_id => module_result.id}).
151
+ returns({date_metric_result: nil})
152
+ end
153
+
154
+ it 'should return an empty list' do
155
+ KalibroEntities::Entities::MetricResult.history_of(metric.name, module_result.id).should eq([])
156
+ end
157
+ end
158
+
159
+ context 'when there is only one date metric result' do
160
+ let(:date_metric_result) { FactoryGirl.build(:date_metric_result, {metric_result: subject}) }
161
+
162
+ before :each do
163
+ KalibroEntities::Entities::MetricResult.
164
+ expects(:request).
165
+ with(:history_of_metric, {:metric_name => metric.name, :module_result_id => module_result.id}).
166
+ returns({date_metric_result: date_metric_result.to_hash})
167
+ end
168
+
169
+ it 'should return the date metric result as an object into a list' do
170
+ KalibroEntities::Entities::MetricResult.history_of(metric.name, module_result.id).
171
+ first.metric_result.id.should eq(subject.id)
172
+ end
173
+ end
174
+
175
+ context 'when there is many date metric results' do
176
+ let(:date_metric_result) { FactoryGirl.build(:date_metric_result, {metric_result: subject}) }
177
+ let(:another_date_metric_result) { FactoryGirl.build(:another_date_metric_result, {metric_result: subject}) }
178
+
179
+ before :each do
180
+ KalibroEntities::Entities::MetricResult.
181
+ expects(:request).
182
+ with(:history_of_metric, {:metric_name => metric.name, :module_result_id => module_result.id}).
183
+ returns({date_metric_result: [date_metric_result.to_hash, another_date_metric_result.to_hash]})
184
+ end
185
+
186
+ it 'should return a list of date metric results as objects' do
187
+ response = KalibroEntities::Entities::MetricResult.history_of(metric.name, module_result.id)
188
+ response.first.metric_result.id.should eq(date_metric_result.metric_result.id)
189
+ response.last.metric_result.id.should eq(another_date_metric_result.metric_result.id)
190
+ end
191
+ end
192
+ end
193
+ end