Class: Hiptest::CliOptionsChecker
- Inherits:
-
Object
- Object
- Hiptest::CliOptionsChecker
- Defined in:
- lib/hiptest-publisher/cli_options_checker.rb
Instance Attribute Summary collapse
-
#cli_options ⇒ Object
readonly
Returns the value of attribute cli_options.
-
#reporter ⇒ Object
readonly
Returns the value of attribute reporter.
Instance Method Summary collapse
- #check! ⇒ Object
- #check_actionwords_signature_file ⇒ Object
- #check_config_file ⇒ Object
- #check_filters ⇒ Object
- #check_language_and_only ⇒ Object
- #check_numeric_list(option_name) ⇒ Object
- #check_output_directory ⇒ Object
- #check_push_file ⇒ Object
- #check_secret_token ⇒ Object
- #check_status_filter ⇒ Object
- #check_tag_list(option_name) ⇒ Object
- #check_test_run_id ⇒ Object
- #check_xml_file ⇒ Object
-
#initialize(cli_options, reporter) ⇒ CliOptionsChecker
constructor
A new instance of CliOptionsChecker.
Constructor Details
#initialize(cli_options, reporter) ⇒ CliOptionsChecker
Returns a new instance of CliOptionsChecker.
11 12 13 14 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 11 def initialize(, reporter) @cli_options = @reporter = reporter end |
Instance Attribute Details
#cli_options ⇒ Object (readonly)
Returns the value of attribute cli_options.
10 11 12 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 10 def @cli_options end |
#reporter ⇒ Object (readonly)
Returns the value of attribute reporter.
10 11 12 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 10 def reporter @reporter end |
Instance Method Details
#check! ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 16 def check! check_config_file if .only == 'list' return end check_secret_token check_filters check_status_filter if .push? check_push_file else check_output_directory check_actionwords_signature_file check_xml_file check_test_run_id check_language_and_only end end |
#check_actionwords_signature_file ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 140 def check_actionwords_signature_file if .actionwords_diff? actionwords_signature_file = Pathname.new(.output_directory).join("actionwords_signature.yaml") if actionwords_signature_file.directory? raise CliOptionError, "Bad Action Words signature file: the file \"#{actionwords_signature_file.realpath}\" is a directory" elsif !actionwords_signature_file.exist? full_path = File.(.output_directory) raise CliOptionError, [ "Missing Action Words signature file: the file \"actionwords_signature.yaml\" could not be found in directory \"#{full_path}\"", "Use --actionwords-signature to generate the file \"#{full_path}/actionwords_signature.yaml\"", ].join("\n") end end end |
#check_config_file ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 38 def check_config_file begin ParseConfig.new(.config) if present?(.config) rescue Errno::EACCES => err raise CliOptionError, "Error with --config: the file \"#{.config}\" does not exist or is not readable" end end |
#check_filters ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 46 def check_filters filters = [ .filter_on_scenario_ids, .filter_on_folder_ids, .filter_on_scenario_name, .filter_on_folder_name, . ].reject {|opt| absent?(opt) } return if filters.empty? if filters.size > 1 raise CliOptionError, [ "You specified multiple filters for the export.", "", "Only one filter can be applied." ].join("\n") end if present?(.test_run_id) || present?(.test_run_name) raise CliOptionError, [ "Filtering can not be applied when exporting from a test run" ].join("\n") end check_numeric_list(:filter_on_scenario_ids) check_numeric_list(:filter_on_folder_ids) check_tag_list(:filter_on_tags) end |
#check_language_and_only ⇒ Object
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 203 def check_language_and_only if present?(.language) begin language_config_parser = LanguageConfigParser.new() rescue ArgumentError => err raise CliOptionError, err. end if present?(.only) if language_config_parser.filtered_group_names != .groups_to_keep unknown_categories = .groups_to_keep - language_config_parser.group_names if unknown_categories.length == 1 = "the category #{formatted_categories(unknown_categories)} does not exist" else = "the categories #{formatted_categories(unknown_categories)} do not exist" end raise CliOptionError, "Error with --only: #{} for language #{.language_framework}. " + "Available categories are #{formatted_categories(language_config_parser.group_names)}." end end end end |
#check_numeric_list(option_name) ⇒ Object
173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 173 def check_numeric_list(option_name) value = .send(option_name) return if absent?(value) value.split(',').each do |val| next if numeric?(val.strip) raise CliOptionError, [ "#{option_name} should be a list of comma separated numeric values", "", "Found: #{val.strip.inspect}" ].join("\n") end end |
#check_output_directory ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 124 def check_output_directory output_directory = clean_path(.output_directory) parent = first_existing_parent(output_directory) if !parent.writable? if parent.realpath === Pathname.new(.output_directory).cleanpath raise CliOptionError, "Error with --output-directory: the directory \"#{@cli_options.output_directory}\" is not writable" else raise CliOptionError, "Error with --output-directory: the directory \"#{@cli_options.output_directory}\" can not be created because \"#{parent.realpath}\" is not writable" end elsif !parent.directory? raise CliOptionError, "Error with --output-directory: the file \"#{@cli_options.output_directory}\" is not a directory" end end |
#check_push_file ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 107 def check_push_file if .push && !.global_failure_on_missing_reports agnostic_path = clean_path(.push) globbed_files = Dir.glob(agnostic_path) if globbed_files.length == 0 raise CliOptionError, "Error with --push: the file \"#{.push}\" does not exist or is not readable" elsif globbed_files.length == 1 && globbed_files == [.push] if !File.readable?(agnostic_path) raise CliOptionError, "Error with --push: the file \"#{.push}\" does not exist or is not readable" elsif !File.file?(agnostic_path) raise CliOptionError, "Error with --push: the file \"#{.push}\" is not a regular file" end end end end |
#check_secret_token ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 87 def check_secret_token if absent?(.xml_file) if absent?(.token) raise CliOptionError, [ "Missing argument --token: you must specify project secret token with --token=<project-token>", "", "The project secret token can be found on Hiptest in the settings section, under", "'Publication settings'. It is a sequence of numbers uniquely identifying your", "project.", "", "Note that settings section is available only to administrators of the project.", ].join("\n") end unless numeric?(.token) raise CliOptionError, "Invalid format --token=\"#{@cli_options.token}\": the project secret token must be numeric" end end end |
#check_status_filter ⇒ Object
76 77 78 79 80 81 82 83 84 85 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 76 def check_status_filter return if absent?(.filter_on_status) if absent?(.test_run_id) && absent?(.test_run_name) raise CliOptionError, [ "You need to specify a test run when filtering on test status.", "Use options test_run_id or test_run_name." ].join("\n") end end |
#check_tag_list(option_name) ⇒ Object
188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 188 def check_tag_list(option_name) value = .send(option_name) return if absent?(value) value.split(',').each do |val| next if tag_compatible?(val.strip) raise CliOptionError, [ "#{option_name} should be a list of comma separated tags in Hiptest", "", "Found: #{val.strip.inspect}" ].join("\n") end end |
#check_test_run_id ⇒ Object
167 168 169 170 171 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 167 def check_test_run_id if present?(.test_run_id) && !numeric?(.test_run_id) raise CliOptionError, "Invalid format --test-run-id=\"#{@cli_options.test_run_id}\": the test run id must be numeric" end end |
#check_xml_file ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/hiptest-publisher/cli_options_checker.rb', line 155 def check_xml_file if .xml_file xml_path = clean_path(.xml_file) if !File.readable?(xml_path) raise CliOptionError, "Error with --xml-file: the file \"#{.xml_file}\" does not exist or is not readable" elsif !File.file?(xml_path) raise CliOptionError, "Error with --xml-file: the file \"#{.xml_file}\" is not a regular file" end end end |