You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
4.3 KiB

6 months ago
require_relative '../support/factories/users'
require 'helpers/unique_names_helper'
include UniqueNamesHelper
class TestUserFactory
include CartoDB::Factories
end
module TableSharing
def share_table_with_user(table, user, access: CartoDB::Permission::ACCESS_READONLY)
vis = CartoDB::Visualization::Member.new(id: table.table_visualization.id).fetch
per = vis.permission
per.set_user_permission(user, access)
per.save
per.reload
end
def share_visualization_with_user(visualization, user, access: CartoDB::Permission::ACCESS_READONLY)
vis = CartoDB::Visualization::Member.new(id: visualization.id).fetch
per = vis.permission
per.set_user_permission(user, access)
per.save
per.reload
end
end
shared_context 'organization with users helper' do
include CacheHelper
include CartoDB::Factories
include_context 'database configuration'
before(:each) do
bypass_named_maps
end
def test_organization
organization = Organization.new
organization.name = unique_name('org')
organization.quota_in_bytes = 1234567890
organization.seats = 15
organization.viewer_seats = 15
organization.builder_enabled = false
organization.geocoder_provider = 'heremaps'
organization.isolines_provider = 'heremaps'
organization.routing_provider = 'heremaps'
organization
end
before(:all) do
@helper = TestUserFactory.new
@organization = test_organization
@organization.save
@organization_2 = test_organization
@organization_2.save
@org_user_owner = @helper.create_owner(@organization)
@org_user_1 = @helper.create_test_user(unique_name('user'), @organization)
@org_user_2 = @helper.create_test_user(unique_name('user'), @organization)
@organization.reload
@carto_organization = Carto::Organization.find(@organization.id)
@carto_organization_2 = Carto::Organization.find(@organization_2.id)
@carto_org_user_owner = Carto::User.find(@org_user_owner.id)
@carto_org_user_1 = Carto::User.find(@org_user_1.id)
@carto_org_user_2 = Carto::User.find(@org_user_2.id)
end
before(:each) do
bypass_named_maps
delete_user_data @org_user_owner
delete_user_data @org_user_1
delete_user_data @org_user_2
end
after(:all) do
bypass_named_maps
delete_user_data @org_user_owner if @org_user_owner
@organization.destroy_cascade
@organization_2.destroy_cascade
end
def share_table(table, owner, user)
bypass_named_maps
headers = {'CONTENT_TYPE' => 'application/json'}
perm_id = table.table_visualization.permission.id
put api_v1_permissions_update_url(user_domain: owner.username, api_key: owner.api_key, id: perm_id),
{ acl: [{
type: CartoDB::Permission::TYPE_USER,
entity: {
id: user.id,
},
access: CartoDB::Permission::ACCESS_READONLY
}]}.to_json, headers
response.status.should == 200
end
def share_table_with_organization(table, owner, organization)
bypass_named_maps
headers = {'CONTENT_TYPE' => 'application/json'}
perm_id = table.table_visualization.permission.id
params = { acl: [{ type: CartoDB::Permission::TYPE_ORGANIZATION,
entity: { id: organization.id },
access: CartoDB::Permission::ACCESS_READONLY
}]
}
url = api_v1_permissions_update_url(user_domain: owner.username, api_key: owner.api_key, id: perm_id)
put url, params.to_json, headers
last_response.status.should == 200
end
def share_visualization(visualization, user, access = CartoDB::Permission::ACCESS_READONLY)
shared_entity = CartoDB::SharedEntity.new(
recipient_id: user.id,
recipient_type: CartoDB::SharedEntity::RECIPIENT_TYPE_USER,
entity_id: visualization.id,
entity_type: CartoDB::SharedEntity::ENTITY_TYPE_VISUALIZATION
)
shared_entity.save
owner = visualization.user
perm_id = visualization.permission.id
params = { acl: [{ type: CartoDB::Permission::TYPE_USER,
entity: { id: user.id },
access: access
}]
}
url = api_v1_permissions_update_url(user_domain: owner.username, api_key: owner.api_key, id: perm_id)
put_json url, params do |response|
response.status.should == 200
end
end
end