From 103f6ce89b66169a5d10d726b30f61ec3134dd3b Mon Sep 17 00:00:00 2001 From: "Aleksandar N. Kostadinov" Date: Fri, 1 Oct 2021 12:45:08 +0300 Subject: [PATCH] null database strategy to disable @javascript handling --- CHANGELOG.md | 2 +- ...hoose_javascript_database_strategy.feature | 34 ++++++++++++++++++- lib/cucumber/rails.rb | 1 + lib/cucumber/rails/database.rb | 3 +- lib/cucumber/rails/database/null_strategy.rb | 15 ++++++++ spec/cucumber/rails/database_spec.rb | 1 + 6 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 lib/cucumber/rails/database/null_strategy.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index 38456056..89e5ab3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ on how to contribute to Cucumber. ### New Features -* +* Added `:none` option for `javascript_strategy` which indicates no special handling of `@javascript` tagged tests ([#522](https://github.com/cucumber/cucumber-rails/pull/522) [akostadinov]) ### Changed diff --git a/features/choose_javascript_database_strategy.feature b/features/choose_javascript_database_strategy.feature index 670b75c8..100ebfb8 100644 --- a/features/choose_javascript_database_strategy.feature +++ b/features/choose_javascript_database_strategy.feature @@ -20,9 +20,12 @@ Feature: Choose javascript database strategy Right now, the default behavior is to use truncation, but you can override this by telling cucumber-rails which strategy to use for javascript scenarios. - The deletion strategy can be quicker for situations where truncation causes locks which + The `:deletion` strategy can be quicker for situations where truncation causes locks which has been reported by some Oracle users. + The `:none` strategy can be used when user doesn't want special handling of scenario + database clean-up regardless of tags set for said scenario. + Background: Given I have created a new Rails app and installed cucumber-rails And I have a "Widget" ActiveRecord model object @@ -101,6 +104,35 @@ Feature: Choose javascript database strategy 5 steps (5 passed) """ + Scenario: Set the strategy to none and run a javascript scenario. + When I append to "features/env.rb" with: + """ + DatabaseCleaner.strategy = :transaction + Cucumber::Rails::Database.javascript_strategy = :none + """ + And I write to "features/widgets.feature" with: + """ + Feature: + Background: + When I create 2 widgets + + @javascript + Scenario: + When I create 3 widgets + Then I should have 5 widgets + And the DatabaseCleaner strategy should be transaction + + Scenario: + Then I should have 2 widgets + And the DatabaseCleaner strategy should be transaction + """ + And I run the cukes + Then the feature run should pass with: + """ + 2 scenarios (2 passed) + 7 steps (7 passed) + """ + Scenario: Set the strategy to truncation with an except option and run a javascript scenario. When I append to "features/env.rb" with: """ diff --git a/lib/cucumber/rails.rb b/lib/cucumber/rails.rb index 94105831..1c309dfa 100644 --- a/lib/cucumber/rails.rb +++ b/lib/cucumber/rails.rb @@ -24,6 +24,7 @@ require 'cucumber/rails/capybara' require 'cucumber/rails/database/strategy' require 'cucumber/rails/database/deletion_strategy' + require 'cucumber/rails/database/null_strategy' require 'cucumber/rails/database/shared_connection_strategy' require 'cucumber/rails/database/truncation_strategy' require 'cucumber/rails/database' diff --git a/lib/cucumber/rails/database.rb b/lib/cucumber/rails/database.rb index 550fb699..85eb8ca4 100644 --- a/lib/cucumber/rails/database.rb +++ b/lib/cucumber/rails/database.rb @@ -49,7 +49,8 @@ def map truncation: TruncationStrategy, shared_connection: SharedConnectionStrategy, transaction: SharedConnectionStrategy, - deletion: DeletionStrategy + deletion: DeletionStrategy, + none: NullStrategy } end diff --git a/lib/cucumber/rails/database/null_strategy.rb b/lib/cucumber/rails/database/null_strategy.rb new file mode 100644 index 00000000..db5d3d88 --- /dev/null +++ b/lib/cucumber/rails/database/null_strategy.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Cucumber + module Rails + module Database + class NullStrategy + def before_js; end + + def before_non_js; end + + def after; end + end + end + end +end diff --git a/spec/cucumber/rails/database_spec.rb b/spec/cucumber/rails/database_spec.rb index 12ae8642..6a2eb159 100644 --- a/spec/cucumber/rails/database_spec.rb +++ b/spec/cucumber/rails/database_spec.rb @@ -3,6 +3,7 @@ require 'database_cleaner' require 'cucumber/rails/database/strategy' require 'cucumber/rails/database/deletion_strategy' +require 'cucumber/rails/database/null_strategy' require 'cucumber/rails/database/shared_connection_strategy' require 'cucumber/rails/database/truncation_strategy' require 'cucumber/rails/database'