243 lines
11 KiB
Ruby
243 lines
11 KiB
Ruby
|
require_relative '../../../spec_helper'
|
||
|
require_relative '../../../../app/controllers/carto/api/templates_controller'
|
||
|
|
||
|
describe Carto::Api::TemplatesController do
|
||
|
include_context 'organization with users helper'
|
||
|
include Rack::Test::Methods
|
||
|
include Warden::Test::Helpers
|
||
|
|
||
|
before(:each) do
|
||
|
::User.any_instance.stubs(:has_feature_flag?).returns(false)
|
||
|
::User.any_instance.stubs(:has_feature_flag?).with('templated_workflows').returns(true)
|
||
|
Carto::User.any_instance.stubs(:has_feature_flag?).with('templated_workflows').returns(true)
|
||
|
Carto::User.any_instance.stubs(:has_feature_flag?).with('disabled_cartodb_logo').returns(false)
|
||
|
|
||
|
bypass_named_maps
|
||
|
@table = create_table(privacy: UserTable::PRIVACY_PRIVATE, name: 'table1', user_id: @org_user_owner.id)
|
||
|
@other_table = create_table(privacy: UserTable::PRIVACY_PRIVATE, name: 'table2', user_id: @org_user_owner.id)
|
||
|
|
||
|
@template_1_data = {
|
||
|
title: 'title1',
|
||
|
description: 'description 1',
|
||
|
code: '{ /* 1 */ }',
|
||
|
min_supported_version: '1.2.3',
|
||
|
max_supported_version: '2.0.0',
|
||
|
source_visualization_id: @table.table_visualization.id,
|
||
|
organization_id: @org_user_owner.organization.id,
|
||
|
required_tables: [ "#{@org_user_owner.database_schema}.#{@table.name}" ]
|
||
|
}
|
||
|
|
||
|
@template_2_data = {
|
||
|
title: 'title2',
|
||
|
description: 'description 2',
|
||
|
code: '{ /* 2 */ }',
|
||
|
min_supported_version: '4.5.6',
|
||
|
max_supported_version: '99.0.0',
|
||
|
source_visualization_id: @other_table.table_visualization.id,
|
||
|
organization_id: @org_user_owner.organization.id,
|
||
|
required_tables: [ "#{@org_user_owner.database_schema}.#{@other_table.name}" ]
|
||
|
}
|
||
|
|
||
|
@template_3_data = {
|
||
|
title: 'title3',
|
||
|
description: 'description 3',
|
||
|
code: '{ /* 3 */ }',
|
||
|
min_supported_version: '7.8.9',
|
||
|
max_supported_version: '666.0.0',
|
||
|
source_visualization_id: @table.table_visualization.id,
|
||
|
organization_id: @org_user_owner.organization.id,
|
||
|
required_tables: [ "#{@org_user_owner.database_schema}.#{@table.name}" ]
|
||
|
}
|
||
|
|
||
|
@template = Carto::Template.new({
|
||
|
title: @template_1_data[:title],
|
||
|
code: @template_1_data[:code],
|
||
|
description: @template_1_data[:description],
|
||
|
min_supported_version: @template_1_data[:min_supported_version],
|
||
|
max_supported_version: @template_1_data[:max_supported_version],
|
||
|
source_visualization_id: @template_1_data[:source_visualization_id],
|
||
|
organization_id: @template_1_data[:organization_id],
|
||
|
required_tables: @template_1_data[:required_tables]
|
||
|
})
|
||
|
@template.save
|
||
|
|
||
|
@another_template_from_user = Carto::Template.new({
|
||
|
title: @template_2_data[:title],
|
||
|
code: @template_2_data[:code],
|
||
|
description: @template_2_data[:description],
|
||
|
min_supported_version: @template_2_data[:min_supported_version],
|
||
|
max_supported_version: @template_2_data[:max_supported_version],
|
||
|
source_visualization_id: @template_2_data[:source_visualization_id],
|
||
|
organization_id: @template_2_data[:organization_id],
|
||
|
required_tables: @template_2_data[:required_tables]
|
||
|
})
|
||
|
@another_template_from_user.save
|
||
|
|
||
|
login(@org_user_owner)
|
||
|
end
|
||
|
|
||
|
after(:each) do
|
||
|
Carto::Template.all.each { |template| template.delete }
|
||
|
delete_user_data(@org_user_owner)
|
||
|
end
|
||
|
|
||
|
it 'tests index action' do
|
||
|
get_json(api_v1_vis_templates_index_url) do |response|
|
||
|
response.status.should be_success
|
||
|
response.body[:items].count.should eq 2
|
||
|
|
||
|
response.body[:items][0][:id].nil?.should eq false
|
||
|
response.body[:items][0][:title].should eq @template_2_data[:title]
|
||
|
response.body[:items][0][:description].should eq @template_2_data[:description]
|
||
|
response.body[:items][0][:code].should eq @template_2_data[:code]
|
||
|
response.body[:items][0][:min_supported_version].should eq @template_2_data[:min_supported_version]
|
||
|
response.body[:items][0][:max_supported_version].should eq @template_2_data[:max_supported_version]
|
||
|
response.body[:items][0][:source_visualization][:id].should eq @template_2_data[:source_visualization_id]
|
||
|
response.body[:items][0][:organization][:id].should eq @template_2_data[:organization_id]
|
||
|
response.body[:items][0][:required_tables].should eq @template_2_data[:required_tables]
|
||
|
|
||
|
response.body[:items][1][:id].nil?.should eq false
|
||
|
response.body[:items][1][:title].should eq @template_1_data[:title]
|
||
|
response.body[:items][1][:description].should eq @template_1_data[:description]
|
||
|
response.body[:items][1][:code].should eq @template_1_data[:code]
|
||
|
response.body[:items][1][:min_supported_version].should eq @template_1_data[:min_supported_version]
|
||
|
response.body[:items][1][:max_supported_version].should eq @template_1_data[:max_supported_version]
|
||
|
response.body[:items][1][:source_visualization][:id].should eq @template_1_data[:source_visualization_id]
|
||
|
response.body[:items][1][:organization][:id].should eq @template_1_data[:organization_id]
|
||
|
response.body[:items][1][:required_tables].should eq @template_1_data[:required_tables]
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'tests show action' do
|
||
|
get_json(api_v1_vis_templates_show_url(id: @template.id)) do |response|
|
||
|
response.status.should be_success
|
||
|
response.body[:id].nil?.should eq false
|
||
|
response.body[:title].should eq @template_1_data[:title]
|
||
|
response.body[:description].should eq @template_1_data[:description]
|
||
|
response.body[:code].should eq @template_1_data[:code]
|
||
|
response.body[:min_supported_version].should eq @template_1_data[:min_supported_version]
|
||
|
response.body[:max_supported_version].should eq @template_1_data[:max_supported_version]
|
||
|
response.body[:source_visualization][:id].should eq @template_1_data[:source_visualization_id]
|
||
|
response.body[:organization][:id].should eq @template_1_data[:organization_id]
|
||
|
response.body[:required_tables].should eq @template_1_data[:required_tables]
|
||
|
end
|
||
|
end
|
||
|
|
||
|
it 'tests create action' do
|
||
|
post_json(api_v1_vis_templates_create_url(@template_3_data)) do |response|
|
||
|
response.status.should be_success
|
||
|
response.body[:id].nil?.should eq false
|
||
|
response.body[:title].should eq @template_3_data[:title]
|
||
|
response.body[:description].should eq @template_3_data[:description]
|
||
|
response.body[:code].should eq @template_3_data[:code]
|
||
|
response.body[:min_supported_version].should eq @template_3_data[:min_supported_version]
|
||
|
response.body[:max_supported_version].should eq @template_3_data[:max_supported_version]
|
||
|
response.body[:source_visualization][:id].should eq @template_3_data[:source_visualization_id]
|
||
|
response.body[:organization][:id].should eq @template_3_data[:organization_id]
|
||
|
response.body[:required_tables].should eq @template_3_data[:required_tables]
|
||
|
end
|
||
|
|
||
|
third_template = Carto::Template.where(id: JSON.parse(last_response.body)['id']).first
|
||
|
|
||
|
third_template.title.should eq @template_3_data[:title]
|
||
|
third_template.description.should eq @template_3_data[:description]
|
||
|
third_template.code.should eq @template_3_data[:code]
|
||
|
third_template.min_supported_version.should eq @template_3_data[:min_supported_version]
|
||
|
third_template.max_supported_version.should eq @template_3_data[:max_supported_version]
|
||
|
third_template.source_visualization_id.should eq @template_3_data[:source_visualization_id]
|
||
|
third_template.organization_id.should eq @template_3_data[:organization_id]
|
||
|
third_template.required_tables.should eq @template_3_data[:required_tables]
|
||
|
|
||
|
third_template.destroy
|
||
|
end
|
||
|
|
||
|
it 'tests update action' do
|
||
|
third_template = Carto::Template.new({
|
||
|
title: @template_3_data[:title],
|
||
|
code: @template_3_data[:code],
|
||
|
description: @template_3_data[:description],
|
||
|
min_supported_version: @template_3_data[:min_supported_version],
|
||
|
max_supported_version: @template_3_data[:max_supported_version],
|
||
|
source_visualization_id: @template_3_data[:source_visualization_id],
|
||
|
organization_id: @template_3_data[:organization_id],
|
||
|
required_tables: @template_3_data[:required_tables]
|
||
|
})
|
||
|
third_template.save.should eq true
|
||
|
|
||
|
new_fields = {
|
||
|
title: 'title4',
|
||
|
description: 'description 4',
|
||
|
code: '{ /* 4 */ }',
|
||
|
min_supported_version: '1.1.1',
|
||
|
max_supported_version: '2.0.0',
|
||
|
# Doesn't changes but must be sent
|
||
|
source_visualization_id: third_template[:source_visualization_id],
|
||
|
# Doesn't changes but must be sent
|
||
|
organization_id: third_template[:organization_id],
|
||
|
required_tables: [ "#{@org_user_owner.database_schema}.#{@table.name}",
|
||
|
"#{@org_user_owner.database_schema}.#{@other_table.name}" ]
|
||
|
}
|
||
|
|
||
|
put_json(api_v1_vis_templates_update_url(new_fields.merge({id: third_template.id}))) do |response|
|
||
|
response.status.should be_success
|
||
|
response.body[:title].should eq new_fields[:title]
|
||
|
response.body[:description].should eq new_fields[:description]
|
||
|
response.body[:code].should eq new_fields[:code]
|
||
|
response.body[:min_supported_version].should eq new_fields[:min_supported_version]
|
||
|
response.body[:max_supported_version].should eq new_fields[:max_supported_version]
|
||
|
response.body[:source_visualization][:id].should eq new_fields[:source_visualization_id]
|
||
|
response.body[:organization][:id].should eq new_fields[:organization_id]
|
||
|
response.body[:required_tables].should eq new_fields[:required_tables]
|
||
|
end
|
||
|
third_template = Carto::Template.where(id: third_template.id).first
|
||
|
|
||
|
third_template.title.should eq new_fields[:title]
|
||
|
third_template.description.should eq new_fields[:description]
|
||
|
third_template.code.should eq new_fields[:code]
|
||
|
third_template.min_supported_version.should eq new_fields[:min_supported_version]
|
||
|
third_template.max_supported_version.should eq new_fields[:max_supported_version]
|
||
|
third_template.source_visualization_id.should eq new_fields[:source_visualization_id]
|
||
|
third_template.organization_id.should eq new_fields[:organization_id]
|
||
|
third_template.required_tables.should eq new_fields[:required_tables]
|
||
|
|
||
|
third_template.destroy
|
||
|
end
|
||
|
|
||
|
it 'tests destroy action' do
|
||
|
third_template = Carto::Template.new({
|
||
|
title: @template_3_data[:title],
|
||
|
code: @template_3_data[:code],
|
||
|
description: @template_3_data[:description],
|
||
|
min_supported_version: @template_3_data[:min_supported_version],
|
||
|
max_supported_version: @template_3_data[:max_supported_version],
|
||
|
source_visualization_id: @template_3_data[:source_visualization_id],
|
||
|
organization_id: @template_3_data[:organization_id],
|
||
|
required_tables: @template_3_data[:required_tables]
|
||
|
})
|
||
|
third_template.save.should eq true
|
||
|
|
||
|
delete_json(api_v1_vis_templates_destroy_url(id: third_template.id)) do |response|
|
||
|
response.status.should be_success
|
||
|
end
|
||
|
|
||
|
Carto::Template.where(id: third_template.id).first.should eq nil
|
||
|
end
|
||
|
|
||
|
it 'tests related_tables_by_xxx actions' do
|
||
|
get_json(api_v1_tables_related_templates_url({ id: @template_1_data[:required_tables][0] })) do |response|
|
||
|
response.status.should be_success
|
||
|
response.body[:items].count.should eq 1
|
||
|
response.body[:items][0]['id'] = @template.id
|
||
|
response.body[:items][0]['title'] = @template.title
|
||
|
end
|
||
|
|
||
|
get_json(api_v1_visualizations_related_templates_url({ id: @table.table_visualization.id })) do |response|
|
||
|
response.status.should be_success
|
||
|
response.body[:items].count.should eq 1
|
||
|
response.body[:items][0]['id'] = @template.id
|
||
|
response.body[:items][0]['title'] = @template.title
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|