# encoding: UTF-8 # # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved. # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. require 'gooddata' describe "Over-To data permissions implementation", :constraint => 'slow' do before(:all) do @spec = JSON.parse(File.read("./spec/data/blueprints/m_n_model.json"), :symbolize_names => true) @client = ConnectionHelper::create_default_connection @blueprint = GoodData::Model::ProjectBlueprint.new(@spec) @project = @client.create_project_from_blueprint(@blueprint, :token => ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT) @domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN) @label = @project.attributes('attr.permission.id').label_by_name('label.permission.id.email') data = [ ['label.commits.id', 'fact.commits.lines_changed', 'dataset.users'], [1, 1, 1], [2, 3, 2], [3, 5, 3]] @project.upload(data, @blueprint, 'dataset.commits') data = [ ["label.users.id", "label.users.id.email"], [1, "tomas@gooddata.com"], [2, "petr@gooddata.com"], [3, "jirka@gooddata.com"]] @project.upload(data, @blueprint, 'dataset.users') data = [ ["label.permission.id", "label.permission.id.email"], [1, "tomas@gooddata.com"], [2, "petr@gooddata.com"], [3, "jirka@gooddata.com"]] @project.upload(data, @blueprint, 'dataset.permission_users') data = [ ['label.visibility.id', 'dataset.permission_users', 'dataset.commits'], [1, 1, 1], [3, 1, 3]] @project.upload(data, @blueprint, 'dataset.visibility') @variable = @project.create_variable(title: 'uaaa', attribute: @label.attribute).save @attr1 = @project.attributes('attr.visibility.id') @attr2 = @project.attributes('attr.commits.id') @filters = [ { login: ConnectionHelper::DEFAULT_USERNAME, filters: [ { label: @label.uri, values: ["tomas@gooddata.com"], over: @attr1.uri, to: @attr2.uri} ] } ] end after(:all) do @project.delete if @project end after(:each) do @project.data_permissions.pmap &:delete end it "should fail if you are specifying OVER TO filter and variables. Variables do not support OVER TO" do expect do @project.add_variable_permissions(@filters, @variable) end.to raise_exception end it "should create an over to filter transparently" do metric = @project.create_metric("SELECT SUM(#\"Fact.Commits.Lines Changed\")", :title => 'x') expect(metric.execute).to eq 9 @project.add_data_permissions(@filters) expect(metric.execute).to eq 6 r = @project.compute_report(left: [metric], top: ['label.users.id.email']) expect(r.include_column?(['tomas@gooddata.com', 1])).to eq true expect(r.include_column?(['jirka@gooddata.com', 5])).to eq true expect(r.include_column?(['petr@gooddata.com', 3])).to eq false data = [['label.visibility.id', 'dataset.permission_users', 'dataset.commits'], [1, 1, 1]] @project.upload(data, @blueprint, 'dataset.visibility') expect(metric.execute).to eq 1 r = @project.compute_report(left: [metric], top: ['label.users.id.email']) expect(r.include_column?(['tomas@gooddata.com', 1])).to eq true expect(r.include_column?(['jirka@gooddata.com', 5])).to eq false expect(r.include_column?(['petr@gooddata.com', 3])).to eq false end end