qa_server 0.1.99 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/indexing_bug.md +11 -0
  3. data/.github/ISSUE_TEMPLATE/new_dataset_request.md +22 -0
  4. data/.gitignore +2 -0
  5. data/.rubocop.yml +18 -0
  6. data/.rubocop_fixme.yml +10 -0
  7. data/CHANGELOG.md +12 -0
  8. data/Gemfile +1 -0
  9. data/Gemfile.lock +21 -15
  10. data/README.md +4 -0
  11. data/Rakefile +2 -1
  12. data/app/assets/stylesheets/qa_server/_home-page.scss +2 -2
  13. data/app/assets/stylesheets/qa_server/_styles.scss +4 -0
  14. data/app/controllers/qa_server/authority_list_controller.rb +3 -3
  15. data/app/controllers/qa_server/authority_validation_controller.rb +11 -12
  16. data/app/controllers/qa_server/check_status_controller.rb +6 -6
  17. data/app/controllers/qa_server/homepage_controller.rb +2 -2
  18. data/app/controllers/qa_server/monitor_status_controller.rb +32 -48
  19. data/app/controllers/qa_server/usage_controller.rb +2 -2
  20. data/app/loggers/qa_server/scenario_logger.rb +38 -42
  21. data/app/models/qa_server/authority_scenario.rb +1 -1
  22. data/app/models/qa_server/authority_status.rb +1 -0
  23. data/app/models/qa_server/authority_status_failure.rb +1 -0
  24. data/app/models/qa_server/scenario_run_history.rb +189 -0
  25. data/app/models/qa_server/scenario_run_registry.rb +34 -0
  26. data/app/models/qa_server/scenario_run_summary.rb +44 -0
  27. data/app/models/qa_server/scenarios.rb +15 -17
  28. data/app/models/qa_server/search_scenario.rb +4 -4
  29. data/app/models/qa_server/term_scenario.rb +2 -1
  30. data/app/presenters/qa_server/authority_list_presenter.rb +7 -6
  31. data/app/presenters/qa_server/check_status_presenter.rb +26 -16
  32. data/app/presenters/qa_server/monitor_status_presenter.rb +94 -38
  33. data/app/services/qa_server/authority_lister_service.rb +9 -9
  34. data/app/services/qa_server/authority_loader_service.rb +16 -15
  35. data/app/services/qa_server/authority_validator_service.rb +13 -13
  36. data/app/services/qa_server/database_migrator.rb +1 -0
  37. data/app/services/qa_server/scenarios_loader_service.rb +29 -27
  38. data/app/validators/qa_server/scenario_validator.rb +25 -35
  39. data/app/validators/qa_server/search_scenario_validator.rb +25 -18
  40. data/app/validators/qa_server/term_scenario_validator.rb +2 -1
  41. data/app/views/qa_server/check_status/index.html.erb +1 -1
  42. data/app/views/qa_server/homepage/index.html.erb +3 -3
  43. data/app/views/qa_server/monitor_status/index.html.erb +15 -10
  44. data/app/views/qa_server/usage/index.html.erb +4 -4
  45. data/app/views/shared/_footer.html.erb +1 -1
  46. data/config/routes.rb +1 -0
  47. data/lib/generators/qa_server/assets_generator.rb +1 -0
  48. data/lib/generators/qa_server/config_generator.rb +6 -0
  49. data/lib/generators/qa_server/install_generator.rb +1 -0
  50. data/lib/generators/qa_server/models_generator.rb +1 -0
  51. data/lib/generators/qa_server/templates/config/initializers/qa_server.rb +4 -0
  52. data/lib/generators/qa_server/templates/config/locales/qa_server.en.yml +1 -1
  53. data/lib/generators/qa_server/templates/db/migrate/20180807045549_create_scenario_run_registry.rb.erb +7 -0
  54. data/lib/generators/qa_server/templates/db/migrate/20180807045552_create_scenario_run_history.rb.erb +16 -0
  55. data/lib/generators/qa_server/templates/db/migrate/20180807045554_drop_unused_tables.rb.erb +6 -0
  56. data/lib/generators/qa_server/templates/db/migrate/20180809045552_add_indices_to_scenario_run_history.rb.erb +8 -0
  57. data/lib/qa_server/configuration.rb +6 -0
  58. data/lib/qa_server/engine.rb +10 -1
  59. data/lib/qa_server/version.rb +2 -1
  60. data/lib/qa_server.rb +19 -1
  61. data/lib/tasks/install.rake +1 -0
  62. data/lib/tasks/qa_server_tasks.rake +1 -0
  63. data/qa_server.gemspec +8 -5
  64. data/spec/rails_helper.rb +1 -0
  65. data/spec/spec_helper.rb +98 -98
  66. data/spec/test_app_templates/Gemfile.extra +2 -1
  67. data/tasks/qa_server_dev.rake +1 -0
  68. metadata +49 -7
@@ -0,0 +1,189 @@
1
+ # frozen_string_literal: true
2
+ # Provide access to the scenario_results_history database table which tracks specific scenario runs over time.
3
+ module QaServer
4
+ class ScenarioRunHistory < ActiveRecord::Base
5
+ self.table_name = 'scenario_run_history'
6
+ belongs_to :scenario_run_registry
7
+ enum scenario_type: [:connection, :accuracy, :performance], _suffix: :type
8
+ enum status: [:good, :bad, :unknown], _suffix: true
9
+
10
+ GOOD_MARKER = '√'
11
+ BAD_MARKER = 'X'
12
+ UNKNOWN_MARKER = '?'
13
+
14
+ class_attribute :summary_class
15
+
16
+ self.summary_class = QaServer::ScenarioRunSummary
17
+
18
+ # Save a scenario result
19
+ # @param run_id [Integer] the run on which to gather statistics
20
+ # @param result [Hash] the scenario result to be saved
21
+ def self.save_result(run_id:, scenario_result:)
22
+ QaServer::ScenarioRunHistory.create(scenario_run_registry_id: run_id,
23
+ status: scenario_result[:status],
24
+ authority_name: scenario_result[:authority_name],
25
+ subauthority_name: scenario_result[:subauthority_name],
26
+ service: scenario_result[:service],
27
+ action: scenario_result[:action],
28
+ url: scenario_result[:url],
29
+ err_message: scenario_result[:err_message],
30
+ run_time: scenario_result[:run_time])
31
+ end
32
+
33
+ # Get a summary of passing/failing tests for a run.
34
+ # @param scenario_run [ScenarioRunRegistry] the run on which to gather statistics
35
+ # @returns [Hash] statistics on the requested run
36
+ # @example
37
+ # { run_id: 14,
38
+ # failing_count: 3,
39
+ # passing_count: 156,
40
+ # total_count: 159,
41
+ # authority_count: 22,
42
+ # failing_authority_count: 1 }
43
+ def self.run_summary(scenario_run:)
44
+ return nil unless scenario_run&.id
45
+ status = status_counts_in_run(run_id: scenario_run.id)
46
+ summary_class.new(run_id: scenario_run.id,
47
+ run_dt_stamp: scenario_run.dt_stamp,
48
+ authority_count: authorities_in_run(run_id: scenario_run.id).count,
49
+ failing_authority_count: authorities_with_failures_in_run(run_id: scenario_run.id).count,
50
+ passing_scenario_count: status['good'],
51
+ failing_scenario_count: status['bad'] + status['unknown'])
52
+ end
53
+
54
+ # Get set of all scenario results for a run.
55
+ # @param run_id [Integer] the run on which to gather statistics
56
+ # @param authority_name [String] limit results to those for the authority with this name
57
+ # @param status [Array<Symbol> | Symbol] :good, :bad, :unknown, or any of these in an array to select multiple status
58
+ # @param url [String] limit results to a specific scenario URL
59
+ # @returns [Array<ScenarioRunHistory>] scenario details for all scenarios in the run
60
+ # @example
61
+ # [ { status: :bad,
62
+ # authority_name: "geonames_ld4l_cache",
63
+ # subauthority_name: "area",
64
+ # service: "ld4l_cache",
65
+ # action: "search",
66
+ # url: "/qa/search/linked_data/geonames_ld4l_cache/area?q=France&maxRecords=4",
67
+ # err_message: "Unable to connect to authority",
68
+ # scenario_type: :connection
69
+ # run_time: 11.2 },
70
+ # { status: :good,
71
+ # authority_name: "oclcfast_ld4l_cache",
72
+ # subauthority_name: "Organization",
73
+ # service: "ld4l_cache",
74
+ # action: "search",
75
+ # url: "/qa/search/linked_data/oclcfast_ld4l_cache/organization?q=mark twain&maxRecords=4",
76
+ # err_message: "",
77
+ # scenario_type: :connection
78
+ # run_time: 0.131 },
79
+ # { status: :unknown,
80
+ # authority_name: "oclcfast_ld4l_cache",
81
+ # subauthority_name: "Person",
82
+ # service: "ld4l_cache",
83
+ # action: "search",
84
+ # url: "/qa/search/linked_data/oclcfast_ld4l_cache/person?q=mark twain&maxRecords=4",
85
+ # err_message: "Not enough search results returned",
86
+ # scenario_type: :connection
87
+ # run_time: 0.123 } ]
88
+ def self.run_results(run_id:, authority_name: nil, status: nil, url: nil)
89
+ return [] unless run_id
90
+ where = {}
91
+ where[:scenario_run_registry_id] = run_id
92
+ where[:authority_name] = authority_name if authority_name.present?
93
+ where[:status] = status if status.present?
94
+ where[:url] = url if url.present?
95
+ QaServer::ScenarioRunHistory.where(where).to_a
96
+ end
97
+
98
+ # Get set of failures for a run, if any.
99
+ # @param run_id [Integer] the run on which to gather statistics
100
+ # @returns [Array<Hash>] scenario details for any failing scenarios in the run
101
+ # @example
102
+ # [ { status: :bad,
103
+ # authority_name: "geonames_ld4l_cache",
104
+ # subauthority_name: "area",
105
+ # service: "ld4l_cache",
106
+ # action: "search",
107
+ # url: "/qa/search/linked_data/geonames_ld4l_cache/area?q=France&maxRecords=4",
108
+ # err_message: "Unable to connect to authority",
109
+ # scenario_type: :connection
110
+ # run_time: 11.2 },
111
+ # { status: :unknown,
112
+ # authority_name: "oclcfast_ld4l_cache",
113
+ # subauthority_name: "Person",
114
+ # service: "ld4l_cache",
115
+ # action: "search",
116
+ # url: "/qa/search/linked_data/oclcfast_ld4l_cache/person?q=mark twain&maxRecords=4",
117
+ # err_message: "Not enough search results returned",
118
+ # scenario_type: :connection
119
+ # run_time: 0.123 } ]
120
+ def self.run_failures(run_id:)
121
+ return [] unless run_id
122
+ QaServer::ScenarioRunHistory.where(scenario_run_registry_id: run_id).where.not(status: :good).to_a
123
+ end
124
+
125
+ # Get a summary level of historical data
126
+ # @returns [Array<Hash>] scenario details for any failing scenarios in the run (auth_name, failing, passing)
127
+ # @example
128
+ # [ [ 'agrovoc', 0, 24 ],
129
+ # [ 'geonames_ld4l_cache', 2, 22 ] ... ]
130
+ def self.historical_summary
131
+ runs = all_runs_per_authority
132
+ failures = failing_runs_per_authority
133
+ return [] unless runs.present?
134
+ data = []
135
+ runs.each do |auth_name, run_count|
136
+ auth_data = []
137
+ auth_data[0] = auth_name
138
+ failure_count = (failures.key? auth_name) ? failures[auth_name] : 0 # rubocop:disable Style/TernaryParentheses
139
+ auth_data[1] = failure_count
140
+ auth_data[2] = run_count - failure_count # passing
141
+ data << auth_data
142
+ end
143
+ data
144
+ end
145
+
146
+ def self.authorities_in_run(run_id:)
147
+ QaServer::ScenarioRunHistory.where(scenario_run_registry_id: run_id).pluck(:authority_name).uniq
148
+ end
149
+ private_class_method :authorities_in_run
150
+
151
+ def self.authorities_with_failures_in_run(run_id:)
152
+ QaServer::ScenarioRunHistory.where(scenario_run_registry_id: run_id).where.not(status: 'good').pluck('authority_name').uniq
153
+ end
154
+ private_class_method :authorities_with_failures_in_run
155
+
156
+ def self.status_counts_in_run(run_id:)
157
+ status = QaServer::ScenarioRunHistory.group('status').where(scenario_run_registry_id: run_id).count
158
+ status["good"] = 0 unless status.key? "good"
159
+ status["bad"] = 0 unless status.key? "bad"
160
+ status["unknown"] = 0 unless status.key? "unknown"
161
+ status
162
+ end
163
+ private_class_method :status_counts_in_run
164
+
165
+ def self.all_runs_per_authority
166
+ # TODO: Really want to only get one run per day. Preferably the first run of the day.
167
+ authority_runs = QaServer::ScenarioRunHistory.pluck(:authority_name, :scenario_run_registry_id).uniq # rubocop:disable Rails/UniqBeforePluck
168
+ runs_per_authority(authority_runs)
169
+ end
170
+ private_class_method :all_runs_per_authority
171
+
172
+ def self.failing_runs_per_authority
173
+ failing_authority_runs = QaServer::ScenarioRunHistory.where.not(status: 'good').pluck(:authority_name, :scenario_run_registry_id).uniq
174
+ runs_per_authority(failing_authority_runs)
175
+ end
176
+ private_class_method :failing_runs_per_authority
177
+
178
+ def self.runs_per_authority(authority_runs)
179
+ runs_per_authority = {}
180
+ authority_runs.each do |auth_run|
181
+ auth_name = auth_run[0]
182
+ runs_per_authority[auth_name] = 0 unless runs_per_authority.key? auth_name
183
+ runs_per_authority[auth_name] += 1
184
+ end
185
+ runs_per_authority
186
+ end
187
+ private_class_method :runs_per_authority
188
+ end
189
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+ # Provide access to the scenario_run_registry database table which registers each run of tests made over time.
3
+ module QaServer
4
+ class ScenarioRunRegistry < ActiveRecord::Base
5
+ self.table_name = 'scenario_run_registry'
6
+ has_many :scenario_run_history, foreign_key: :scenario_run_registry_id
7
+
8
+ # Get the latest saved run of scenarios.
9
+ def self.latest_run
10
+ return nil unless QaServer::ScenarioRunRegistry.last
11
+ QaServer::ScenarioRunRegistry.last # Can we count on last to always be the one with the latest dt_stamp?
12
+ # latest_run = ScenarioRunRegistry.all.sort(:dt_stamp).last
13
+ # return nil if latest_run.blank?
14
+ # latest_run.id
15
+ end
16
+
17
+ # Get the latest saved status.
18
+ def self.latest_run_id
19
+ latest = latest_run
20
+ return nil unless latest
21
+ lastest.id
22
+ end
23
+
24
+ def self.save_run(scenarios_results:)
25
+ run = QaServer::ScenarioRunRegistry.create(dt_stamp: dt_stamp_now_et)
26
+ scenarios_results.each { |result| QaServer::ScenarioRunHistory.save_result(run_id: run.id, scenario_result: result) }
27
+ end
28
+
29
+ def self.dt_stamp_now_et
30
+ Time.now.in_time_zone("Eastern Time (US & Canada)")
31
+ end
32
+ private_class_method :dt_stamp_now_et
33
+ end
34
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+ # Abstract class that parses the authority configuration from the yml file into the parts needed by inheriting scenario types.
3
+ module QaServer
4
+ class ScenarioRunSummary
5
+ # @return [Integer] the id of the scenario run being summarized
6
+ attr_reader :run_id
7
+
8
+ # @return [Date] the date time stamp of the scenario run being summarized
9
+ attr_reader :run_dt_stamp
10
+
11
+ # @return [Integer] number of all authorities in the run
12
+ attr_reader :authority_count
13
+
14
+ # @return [Integer] number of authorities in the run that had at least one failing test
15
+ attr_reader :failing_authority_count
16
+
17
+ # @return [Integer] number of scenarios that passed during this run
18
+ attr_reader :passing_scenario_count
19
+
20
+ # @return [Integer] name of the subauthority the scenario runs against
21
+ attr_reader :failing_scenario_count
22
+
23
+ # @return [Integer] total number of scenarios in this run
24
+ attr_reader :total_scenario_count
25
+
26
+ # @param run_id [Integer] the id of the scenario run being summarized
27
+ # @param run_dt_stamp [Date] the date time stamp of the scenario run being summarized
28
+ # @param authority_count [Integer] number of all authorities in the run
29
+ # @param failing_authority_count [Integer] number of authorities in the run that had failing tests
30
+ # @param passing_scenario_count [Integer] number of scenarios that passed during this run
31
+ # @param failing_scenario_count [Integer] number of scenarios that failed during this run
32
+ # rubocop:disable Metrics/ParameterLists
33
+ def initialize(run_id:, run_dt_stamp:, authority_count:, failing_authority_count:, passing_scenario_count:, failing_scenario_count:)
34
+ @run_id = run_id
35
+ @run_dt_stamp = run_dt_stamp
36
+ @authority_count = authority_count
37
+ @failing_authority_count = failing_authority_count
38
+ @passing_scenario_count = passing_scenario_count
39
+ @failing_scenario_count = failing_scenario_count
40
+ @total_scenario_count = failing_scenario_count + passing_scenario_count
41
+ end
42
+ # rubocop:enable Metrics/ParameterLists
43
+ end
44
+ end
@@ -1,10 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  # Holds all scenarios for an authority.
2
3
  module QaServer
3
4
  class Scenarios
4
-
5
- AUTHORITY_SCENARIO = 'authority'.freeze
6
- TERM_SCENARIOS = 'term'.freeze
7
- SEARCH_SCENARIOS = 'search'.freeze
5
+ AUTHORITY_SCENARIO = 'authority'
6
+ TERM_SCENARIOS = 'term'
7
+ SEARCH_SCENARIOS = 'search'
8
8
 
9
9
  # @return [Qa::Authorities::LinkedData::GenericAuthority] authority instance the scenarios run against
10
10
  attr_reader :authority
@@ -18,6 +18,9 @@ module QaServer
18
18
  # @return [Array<SearchScenario>] the search scenarios to run against the authority
19
19
  attr_reader :search_scenarios
20
20
 
21
+ # @return [Hash] configurations from the yml file for all scenarios for an authority
22
+ attr_reader :scenarios_config; private :scenarios_config # rubocop:disable Style/Semicolon
23
+
21
24
  # @param authority [Qa::Authorities::LinkedData::GenericAuthority] the instance of the QA authority
22
25
  # @param authoity_name [String] the name of the authority the scenario tests (e.g. "agrovoc_direct")
23
26
  # @param scenarios_config [Hash] configurations from the yml file for all scenarios for an authority
@@ -34,27 +37,23 @@ module QaServer
34
37
  def parse_term_scenarios
35
38
  @term_scenarios = []
36
39
  term_scenarios_config.each do |term_scenario_config|
37
- @term_scenarios << TermScenario.new(authority: authority,
38
- authority_name: authority_name,
39
- authority_scenario_config: authority_scenario_config,
40
- scenario_config: term_scenario_config)
40
+ @term_scenarios << QaServer::TermScenario.new(authority: authority,
41
+ authority_name: authority_name,
42
+ authority_scenario_config: authority_scenario_config,
43
+ scenario_config: term_scenario_config)
41
44
  end
42
45
  end
43
46
 
44
47
  def parse_search_scenarios
45
48
  @search_scenarios = []
46
49
  search_scenarios_config.each do |search_scenario_config|
47
- @search_scenarios << SearchScenario.new(authority: authority,
48
- authority_name: authority_name,
49
- authority_scenario_config: authority_scenario_config,
50
- scenario_config: search_scenario_config)
50
+ @search_scenarios << QaServer::SearchScenario.new(authority: authority,
51
+ authority_name: authority_name,
52
+ authority_scenario_config: authority_scenario_config,
53
+ scenario_config: search_scenario_config)
51
54
  end
52
55
  end
53
56
 
54
- def scenarios_config
55
- @scenarios_config
56
- end
57
-
58
57
  def authority_scenario_config
59
58
  scenarios_config[AUTHORITY_SCENARIO]
60
59
  end
@@ -68,4 +67,3 @@ module QaServer
68
67
  end
69
68
  end
70
69
  end
71
-
@@ -1,7 +1,7 @@
1
+ # frozen_string_literal: true
1
2
  # This class parses the search configuration from the yml file into the parts needed by the search scenario validator.
2
3
  module QaServer
3
4
  class SearchScenario < AuthorityScenario
4
-
5
5
  # @return [String] query being executed by this scenario
6
6
  attr_reader :query
7
7
 
@@ -14,8 +14,8 @@ module QaServer
14
14
  # @return [String] subject_uri, if specified, should be in the search results between position 1 and expected_by_position
15
15
  attr_reader :subject_uri
16
16
 
17
- MAX_RECORDS = '4'.freeze
18
- DEFAULT_REPLACEMENTS = { maxRecords: MAX_RECORDS }
17
+ MAX_RECORDS = '4'
18
+ DEFAULT_REPLACEMENTS = { maxRecords: MAX_RECORDS }.freeze
19
19
  DEFAULT_POSITION = nil
20
20
  DEFAULT_SUBJECT_URI = nil
21
21
 
@@ -37,7 +37,7 @@ module QaServer
37
37
  # @return [String] the example URL
38
38
  def url
39
39
  subauth = "/#{subauthority_name}" if subauthority?
40
- prefix = "/#{QA_ENGINE_MOUNT}/search/linked_data/#{authority_name.downcase}#{subauth}"
40
+ prefix = "#{QaServer::Engine.qa_engine_mount}/search/linked_data/#{authority_name.downcase}#{subauth}"
41
41
  "#{prefix}?q=#{query}#{url_replacements}"
42
42
  end
43
43
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'erb'
2
3
 
3
4
  # This class parses the term configuration from the yml file into the parts needed by the term scenario validator.
@@ -23,7 +24,7 @@ module QaServer
23
24
  # @return [String] the example URL
24
25
  def url
25
26
  subauth = "/#{subauthority_name}" if subauthority_name.present?
26
- prefix = "/#{QA_ENGINE_MOUNT}/show/linked_data/#{authority_name.downcase}#{subauth}"
27
+ prefix = "#{QaServer::Engine.qa_engine_mount}/show/linked_data/#{authority_name.downcase}#{subauth}"
27
28
  "#{prefix}/#{url_identifier}"
28
29
  end
29
30
 
@@ -1,10 +1,8 @@
1
+ # frozen_string_literal: true
1
2
  # This presenter class provides all data needed by the view that show the list of authorities.
2
3
  module QaServer
3
4
  class AuthorityListPresenter
4
- def initialize(urls_data:)
5
- @urls_data = urls_data
6
- end
7
-
5
+ # rubocop:disable Style/AsciiComments
8
6
  # @return [Array<Hash>] A list of status data for each scenario tested.
9
7
  # @example
10
8
  # { status: :PASS,
@@ -15,8 +13,11 @@ module QaServer
15
13
  # action: 'search',
16
14
  # url: '/qa/search/linked_data/locnames_ld4l_cache/person?q=mark twain&maxRecords=4',
17
15
  # err_message: '' }
18
- def urls_data
19
- @urls_data
16
+ attr_reader :urls_data
17
+ # rubocop:enable Style/AsciiComments
18
+
19
+ def initialize(urls_data:)
20
+ @urls_data = urls_data
20
21
  end
21
22
  end
22
23
  end
@@ -1,7 +1,7 @@
1
+ # frozen_string_literal: true
1
2
  # This presenter class provides all data needed by the view that checks the status of authorities.
2
3
  module QaServer
3
4
  class CheckStatusPresenter
4
-
5
5
  # @param authorities_list [Array<String>] a list of all loaded authorities' names
6
6
  # @param status_data [Array<Hash>] a list of status data for each scenario tested
7
7
  def initialize(authorities_list:, connection_status_data:, accuracy_status_data:)
@@ -12,10 +12,9 @@ module QaServer
12
12
 
13
13
  # @return [Array<String>] A list of all loaded authorities' names
14
14
  # @example ['AGROVOC_DIRECT', 'AGROVOC_LD4L_CACHE', 'LOCNAMES_LD4L_CACHE']
15
- def authorities_list
16
- @authorities_list
17
- end
15
+ attr_reader :authorities_list
18
16
 
17
+ # rubocop:disable Style/AsciiComments
19
18
  # @return [Array<Hash>] A list of status data for each connection scenario tested.
20
19
  # @example
21
20
  # [ { status: :PASS,
@@ -26,10 +25,10 @@ module QaServer
26
25
  # action: 'search',
27
26
  # url: '/qa/search/linked_data/locnames_ld4l_cache/person?q=mark twain&maxRecords=4',
28
27
  # err_message: '' }, ... ]
29
- def connection_status_data
30
- @connection_status_data
31
- end
28
+ attr_reader :connection_status_data
29
+ # rubocop:enable Style/AsciiComments
32
30
 
31
+ # rubocop:disable Style/AsciiComments
33
32
  # @return [Array<Hash>] A list of status data for each accuracy scenario tested.
34
33
  # @example
35
34
  # [ { status: :PASS,
@@ -42,9 +41,8 @@ module QaServer
42
41
  # actual: 8,
43
42
  # url: '/qa/search/linked_data/locnames_ld4l_cache/person?q=mark twain&maxRecords=20',
44
43
  # err_message: '' }, ... ]
45
- def accuracy_status_data
46
- @accuracy_status_data
47
- end
44
+ attr_reader :accuracy_status_data
45
+ # rubocop:enable Style/AsciiComments
48
46
 
49
47
  # @return [Boolean] true if status data exists; otherwise false
50
48
  def connection_status_data?
@@ -58,19 +56,31 @@ module QaServer
58
56
 
59
57
  # @return [String] the name of the css style class to use for the status cell based on the status of the scenario test.
60
58
  def status_style_class(status)
61
- "status-#{status[:status].to_s}"
59
+ "status-#{status[:status]}"
60
+ end
61
+
62
+ # @return [String] the name of the css style class to use for the status cell based on the status of the scenario test.
63
+ def status_label(status)
64
+ case status[:status]
65
+ when :good
66
+ QaServer::ScenarioRunHistory::GOOD_MARKER
67
+ when :bad
68
+ QaServer::ScenarioRunHistory::BAD_MARKER
69
+ when :unknown
70
+ QaServer::ScenarioRunHistory::UNKNOWN_MARKER
71
+ end
62
72
  end
63
73
 
64
74
  def value_all_collections
65
- CheckStatusController::ALL_AUTHORITIES
75
+ QaServer::CheckStatusController::ALL_AUTHORITIES
66
76
  end
67
77
 
68
78
  def value_check_param
69
- AuthorityValidationController::VALIDATION_TYPE_PARAM
79
+ QaServer::AuthorityValidationController::VALIDATION_TYPE_PARAM
70
80
  end
71
81
 
72
82
  def value_check_connections
73
- AuthorityValidationController::VALIDATE_CONNECTIONS
83
+ QaServer::AuthorityValidationController::VALIDATE_CONNECTIONS
74
84
  end
75
85
 
76
86
  def label_check_connections
@@ -78,7 +88,7 @@ module QaServer
78
88
  end
79
89
 
80
90
  def value_check_accuracy
81
- AuthorityValidationController::VALIDATE_ACCURACY
91
+ QaServer::AuthorityValidationController::VALIDATE_ACCURACY
82
92
  end
83
93
 
84
94
  def label_check_accuracy
@@ -86,7 +96,7 @@ module QaServer
86
96
  end
87
97
 
88
98
  def value_all_checks
89
- AuthorityValidationController::ALL_VALIDATIONS
99
+ QaServer::AuthorityValidationController::ALL_VALIDATIONS
90
100
  end
91
101
 
92
102
  def label_all_checks