qa_server 0.1.99 → 1.0.0

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 (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