require 'test_helper' class PageTranslationsControllerTest < ActionController::TestCase test "index lists the default locale's existing translation and flags a missing one" do login_as :quentin node = Node.root.children.create!(:slug => "translations_index_test") node.publish_draft! get :index, params: { :node_id => node.id } assert_response :success assert_equal [:en], assigns(:translations).map { |t| t[:locale] } assert_equal false, assigns(:translations).first[:exists] end test "update creates a first-time translation on a fresh draft, leaving head untouched" do login_as :quentin node = Node.root.children.create!(:slug => "translations_create_test") Globalize.with_locale(:de) { node.draft.update!(:title => "Deutscher Titel") } node.publish_draft! patch :update, params: { :node_id => node.id, :translation_locale => "en", :page => { :title => "English Title" } } node.reload assert_not_nil node.draft assert_includes node.draft.translated_locales, :en assert_not_includes node.head.translated_locales, :en end test "no route exists for the default locale under the translations resource" do login_as :quentin node = Node.root.children.create!(:slug => "translations_route_constraint_test") assert_raises(ActionController::UrlGenerationError) do patch :update, params: { :node_id => node.id, :translation_locale => "de", :page => { :title => "x" } } end end test "update with Save + Unlock + Exit unlocks the node and redirects to nodes#show" do login_as :quentin node = Node.root.children.create!(:slug => "translations_exit_test") patch :update, params: { :node_id => node.id, :translation_locale => "en", :page => { :title => "x" }, :commit => "Save + Unlock + Exit" } assert_nil node.reload.lock_owner assert_redirected_to node_path(node) end test "update saves the translation onto the draft" do login_as :quentin node = Node.root.children.create!(:slug => "translations_update_test") Globalize.with_locale(:en) { node.draft.update!(:title => "Original") } patch :update, params: { :node_id => node.id, :translation_locale => "en", :page => { :title => "Revised" } } assert_equal "Revised", Globalize.with_locale(:en) { node.draft.reload.title } end test "destroy refuses to remove the only remaining translation" do login_as :quentin node = Node.root.children.create!(:slug => "translations_destroy_last_test") Globalize.with_locale(:en) { node.draft.update!(:title => "Only translation") } node.draft.translations.where(:locale => :de).delete_all delete :destroy, params: { :node_id => node.id, :translation_locale => "en" } assert_equal "Can't remove the only remaining translation.", flash[:error] end test "destroy is a safe no-op, not a false success, when the translation doesn't exist" do login_as :quentin node = Node.root.children.create!(:slug => "translations_destroy_missing_test") delete :destroy, params: { :node_id => node.id, :translation_locale => "en" } assert_match(/No EN translation exists/, flash[:error]) end end