Fix RSpec 3 compatibility: Replace pending with skip

Updated vulnerability specs to use `skip` instead of `pending` to align
with RSpec 3+ semantics where pending means "expected to fail."

Background:
In RSpec 2, `pending` would skip tests. In RSpec 3+, `pending` marks
a test as expected to fail, and if it passes, that's an error. This was
causing issues in maintainer mode where passing tests were incorrectly
flagged as failures.

Changes:
- Replaced `pending unless verifying_fixed?` with `skip unless verifying_fixed?`
  in 11 vulnerability spec files:
  - broken_auth_spec.rb
  - command_injection_spec.rb
  - csrf_spec.rb
  - insecure_dor_spec.rb
  - mass_assignment_spec.rb
  - password_complexity_spec.rb
  - sensitive_data_exposure.rb
  - sql_injection_spec.rb
  - unvalidated_redirects_spec.rb
  - url_access_spec.rb
  - xss_spec.rb

Impact:
- Maintainer mode: Tests are properly skipped (no false failures)
- Training mode: Tests run and demonstrate vulnerabilities as before
- All tests pass with 0 failures in maintainer mode

Reference: https://rspec.info/blog/2014/05/notable-changes-in-rspec-3

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ken Johnson
2026-01-05 20:14:08 -05:00
parent d25c5baf29
commit 5d698c8003
11 changed files with 11 additions and 11 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ feature "broken_auth" do
before do before do
UserFixture.reset_all_users UserFixture.reset_all_users
pending unless verifying_fixed? skip unless verifying_fixed?
end end
scenario "one\nTutorial: https://github.com/OWASP/railsgoat/wiki/A2-Credential-Enumeration" do scenario "one\nTutorial: https://github.com/OWASP/railsgoat/wiki/A2-Credential-Enumeration" do
@@ -7,7 +7,7 @@ feature "command injection" do
before do before do
UserFixture.reset_all_users UserFixture.reset_all_users
pending unless verifying_fixed? skip unless verifying_fixed?
end end
scenario "attack\nTutorial: https://github.com/OWASP/railsgoat/wiki/A1-Command-Injection", js: true do scenario "attack\nTutorial: https://github.com/OWASP/railsgoat/wiki/A1-Command-Injection", js: true do
+1 -1
View File
@@ -7,7 +7,7 @@ feature "csrf" do
before(:each) do before(:each) do
UserFixture.reset_all_users UserFixture.reset_all_users
pending unless verifying_fixed? skip unless verifying_fixed?
end end
scenario "attack\nTutorial: https://github.com/OWASP/railsgoat/wiki/R4-A8-CSRF", js: true do scenario "attack\nTutorial: https://github.com/OWASP/railsgoat/wiki/R4-A8-CSRF", js: true do
+1 -1
View File
@@ -7,7 +7,7 @@ feature "insecure direct object reference" do
before do before do
UserFixture.reset_all_users UserFixture.reset_all_users
pending unless verifying_fixed? skip unless verifying_fixed?
end end
scenario "attack one" do scenario "attack one" do
+1 -1
View File
@@ -6,7 +6,7 @@ feature "mass assignment" do
before do before do
UserFixture.reset_all_users UserFixture.reset_all_users
pending unless verifying_fixed? skip unless verifying_fixed?
end end
scenario "attack one" do scenario "attack one" do
@@ -6,7 +6,7 @@ feature "password complexity" do
before do before do
UserFixture.reset_all_users UserFixture.reset_all_users
pending unless verifying_fixed? skip unless verifying_fixed?
end end
scenario "one\nTutorial: https://github.com/OWASP/railsgoat/wiki/A2-Lack-of-Password-Complexity" do scenario "one\nTutorial: https://github.com/OWASP/railsgoat/wiki/A2-Lack-of-Password-Complexity" do
@@ -9,7 +9,7 @@ feature "sensitive data exposure" do
UserFixture.reset_all_users UserFixture.reset_all_users
normal_user.work_info.update(:SSN, user_ssn) normal_user.work_info.update(:SSN, user_ssn)
pending unless verifying_fixed? skip unless verifying_fixed?
end end
# this won't work with javascript_driver, as it'll apply the javascript # this won't work with javascript_driver, as it'll apply the javascript
+1 -1
View File
@@ -7,7 +7,7 @@ feature "sql injection" do
before do before do
UserFixture.reset_all_users UserFixture.reset_all_users
pending unless verifying_fixed? skip unless verifying_fixed?
end end
scenario "attack\nTutorial: https://github.com/OWASP/railsgoat/wiki/R5-A1-SQL-Injection-Concatentation" do scenario "attack\nTutorial: https://github.com/OWASP/railsgoat/wiki/R5-A1-SQL-Injection-Concatentation" do
@@ -7,7 +7,7 @@ feature "unvalidated redirect" do
before do before do
UserFixture.reset_all_users UserFixture.reset_all_users
pending unless verifying_fixed? skip unless verifying_fixed?
end end
scenario "attack\nTutorial: https://github.com/OWASP/railsgoat/wiki/A10-Unvalidated-Redirects-and-Forwards-(redirect_to)", js: true do scenario "attack\nTutorial: https://github.com/OWASP/railsgoat/wiki/A10-Unvalidated-Redirects-and-Forwards-(redirect_to)", js: true do
+1 -1
View File
@@ -7,7 +7,7 @@ feature "url access" do
before do before do
UserFixture.reset_all_users UserFixture.reset_all_users
pending unless verifying_fixed? skip unless verifying_fixed?
end end
scenario "attack\nTutorial: https://github.com/OWASP/railsgoat/wiki/A7-Missing-Function-Level-Access-Control--(Admin-Controller)", js: true do scenario "attack\nTutorial: https://github.com/OWASP/railsgoat/wiki/A7-Missing-Function-Level-Access-Control--(Admin-Controller)", js: true do
+1 -1
View File
@@ -7,7 +7,7 @@ feature "xss" do
before(:each) do before(:each) do
UserFixture.reset_all_users UserFixture.reset_all_users
pending unless verifying_fixed? skip unless verifying_fixed?
end end
scenario "attack\nTutorial: https://github.com/OWASP/railsgoat/wiki/A3-Cross-Site-Scripting", js: true do scenario "attack\nTutorial: https://github.com/OWASP/railsgoat/wiki/A3-Cross-Site-Scripting", js: true do