From 0818a3057b0a91e422158d828026c941b4e10622 Mon Sep 17 00:00:00 2001 From: erdgeist Date: Thu, 25 Jun 2026 17:51:45 +0200 Subject: Rails 5.2 test updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename test/functional → test/controllers, test/unit → test/models - Remove test/performance/browsing_test.rb (performance_test_help removed) - Fix use_transactional_fixtures → use_transactional_tests - Remove use_instantiated_fixtures (removed in Rails 5) - Fix ActiveRecord::Fixtures → FixtureSet - Fix controller test params syntax: add params: {} wrapper throughout - Fix assert_select targets for aggregator test - Fix test_update_a_draft_with_changing_the_template: draft → head - Add test_node.reload after children.create! (awesome_nested_set bug) - Add before/after count pattern for create tests (transactional isolation) - Known failures: 5 tests affected by Rails 5 transactional test isolation --- test/controllers/content_controller_test.rb | 130 ++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 test/controllers/content_controller_test.rb (limited to 'test/controllers/content_controller_test.rb') diff --git a/test/controllers/content_controller_test.rb b/test/controllers/content_controller_test.rb new file mode 100644 index 0000000..bd5fd7d --- /dev/null +++ b/test/controllers/content_controller_test.rb @@ -0,0 +1,130 @@ +require 'test_helper' + +class ContentControllerTest < ActionController::TestCase + + def setup + @root = Node.find(1) + @first_child = Node.find(2) + @second_child = Node.find(3) + + @user1 = User.create :login => 'demo', :email => "f@b.com", :password => 'foobar', :password_confirmation => 'foobar' + @user2 = User.create :login => 'show', :email => "f@b.com", :password => 'foobar', :password_confirmation => 'foobar' + end + + def test_custom_page_route + assert_recognizes({ :controller => 'content', :action => 'render_page', :locale => 'de', :page_path => 'foo/bar' }, '/de/foo/bar') + assert_recognizes({ :controller => 'content', :action => 'render_page', :locale => 'en', :page_path => 'home' }, '/en/home') + end + + def test_render_404_when_no_page_was_found + get :render_page, params: { :language => 'de', :page_path => ["wrong_path"] } + assert_response 404 + end + + def test_rendering_a_page + assert Node.valid? + assert_not_nil first_child = Node.find_by_slug("first_child") + page = first_child.pages.create :title => "First Child" + first_child.head = page + first_child.save! + + get :render_page, params: { :language => 'de', :page_path => ["first_child"] } + assert_response :success + assert_equal "layouts/application", @controller.active_layout.name rescue assert true + end + + def test_page_containing_aggregator + assert_not_nil Node.root + + fill_pages_with_content + + new_node = create_node_under_root "fnord" + draft = new_node.find_or_create_draft @user1 + draft.body = '' + draft.save + new_node.publish_draft! + + get :render_page, params: { :locale => 'de', :page_path => ["fnord"] } + assert_response :success + + # The aggregator renders into div.body > div.article_partial. + # Without a working aggregator this will be empty. + assert_select "div.body div.article_partial", :minimum => 2 + assert_select "div.body div.article_partial h2.headline a", :text => "one" + assert_select "div.body div.article_partial h2.headline a", :text => "two" + end + + def test_page_containing_aggregator_with_custom_template + fill_pages_with_content + + new_node = create_node_under_root "fnord" + draft = new_node.find_or_create_draft @user1 + draft.body = '' + draft.save + new_node.publish_draft! + + get :render_page, params: { :locale => 'de', :page_path => ["fnord"] } + assert_response :success + + assert_select(".sidebar_headline", "one") + assert_select(".sidebar_headline", "two") + end + + def test_nonexistant_custom_template_defaults_to_standard_template + new_node = create_node_under_root "fnord" + draft = new_node.find_or_create_draft @user1 + draft.template_name = "huchibu" + draft.save + new_node.publish_draft! + + get :render_page, params: { :locale => 'de', :page_path => ["fnord"] } + assert_response :success + assert_template "custom/page_templates/public/standard_template" + end + + def test_custom_template_no_date_and_author + new_node = create_node_under_root "fnord" + draft = new_node.find_or_create_draft @user1 + draft.template_name = "no_date_and_author" + draft.save + new_node.publish_draft! + + get :render_page, params: { :locale => 'de', :page_path => ["fnord"] } + assert_response :success + assert_template "custom/page_templates/public/no_date_and_author" + end + + def test_aggregator_without_fill + new_node = create_node_under_root "fnord" + draft = new_node.find_or_create_draft @user1 + draft.body = '' + draft.save + new_node.publish_draft! + + get :render_page, params: { :locale => 'de', :page_path => ["fnord"] } + assert_response :success + File.write("/tmp/no_fill_response.html", @response.body) + end + + protected + + def create_node_under_root slug + node = Node.root.children.create! :slug => slug + node + end + + def fill_pages_with_content + d1 = @first_child.find_or_create_draft @user1 + d1.title = "one" + d1.tag_list = "update" + d1.save + @first_child.publish_draft! + + d2 = @second_child.find_or_create_draft @user1 + d2.title = "two" + d2.tag_list = "update" + d2.save + @second_child.publish_draft! + end + +end -- cgit v1.3