130 lines
3.9 KiB
Ruby
130 lines
3.9 KiB
Ruby
|
module VisualizationControllerHelper
|
||
|
include Rack::Test::Methods
|
||
|
include Warden::Test::Helpers
|
||
|
include CacheHelper
|
||
|
|
||
|
TEST_UUID = '00000000-0000-0000-0000-000000000000'.freeze
|
||
|
|
||
|
DATE_ATTRIBUTES = %w{ created_at updated_at }.freeze
|
||
|
NORMALIZED_ASSOCIATION_ATTRIBUTES = {
|
||
|
attributes: DATE_ATTRIBUTES,
|
||
|
associations: {
|
||
|
'permission' => {
|
||
|
attributes: DATE_ATTRIBUTES,
|
||
|
associations: {}
|
||
|
},
|
||
|
'table' => {
|
||
|
attributes: DATE_ATTRIBUTES,
|
||
|
associations: {}
|
||
|
}
|
||
|
}
|
||
|
}.freeze
|
||
|
|
||
|
NEW_ATTRIBUTES = {
|
||
|
attributes: [],
|
||
|
associations: {
|
||
|
'table' => {
|
||
|
attributes: [],
|
||
|
associations: {
|
||
|
'permission' => {
|
||
|
attributes: [],
|
||
|
associations: {
|
||
|
'owner' => {
|
||
|
attributes: ['email', 'quota_in_bytes', 'db_size_in_bytes', 'public_visualization_count',
|
||
|
'all_visualization_count', 'table_count'],
|
||
|
associations: {}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
'permission' => {
|
||
|
attributes: [],
|
||
|
associations: {
|
||
|
'owner' => {
|
||
|
attributes: ['email', 'quota_in_bytes', 'db_size_in_bytes', 'public_visualization_count',
|
||
|
'all_visualization_count', 'table_count'],
|
||
|
associations: {}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}.freeze
|
||
|
|
||
|
# Custom hash comparison, since in the ActiveModel-based controllers
|
||
|
# we allow some differences:
|
||
|
# - x to many associations can return [] instead of nil
|
||
|
def normalize_hash(h, normalized_attributes = NORMALIZED_ASSOCIATION_ATTRIBUTES)
|
||
|
h.each { |k, v|
|
||
|
h[k] = nil if v == []
|
||
|
h[k] = '' if normalized_attributes[:attributes].include?(k)
|
||
|
if normalized_attributes[:associations].keys.include?(k)
|
||
|
normalize_hash(v, normalized_attributes[:associations][k])
|
||
|
end
|
||
|
}
|
||
|
end
|
||
|
|
||
|
# INFO: this test uses comparison against old data structures to check validity.
|
||
|
# You can use this method to remove that new data so next comparisons will work.
|
||
|
def remove_data_only_in_new_controllers(visualization_hash, new_attributes = NEW_ATTRIBUTES)
|
||
|
visualization_hash.each { |k, v|
|
||
|
if new_attributes[:attributes].include?(k)
|
||
|
removed = visualization_hash.delete(k)
|
||
|
elsif new_attributes[:associations].include?(k)
|
||
|
remove_data_only_in_new_controllers(v, new_attributes[:associations][k])
|
||
|
end
|
||
|
}
|
||
|
end
|
||
|
|
||
|
def login(user)
|
||
|
login_as(user, {scope: user.username })
|
||
|
host! "#{user.username}.localhost.lan"
|
||
|
end
|
||
|
|
||
|
def base_url
|
||
|
'/api/v1/viz'
|
||
|
end
|
||
|
|
||
|
def response_body(params = nil)
|
||
|
get base_url, params.nil? ? nil : params.dup, @headers
|
||
|
last_response.status.should == 200
|
||
|
body = JSON.parse(last_response.body)
|
||
|
body['visualizations'] = body['visualizations'].map { |v| normalize_hash(v) }.map { |v| remove_data_only_in_new_controllers(v) }
|
||
|
body
|
||
|
end
|
||
|
|
||
|
def factory(user, attributes={})
|
||
|
visualization_template(user, attributes)
|
||
|
end
|
||
|
|
||
|
def table_factory(options={})
|
||
|
create_table_with_options(@user_1, @headers, options)
|
||
|
end
|
||
|
|
||
|
def api_visualization_creation(user, headers, additional_fields = {})
|
||
|
post api_v1_visualizations_create_url(user_domain: user.username, api_key: user.api_key), factory(user).merge(additional_fields).to_json, headers
|
||
|
id = JSON.parse(last_response.body).fetch('id')
|
||
|
id.should_not be_nil
|
||
|
CartoDB::Visualization::Member.new(id: id).fetch
|
||
|
end
|
||
|
|
||
|
def test_organization
|
||
|
organization = Organization.new
|
||
|
organization.name = unique_name('org')
|
||
|
organization.quota_in_bytes = 1234567890
|
||
|
organization.seats = 5
|
||
|
organization.builder_enabled = false
|
||
|
organization
|
||
|
end
|
||
|
|
||
|
def create_geometry_table(user, the_geom)
|
||
|
table = new_table(privacy: UserTable::PRIVACY_PUBLIC, user_id: user.id)
|
||
|
table.force_schema = "the_geom geometry"
|
||
|
table.the_geom_type = "point"
|
||
|
table.save.reload
|
||
|
table.insert_row!(the_geom: the_geom)
|
||
|
table.update_bounding_box
|
||
|
table
|
||
|
end
|
||
|
end
|