cornucopia 0.1.18 → 0.1.19

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e7409345880917bfdbe8e0997ec78ea3b038c554
4
- data.tar.gz: 7f611a7ed5530f0f1092845f30916c5c7f0b9544
3
+ metadata.gz: 27a9d88236b2e8ca285adbca01be518df0e2ae41
4
+ data.tar.gz: 6056d4a64c9d77c37891438ec10299728f8accbd
5
5
  SHA512:
6
- metadata.gz: a0acb5bfb03ff3f9cc66a5f22c7633cc7b6d4a17baf44abc261d0c18816f7c4e6e281aadfa3709f4a3a247483690253aba0ab33ddff8f9d1c79832813beeb811
7
- data.tar.gz: ee66851923d153b52787dd87877f80e0f6680ddda1db4631cb72adfaf46581edff0e821d810d1b43fd25e8d81e298553b3b189c0451e024d6dbbe7b1cb49e146
6
+ metadata.gz: 73d21c4b62f1f35d9025b5b2480b30e14f6bc84c3d559bfee193e3ac0b885e53701f4a5c7a787accb6ed7c9eb9eac8f75803cb319cc3f66e1c0215f0049d6b74
7
+ data.tar.gz: c6a12239202f9883c6c33f729286987095611cf6930b29548374f5aa0b2463f3fb996a4508e2e82cbbd18b59e156350275ae65d479cfab403f97e7e62e984733
@@ -482,6 +482,7 @@ module Cornucopia
482
482
  instance_variable_set("@native_class", @found_element[:class])
483
483
 
484
484
  if ::Capybara.current_session.driver.respond_to?(:browser) &&
485
+ ::Capybara.current_session.driver.browser.respond_to?(:execute_script) &&
485
486
  ::Capybara.current_session.driver.browser.method(:execute_script).arity != 1
486
487
  begin
487
488
  # This is a "trick" that works with Selenium, but which might not work with other drivers...
@@ -9,6 +9,8 @@ if Object.const_defined?("Capybara") &&
9
9
  class Document
10
10
  alias_method :__cornucopia_orig_assert_selector, :assert_selector
11
11
  alias_method :__cornucopia_orig_assert_no_selector, :assert_no_selector
12
+ alias_method :__cornucopia_orig_has_selector?, :has_selector?
13
+ alias_method :__cornucopia_orig_has_no_selector?, :has_no_selector?
12
14
 
13
15
  include Cornucopia::Capybara::MatcherExtensions
14
16
  end
@@ -25,6 +27,8 @@ if Object.const_defined?("Capybara") &&
25
27
  class Element
26
28
  alias_method :__cornucopia_orig_assert_selector, :assert_selector
27
29
  alias_method :__cornucopia_orig_assert_no_selector, :assert_no_selector
30
+ alias_method :__cornucopia_orig_has_selector?, :has_selector?
31
+ alias_method :__cornucopia_orig_has_no_selector?, :has_no_selector?
28
32
 
29
33
  include Cornucopia::Capybara::MatcherExtensions
30
34
  end
@@ -12,11 +12,34 @@ module Cornucopia
12
12
  __cornucopia_assert_selector_function(:assert_no_selector, *args)
13
13
  end
14
14
 
15
+ def has_selector?(*args)
16
+ new_args = args.dup
17
+ options = (new_args.pop if new_args.length > 1 && new_args[-1].is_a?(Hash)) || {}
18
+
19
+ if Cornucopia::Util::Configuration.instance.ignore_has_selector_errors
20
+ options = { __cornucopia_no_analysis: true }.merge options
21
+ end
22
+
23
+ __cornucopia_assert_selector_function(:has_selector?, *new_args, options)
24
+ end
25
+
26
+ def has_no_selector?(*args)
27
+ new_args = args.dup
28
+ options = (new_args.pop if new_args.length > 1 && new_args[-1].is_a?(Hash)) || {}
29
+
30
+ if Cornucopia::Util::Configuration.instance.ignore_has_selector_errors
31
+ options = { __cornucopia_no_analysis: true }.merge options
32
+ end
33
+ __cornucopia_assert_selector_function(:has_no_selector?, *new_args, options)
34
+ end
35
+
15
36
  def __cornucopia_assert_selector_function(assert_selector_function, *args)
16
37
  retry_count = 0
17
38
  result = nil
18
39
 
19
- support_options = __cornucopia__extract_selector_support_options(*args)
40
+ unless [:has_selector?, :has_no_selector?].include?(assert_selector_function)
41
+ support_options = __cornucopia__extract_selector_support_options(*args)
42
+ end
20
43
 
21
44
  begin
22
45
  retry_count += 1
@@ -18,14 +18,7 @@ Around do |scenario, block|
18
18
  if scenario.failed?
19
19
  seed_value = scenario.instance_variable_get(:@seed_value)
20
20
  puts ("random seed for testing was: #{seed_value}")
21
- end
22
-
23
- Cornucopia::Capybara::FinderDiagnostics::FindAction.clear_diagnosed_finders
24
- Cornucopia::Capybara::PageDiagnostics.clear_dumped_pages
25
- end
26
21
 
27
- After do |scenario|
28
- if scenario.failed?
29
22
  Cornucopia::Util::ReportBuilder.current_report.
30
23
  within_section("Test Error: #{scenario.feature.title}:#{scenario.title}") do |report|
31
24
  configured_report = Cornucopia::Util::Configuration.report_configuration :cucumber
@@ -33,14 +26,12 @@ After do |scenario|
33
26
  configured_report.add_report_objects scenario: scenario, cucumber: self
34
27
  configured_report.generate_report(report)
35
28
  end
36
-
37
- # Cornucopia::DiagnosticsReportBuilder.current_report.within_section("Error:") do |report|
38
- # report_generator = Cornucopia::Configuration.report_configuration(:cucumber)
39
- #
40
- # report_generator.add_report_objects(self: self, scenario: scenario)
41
- # report_generator.generate_report_for_object(report, diagnostics_name: scenario.file_colon_line)
42
- # end
29
+ else
30
+ Cornucopia::Util::ReportBuilder.current_report.test_succeeded
43
31
  end
32
+
33
+ Cornucopia::Capybara::FinderDiagnostics::FindAction.clear_diagnosed_finders
34
+ Cornucopia::Capybara::PageDiagnostics.clear_dumped_pages
44
35
  end
45
36
 
46
37
  at_exit do
@@ -14,6 +14,13 @@ RSpec.configure do |config|
14
14
  Cornucopia::Util::ReportBuilder.current_report.close
15
15
  end
16
16
 
17
+ config.before(:all) do
18
+ @context_seed_value = Cornucopia::Util::Configuration.context_seed ||
19
+ 100000000000000000000000000000000000000 + rand(899999999999999999999999999999999999999)
20
+
21
+ srand(@context_seed_value)
22
+ end
23
+
17
24
  config.around(:each) do |example|
18
25
  @seed_value = Cornucopia::Util::Configuration.seed ||
19
26
  100000000000000000000000000000000000000 + rand(899999999999999999999999999999999999999)
@@ -30,7 +37,7 @@ RSpec.configure do |config|
30
37
  example.run
31
38
 
32
39
  if (test_example.exception)
33
- puts ("random seed for testing was: #{@seed_value}")
40
+ puts ("random seed for testing was: #{@context_seed_value}, #{@seed_value}")
34
41
 
35
42
  Cornucopia::Util::ReportBuilder.current_report.
36
43
  within_section("Test Error: #{test_example.full_description}") do |report|
@@ -39,6 +46,8 @@ RSpec.configure do |config|
39
46
  configured_report.add_report_objects example: test_example, rspec: RSpec
40
47
  configured_report.generate_report(report)
41
48
  end
49
+ else
50
+ Cornucopia::Util::ReportBuilder.current_report.test_succeeded
42
51
  end
43
52
  end
44
53
 
@@ -5,13 +5,22 @@ function show_sub_report (event_obj)
5
5
  if (!(event_obj.shiftKey || event_obj.ctrlKey || event_obj.metaKey || event_obj.altKey))
6
6
  {
7
7
  link_item = $ (event_obj.target);
8
- $("#report-display-document").attr("src", link_item.attr ("href"))
9
- event_obj.preventDefault();
8
+ $ ("#report-display-document").attr ("src", link_item.attr ("href"));
9
+ event_obj.preventDefault ();
10
10
  }
11
11
  }
12
12
 
13
+ function resize_list (event_obj)
14
+ {
15
+ var max_height = window.innerHeight - 15;
16
+ $ (".coruncopia-report-holder-list-holder").css ("max-height", max_height + "px");
17
+ $ ("#report-display-document").css ("max-height", max_height + "px");
18
+ }
19
+
13
20
  $ (document).ready (function ()
14
21
  {
15
22
  $ (document).on ("click", "a.coruncopia-report-link", {}, show_sub_report);
23
+ $ (window).bind ("resize", {}, resize_list);
24
+ resize_list (null);
16
25
  }
17
26
  );
@@ -6,11 +6,11 @@
6
6
  <div class="coruncopia-report-holder-table">
7
7
  <div class="coruncopia-report-holder-row">
8
8
  <div class="coruncopia-report-holder-list-cell">
9
- <!--<div class=".coruncopia-report-holder-list-holder">-->
9
+ <div class="coruncopia-report-holder-list-holder">
10
10
  <ul class="report-index-list">
11
11
  %{report_list}
12
12
  </ul>
13
- <!--</div>-->
13
+ </div>
14
14
  </div>
15
15
  <div class="coruncopia-report-body-cell">
16
16
  <iframe class="coruncopia-report-body-frame" id="report-display-document" src=""></iframe>
@@ -8,22 +8,30 @@ Spinach.hooks.around_scenario do |scenario_data, step_definitions, &block|
8
8
  end
9
9
  end
10
10
 
11
- Spinach.hooks.before_scenario do |scenario, step_definitions|
12
- @running_scenario = scenario
11
+ Spinach.hooks.around_scenario do |scenario_data, step_definitions, &block|
12
+ @reported_error = false
13
+ @running_scenario = scenario_data
13
14
  seed_value = Cornucopia::Util::Configuration.seed ||
14
15
  100000000000000000000000000000000000000 + rand(899999999999999999999999999999999999999)
15
16
 
16
- scenario.instance_variable_set :@seed_value, seed_value
17
+ scenario_data.instance_variable_set :@seed_value, seed_value
17
18
 
18
19
  Cornucopia::Capybara::FinderDiagnostics::FindAction.clear_diagnosed_finders
19
20
  Cornucopia::Capybara::PageDiagnostics.clear_dumped_pages
20
- end
21
21
 
22
- Spinach.hooks.after_scenario do |scenario, step_definitions|
23
- @running_scenario = nil
22
+ begin
23
+ block.call
24
+ ensure
25
+ @running_scenario = nil
24
26
 
25
- Cornucopia::Capybara::FinderDiagnostics::FindAction.clear_diagnosed_finders
26
- Cornucopia::Capybara::PageDiagnostics.clear_dumped_pages
27
+ Cornucopia::Capybara::FinderDiagnostics::FindAction.clear_diagnosed_finders
28
+ Cornucopia::Capybara::PageDiagnostics.clear_dumped_pages
29
+
30
+ unless @reported_error
31
+ Cornucopia::Util::ReportBuilder.current_report.test_succeeded
32
+ end
33
+ @reported_error = false
34
+ end
27
35
  end
28
36
 
29
37
  Spinach.hooks.on_failed_step do |step_data, exception, location, step_definitions|
@@ -35,6 +43,8 @@ Spinach.hooks.on_error_step do |step_data, exception, location, step_definitions
35
43
  end
36
44
 
37
45
  def debug_failed_step(failure_description, step_data, exception, location, step_definitions)
46
+ @reported_error = true
47
+
38
48
  seed_value = @running_scenario.instance_variable_get(:@seed_value)
39
49
  puts ("random seed for testing was: #{seed_value}")
40
50
 
@@ -51,19 +61,6 @@ def debug_failed_step(failure_description, step_data, exception, location, step_
51
61
 
52
62
  configured_report.generate_report(report)
53
63
  end
54
-
55
- # Cornucopia::Util::ReportBuilder.current_report.within_section("#{failure_description}:") do |report|
56
- # report_generator = Cornucopia::Configuration.report_configuration(:spinach)
57
- #
58
- # report_generator.add_report_objects(failure_description: "#{failure_description} at:, #{location[0]}:#{location[1]}",
59
- # step_data: step_data,
60
- # exception: exception,
61
- # location: location,
62
- # step_definitions: step_definitions,
63
- # running_scenario: @running_scenario
64
- # )
65
- # report_generator.generate_report_for_object(report, diagnostics_name: "#{step_data.name}:#{step_data.line}")
66
- # end
67
64
  end
68
65
 
69
66
  Spinach.hooks.after_run do |status|
@@ -13,23 +13,26 @@ module Cornucopia
13
13
  def initialize
14
14
  @configurations = Cornucopia::Util::GenericSettings.new
15
15
 
16
- configurations.order_seed = nil
17
- configurations.rand_seed = nil
18
- configurations.user_log_files = {}
19
- configurations.default_num_lines = 500
20
- configurations.grab_logs = true
21
- configurations.print_timeout_min = 10
22
- configurations.selenium_cache_retry_count = 5
23
- configurations.analyze_find_exceptions = true
24
- configurations.analyze_selector_exceptions = true
25
- configurations.retry_with_found = false
26
- configurations.retry_match_with_found = false
27
- configurations.open_report_settings = { default: false }
28
- configurations.base_folder = "cornucopia_report"
16
+ configurations.order_seed = nil
17
+ configurations.rand_seed = nil
18
+ configurations.rand_context_seed = nil
19
+ configurations.user_log_files = {}
20
+ configurations.default_num_lines = 500
21
+ configurations.grab_logs = true
22
+ configurations.print_timeout_min = 10
23
+ configurations.selenium_cache_retry_count = 5
24
+ configurations.analyze_find_exceptions = true
25
+ configurations.analyze_selector_exceptions = true
26
+ configurations.ignore_finder_errors_on_success = true
27
+ configurations.ignore_has_selector_errors = true
28
+ configurations.retry_with_found = false
29
+ configurations.retry_match_with_found = false
30
+ configurations.open_report_settings = { default: false }
31
+ configurations.base_folder = "cornucopia_report"
29
32
 
30
33
  # configurations.alternate_retry = false
31
34
 
32
- configurations.default_configuration = {
35
+ configurations.default_configuration = {
33
36
  rspec: {
34
37
  min_fields: [
35
38
  :example__full_description,
@@ -42,7 +45,14 @@ module Cornucopia
42
45
  :example,
43
46
  :example__example_group_instance,
44
47
  :example__metadata__caller,
45
- :rspec__configuration__seed,
48
+ {
49
+ report_element: :rspec__configuration__seed,
50
+ report_options: { ignore_missing: true }
51
+ },
52
+ {
53
+ report_element: :rspec__configuration__ordering_manager__seed,
54
+ report_options: { ignore_missing: true }
55
+ },
46
56
  :logs,
47
57
  :capybara_page_diagnostics
48
58
  ],
@@ -60,7 +70,7 @@ module Cornucopia
60
70
  :example__fixture_connections,
61
71
  :example,
62
72
  :example__example_group_instance,
63
- ]
73
+ ],
64
74
  },
65
75
  cucumber: {
66
76
  min_fields: [
@@ -280,12 +290,36 @@ module Cornucopia
280
290
  Cornucopia::Util::Configuration.instance.configurations.rand_seed
281
291
  end
282
292
 
293
+ # rand_context_seed is the seed value used to seed the srand function at the start of a context.
294
+ # This is done to allow tests with random elements in them to be repeatable.
295
+ # If a test fails, simply set Cornucopia::Util::Configuration.rand_context_seed to the
296
+ # value of the failed tests context_seed value (output in the stdout and the generated report)
297
+ # and run the test again. This should re-run the exact same test, resulting in a
298
+ # repeatable test even with randomization in it.
299
+ def context_seed=(value)
300
+ Cornucopia::Util::Configuration.instance.configurations.rand_context_seed = value
301
+ srand(value) if value
302
+ end
303
+
304
+ def context_seed
305
+ Cornucopia::Util::Configuration.instance.configurations.rand_context_seed
306
+ end
307
+
283
308
  # order_seed is the seed value used to set the order that randomly ordered tests are run in.
284
309
  # This is provided as a convenience method. I think it is easier to set this in rails_helper than it is to
285
310
  # set it on the command line. This also provides a uniform method to do it.
286
311
  def order_seed=(value)
287
312
  Cornucopia::Util::Configuration.instance.configurations.order_seed = value
288
- RSpec.configuration.seed = value if value
313
+
314
+ if value
315
+ if RSpec.configuration.respond_to?(:seed)
316
+ RSpec.configuration.seed = value
317
+ else
318
+ # :nocov:
319
+ RSpec.configuration.ordering_manager.seed = value
320
+ # :nocov:
321
+ end
322
+ end
289
323
  end
290
324
 
291
325
  def order_seed
@@ -458,6 +492,33 @@ module Cornucopia
458
492
  Cornucopia::Util::Configuration.instance.configurations.analyze_selector_exceptions = value
459
493
  end
460
494
 
495
+ # This setting is used by the report builder.
496
+ #
497
+ # If a test has finder errors but still succeeds, ignore the errors and do not report them. This is useful
498
+ # for tests that test the existence of an element on the page using something like:
499
+ # expect(my_page).not_to have_page_element
500
+ def ignore_finder_errors_on_success
501
+ Cornucopia::Util::Configuration.instance.configurations.ignore_finder_errors_on_success
502
+ end
503
+
504
+ def ignore_finder_errors_on_success=(value)
505
+ Cornucopia::Util::Configuration.instance.configurations.ignore_finder_errors_on_success = value
506
+ end
507
+
508
+ # This setting is used by the matcher analysis.
509
+ #
510
+ # Generally speaking has_selector? is allowed to return true or false without needing to be to analyzed.
511
+ # So, the system ignores has_selector? failures and doesn't output an analysis.
512
+ #
513
+ # This will perform an analysis for each has_selector? failure.
514
+ def ignore_has_selector_errors
515
+ Cornucopia::Util::Configuration.instance.configurations.ignore_has_selector_errors
516
+ end
517
+
518
+ def ignore_has_selector_errors=(value)
519
+ Cornucopia::Util::Configuration.instance.configurations.ignore_has_selector_errors = value
520
+ end
521
+
461
522
  # Sometimes, the analysis process found the element when it wasn't found other ways.
462
523
  # This will cause the finder to try again with the found element.
463
524
  #
@@ -311,10 +311,12 @@ module Cornucopia
311
311
  if instance_variable_name
312
312
  report_object = parent_object.instance_variable_get(instance_variable_name)
313
313
  else
314
- report_object = nil
315
- print_value = "Could not identify field: #{export_field[:report_element][0..level].join("__")} while exporting #{export_field[:report_element].join("__")}"
314
+ unless report_options(export_field)[:ignore_missing]
315
+ report_object = nil
316
+ print_value = "Could not identify field: #{export_field[:report_element][0..level].join("__")} while exporting #{export_field[:report_element].join("__")}"
316
317
 
317
- report_table.write_stats "ERROR", print_value
318
+ report_table.write_stats "ERROR", print_value
319
+ end
318
320
  end
319
321
  end
320
322
  end
@@ -382,9 +384,7 @@ module Cornucopia
382
384
  end
383
385
  end
384
386
 
385
- print_options = export_field[:report_options]
386
- print_options ||= find_leaf_options(print_name).try(:[], :report_options)
387
- print_options ||= {}
387
+ print_options = report_options(export_field)
388
388
 
389
389
  if print_options[:label]
390
390
  print_name = print_options[:label]
@@ -395,9 +395,29 @@ module Cornucopia
395
395
  end
396
396
  end
397
397
 
398
- def find_leaf_options(variable_name)
398
+ def report_options(export_field)
399
+ print_options = export_field[:report_options]
400
+ print_options ||= find_leaf_options(export_field).try(:[], :report_options)
401
+ print_options ||= {}
402
+
403
+ print_options
404
+ end
405
+
406
+ def find_leaf_options(export_field)
399
407
  found_options = nil
400
408
 
409
+ if export_field[:report_element][-1] == :to_s
410
+ variable_name = export_field[:report_element][-2]
411
+ else
412
+ variable_name = export_field[:report_element][-1]
413
+ end
414
+
415
+ if export_field[:report_element].length >= 2
416
+ if variable_name.to_s =~ /^-?[0-9]+$/
417
+ variable_name = export_field[:report_element][-2]
418
+ end
419
+ end
420
+
401
421
  if @leaf_options
402
422
  @leaf_options.each do |leaf_option|
403
423
  if leaf_option[:report_element].include?(variable_name)
@@ -447,7 +447,7 @@ module Cornucopia
447
447
  end
448
448
 
449
449
  def initialize_report_test_files
450
- @report_body += test_list_item
450
+ @report_body += test_list_item.to_s
451
451
 
452
452
  support_folder_name = report_test_folder_name
453
453
 
@@ -477,6 +477,24 @@ module Cornucopia
477
477
  File.open(report_test_contents_page_name, "a:UTF-8", &block)
478
478
  end
479
479
 
480
+ def test_succeeded
481
+ if @report_test_folder_name
482
+ FileUtils.rm_rf report_test_folder_name
483
+ @report_body.gsub!(@test_list_item, "")
484
+
485
+ if @report_body.blank?
486
+ FileUtils.rm_rf report_base_page_name
487
+ FileUtils.rm_rf File.join(report_folder_name, "report.js")
488
+ FileUtils.rm_rf File.join(report_folder_name, "cornucopia.css")
489
+ @report_body = "".html_safe
490
+ else
491
+ rebuild_report_holder_page
492
+ end
493
+
494
+ @test_number -= 1
495
+ end
496
+ end
497
+
480
498
  def within_test(test_name, &block)
481
499
  orig_test_name = @test_name
482
500
  orig_test_folder = @report_test_folder_name
@@ -1,3 +1,3 @@
1
1
  module Cornucopia
2
- VERSION = "0.1.18"
2
+ VERSION = "0.1.19"
3
3
  end
@@ -224,13 +224,13 @@ describe Cornucopia::Capybara::MatcherExtensions, type: :feature do
224
224
 
225
225
  expect(Cornucopia::Capybara::FinderDiagnostics::FindAction).to receive(:new).and_return(stubbed_finder)
226
226
 
227
- retry_found = [true, false].sample
227
+ retry_found = [true, false].sample
228
228
  # retry_alt = [true, false].sample
229
229
 
230
230
  Cornucopia::Util::Configuration.retry_match_with_found = retry_found
231
231
  # Cornucopia::Util::Configuration.alternate_retry = retry_alt
232
232
 
233
- retry_found = retry_found || nil
233
+ retry_found = retry_found || nil
234
234
  # retry_alt = retry_alt || nil
235
235
 
236
236
  expect(stubbed_finder).to receive(:perform_analysis).with(retry_found).and_return true
@@ -257,13 +257,13 @@ describe Cornucopia::Capybara::MatcherExtensions, type: :feature do
257
257
 
258
258
  expect(Cornucopia::Capybara::FinderDiagnostics::FindAction).to receive(:new).and_return(stubbed_finder)
259
259
 
260
- retry_found = [true, false].sample
260
+ retry_found = [true, false].sample
261
261
  # retry_alt = [true, false].sample
262
262
 
263
263
  Cornucopia::Util::Configuration.retry_match_with_found = retry_found
264
264
  # Cornucopia::Util::Configuration.alternate_retry = retry_alt
265
265
 
266
- retry_found = retry_found || nil
266
+ retry_found = retry_found || nil
267
267
  # retry_alt = retry_alt || nil
268
268
 
269
269
  expect(stubbed_finder).to receive(:perform_analysis).with(retry_found).and_return true
@@ -290,13 +290,13 @@ describe Cornucopia::Capybara::MatcherExtensions, type: :feature do
290
290
 
291
291
  expect(Cornucopia::Capybara::FinderDiagnostics::FindAction).to receive(:new).and_return(stubbed_finder)
292
292
 
293
- retry_found = [true, false].sample
293
+ retry_found = [true, false].sample
294
294
  # retry_alt = [true, false].sample
295
295
 
296
296
  Cornucopia::Util::Configuration.retry_match_with_found = retry_found
297
297
  # Cornucopia::Util::Configuration.alternate_retry = retry_alt
298
298
 
299
- retry_found = retry_found || nil
299
+ retry_found = retry_found || nil
300
300
  # retry_alt = retry_alt || nil
301
301
 
302
302
  expect(stubbed_finder).to receive(:perform_analysis).with(retry_found).and_return false
@@ -322,13 +322,13 @@ describe Cornucopia::Capybara::MatcherExtensions, type: :feature do
322
322
 
323
323
  expect(Cornucopia::Capybara::FinderDiagnostics::FindAction).to receive(:new).and_return(stubbed_finder)
324
324
 
325
- retry_found = [true, false].sample
325
+ retry_found = [true, false].sample
326
326
  # retry_alt = [true, false].sample
327
327
 
328
328
  Cornucopia::Util::Configuration.retry_match_with_found = retry_found
329
329
  # Cornucopia::Util::Configuration.alternate_retry = retry_alt
330
330
 
331
- retry_found = retry_found || nil
331
+ retry_found = retry_found || nil
332
332
  # retry_alt = retry_alt || nil
333
333
 
334
334
  expect(stubbed_finder).to receive(:perform_analysis).with(retry_found).and_return false
@@ -340,5 +340,36 @@ describe Cornucopia::Capybara::MatcherExtensions, type: :feature do
340
340
  end
341
341
  end
342
342
  end
343
+
344
+ context "with a sample test file" do
345
+ let(:base_folder) { File.absolute_path(File.join(File.dirname(@file_name_1), "../..")) }
346
+
347
+ before(:example) do
348
+ Cornucopia::Util::FileAsset.new("../../../spec/fixtures/sample_page.html").
349
+ create_file(File.join(base_folder, "sample_report/sample_file.html"))
350
+
351
+ ::Capybara.current_session.visit("/sample_report/sample_file.html")
352
+ end
353
+
354
+ it "finds a has_selector? item and does not create a report" do
355
+ expect(::Capybara.current_session.has_selector?("\#select-box")).to be_truthy
356
+ expect(File.directory?(Rails.root.join("cornucopia_report/"))).to be_falsey
357
+ end
358
+
359
+ it "does not find a has_selector? item and does not create a report" do
360
+ expect(::Capybara.current_session.has_selector?("\#select-box-not-there")).to be_falsey
361
+ expect(File.directory?(Rails.root.join("cornucopia_report/"))).to be_falsey
362
+ end
363
+
364
+ it "finds a has_no_selector? item and does not create a report" do
365
+ expect(::Capybara.current_session.has_no_selector?("\#select-box-not-there")).to be_truthy
366
+ expect(File.directory?(Rails.root.join("cornucopia_report/"))).to be_falsey
367
+ end
368
+
369
+ it "does not find a has_no_selector? item and does not create a report" do
370
+ expect(::Capybara.current_session.has_no_selector?("\#select-box")).to be_falsey
371
+ expect(File.directory?(Rails.root.join("cornucopia_report/"))).to be_falsey
372
+ end
373
+ end
343
374
  end
344
375
  end
@@ -18,12 +18,29 @@ describe "Cornucopia::Util::Configuration" do
18
18
  end
19
19
  end
20
20
 
21
+ it "has a default context_seed value" do
22
+ expect(Cornucopia::Util::Configuration.context_seed).not_to be
23
+ end
24
+
25
+ it "can set the context_seed value" do
26
+ begin
27
+ context_seed_value = rand(0..999999999999999999999999999)
28
+
29
+ Cornucopia::Util::Configuration.context_seed = context_seed_value
30
+
31
+ expect(Cornucopia::Util::Configuration.context_seed).to be == context_seed_value
32
+ ensure
33
+ Cornucopia::Util::Configuration.context_seed = nil
34
+ end
35
+ end
36
+
21
37
  it "has a default order_seed value" do
22
38
  expect(Cornucopia::Util::Configuration.order_seed).not_to be
23
39
  end
24
40
 
25
41
  it "can set the order_seed value" do
26
42
  config_seed = RSpec.configuration.seed
43
+
27
44
  begin
28
45
  seed_value = rand(0..999999999999999999999999999)
29
46
 
@@ -37,6 +54,23 @@ describe "Cornucopia::Util::Configuration" do
37
54
  end
38
55
  end
39
56
 
57
+ it "can set the order_seed value on a newer version of RSpec" do
58
+ config_seed = RSpec.configuration.seed
59
+
60
+ begin
61
+ seed_value = rand(0..999999999999999999999999999)
62
+
63
+ expect(RSpec.configuration).to receive(:respond_to?).and_return false
64
+ Cornucopia::Util::Configuration.order_seed = seed_value
65
+
66
+ expect(Cornucopia::Util::Configuration.order_seed).to be == seed_value
67
+ expect(RSpec.configuration.seed).to be == seed_value
68
+ ensure
69
+ RSpec.configuration.seed = config_seed
70
+ Cornucopia::Util::Configuration.order_seed = nil
71
+ end
72
+ end
73
+
40
74
  describe "log files" do
41
75
  it "grabs logs by default" do
42
76
  expect(Cornucopia::Util::Configuration.grab_logs).to be_truthy
@@ -286,6 +320,38 @@ describe "Cornucopia::Util::Configuration" do
286
320
  end
287
321
  end
288
322
 
323
+ describe "#ignore_finder_errors_on_success" do
324
+ it "#can read the default" do
325
+ expect(Cornucopia::Util::Configuration.ignore_finder_errors_on_success).to be_truthy
326
+ end
327
+
328
+ it "#can set the value" do
329
+ begin
330
+ Cornucopia::Util::Configuration.ignore_finder_errors_on_success = false
331
+
332
+ expect(Cornucopia::Util::Configuration.ignore_finder_errors_on_success).to be_falsy
333
+ ensure
334
+ Cornucopia::Util::Configuration.ignore_finder_errors_on_success = true
335
+ end
336
+ end
337
+ end
338
+
339
+ describe "#ignore_has_selector_errors" do
340
+ it "#can read the default" do
341
+ expect(Cornucopia::Util::Configuration.ignore_has_selector_errors).to be_truthy
342
+ end
343
+
344
+ it "#can set the value" do
345
+ begin
346
+ Cornucopia::Util::Configuration.ignore_has_selector_errors = false
347
+
348
+ expect(Cornucopia::Util::Configuration.ignore_has_selector_errors).to be_falsy
349
+ ensure
350
+ Cornucopia::Util::Configuration.ignore_has_selector_errors = true
351
+ end
352
+ end
353
+ end
354
+
289
355
  describe "#retry_with_found" do
290
356
  it "#can read the default" do
291
357
  expect(Cornucopia::Util::Configuration.retry_with_found).to be_falsy
@@ -987,11 +987,53 @@ describe Cornucopia::Util::ConfiguredReport do
987
987
  leaf_pos += leaf_size
988
988
  end
989
989
 
990
- rand_item = rand(0..leaf_pos - 1)
990
+ rand_item = rand(0..leaf_options.length - 1)
991
991
 
992
992
  simple_report.leaf_options = leaf_options
993
- expect(simple_report.find_leaf_options(leaf_elements[rand_item])).to be == leaf_options[rand_item / leaf_size]
994
- expect(simple_report.find_leaf_options(leaf_elements[leaf_pos])).not_to be
993
+ expect(simple_report.find_leaf_options(leaf_options[rand_item])).to be == leaf_options[rand_item]
994
+ expect(simple_report.find_leaf_options({ report_element: [leaf_elements[leaf_pos]] })).not_to be
995
+ end
996
+
997
+ it "ignores to_s" do
998
+ leaf_options = []
999
+ leaf_elements = rand(40..50).times.map { Faker::Lorem.word.to_sym }.uniq
1000
+ num_items = rand(5..10)
1001
+ leaf_pos = 0
1002
+ leaf_size = (leaf_elements.size - 1) / num_items
1003
+
1004
+ num_items.times do
1005
+ some_options = { some_option: Faker::Lorem.sentence }
1006
+ leaf_options << { report_element: [*leaf_elements[leaf_pos..leaf_pos + leaf_size - 1], :to_s],
1007
+ report_options: some_options }
1008
+ leaf_pos += leaf_size
1009
+ end
1010
+
1011
+ rand_item = rand(0..leaf_options.length - 1)
1012
+
1013
+ simple_report.leaf_options = leaf_options
1014
+ expect(simple_report.find_leaf_options(leaf_options[rand_item])).to be == leaf_options[rand_item]
1015
+ expect(simple_report.find_leaf_options({ report_element: [leaf_elements[leaf_pos]] })).not_to be
1016
+ end
1017
+
1018
+ it "ignores array indexes" do
1019
+ leaf_options = []
1020
+ leaf_elements = rand(40..50).times.map { Faker::Lorem.word.to_sym }.uniq
1021
+ num_items = rand(5..10)
1022
+ leaf_pos = 0
1023
+ leaf_size = (leaf_elements.size - 1) / num_items
1024
+
1025
+ num_items.times do
1026
+ some_options = { some_option: Faker::Lorem.sentence }
1027
+ leaf_options << { report_element: [*leaf_elements[leaf_pos..leaf_pos + leaf_size - 1], rand(0..1000).to_s.to_sym],
1028
+ report_options: some_options }
1029
+ leaf_pos += leaf_size
1030
+ end
1031
+
1032
+ rand_item = rand(0..leaf_options.length - 1)
1033
+
1034
+ simple_report.leaf_options = leaf_options
1035
+ expect(simple_report.find_leaf_options(leaf_options[rand_item])).to be == leaf_options[rand_item]
1036
+ expect(simple_report.find_leaf_options({ report_element: [leaf_elements[leaf_pos]] })).not_to be
995
1037
  end
996
1038
  end
997
1039
 
@@ -941,6 +941,90 @@ describe Cornucopia::Util::ReportBuilder do
941
941
  end
942
942
  end
943
943
 
944
+ describe "#test_succeeded" do
945
+ it "deletes a sub-test as if nothing failed if it is the only one." do
946
+ current_report = send(report_settings[:report])
947
+
948
+ test_folder = nil
949
+ test_file = nil
950
+
951
+ rand(1..3).times do
952
+ current_report.within_test(test_names[0]) do
953
+ current_report.within_section(section_names[0]) do |report_section|
954
+ report_section.within_table do |report_table|
955
+ report_table.write_stats(Faker::Lorem.word, Faker::Lorem.sentence)
956
+ end
957
+ end
958
+
959
+ test_folder = current_report.report_test_folder_name
960
+ test_file = current_report.report_base_page_name
961
+
962
+ expect(File.exists?(test_file)).to be_truthy
963
+ expect(File.directory?(test_folder)).to be_truthy
964
+
965
+ current_report.test_succeeded
966
+
967
+ expect(File.exists?(test_file)).to be_falsey
968
+ expect(File.directory?(test_folder)).to be_falsey
969
+ end
970
+ end
971
+
972
+ current_report.close
973
+
974
+ expect(File.exists?(test_file)).to be_truthy
975
+ expect(File.directory?(test_folder)).to be_falsey
976
+
977
+ read_file = File.read(current_report.report_contents_page_name)
978
+ expect(read_file).not_to match /#{test_names[0]}/
979
+ expect(read_file).to match /No Errors to report/
980
+ end
981
+
982
+ it "deletes a sub-test as if it doesn't exist" do
983
+ current_report = send(report_settings[:report])
984
+
985
+ current_report.within_test(test_names[0]) do
986
+ current_report.within_section(section_names[0]) do |report_section|
987
+ report_section.within_table do |report_table|
988
+ report_table.write_stats(Faker::Lorem.word, Faker::Lorem.sentence)
989
+ end
990
+ end
991
+ end
992
+
993
+ test_folder = nil
994
+ test_file = nil
995
+
996
+ rand(1..3).times do
997
+ current_report.within_test(test_names[1]) do
998
+ current_report.within_section(section_names[1]) do |report_section|
999
+ report_section.within_table do |report_table|
1000
+ report_table.write_stats(Faker::Lorem.word, Faker::Lorem.sentence)
1001
+ end
1002
+ end
1003
+
1004
+ test_folder = current_report.report_test_folder_name
1005
+ test_file = current_report.report_base_page_name
1006
+
1007
+ expect(File.exists?(test_file)).to be_truthy
1008
+ expect(File.directory?(test_folder)).to be_truthy
1009
+
1010
+ current_report.test_succeeded
1011
+
1012
+ expect(File.exists?(test_file)).to be_truthy
1013
+ expect(File.directory?(test_folder)).to be_falsey
1014
+ end
1015
+ end
1016
+
1017
+ current_report.close
1018
+
1019
+ expect(File.exists?(test_file)).to be_truthy
1020
+ expect(File.directory?(test_folder)).to be_falsey
1021
+
1022
+ read_file = File.read(current_report.report_base_page_name)
1023
+ expect(read_file).to match /#{test_names[0]}/
1024
+ expect(read_file).not_to match /#{test_names[1]}/
1025
+ end
1026
+ end
1027
+
944
1028
  describe "#within_test" do
945
1029
  it "starts a test with a specific name" do
946
1030
  current_report = send(report_settings[:report])
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cornucopia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.18
4
+ version: 0.1.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - RealNobody
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-30 00:00:00.000000000 Z
11
+ date: 2015-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails