Project

General

Profile

Download (4.58 KB) Statistics
| Branch: | Tag: | Revision:
module BasicRestResponseTest
extend ActiveSupport::Concern

module ClassMethods
def basic_index_test(collection = nil)
context 'GET #index' do
setup { get :index, session: set_session_user }
should respond_with(:success)
should render_template(:index)
test 'assigns a collection instance variable' do
collection ||= assigns[:model_of_controller].to_s.tableize
assert_not_nil assigns(:"#{collection}")
end
end
end

def basic_new_test
context 'GET #new' do
setup { get :new, session: set_session_user }
should respond_with(:success)
should render_template(:new)
end
end

def basic_edit_test(object_found = nil)
context 'GET #edit' do
setup do
get :edit, params: { :id => @model }, session: set_session_user
end

should respond_with(:success)
should render_template(:edit)
test 'assigns the found object to an instance variable' do
object_found ||= assigns[:resource_class].to_s.tableize.singularize
assert_equal @model, assigns(:"#{object_found}")
end
end
end

def basic_pagination_per_page_test
context 'GET #index' do
setup do
@entries_per_page = Setting[:entries_per_page] ? Setting[:entries_per_page] : 5
FactoryBot.create_list(get_factory_name, @entries_per_page + 2, *@factory_options)
end

test 'should render correct per_page value' do
get :index, params: {per_page: @entries_per_page + 1}, session: set_session_user
assert_response :success
per_page_results = css_select('.pagination-pf-items-current')
assert_equal "1-#{@entries_per_page + 1}", per_page_results.first.content.squish
end

test 'should render per page dropdown with correct values' do
get :index, params: {per_page: @entries_per_page + 1}, session: set_session_user
assert_response :success
assert_select "[id='per_page']" do
assert_select "option[selected='selected'][value='#{@entries_per_page + 1}']"
assert_select "option[value='5']"
assert_select "option[value='10']"
assert_select "option[value='15']"
assert_select "option[value='25']"
assert_select "option[value='50']"
end
end

test 'should display pagination buttons' do
get :index, params: {per_page: @entries_per_page + 1}, session: set_session_user
assert_response :success
assert_select "[id=pagination]" do
assert_includes @response.body.squish, "pagination pagination-pf-back"
assert_includes @response.body.squish, "pagination pagination-pf-forward"
end
end

test 'sort links should include per page param' do
get :index, params: {per_page: @entries_per_page + 1}, session: set_session_user
assert_response :success
sort_links = css_select('thead a')
sort_links.each do |link|
assert_includes link['href'], "per_page=#{@entries_per_page + 1}"
end
end
end
end

def basic_pagination_rendered_test
context 'GET #index' do
setup do
@old = Setting[:entries_per_page]
FactoryBot.create(get_factory_name) if @controller.resource_class.count.zero?
Setting[:entries_per_page] = @controller.resource_class.count
end

test 'should not render pagination' do
get :index, session: set_session_user
assert_response :success
refute_includes @response.body, "id=pagination"
end

test 'should render pagination' do
FactoryBot.create(get_factory_name, *@factory_options)
get :index, session: set_session_user
assert_response :success
assert_select "form[id='pagination']"
end

test 'should not render pagination when no search results' do
next if @controller.resource_name == "trend"
@request.env['HTTP_REFERER'] = root_url
get :index, params: {search: "name='A98$bcD#67Ef*g"}, session: set_session_user
assert (@response.body.include? "No entries found") || @response.body.match(/You are being.*redirected/)
end

teardown do
Setting[:entries_per_page] = @old
end
end
end
end

def get_factory_name
model = @controller.controller_name.singularize
case model
when "trend"
:trend_os
when "subnet"
:subnet_ipv4
else
model.to_sym
end
end
end
(1-1/4)