From c0b99c980ce21bb920792ce1ac65dc5614b4a9a6 Mon Sep 17 00:00:00 2001 From: Mauro George Date: Sat, 29 Aug 2015 12:37:24 -0300 Subject: [PATCH 1/9] Bring back assert_serializer for controller testing The `assert_serializer` test helper was added in 0.9.0.apha1[1], and was not included in 0.10. This patch brings back the `assert_serializer` test helper. This is the last revision[2] that has the helper. The original helper was used as base. [1]: https://github.com/rails-api/active_model_serializers/pull/596 [2]: https://github.com/rails-api/active_model_serializers/tree/610aeb2e9297fa31b8d561f0be9a4597f0258f8c - Create the AssertSerializer - Use the Test namespace - Make the tests pass on the Rails master - Rails 5 does not include `assert_template` but we need this on the tests of the helper. - This add the `rails-controller-testing` to keep support on `assert_template`. - Only load test helpers in the test environment --- CHANGELOG.md | 1 + Gemfile | 1 + docs/README.md | 1 + docs/howto/test.md | 29 +++++ lib/active_model/serializer/railtie.rb | 4 + lib/active_model_serializers.rb | 1 + lib/active_model_serializers/test.rb | 5 + .../test/serializer.rb | 122 ++++++++++++++++++ .../test/serializer_test.rb | 73 +++++++++++ test/fixtures/template.html.erb | 1 + 10 files changed, 238 insertions(+) create mode 100644 docs/howto/test.md create mode 100644 lib/active_model_serializers/test.rb create mode 100644 lib/active_model_serializers/test/serializer.rb create mode 100644 test/active_model_serializers/test/serializer_test.rb create mode 100644 test/fixtures/template.html.erb diff --git a/CHANGELOG.md b/CHANGELOG.md index a89c9e05..8ec8a389 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ Features: CollectionSerializer for clarity, add ActiveModelSerializers.config.collection_serializer (@bf4) - [#1295](https://github.com/rails-api/active_model_serializers/pull/1295) Add config `serializer_lookup_enabled` that, when disabled, requires serializers to explicitly specified. (@trek) +- [#1099](https://github.com/rails-api/active_model_serializers/pull/1099) Adds `assert_serializer` test helper (@maurogeorge) Fixes: - [#1239](https://github.com/rails-api/active_model_serializers/pull/1239) Fix duplicates in JSON API compound documents (@beauby) diff --git a/Gemfile b/Gemfile index 9a386356..659f82e0 100644 --- a/Gemfile +++ b/Gemfile @@ -12,6 +12,7 @@ version = ENV['RAILS_VERSION'] || '4.2' if version == 'master' gem 'rack', github: 'rack/rack' gem 'arel', github: 'rails/arel' + gem 'rails-controller-testing', github: 'rails/rails-controller-testing' git 'https://github.com/rails/rails.git' do gem 'railties' gem 'activesupport' diff --git a/docs/README.md b/docs/README.md index a20c086e..7f0a8ac0 100644 --- a/docs/README.md +++ b/docs/README.md @@ -22,6 +22,7 @@ This is the documentation of ActiveModelSerializers, it's focused on the **0.10. - [How to add root key](howto/add_root_key.md) - [How to add pagination links](howto/add_pagination_links.md) - [Using ActiveModelSerializers Outside Of Controllers](howto/outside_controller_use.md) +- [Testing ActiveModelSerializers](howto/test.md) ## Integrations diff --git a/docs/howto/test.md b/docs/howto/test.md new file mode 100644 index 00000000..67cbef1c --- /dev/null +++ b/docs/howto/test.md @@ -0,0 +1,29 @@ +# How to test + +## Test helpers + +ActiveModelSerializers provides a `assert_serializer` method to be used on your controller tests to +assert that a specific serializer was used. + +```ruby +class PostsControllerTest < ActionController::TestCase + test "should render post serializer" do + get :index + assert_serializer "PostSerializer" + # # return a custom error message + # assert_serializer "PostSerializer", "PostSerializer not rendered" + # + # # assert that the instance of PostSerializer was rendered + # assert_serializer PostSerializer + # + # # assert that the "PostSerializer" serializer was rendered + # assert_serializer :post_serializer + # + # # assert that the rendered serializer starts with "Post" + # assert_serializer %r{\APost.+\Z} + # + # # assert that no serializer was rendered + # assert_serializer nil + end +end +``` diff --git a/lib/active_model/serializer/railtie.rb b/lib/active_model/serializer/railtie.rb index 18bb513c..e0af1cad 100644 --- a/lib/active_model/serializer/railtie.rb +++ b/lib/active_model/serializer/railtie.rb @@ -19,5 +19,9 @@ module ActiveModel app.load_generators require 'generators/serializer/resource_override' end + + if Rails.env.test? + ActionController::TestCase.send(:include, ActiveModelSerializers::Test::Serializer) + end end end diff --git a/lib/active_model_serializers.rb b/lib/active_model_serializers.rb index b955d7a0..af216516 100644 --- a/lib/active_model_serializers.rb +++ b/lib/active_model_serializers.rb @@ -14,6 +14,7 @@ module ActiveModelSerializers autoload :Callbacks autoload :Deserialization autoload :Logging + autoload :Test end require 'active_model/serializer' diff --git a/lib/active_model_serializers/test.rb b/lib/active_model_serializers/test.rb new file mode 100644 index 00000000..77f0b702 --- /dev/null +++ b/lib/active_model_serializers/test.rb @@ -0,0 +1,5 @@ +module ActiveModelSerializers + module Test + autoload :Serializer, 'active_model_serializers/test/serializer' + end +end diff --git a/lib/active_model_serializers/test/serializer.rb b/lib/active_model_serializers/test/serializer.rb new file mode 100644 index 00000000..8e8c9549 --- /dev/null +++ b/lib/active_model_serializers/test/serializer.rb @@ -0,0 +1,122 @@ +module ActiveModelSerializers + module Test + module Serializer + extend ActiveSupport::Concern + + included do + setup :setup_serialization_subscriptions + end + + # Asserts that the request was rendered with the appropriate serializers. + # + # # assert that the "PostSerializer" serializer was rendered + # assert_serializer "PostSerializer" + # + # # return a custom error message + # assert_serializer "PostSerializer", "PostSerializer not rendered" + # + # # assert that the instance of PostSerializer was rendered + # assert_serializer PostSerializer + # + # # assert that the "PostSerializer" serializer was rendered + # assert_serializer :post_serializer + # + # # assert that the rendered serializer starts with "Post" + # assert_serializer %r{\APost.+\Z} + # + # # assert that no serializer was rendered + # assert_serializer nil + # + def assert_serializer(expectation, message = nil) + @assert_serializer.expectation = expectation + @assert_serializer.message = message + @assert_serializer.response = response + assert(@assert_serializer.matches?, @assert_serializer.message) + end + + class AssertSerializer + attr_reader :serializers, :message + attr_accessor :response, :expectation + + def initialize + @serializers = [] + end + + def message=(message) + @message = message || "expecting <#{expectation.inspect}> but rendering with <#{serializers}>" + end + + def matches? + # Force body to be read in case the template is being streamed. + response.body + + case expectation + when a_serializer? + matches_class? + when Symbol + matches_symbol? + when String + matches_string? + when Regexp + matches_regexp? + when NilClass + matches_nil? + else + fail ArgumentError, 'assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil' + end + end + + def subscribe + ActiveSupport::Notifications.subscribe(event_name) do |_name, _start, _finish, _id, payload| + serializer = payload[:serializer].name + serializers << serializer + end + end + + def unsubscribe + ActiveSupport::Notifications.unsubscribe(event_name) + end + + private + + def matches_class? + serializers.include?(expectation.name) + end + + def matches_symbol? + camelize_expectation = expectation.to_s.camelize + serializers.include?(camelize_expectation) + end + + def matches_string? + !expectation.empty? && serializers.include?(expectation) + end + + def matches_regexp? + serializers.any? do |serializer| + serializer.match(expectation) + end + end + + def matches_nil? + serializers.blank? + end + + def a_serializer? + ->(exp) { exp.is_a?(Class) && exp < ActiveModel::Serializer } + end + + def event_name + 'render.active_model_serializers' + end + end + + private + + def setup_serialization_subscriptions + @assert_serializer = AssertSerializer.new + @assert_serializer.subscribe + end + end + end +end diff --git a/test/active_model_serializers/test/serializer_test.rb b/test/active_model_serializers/test/serializer_test.rb new file mode 100644 index 00000000..3a5f0e99 --- /dev/null +++ b/test/active_model_serializers/test/serializer_test.rb @@ -0,0 +1,73 @@ +require 'test_helper' +require 'rails-controller-testing' if Rails::VERSION::MAJOR >= 5 + +module ActiveModelSerializers + module Test + class SerializerTest < ActionController::TestCase + include ActiveModelSerializers::Test::Serializer + + class MyController < ActionController::Base + def render_using_serializer + render json: Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1') + end + + def render_text + render text: 'ok' + end + + def render_template + prepend_view_path './test/fixtures' + render template: 'template' + end + end + + tests MyController + + def test_supports_specifying_serializers_with_a_serializer_class + get :render_using_serializer + assert_serializer ProfileSerializer + end + + def test_supports_specifying_serializers_with_a_regexp + get :render_using_serializer + assert_serializer(/\AProfile.+\Z/) + end + + def test_supports_specifying_serializers_with_a_string + get :render_using_serializer + assert_serializer 'ProfileSerializer' + end + + def test_supports_specifying_serializers_with_a_symbol + get :render_using_serializer + assert_serializer :profile_serializer + end + + def test_supports_specifying_serializers_with_a_nil + get :render_text + assert_serializer nil + end + + def test_raises_descriptive_error_message_when_serializer_was_not_rendered + get :render_using_serializer + e = assert_raise ActiveSupport::TestCase::Assertion do + assert_serializer 'PostSerializer' + end + assert_match 'expecting <"PostSerializer"> but rendering with <["ProfileSerializer"]>', e.message + end + + def test_raises_argument_error_when_asserting_with_invalid_object + get :render_using_serializer + e = assert_raise ArgumentError do + assert_serializer Hash + end + assert_match 'assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil', e.message + end + + def test_does_not_overwrite_notification_subscriptions + get :render_template + assert_template 'template' + end + end + end +end diff --git a/test/fixtures/template.html.erb b/test/fixtures/template.html.erb new file mode 100644 index 00000000..1f87be87 --- /dev/null +++ b/test/fixtures/template.html.erb @@ -0,0 +1 @@ +

Hello.

From 37a6d2b2454d39d3dd2550c45cf1f40f53df8fa2 Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Tue, 22 Dec 2015 22:42:15 -0600 Subject: [PATCH 2/9] Be consisent in usage of ActiveSupport::Autoload --- lib/active_model_serializers/test.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/active_model_serializers/test.rb b/lib/active_model_serializers/test.rb index 77f0b702..4f539a44 100644 --- a/lib/active_model_serializers/test.rb +++ b/lib/active_model_serializers/test.rb @@ -1,5 +1,6 @@ module ActiveModelSerializers module Test - autoload :Serializer, 'active_model_serializers/test/serializer' + extend ActiveSupport::Autoload + autoload :Serializer end end From ef09c9043f46807c61d1f82d2cf1c717cc046e43 Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Tue, 22 Dec 2015 22:43:06 -0600 Subject: [PATCH 3/9] Small perf, readability refactor to Test::Serializer --- .../test/serializer.rb | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/lib/active_model_serializers/test/serializer.rb b/lib/active_model_serializers/test/serializer.rb index 8e8c9549..a122d31d 100644 --- a/lib/active_model_serializers/test/serializer.rb +++ b/lib/active_model_serializers/test/serializer.rb @@ -1,3 +1,4 @@ +require 'set' module ActiveModelSerializers module Test module Serializer @@ -35,15 +36,16 @@ module ActiveModelSerializers end class AssertSerializer + EVENT_NAME = 'render.active_model_serializers' attr_reader :serializers, :message attr_accessor :response, :expectation def initialize - @serializers = [] + @serializers = Set.new end def message=(message) - @message = message || "expecting <#{expectation.inspect}> but rendering with <#{serializers}>" + @message = message || "expecting <#{expectation.inspect}> but rendering with <#{serializers.to_a}>" end def matches? @@ -51,18 +53,12 @@ module ActiveModelSerializers response.body case expectation - when a_serializer? - matches_class? - when Symbol - matches_symbol? - when String - matches_string? - when Regexp - matches_regexp? - when NilClass - matches_nil? - else - fail ArgumentError, 'assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil' + when a_serializer? then matches_class? + when Symbol then matches_symbol? + when String then matches_string? + when Regexp then matches_regexp? + when NilClass then matches_nil? + else fail ArgumentError, 'assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil' end end @@ -99,7 +95,7 @@ module ActiveModelSerializers end def matches_nil? - serializers.blank? + serializers.empty? end def a_serializer? @@ -107,7 +103,7 @@ module ActiveModelSerializers end def event_name - 'render.active_model_serializers' + EVENT_NAME end end From f59431439d1bf2b389f3869fb3117d4d9b45e6fc Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Tue, 22 Dec 2015 22:49:42 -0600 Subject: [PATCH 4/9] Remove unused/unusable unsubscribe since we don't want to unsubscribe In 0.9 (which this implementation is based on), the instrumentation was `!serialize.active_model_serializers`. https://github.com/rails-api/active_model_serializers/pull/596/ The '!' in the event name meant the event wasn't meant for production. https://github.com/rails/rails/pull/10446/files#r4075679 Since we intend the event for production and have a log subscriber, if we unsubscribe from `render.active_model_serializers`, we'll break other tests that are relying on that event being subscribed. --- lib/active_model_serializers/test/serializer.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lib/active_model_serializers/test/serializer.rb b/lib/active_model_serializers/test/serializer.rb index a122d31d..5e1b826b 100644 --- a/lib/active_model_serializers/test/serializer.rb +++ b/lib/active_model_serializers/test/serializer.rb @@ -69,10 +69,6 @@ module ActiveModelSerializers end end - def unsubscribe - ActiveSupport::Notifications.unsubscribe(event_name) - end - private def matches_class? From a43cff4ae3012874d6bb721fad46150dd2d30d66 Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Tue, 22 Dec 2015 22:59:04 -0600 Subject: [PATCH 5/9] Remove `assert_template` from Test::SerializerTest Rails 5 removed this assertion after considering it not a good testing practice. https://github.com/rails/rails/issues/18950 Rather that add a gem to our Rails 5 matrix to support it, the assertion is made that the template is rendering using active support notifications. Also, to clarify that the action 'render_template' is unrelated to the event name '!render_template.action_view', I renamed the actions so that would not look like event names. --- Gemfile | 1 - .../test/serializer_test.rb | 29 ++++++++++++++----- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/Gemfile b/Gemfile index 659f82e0..9a386356 100644 --- a/Gemfile +++ b/Gemfile @@ -12,7 +12,6 @@ version = ENV['RAILS_VERSION'] || '4.2' if version == 'master' gem 'rack', github: 'rack/rack' gem 'arel', github: 'rails/arel' - gem 'rails-controller-testing', github: 'rails/rails-controller-testing' git 'https://github.com/rails/rails.git' do gem 'railties' gem 'activesupport' diff --git a/test/active_model_serializers/test/serializer_test.rb b/test/active_model_serializers/test/serializer_test.rb index 3a5f0e99..c6c10b71 100644 --- a/test/active_model_serializers/test/serializer_test.rb +++ b/test/active_model_serializers/test/serializer_test.rb @@ -1,5 +1,4 @@ require 'test_helper' -require 'rails-controller-testing' if Rails::VERSION::MAJOR >= 5 module ActiveModelSerializers module Test @@ -7,17 +6,19 @@ module ActiveModelSerializers include ActiveModelSerializers::Test::Serializer class MyController < ActionController::Base + TEMPLATE_NAME = 'template' def render_using_serializer render json: Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1') end - def render_text - render text: 'ok' + # For Rails4.0 + def render_some_text + Rails.version > '4.1' ? render(plain: 'ok') : render(text: 'ok') end - def render_template + def render_a_template prepend_view_path './test/fixtures' - render template: 'template' + render template: TEMPLATE_NAME end end @@ -44,7 +45,7 @@ module ActiveModelSerializers end def test_supports_specifying_serializers_with_a_nil - get :render_text + get :render_some_text assert_serializer nil end @@ -65,8 +66,20 @@ module ActiveModelSerializers end def test_does_not_overwrite_notification_subscriptions - get :render_template - assert_template 'template' + payloads = [] + event_name = '!render_template.action_view' + ActiveSupport::Notifications.subscribe(event_name) do |_name, _start, _finish, _id, payload| + payloads << payload + end + + get :render_a_template + + assert_equal 1, payloads.size, 'Only expected one template rendering to be registered' + payload = payloads.first + assert_equal MyController::TEMPLATE_NAME, payload[:virtual_path] + assert_match %r{test/fixtures/#{MyController::TEMPLATE_NAME}.html.erb}, payload[:identifier] + ensure + ActiveSupport::Notifications.unsubscribe(event_name) end end end From 28f314aef24cc0d5664800106da29fb3b1633e6b Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Tue, 22 Dec 2015 23:08:37 -0600 Subject: [PATCH 6/9] Surface logging event name for re-use --- lib/active_model_serializers/logging.rb | 3 ++- lib/active_model_serializers/test/serializer.rb | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/active_model_serializers/logging.rb b/lib/active_model_serializers/logging.rb index bfe535c3..2a859c41 100644 --- a/lib/active_model_serializers/logging.rb +++ b/lib/active_model_serializers/logging.rb @@ -5,6 +5,7 @@ # module ActiveModelSerializers module Logging + RENDER_EVENT = 'render.active_model_serializers'.freeze extend ActiveSupport::Concern included do @@ -73,7 +74,7 @@ module ActiveModelSerializers end def notify_render(*) - event_name = 'render.active_model_serializers'.freeze + event_name = RENDER_EVENT ActiveSupport::Notifications.instrument(event_name, notify_render_payload) do yield end diff --git a/lib/active_model_serializers/test/serializer.rb b/lib/active_model_serializers/test/serializer.rb index 5e1b826b..16446989 100644 --- a/lib/active_model_serializers/test/serializer.rb +++ b/lib/active_model_serializers/test/serializer.rb @@ -36,7 +36,6 @@ module ActiveModelSerializers end class AssertSerializer - EVENT_NAME = 'render.active_model_serializers' attr_reader :serializers, :message attr_accessor :response, :expectation @@ -99,7 +98,7 @@ module ActiveModelSerializers end def event_name - EVENT_NAME + ::ActiveModelSerializers::Logging::RENDER_EVENT end end From e60937bc2f0961b6b97432aac2f1d30b6409ad3f Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Tue, 22 Dec 2015 23:10:29 -0600 Subject: [PATCH 7/9] Remove duplicate documentation --- docs/howto/test.md | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/docs/howto/test.md b/docs/howto/test.md index 67cbef1c..70f59374 100644 --- a/docs/howto/test.md +++ b/docs/howto/test.md @@ -10,20 +10,9 @@ class PostsControllerTest < ActionController::TestCase test "should render post serializer" do get :index assert_serializer "PostSerializer" - # # return a custom error message - # assert_serializer "PostSerializer", "PostSerializer not rendered" - # - # # assert that the instance of PostSerializer was rendered - # assert_serializer PostSerializer - # - # # assert that the "PostSerializer" serializer was rendered - # assert_serializer :post_serializer - # - # # assert that the rendered serializer starts with "Post" - # assert_serializer %r{\APost.+\Z} - # - # # assert that no serializer was rendered - # assert_serializer nil end end ``` + +See [ActiveModelSerializers::Test::Serializer](../../lib/active_model_serializers/test/serializer.rb) +for more examples and documentation. From 9779185d576e3ec98ef33b52b96b8674c057a915 Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Tue, 22 Dec 2015 23:26:26 -0600 Subject: [PATCH 8/9] Restore test-local subscriber teardown This commit revises 0ce4ad35a12ffd858f6a5d7bbeb48fc1e2cfac92 `Remove unused/unusable unsubscribe since we don't want to unsubscribe` Looking at Rails implementation of assert_template which was likely the inspiration for assert_serializer: https://github.com/rails/rails-controller-testing/blob/f756b33c138c593eabe37f6085f8bac477b99bfe/lib/rails/controller/testing/template_assertions.rb Ref: - https://github.com/rails-api/active_model_serializers/pull/596 - https://github.com/rails-api/active_model_serializers/pull/620 - https://github.com/rails-api/active_model_serializers/issues/616 --- lib/active_model_serializers/test/serializer.rb | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/active_model_serializers/test/serializer.rb b/lib/active_model_serializers/test/serializer.rb index 16446989..dc812c55 100644 --- a/lib/active_model_serializers/test/serializer.rb +++ b/lib/active_model_serializers/test/serializer.rb @@ -6,6 +6,7 @@ module ActiveModelSerializers included do setup :setup_serialization_subscriptions + teardown :teardown_serialization_subscriptions end # Asserts that the request was rendered with the appropriate serializers. @@ -41,6 +42,7 @@ module ActiveModelSerializers def initialize @serializers = Set.new + @_subscribers = [] end def message=(message) @@ -62,12 +64,18 @@ module ActiveModelSerializers end def subscribe - ActiveSupport::Notifications.subscribe(event_name) do |_name, _start, _finish, _id, payload| + @_subscribers << ActiveSupport::Notifications.subscribe(event_name) do |_name, _start, _finish, _id, payload| serializer = payload[:serializer].name serializers << serializer end end + def unsubscribe + @_subscribers.each do |subscriber| + ActiveSupport::Notifications.unsubscribe(subscriber) + end + end + private def matches_class? @@ -108,6 +116,10 @@ module ActiveModelSerializers @assert_serializer = AssertSerializer.new @assert_serializer.subscribe end + + def teardown_serialization_subscriptions + @assert_serializer.unsubscribe + end end end end From f5e2b991bf6c54ed2e860f6e101e46c2587858e5 Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Sun, 3 Jan 2016 23:36:35 -0600 Subject: [PATCH 9/9] Remove outdated regression test Per https://github.com/rails-api/active_model_serializers/pull/1390#discussion_r48322329 --- .../test/serializer_test.rb | 23 ------------------- test/fixtures/template.html.erb | 1 - 2 files changed, 24 deletions(-) delete mode 100644 test/fixtures/template.html.erb diff --git a/test/active_model_serializers/test/serializer_test.rb b/test/active_model_serializers/test/serializer_test.rb index c6c10b71..c4773d9b 100644 --- a/test/active_model_serializers/test/serializer_test.rb +++ b/test/active_model_serializers/test/serializer_test.rb @@ -6,7 +6,6 @@ module ActiveModelSerializers include ActiveModelSerializers::Test::Serializer class MyController < ActionController::Base - TEMPLATE_NAME = 'template' def render_using_serializer render json: Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1') end @@ -15,11 +14,6 @@ module ActiveModelSerializers def render_some_text Rails.version > '4.1' ? render(plain: 'ok') : render(text: 'ok') end - - def render_a_template - prepend_view_path './test/fixtures' - render template: TEMPLATE_NAME - end end tests MyController @@ -64,23 +58,6 @@ module ActiveModelSerializers end assert_match 'assert_serializer only accepts a String, Symbol, Regexp, ActiveModel::Serializer, or nil', e.message end - - def test_does_not_overwrite_notification_subscriptions - payloads = [] - event_name = '!render_template.action_view' - ActiveSupport::Notifications.subscribe(event_name) do |_name, _start, _finish, _id, payload| - payloads << payload - end - - get :render_a_template - - assert_equal 1, payloads.size, 'Only expected one template rendering to be registered' - payload = payloads.first - assert_equal MyController::TEMPLATE_NAME, payload[:virtual_path] - assert_match %r{test/fixtures/#{MyController::TEMPLATE_NAME}.html.erb}, payload[:identifier] - ensure - ActiveSupport::Notifications.unsubscribe(event_name) - end end end end diff --git a/test/fixtures/template.html.erb b/test/fixtures/template.html.erb deleted file mode 100644 index 1f87be87..00000000 --- a/test/fixtures/template.html.erb +++ /dev/null @@ -1 +0,0 @@ -

Hello.