Files
mapknitter/test/functional/maps_controller_test.rb
Cess 253ab8b2f0 Refactoring controllers (#546)
* include byebug in test group

* refactor feeds controller

* refactor tags and maps controllers

* refactor images controller

* increase maps controller test coverage
2019-04-23 12:32:25 -04:00

291 lines
7.4 KiB
Ruby

require 'test_helper'
class MapsControllerTest < ActionController::TestCase
# called before every single test
def setup
@map = maps(:saugus)
end
# called after every single test
def teardown
end
test "should display image url for maps by region" do
get :region , { minlat: 40, maxlat: 50, minlon: -80, maxlon: -60, format: :json}
image_urls = []
@map.warpables.each do | warpable|
image_urls.append(warpable.image.url)
end
json_response = JSON.parse(response.body)
assert_response :success
assert_equal image_urls, json_response[0]['image_urls']
end
test "should get index" do
get :index
@maps = assigns(:maps)
assert_response :success
assert @maps.collect(&:name).include?("Saugus Landfill Incinerator")
assert @maps.collect(&:name).include?("Cubbon Park")
assert @maps.collect{ |map| map.user.login}.include?("quentin")
end
test "should not display archived maps" do
session[:user_id] = 1
get(:archive, id: @map.slug)
get :index
@maps = assigns(:maps)
assert_response :success
assert !@maps.collect(&:name).include?("Saugus Landfill Incinerator")
assert @maps.collect(&:name).include?("Cubbon Park")
assert @maps.collect{ |map| map.user.login}.include?("quentin")
end
test "should get map of maps" do
get :map
assert_response :success
assert_includes @response.body, @map.slug
end
test "should get new" do
get :new
assert_response :success
assert_not_nil assigns(:map)
end
test "should search for maps by name" do
get :search, q: 'Saugus'
@maps = assigns(:maps)
assert_response :success
assert @maps.collect(&:name).include?("Saugus Landfill Incinerator")
assert !@maps.collect(&:name).include?("Cubbon Park")
end
test "should search for maps by location" do
get :search, q: 'India'
@maps = assigns(:maps)
assert_response :success
assert !@maps.collect(&:name).include?("Saugus Landfill Incinerator")
assert @maps.collect(&:name).include?("Cubbon Park")
end
test "should search for maps by description" do
get :search, q: 'a park'
@maps = assigns(:maps)
assert_response :success
assert !@maps.collect(&:name).include?("Saugus Landfill Incinerator")
assert @maps.collect(&:name).include?("Cubbon Park")
end
test "should create map if logged in" do
session[:user_id] = 1
before_count = Map.count
post(:create, map: {
name: "Coal terminal map",
slug: "coal-terminal",
location: "London",
lat: 42.43823313018592,
lon: -70.9849190711975
})
@map = assigns(:map)
assert_response 302
assert_redirected_to '/maps/'+@map.slug
assert_not_equal before_count, Map.count
assert Map.all.collect(&:name).include?("Coal terminal map")
assert_equal @map.user.login, "quentin"
end
test "should create map if not logged in" do
before_count = Map.count
post(:create, map: {
name: "Coal terminal map",
slug: "coal-terminal",
location: "London",
lat: 42.43823313018592,
lon: -70.9849190711975
})
@map = assigns(:map)
assert_redirected_to '/maps/'+@map.slug
assert_not_equal before_count, Map.count
assert Map.all.collect(&:name).include?("Coal terminal map")
assert_nil @map.user
assert_equal 'anonymous', @map.author
end
test 'assigns current user as map author if logged in' do
before_count = Map.count
user = users(:quentin)
session[:user_id] = user.id
post :create, map: {
name: 'Yaya Center',
slug: 'yaya-center',
location: 'Nairobi',
lat: -0.3030988,
lon: 36.080026
}
@map = assigns(:map)
assert_redirected_to '/maps/'+@map.slug
assert_not_equal before_count, Map.count
assert Map.all.collect(&:name).include?('Yaya Center')
assert_equal user, @map.user
assert_equal user.login, @map.author
end
test "should render new if map not created" do
session[:user_id] = 1
before_count = Map.count
post(:create, map: {
name: "Coal terminal map",
slug: "coal-terminal"
})
@map = assigns(:map)
assert_response :success
assert_template :new
assert_equal before_count, Map.count
assert !Map.all.collect(&:name).include?("Coal terminal map")
end
test "should not delete map if not owner" do
session[:user_id] = 3
before_count = Map.count
post(:destroy, id: @map.id)
assert_redirected_to "/maps/" + @map.slug
assert_equal flash[:error], "Only admins or map owners may delete maps."
assert_equal before_count, Map.count
end
test "should delete map if owner" do
session[:user_id] = 1
before_count = Map.count
post(:destroy, id: @map.id)
assert_redirected_to '/'
assert_not_equal before_count, Map.count
assert_equal flash[:notice], "Map deleted."
end
test "should get show" do
get(:show, id: @map.id)
assert_response :success
assert_not_nil assigns(:map)
end
test "should archive map" do
session[:user_id] = 1
get(:archive, id: @map.slug)
@map.reload
assert_redirected_to '/?_=' + Time.now.to_i.to_s
assert_true @map.archived
end
test "should not archive map without enough permissions" do
session[:user_id] = 3
get(:archive, id: @map.slug)
@map.reload
assert_redirected_to '/?_=' + Time.now.to_i.to_s
assert_false @map.archived
end
test "should update map" do
session[:user_id] = 1
put(:update,
id: 1,
map: {
name: "Schrute farms",
location: "USA",
lat: 44,
lon: -74,
description: "A really green farm"
},
tags: "beets bears")
@map.reload
assert_redirected_to "/maps/" + @map.id.to_s
assert_equal "Schrute farms", @map.name
assert_equal 44, @map.lat
assert_equal -74, @map.lon
assert_equal "A really green farm", @map.description
assert @map.has_tag("beets")
assert @map.has_tag("bears")
end
test 'should not update unless logged in' do
put :update, id: 2, map: { name: 'Street 5'}
assert_redirected_to '/login?back_to=/map/2'
end
test "should display maps by region"do
get :region , { minlat: 40, maxlat: 50, minlon: -80, maxlon: -60}
@maps = assigns(:maps)
assert_response :success
assert @maps.collect(&:name).include?("Saugus Landfill Incinerator")
end
test 'should annotate maps' do
get :annotate, id: @map.id
assert_response :success
assigns(:annotations) == true
end
test 'embed' do
get :embed, id: @map.id
assert_response :success
assert_template :show
end
test 'it returns the images' do
get :images, id: @map.id
assert_response :success
assert_equal 'application/json', response.content_type
end
def export_if_logged_in
Rails.stub(:env, ActiveSupport::StringInquirer.new('development')) do
session[:user_id] = 1
post :export, id: @map.id, resolution: 5
assert_response :success
assert_equal 'complete', @response.body
end
end
def export_anonmymous_map
Rails.stub(:env, ActiveSupport::StringInquirer.new('development')) do
map = maps(:cubbon)
post :export, id: map.id, resolution: 5
assert_response :success
end
end
test 'returns the exports' do
get :exports, id: 1
assert_response :success
end
test 'license' do
get :license
assert_response :success
end
test 'featured' do
get :featured
assert_response :success
end
end