require 'test_helper'
class SectionsControllerTest < ActionDispatch::IntegrationTest
include Devise::Test::IntegrationHelpers
setup do
scaffold_template
@phase = @template.phases.first
# Get the first Org Admin
scaffold_org_admin(@template.org)
end
# TODO: The following methods SHOULD replace the old 'admin_' prefixed methods. The routes file already has
# these defined. They are defined multiple times though and we need to clean this up! In particular
# look at the unnamed routes after 'new_plan_phase' below. They are not named because they are duplicates.
# We should just have:
#
# SHOULD BE:
# --------------------------------------------------
# sections GET /templates/:template_id/phases/:phase_id/sections sections#index
# POST /templates/:template_id/phases/:phase_id/sections sections#create
# section GET /templates/:template_id/phases/:phase_id/section/:id sections#show
# PATCH /templates/:template_id/phases/:phase_id/section/:id sections#update
# PUT /templates/:template_id/phases/:phase_id/section/:id sections#update
# DELETE /templates/:template_id/phases/:phase_id/section/:id sections#destroy
#
# CURRENT RESULTS OF `rake routes`
# --------------------------------------------------
# admin_create_section POST /org/admin/templates/sections/:id/admin_create sections#admin_create
# admin_update_section PUT /org/admin/templates/sections/:id/admin_update sections#admin_update
# admin_destroy_section DELETE /org/admin/templates/sections/:id/admin_destroy sections#admin_destroy
# POST /org/admin/templates/sections/:id/admin_create (admin_create_section_path)
# ----------------------------------------------------------
test "create a new section" do
params = {phase_id: @phase.id, title: 'Section Tester', number: 99}
@phase.template.dirty = false
@phase.template.save!
# Should redirect user to the root path if they are not logged in!
post admin_create_section_path(@phase), {section: params}
assert_unauthorized_redirect_to_root_path
sign_in @user
post admin_create_section_path(@phase), {section: params}
assert_response :redirect
assert_redirected_to admin_show_phase_url(id: @phase.id, section_id: Section.last.id)
assert flash[:notice].start_with?('Successfully') && flash[:notice].include?('created')
assert_equal 'Section Tester', Section.last.title, "expected the record to have been created!"
# Make sure that the template's dirty flag got set
assert @phase.template.reload.dirty?, "expected the templates dirty flag to be true"
# Invalid object
post admin_create_section_path(@phase), {section: {phase_id: @phase.id, title: nil}}
assert flash[:alert].starts_with?(_('Could not create your'))
assert_response :redirect
assert assigns(:section)
assert assigns(:phase)
assert assigns(:edit)
assert assigns(:open)
assert assigns(:sections)
end
# PUT /org/admin/templates/sections/:id/admin_update (admin_update_section_path)
# ----------------------------------------------------------
test "update the section" do
params = {title: 'Phase - UPDATE'}
@phase.template.dirty = false
@phase.template.save!
# Should redirect user to the root path if they are not logged in!
put admin_update_section_path(@phase.sections.first), {section: params}
assert_unauthorized_redirect_to_root_path
sign_in @user
# Valid save
put admin_update_section_path(@phase.sections.first), {section: params}
assert flash[:notice].start_with?('Successfully') && flash[:notice].include?('saved')
assert_response :redirect
assert_redirected_to admin_show_phase_url(id: @phase.id, section_id: @phase.sections.first.id)
assert_equal 'Phase - UPDATE', @phase.sections.first.title, "expected the record to have been updated"
# Make sure that the template's dirty flag got set
assert @phase.template.reload.dirty?, "expected the templates dirty flag to be true"
# Invalid save
put admin_update_section_path(@phase.sections.first), {section: {title: nil}}
assert flash[:alert].starts_with?(_('Could not update your'))
assert_response :redirect
assert assigns(:section)
assert assigns(:phase)
assert assigns(:edit)
assert assigns(:open)
assert assigns(:sections)
assert assigns(:section_id)
end
# DELETE /org/admin/templates/sections/:id/admin_destroy (admin_destroy_section_path)
# ----------------------------------------------------------
test "delete the section" do
id = @phase.sections.first.id
@phase.template.dirty = false
@phase.template.save!
# Should redirect user to the root path if they are not logged in!
delete admin_destroy_section_path(id: @phase.id, section_id: id)
assert_unauthorized_redirect_to_root_path
sign_in @user
delete admin_destroy_section_path(id: @phase.id, section_id: id)
assert_response :redirect
assert assigns(:section)
assert assigns(:phase)
assert_redirected_to admin_show_phase_url(id: @phase.id)
assert flash[:notice].start_with?('Successfully') && flash[:notice].include?('deleted')
assert_raise ActiveRecord::RecordNotFound do
Section.find(id).nil?
end
# Make sure that the template's dirty flag got set
assert @phase.template.reload.dirty?, "expected the templates dirty flag to be true"
end
end