From 3f6600541edad26f59fbc479ffa392bcb3c78653 Mon Sep 17 00:00:00 2001
From: Vaidehi Joshi
Date: Fri, 19 Mar 2021 13:28:06 -0700
Subject: [PATCH] =?UTF-8?q?=E2=9C=82=EF=B8=8F=20Remove=20the=20approvals?=
=?UTF-8?q?=20gem=20=E2=9C=82=EF=B8=8F=20(#12978)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Remove approvals fixtures
* Remove approvals initializer
* Remove approvals gem
* Remove approvals step from travis.yml
* Remove approvals from dockerignore and gitignore
* Remove references to approvals gem in docs
* Un-approvals spec/liquid_tags/codepen_tag_spec.rb
* Un-approvals spec/liquid_tags/dotnet_fiddle_tag_spec.rb
* Temporarily skip other approvals tests
We will still need to delete files in /spec/fixtures/approvals after this.
* Revert changes to dotnet_fiddle_tag_spec and codepen_tag_spec, skip those tests instead
* Temporarily skip more approvals based tests
* Attempt at moving html doc inline
* Comment out one more approvals spec
* Update dotnet fiddle and codepen liquid tag specs to not use Approvals
* Update liquid tag specs + system specs to not use Approvals
* Un-approval feed import, github issue, and tweet tag specs
* Re-add .approvals to gitignore and dockerignore
* Use Rspec compound expectations
---
.travis.yml | 1 -
Gemfile | 1 -
Gemfile.lock | 4 -
docs/tests/approvals-tests.md | 43 ------
docs/tests/readme.md | 1 -
.../generates_katex_output.approved.html | 12 --
.../accepts_a_valid_parler_url.approved.html | 7 -
spec/liquid_tags/codepen_tag_spec.rb | 7 +-
spec/liquid_tags/comment_tag_spec.rb | 2 +-
spec/liquid_tags/details_tag_spec.rb | 4 +-
spec/liquid_tags/dotnet_fiddle_tag_spec.rb | 5 +-
spec/liquid_tags/instagram_tag_spec.rb | 10 +-
spec/liquid_tags/js_fiddle_tag_spec.rb | 7 +-
spec/liquid_tags/jsitor_tag_spec.rb | 39 +++--
spec/liquid_tags/katex_tag_spec.rb | 4 +-
spec/liquid_tags/kotlin_tag_spec.rb | 9 +-
spec/liquid_tags/next_tech_tag_spec.rb | 10 +-
spec/liquid_tags/parler_tag_spec.rb | 6 +-
spec/liquid_tags/runkit_tag_spec.rb | 7 +-
spec/liquid_tags/soundcloud_tag_spec.rb | 7 +-
spec/liquid_tags/tweet_tag_spec.rb | 7 +-
spec/liquid_tags/user_tag_spec.rb | 2 +-
spec/liquid_tags/wikipedia_tag_spec.rb | 4 +-
spec/liquid_tags/youtube_tag_spec.rb | 18 ++-
spec/models/github_issue_spec.rb | 6 +-
spec/services/feeds/import_spec.rb | 17 +--
.../codepen_liquid_tag.approved.html | 7 -
.../details_liquid_tag_spec.approved.html | 7 -
.../dotnetfiddle_liquid_tag.approved.html | 7 -
...ail_subscriptionsunsubscribe.approved.html | 18 ---
.../instagram_liquid_tag.approved.html | 9 --
.../jsfiddle_liquid_tag.approved.html | 7 -
.../approvals/jsitor_liquid_tag.approved.html | 7 -
...sitor_liquid_tag_with_hyphen.approved.html | 7 -
...sitor_liquid_tag_with_params.approved.html | 7 -
.../approvals/kotlin_liquid_tag.approved.html | 7 -
.../nexttech_liquid_tag.approved.html | 7 -
.../runkit_liquid_tag_spec.approved.html | 18 ---
.../soundcloud_liquid_tag.approved.html | 7 -
.../user_preview_article_body.approved.html | 142 ------------------
.../user_submit_article.approved.html | 1 -
.../youtube_liquid_tag_no_time.approved.html | 7 -
...d_tag_no_time_trailing_space.approved.html | 7 -
...youtube_liquid_tag_with_time.approved.html | 7 -
spec/support/initializers/approvals.rb | 5 -
spec/system/user_uses_the_editor_spec.rb | 16 +-
.../unsubscribe.html.erb_spec.rb | 2 +-
vendor/cache/approvals-0.0.24.gem | Bin 35840 -> 0 bytes
48 files changed, 131 insertions(+), 411 deletions(-)
delete mode 100644 docs/tests/approvals-tests.md
delete mode 100644 spec/fixtures/approvals/katextag/render/generates_katex_output.approved.html
delete mode 100644 spec/fixtures/approvals/parlertag/id/accepts_a_valid_parler_url.approved.html
delete mode 100644 spec/support/fixtures/approvals/codepen_liquid_tag.approved.html
delete mode 100644 spec/support/fixtures/approvals/details_liquid_tag_spec.approved.html
delete mode 100644 spec/support/fixtures/approvals/dotnetfiddle_liquid_tag.approved.html
delete mode 100644 spec/support/fixtures/approvals/email_subscriptionsunsubscribe.approved.html
delete mode 100644 spec/support/fixtures/approvals/instagram_liquid_tag.approved.html
delete mode 100644 spec/support/fixtures/approvals/jsfiddle_liquid_tag.approved.html
delete mode 100644 spec/support/fixtures/approvals/jsitor_liquid_tag.approved.html
delete mode 100644 spec/support/fixtures/approvals/jsitor_liquid_tag_with_hyphen.approved.html
delete mode 100644 spec/support/fixtures/approvals/jsitor_liquid_tag_with_params.approved.html
delete mode 100644 spec/support/fixtures/approvals/kotlin_liquid_tag.approved.html
delete mode 100644 spec/support/fixtures/approvals/nexttech_liquid_tag.approved.html
delete mode 100644 spec/support/fixtures/approvals/runkit_liquid_tag_spec.approved.html
delete mode 100644 spec/support/fixtures/approvals/soundcloud_liquid_tag.approved.html
delete mode 100644 spec/support/fixtures/approvals/user_preview_article_body.approved.html
delete mode 100644 spec/support/fixtures/approvals/user_submit_article.approved.html
delete mode 100644 spec/support/fixtures/approvals/youtube_liquid_tag_no_time.approved.html
delete mode 100644 spec/support/fixtures/approvals/youtube_liquid_tag_no_time_trailing_space.approved.html
delete mode 100644 spec/support/fixtures/approvals/youtube_liquid_tag_with_time.approved.html
delete mode 100644 spec/support/initializers/approvals.rb
delete mode 100644 vendor/cache/approvals-0.0.24.gem
diff --git a/.travis.yml b/.travis.yml
index 9633cc4d3..3c1abcf4e 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -60,7 +60,6 @@ install:
script:
- bundle exec rails db:create db:schema:load webpacker:compile
- bin/knapsack_pro_rspec
- - '[ ! -f .approvals ] || bundle exec approvals verify --ask false'
notifications:
slack:
if: branch = master
diff --git a/Gemfile b/Gemfile
index c05f5c58e..c2d730649 100644
--- a/Gemfile
+++ b/Gemfile
@@ -159,7 +159,6 @@ group :development, :test do
end
group :test do
- gem "approvals", "~> 0.0" # A library to make it easier to do golden-master style testing in Ruby
gem "exifr", ">= 1.3.6" # EXIF Reader is a module to read EXIF from JPEG and TIFF images
gem "factory_bot_rails", "~> 6.1" # factory_bot is a fixtures replacement with a straightforward definition syntax, support for multiple build strategies
gem "launchy", "~> 2.5" # Launchy is helper class for launching cross-platform applications in a fire and forget manner.
diff --git a/Gemfile.lock b/Gemfile.lock
index 445593767..6e43775da 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -111,9 +111,6 @@ GEM
activerecord (>= 4.2.0)
anyway_config (2.1.0)
ruby-next-core (>= 0.11.0)
- approvals (0.0.24)
- nokogiri (~> 1.6)
- thor (~> 0.18)
ast (2.4.2)
aws-eventstream (1.1.1)
aws-sigv4 (1.2.3)
@@ -886,7 +883,6 @@ DEPENDENCIES
ahoy_matey (~> 3.2)
amazing_print (~> 1.3)
ancestry (~> 3.2)
- approvals (~> 0.0)
better_errors (~> 2.9)
binding_of_caller (~> 0.8)
blazer (~> 2.4.2)
diff --git a/docs/tests/approvals-tests.md b/docs/tests/approvals-tests.md
deleted file mode 100644
index f458a71ee..000000000
--- a/docs/tests/approvals-tests.md
+++ /dev/null
@@ -1,43 +0,0 @@
----
-title: Approvals Tests
----
-
-# Approvals Tests
-
-Approvals test is a form of unit test. It works by taking a snapshot of the
-results and confirming that they have not changed. A good use-case for the
-Approvals tests is to compare the rendered HTML to the test specified HTML.
-
-## Usage
-
-Simply create your test similar to the following:
-
-```ruby
-it "renders the correct HTML on the home page" do
- page = 'ZOMG '
- verify(format: :html) { page } # format can also be :json
-end
-```
-
-You may then run the said test and a new `*.received.*` file will be created.
-Thereafter, run the following command to verify the newly created file and
-approve the created change.
-
-```shell
-approvals verify
-```
-
-Please be sure to include the Approvals file in your commit.
-
-## Edge cases
-
-Approvals tests are difficult to utilise for testing variables that change. This
-includes variables like:
-
-- Time
-- URL slug
-- uploaded image slug
-
-Please avoid generating large approvals files as it will be stored in the
-codebase. If your approvals file gets too large, Approvals test may not be the
-right tool for the job.
diff --git a/docs/tests/readme.md b/docs/tests/readme.md
index 962663737..43337f47e 100644
--- a/docs/tests/readme.md
+++ b/docs/tests/readme.md
@@ -2,7 +2,6 @@
title: Testing/QA Guide
items:
- acceptance-tests.md
- - approvals-tests.md
- integration-tests.md
- unit-functional-tests.md
- frontend-tests.md
diff --git a/spec/fixtures/approvals/katextag/render/generates_katex_output.approved.html b/spec/fixtures/approvals/katextag/render/generates_katex_output.approved.html
deleted file mode 100644
index de3d7d542..000000000
--- a/spec/fixtures/approvals/katextag/render/generates_katex_output.approved.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
c = ± a 2 + b 2 c = \pm\sqrt{a^2 + b^2} c = ± a 2 + b 2
-
-
-
diff --git a/spec/fixtures/approvals/parlertag/id/accepts_a_valid_parler_url.approved.html b/spec/fixtures/approvals/parlertag/id/accepts_a_valid_parler_url.approved.html
deleted file mode 100644
index 9e1c5aad4..000000000
--- a/spec/fixtures/approvals/parlertag/id/accepts_a_valid_parler_url.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
diff --git a/spec/liquid_tags/codepen_tag_spec.rb b/spec/liquid_tags/codepen_tag_spec.rb
index 5a01c1455..ff1b49af2 100644
--- a/spec/liquid_tags/codepen_tag_spec.rb
+++ b/spec/liquid_tags/codepen_tag_spec.rb
@@ -19,8 +19,11 @@ RSpec.describe CodepenTag, type: :liquid_tag do
it "accepts codepen link" do
liquid = generate_new_liquid(codepen_link)
- rendered_codepen_iframe = liquid.render
- Approvals.verify(rendered_codepen_iframe, name: "codepen_liquid_tag", format: :html)
+
+ expect(liquid.render).to include("
")
+ expect(issue.processed_html).to include("To Reproduce
")
end
end
diff --git a/spec/services/feeds/import_spec.rb b/spec/services/feeds/import_spec.rb
index 22ee42ff2..a3e1c3e28 100644
--- a/spec/services/feeds/import_spec.rb
+++ b/spec/services/feeds/import_spec.rb
@@ -12,10 +12,11 @@ RSpec.describe Feeds::Import, type: :service, vcr: true do
end
end
+ # TODO: We could probably improve these tests by parsing against the items in the feed rather than hardcoding
it "fetch only articles from a feed_url", vcr: { cassette_name: "feeds_import" } do
num_articles = described_class.call
- verify(format: :txt) { num_articles }
+ expect(num_articles).to eq(21)
end
it "does not recreate articles if they already exist", vcr: { cassette_name: "feeds_import_twice" } do
@@ -25,11 +26,9 @@ RSpec.describe Feeds::Import, type: :service, vcr: true do
end
it "parses correctly", vcr: { cassette_name: "feeds_import" } do
- described_class.call
-
- verify format: :txt do
- User.find_by(feed_url: nonpermanent_link).articles.first.body_markdown
- end
+ expect do
+ described_class.call
+ end.to change(User.find_by(feed_url: nonpermanent_link).articles, :count).by(1)
end
it "sets feed_fetched_at to the current time", vcr: { cassette_name: "feeds_import" } do
@@ -87,17 +86,17 @@ RSpec.describe Feeds::Import, type: :service, vcr: true do
end
context "with an explicit set of users", vcr: { cassette_name: "feeds_import" } do
+ # TODO: We could probably improve these tests by parsing against the items in the feed rather than hardcoding
it "accepts a subset of users" do
num_articles = described_class.call(users: User.with_feed.limit(1))
- verify(format: :txt) { num_articles }
+ expect(num_articles).to eq(10)
end
it "imports no articles if given users are without feed" do
create(:user, feed_url: nil)
- described_class.call(users: User.where(feed_url: nil))
- verify(format: :txt) { 0 }
+ expect(described_class.call(users: User.where(feed_url: nil))).to eq(0)
end
end
end
diff --git a/spec/support/fixtures/approvals/codepen_liquid_tag.approved.html b/spec/support/fixtures/approvals/codepen_liquid_tag.approved.html
deleted file mode 100644
index fe7ed4cbb..000000000
--- a/spec/support/fixtures/approvals/codepen_liquid_tag.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/details_liquid_tag_spec.approved.html b/spec/support/fixtures/approvals/details_liquid_tag_spec.approved.html
deleted file mode 100644
index 1ab1fa606..000000000
--- a/spec/support/fixtures/approvals/details_liquid_tag_spec.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
- Click to see the answer! The answer is Forem!
-
-
-
diff --git a/spec/support/fixtures/approvals/dotnetfiddle_liquid_tag.approved.html b/spec/support/fixtures/approvals/dotnetfiddle_liquid_tag.approved.html
deleted file mode 100644
index adff2c5dd..000000000
--- a/spec/support/fixtures/approvals/dotnetfiddle_liquid_tag.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/email_subscriptionsunsubscribe.approved.html b/spec/support/fixtures/approvals/email_subscriptionsunsubscribe.approved.html
deleted file mode 100644
index 206ef49ba..000000000
--- a/spec/support/fixtures/approvals/email_subscriptionsunsubscribe.approved.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
- You have been unsubscribed from DEV(local) digest emails. 😔
-
-
- You will no longer receive emails like this. If you'd like to re-subscribe or manage your full email preferences, please
-
click here .
-
-
-
-
diff --git a/spec/support/fixtures/approvals/instagram_liquid_tag.approved.html b/spec/support/fixtures/approvals/instagram_liquid_tag.approved.html
deleted file mode 100644
index 71df1bd1e..000000000
--- a/spec/support/fixtures/approvals/instagram_liquid_tag.approved.html
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/jsfiddle_liquid_tag.approved.html b/spec/support/fixtures/approvals/jsfiddle_liquid_tag.approved.html
deleted file mode 100644
index 1fad6d628..000000000
--- a/spec/support/fixtures/approvals/jsfiddle_liquid_tag.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/jsitor_liquid_tag.approved.html b/spec/support/fixtures/approvals/jsitor_liquid_tag.approved.html
deleted file mode 100644
index af916863b..000000000
--- a/spec/support/fixtures/approvals/jsitor_liquid_tag.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/jsitor_liquid_tag_with_hyphen.approved.html b/spec/support/fixtures/approvals/jsitor_liquid_tag_with_hyphen.approved.html
deleted file mode 100644
index 539ab90e3..000000000
--- a/spec/support/fixtures/approvals/jsitor_liquid_tag_with_hyphen.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/jsitor_liquid_tag_with_params.approved.html b/spec/support/fixtures/approvals/jsitor_liquid_tag_with_params.approved.html
deleted file mode 100644
index 9eb1ab863..000000000
--- a/spec/support/fixtures/approvals/jsitor_liquid_tag_with_params.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/kotlin_liquid_tag.approved.html b/spec/support/fixtures/approvals/kotlin_liquid_tag.approved.html
deleted file mode 100644
index 8264de354..000000000
--- a/spec/support/fixtures/approvals/kotlin_liquid_tag.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/nexttech_liquid_tag.approved.html b/spec/support/fixtures/approvals/nexttech_liquid_tag.approved.html
deleted file mode 100644
index 58eb21c90..000000000
--- a/spec/support/fixtures/approvals/nexttech_liquid_tag.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/runkit_liquid_tag_spec.approved.html b/spec/support/fixtures/approvals/runkit_liquid_tag_spec.approved.html
deleted file mode 100644
index 4ffe12ac3..000000000
--- a/spec/support/fixtures/approvals/runkit_liquid_tag_spec.approved.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
- const myVar = 9001
-
-
-
- // GeoJSON!
-var getJSON = require("async-get-json");
-
-await getJSON("https://storage.googleapis.com/maps-devrel/google.json");
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/soundcloud_liquid_tag.approved.html b/spec/support/fixtures/approvals/soundcloud_liquid_tag.approved.html
deleted file mode 100644
index 65caac44e..000000000
--- a/spec/support/fixtures/approvals/soundcloud_liquid_tag.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/user_preview_article_body.approved.html b/spec/support/fixtures/approvals/user_preview_article_body.approved.html
deleted file mode 100644
index 76e8d0cf2..000000000
--- a/spec/support/fixtures/approvals/user_preview_article_body.approved.html
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-
-
-
- h1
-
-
-
-
-
- h2
-
-
-
-
-
- h3
-
-
-
-
-
- h4
-
-
-
-
-
- h5
-
-
-
-
-
- h6
-
-
-
-
-
- multiword heading
-
-
-
-
-
- multiword heading with ( weird ? punctu&^ation
-
-
-
-
-
- 😎 emoji heading
-
-
-italic italic bold bold You can combine them asterisks and underscores
-
-Item 1
-Item 2
-
-Item 2a
-
-
-Format:
-
-
-Line break in ul/ol spacing test
-
-
-
-Line break in ul/ol spacing test 2
-
-
-http://github.com GitHub
-
-As Kanye West said:
-
-
-We're living the future so
-the present is our past.
-
-
-I think you should use an <addr> element here instead.
-
-
-
function fancyAlert ( arg ) {
- if ( arg ) {
- $ . facebox ({ div : ' #foo ' })
- }
-}
-
-
-
-
Enter fullscreen mode Exit fullscreen mode
-
-
-
-
-
-
-
// indented codeblock should work
-function hello() {
- console.log("hello");
-}
-
-
-
-
Enter fullscreen mode Exit fullscreen mode
-
-
-
-[x] @mentions, #refs, links , formatting , and tags supported
-[x] list syntax required (any unordered or ordered list supported)
-[x] this is a complete item
-[ ] this is an incomplete item
-First Header
-Second Header
-Content from cell 1
-Content from cell 2
-Content in the first column
-Content in the second column
-
-
-this
-
diff --git a/spec/support/fixtures/approvals/user_submit_article.approved.html b/spec/support/fixtures/approvals/user_submit_article.approved.html
deleted file mode 100644
index 13fa1791f..000000000
--- a/spec/support/fixtures/approvals/user_submit_article.approved.html
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/spec/support/fixtures/approvals/youtube_liquid_tag_no_time.approved.html b/spec/support/fixtures/approvals/youtube_liquid_tag_no_time.approved.html
deleted file mode 100644
index bb657b52d..000000000
--- a/spec/support/fixtures/approvals/youtube_liquid_tag_no_time.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/youtube_liquid_tag_no_time_trailing_space.approved.html b/spec/support/fixtures/approvals/youtube_liquid_tag_no_time_trailing_space.approved.html
deleted file mode 100644
index bb657b52d..000000000
--- a/spec/support/fixtures/approvals/youtube_liquid_tag_no_time_trailing_space.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/spec/support/fixtures/approvals/youtube_liquid_tag_with_time.approved.html b/spec/support/fixtures/approvals/youtube_liquid_tag_with_time.approved.html
deleted file mode 100644
index d2dc376e2..000000000
--- a/spec/support/fixtures/approvals/youtube_liquid_tag_with_time.approved.html
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/spec/support/initializers/approvals.rb b/spec/support/initializers/approvals.rb
deleted file mode 100644
index 9b863ed90..000000000
--- a/spec/support/initializers/approvals.rb
+++ /dev/null
@@ -1,5 +0,0 @@
-require "approvals/rspec"
-
-Approvals.configure do |approvals_config|
- approvals_config.approvals_path = "#{::Rails.root}/spec/support/fixtures/approvals/"
-end
diff --git a/spec/system/user_uses_the_editor_spec.rb b/spec/system/user_uses_the_editor_spec.rb
index b4930d0b4..d0858f940 100644
--- a/spec/system/user_uses_the_editor_spec.rb
+++ b/spec/system/user_uses_the_editor_spec.rb
@@ -47,7 +47,13 @@ RSpec.describe "Using the editor", type: :system do
article_body = find("div.crayons-article__body")["innerHTML"]
article_body.gsub!(%r{"https://res\.cloudinary\.com/.{1,}"}, "cloudinary_link")
- Approvals.verify(article_body, name: "user_preview_article_body", format: :html)
+ # TODO: Convert this to an E2E test?
+ # rubocop:disable Style/StringLiterals
+ expect(article_body).to include('')
+ .and include('Format: ')
+ # rubocop:enable Style/StringLiterals
end
end
@@ -58,7 +64,13 @@ RSpec.describe "Using the editor", type: :system do
article_body = find(:xpath, "//div[@id='article-body']")["innerHTML"]
article_body.gsub!(%r{"https://res\.cloudinary\.com/.{1,}"}, "cloudinary_link")
- Approvals.verify(article_body, name: "user_preview_article_body", format: :html)
+ # TODO: Convert this to an E2E test?
+ # rubocop:disable Style/StringLiterals
+ expect(article_body).to include('')
+ .and include('Format: ')
+ # rubocop:enable Style/StringLiterals
end
it "user write and publish an article" do
diff --git a/spec/views/email_subscriptions/unsubscribe.html.erb_spec.rb b/spec/views/email_subscriptions/unsubscribe.html.erb_spec.rb
index b8b6aa3ee..06d92271a 100644
--- a/spec/views/email_subscriptions/unsubscribe.html.erb_spec.rb
+++ b/spec/views/email_subscriptions/unsubscribe.html.erb_spec.rb
@@ -4,6 +4,6 @@ RSpec.describe "email_subscriptions/unsubscribe.html.erb", type: :view do
it "works" do
assign(:email_type, "#{SiteConfig.community_name} digest emails")
render
- Approvals.verify(rendered, name: "email_subscriptions/unsubscribe", format: :html)
+ expect(rendered).to include("You have been unsubscribed from #{SiteConfig.community_name} digest emails. 😔")
end
end
diff --git a/vendor/cache/approvals-0.0.24.gem b/vendor/cache/approvals-0.0.24.gem
deleted file mode 100644
index 0e2fdb67e032412d070b182a6de1d2e591cb3f7d..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 35840
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
Hg9ZK