gooddata 0.6.49 → 0.6.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -4
- data/CLI.md +0 -4
- data/DEPENDENCIES.md +0 -8
- data/Dockerfile.jruby +19 -0
- data/Dockerfile.ruby +19 -0
- data/LICENSE +2 -2
- data/LICENSE.rb +1 -1
- data/Rakefile +1 -1
- data/gooddata.gemspec +29 -28
- data/lib/gooddata.rb +2 -1
- data/lib/gooddata/app/app.rb +1 -1
- data/lib/gooddata/bricks/base_downloader.rb +1 -1
- data/lib/gooddata/bricks/brick.rb +3 -4
- data/lib/gooddata/bricks/bricks.rb +3 -1
- data/lib/gooddata/bricks/middleware/aws_middleware.rb +6 -8
- data/lib/gooddata/bricks/middleware/base_middleware.rb +2 -1
- data/lib/gooddata/bricks/middleware/bench_middleware.rb +2 -1
- data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +3 -3
- data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +3 -2
- data/lib/gooddata/bricks/middleware/dwh_middleware.rb +28 -0
- data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +2 -2
- data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +2 -2
- data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +84 -21
- data/lib/gooddata/bricks/middleware/logger_middleware.rb +1 -1
- data/lib/gooddata/bricks/middleware/middleware.rb +1 -1
- data/lib/gooddata/bricks/middleware/params_inspect_middleware.rb +21 -0
- data/lib/gooddata/bricks/middleware/restforce_middleware.rb +26 -26
- data/lib/gooddata/bricks/middleware/stdout_middleware.rb +1 -1
- data/lib/gooddata/bricks/middleware/twitter_middleware.rb +1 -1
- data/lib/gooddata/bricks/middleware/undot_params_middleware.rb +1 -1
- data/lib/gooddata/bricks/pipeline.rb +6 -13
- data/lib/gooddata/bricks/utils.rb +3 -3
- data/lib/gooddata/cli/cli.rb +1 -1
- data/lib/gooddata/cli/commands/auth_cmd.rb +1 -1
- data/lib/gooddata/cli/commands/domain_cmd.rb +1 -1
- data/lib/gooddata/cli/commands/project_cmd.rb +1 -18
- data/lib/gooddata/cli/hooks.rb +1 -2
- data/lib/gooddata/cli/shared.rb +1 -1
- data/lib/gooddata/cli/terminal.rb +1 -1
- data/lib/gooddata/client.rb +1 -1
- data/lib/gooddata/commands/api.rb +1 -1
- data/lib/gooddata/commands/auth.rb +1 -1
- data/lib/gooddata/commands/base.rb +1 -1
- data/lib/gooddata/commands/commands.rb +1 -1
- data/lib/gooddata/commands/datasets.rb +1 -1
- data/lib/gooddata/commands/datawarehouse.rb +1 -1
- data/lib/gooddata/commands/domain.rb +1 -1
- data/lib/gooddata/commands/process.rb +1 -1
- data/lib/gooddata/commands/project.rb +2 -31
- data/lib/gooddata/commands/projects.rb +1 -1
- data/lib/gooddata/commands/role.rb +1 -1
- data/lib/gooddata/commands/runners.rb +1 -1
- data/lib/gooddata/commands/scaffold.rb +1 -1
- data/lib/gooddata/commands/user.rb +1 -1
- data/lib/gooddata/connection.rb +1 -1
- data/lib/gooddata/core/core.rb +1 -1
- data/lib/gooddata/core/logging.rb +1 -1
- data/lib/gooddata/core/nil_logger.rb +1 -1
- data/lib/gooddata/core/project.rb +1 -1
- data/lib/gooddata/core/rest.rb +1 -1
- data/lib/gooddata/core/user.rb +1 -1
- data/lib/gooddata/data/data.rb +1 -1
- data/lib/gooddata/data/guesser.rb +1 -1
- data/lib/gooddata/exceptions/attr_element_not_found.rb +1 -1
- data/lib/gooddata/exceptions/command_failed.rb +1 -1
- data/lib/gooddata/exceptions/exceptions.rb +1 -1
- data/lib/gooddata/exceptions/execution_limit_exceeded.rb +1 -1
- data/lib/gooddata/exceptions/export_clone.rb +4 -0
- data/lib/gooddata/exceptions/filter_maqlization.rb +1 -1
- data/lib/gooddata/exceptions/import_clone.rb +4 -0
- data/lib/gooddata/exceptions/malformed_user.rb +1 -1
- data/lib/gooddata/exceptions/maql_execution.rb +1 -1
- data/lib/gooddata/exceptions/no_project_error.rb +1 -1
- data/lib/gooddata/exceptions/object_migration.rb +1 -1
- data/lib/gooddata/exceptions/project_not_found.rb +1 -1
- data/lib/gooddata/exceptions/segment_not_empty.rb +1 -1
- data/lib/gooddata/exceptions/uncomputable_report.rb +1 -1
- data/lib/gooddata/exceptions/user_in_different_domain.rb +1 -1
- data/lib/gooddata/exceptions/validation_error.rb +1 -1
- data/lib/gooddata/extensions/big_decimal.rb +1 -1
- data/lib/gooddata/extensions/class.rb +11 -0
- data/lib/gooddata/extensions/enumerable.rb +1 -1
- data/lib/gooddata/extensions/extensions.rb +1 -1
- data/lib/gooddata/extensions/false.rb +9 -1
- data/lib/gooddata/extensions/hash.rb +12 -1
- data/lib/gooddata/extensions/integer.rb +5 -0
- data/lib/gooddata/extensions/nil.rb +5 -1
- data/lib/gooddata/extensions/numeric.rb +1 -1
- data/lib/gooddata/extensions/object.rb +5 -1
- data/lib/gooddata/extensions/symbol.rb +1 -1
- data/lib/gooddata/extensions/true.rb +9 -1
- data/lib/gooddata/extract.rb +1 -1
- data/lib/gooddata/goodzilla/goodzilla.rb +1 -1
- data/lib/gooddata/helpers/auth_helpers.rb +1 -1
- data/lib/gooddata/helpers/csv_helper.rb +1 -1
- data/lib/gooddata/helpers/data_helper.rb +19 -10
- data/lib/gooddata/helpers/erb_helper.rb +23 -0
- data/lib/gooddata/helpers/global_helpers.rb +5 -73
- data/lib/gooddata/helpers/global_helpers_params.rb +73 -7
- data/lib/gooddata/helpers/helpers.rb +1 -1
- data/lib/gooddata/lcm/actions/actions.rb +12 -0
- data/lib/gooddata/lcm/actions/associate_clients.rb +46 -0
- data/lib/gooddata/lcm/actions/base_action.rb +23 -0
- data/lib/gooddata/lcm/actions/collect_clients.rb +89 -0
- data/lib/gooddata/lcm/actions/collect_segment_clients.rb +103 -0
- data/lib/gooddata/lcm/actions/collect_segments.rb +59 -0
- data/lib/gooddata/lcm/actions/create_segment_masters.rb +167 -0
- data/lib/gooddata/lcm/actions/ensure_release_table.rb +56 -0
- data/lib/gooddata/lcm/actions/ensure_segments.rb +35 -0
- data/lib/gooddata/lcm/actions/ensure_technical_users_domain.rb +66 -0
- data/lib/gooddata/lcm/actions/ensure_technical_users_project.rb +68 -0
- data/lib/gooddata/lcm/actions/ensure_titles.rb +54 -0
- data/lib/gooddata/lcm/actions/hello_world.rb +44 -0
- data/lib/gooddata/lcm/actions/print_actions.rb +61 -0
- data/lib/gooddata/lcm/actions/print_modes.rb +72 -0
- data/lib/gooddata/lcm/actions/print_types.rb +55 -0
- data/lib/gooddata/lcm/actions/provision_clients.rb +80 -0
- data/lib/gooddata/lcm/actions/purge_clients.rb +78 -0
- data/lib/gooddata/lcm/actions/segments_filter.rb +50 -0
- data/lib/gooddata/lcm/actions/synchronize_attribute_drillpaths.rb +60 -0
- data/lib/gooddata/lcm/actions/synchronize_clients.rb +87 -0
- data/lib/gooddata/lcm/actions/synchronize_color_palette.rb +59 -0
- data/lib/gooddata/lcm/actions/synchronize_label_types.rb +61 -0
- data/lib/gooddata/lcm/actions/synchronize_ldm.rb +64 -0
- data/lib/gooddata/lcm/actions/synchronize_meta.rb +55 -0
- data/lib/gooddata/lcm/actions/synchronize_new_segments.rb +55 -0
- data/lib/gooddata/lcm/actions/synchronize_processes.rb +66 -0
- data/lib/gooddata/lcm/actions/synchronize_schedules.rb +81 -0
- data/lib/gooddata/lcm/actions/update_release_table.rb +80 -0
- data/lib/gooddata/lcm/data/create_lcm_release.sql.erb +5 -0
- data/lib/gooddata/lcm/data/insert_into_lcm_release.sql.erb +11 -0
- data/lib/gooddata/lcm/data/select_from_lcm_release.sql.erb +8 -0
- data/lib/gooddata/lcm/data/update_lcm_release.sql.erb +7 -0
- data/lib/gooddata/lcm/dsl/dsl.rb +50 -0
- data/lib/gooddata/lcm/dsl/params_dsl.rb +61 -0
- data/lib/gooddata/lcm/dsl/type_dsl.rb +61 -0
- data/lib/gooddata/lcm/helpers/check_helper.rb +37 -0
- data/lib/gooddata/lcm/helpers/helpers.rb +12 -0
- data/lib/gooddata/lcm/lcm.rb +161 -20
- data/lib/gooddata/lcm/lcm2.rb +260 -0
- data/lib/gooddata/lcm/types/base_type.rb +29 -0
- data/lib/gooddata/lcm/types/class/ads_client.rb +35 -0
- data/lib/gooddata/lcm/types/class/class.rb +21 -0
- data/lib/gooddata/lcm/types/class/gd_client.rb +35 -0
- data/lib/gooddata/lcm/types/class/types.rb +12 -0
- data/lib/gooddata/lcm/types/complex/complex.rb +33 -0
- data/lib/gooddata/lcm/types/complex/release_query.rb +35 -0
- data/lib/gooddata/lcm/types/complex/segment.rb +37 -0
- data/lib/gooddata/lcm/types/complex/synchronization_info.rb +32 -0
- data/lib/gooddata/lcm/types/complex/tokens.rb +31 -0
- data/lib/gooddata/lcm/types/complex/types.rb +12 -0
- data/lib/gooddata/lcm/types/complex/update_preference.rb +32 -0
- data/lib/gooddata/lcm/types/param.rb +16 -0
- data/lib/gooddata/lcm/types/scalar/bool.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/hash.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/integer.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/object.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/string.rb +22 -0
- data/lib/gooddata/lcm/types/scalar/types.rb +12 -0
- data/lib/gooddata/lcm/types/special/array.rb +35 -0
- data/lib/gooddata/lcm/types/special/enum.rb +17 -0
- data/lib/gooddata/lcm/types/special/types.rb +12 -0
- data/lib/gooddata/lcm/types/types.rb +12 -0
- data/lib/gooddata/mixins/author.rb +1 -1
- data/lib/gooddata/mixins/content_getter.rb +1 -1
- data/lib/gooddata/mixins/content_property_reader.rb +1 -1
- data/lib/gooddata/mixins/content_property_writer.rb +1 -1
- data/lib/gooddata/mixins/contributor.rb +1 -1
- data/lib/gooddata/mixins/data_getter.rb +1 -1
- data/lib/gooddata/mixins/data_property_reader.rb +1 -1
- data/lib/gooddata/mixins/data_property_writer.rb +1 -1
- data/lib/gooddata/mixins/inspector.rb +1 -1
- data/lib/gooddata/mixins/is_attribute.rb +1 -1
- data/lib/gooddata/mixins/is_dimension.rb +1 -1
- data/lib/gooddata/mixins/is_fact.rb +1 -1
- data/lib/gooddata/mixins/is_label.rb +1 -1
- data/lib/gooddata/mixins/links.rb +1 -1
- data/lib/gooddata/mixins/md_finders.rb +1 -1
- data/lib/gooddata/mixins/md_grantees.rb +1 -1
- data/lib/gooddata/mixins/md_id_to_uri.rb +9 -3
- data/lib/gooddata/mixins/md_json.rb +1 -1
- data/lib/gooddata/mixins/md_lock.rb +1 -1
- data/lib/gooddata/mixins/md_object_id.rb +1 -1
- data/lib/gooddata/mixins/md_object_indexer.rb +1 -1
- data/lib/gooddata/mixins/md_object_query.rb +1 -1
- data/lib/gooddata/mixins/md_relations.rb +1 -1
- data/lib/gooddata/mixins/meta_getter.rb +1 -1
- data/lib/gooddata/mixins/meta_property_reader.rb +1 -1
- data/lib/gooddata/mixins/meta_property_writer.rb +1 -1
- data/lib/gooddata/mixins/mixins.rb +1 -1
- data/lib/gooddata/mixins/not_attribute.rb +1 -1
- data/lib/gooddata/mixins/not_exportable.rb +1 -1
- data/lib/gooddata/mixins/not_fact.rb +1 -1
- data/lib/gooddata/mixins/not_group.rb +1 -1
- data/lib/gooddata/mixins/not_label.rb +1 -1
- data/lib/gooddata/mixins/not_metric.rb +1 -1
- data/lib/gooddata/mixins/obj_id.rb +1 -1
- data/lib/gooddata/mixins/rest_getters.rb +1 -1
- data/lib/gooddata/mixins/rest_resource.rb +1 -1
- data/lib/gooddata/mixins/root_key_getter.rb +1 -1
- data/lib/gooddata/mixins/root_key_setter.rb +1 -1
- data/lib/gooddata/mixins/timestamps.rb +1 -1
- data/lib/gooddata/models/ads_output_stage.rb +85 -0
- data/lib/gooddata/models/automated_data_distribution.rb +36 -0
- data/lib/gooddata/models/blueprint/anchor_field.rb +4 -3
- data/lib/gooddata/models/blueprint/attribute_field.rb +18 -2
- data/lib/gooddata/models/blueprint/blueprint.rb +1 -1
- data/lib/gooddata/models/blueprint/blueprint_field.rb +1 -1
- data/lib/gooddata/models/blueprint/dashboard_builder.rb +1 -1
- data/lib/gooddata/models/blueprint/dataset_blueprint.rb +6 -1
- data/lib/gooddata/models/blueprint/date_dimension.rb +1 -1
- data/lib/gooddata/models/blueprint/fact_field.rb +1 -1
- data/lib/gooddata/models/blueprint/label_field.rb +5 -1
- data/lib/gooddata/models/blueprint/project_blueprint.rb +1 -1
- data/lib/gooddata/models/blueprint/project_builder.rb +1 -1
- data/lib/gooddata/models/blueprint/reference_field.rb +1 -1
- data/lib/gooddata/models/blueprint/schema_blueprint.rb +1 -1
- data/lib/gooddata/models/blueprint/schema_builder.rb +1 -1
- data/lib/gooddata/models/blueprint/to_manifest.rb +7 -3
- data/lib/gooddata/models/blueprint/to_wire.rb +12 -1
- data/lib/gooddata/models/channel_configuration.rb +112 -0
- data/lib/gooddata/models/client.rb +42 -6
- data/lib/gooddata/models/client_synchronization_result.rb +1 -1
- data/lib/gooddata/models/client_synchronization_result_details.rb +1 -1
- data/lib/gooddata/models/datawarehouse.rb +25 -3
- data/lib/gooddata/models/domain.rb +29 -4
- data/lib/gooddata/models/execution.rb +1 -1
- data/lib/gooddata/models/execution_detail.rb +1 -1
- data/lib/gooddata/models/from_wire.rb +8 -1
- data/lib/gooddata/models/invitation.rb +1 -1
- data/lib/gooddata/models/links.rb +1 -1
- data/lib/gooddata/models/membership.rb +1 -1
- data/lib/gooddata/models/metadata.rb +3 -2
- data/lib/gooddata/models/metadata/attribute.rb +7 -1
- data/lib/gooddata/models/metadata/dashboard.rb +3 -3
- data/lib/gooddata/models/metadata/dashboard/dashboard_item.rb +1 -1
- data/lib/gooddata/models/metadata/dashboard/filter_apply_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard/filter_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard/geo_chart_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard/headline_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard/iframe_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard/report_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard/text_item.rb +2 -2
- data/lib/gooddata/models/metadata/dashboard_tab.rb +2 -2
- data/lib/gooddata/models/metadata/dataset.rb +1 -1
- data/lib/gooddata/models/metadata/dimension.rb +1 -1
- data/lib/gooddata/models/metadata/fact.rb +1 -1
- data/lib/gooddata/models/metadata/folder.rb +1 -1
- data/lib/gooddata/models/metadata/label.rb +1 -1
- data/lib/gooddata/models/metadata/metadata.rb +1 -1
- data/lib/gooddata/models/metadata/metric.rb +1 -1
- data/lib/gooddata/models/metadata/report.rb +1 -1
- data/lib/gooddata/models/metadata/report_definition.rb +1 -1
- data/lib/gooddata/models/metadata/scheduled_mail.rb +2 -2
- data/lib/gooddata/models/metadata/scheduled_mail/dashboard_attachment.rb +1 -1
- data/lib/gooddata/models/metadata/scheduled_mail/report_attachment.rb +1 -1
- data/lib/gooddata/models/metadata/variable.rb +1 -1
- data/lib/gooddata/models/model.rb +1 -1
- data/lib/gooddata/models/models.rb +1 -1
- data/lib/gooddata/models/module_constants.rb +1 -1
- data/lib/gooddata/models/notification_rule.rb +113 -0
- data/lib/gooddata/models/process.rb +10 -3
- data/lib/gooddata/models/profile.rb +9 -1
- data/lib/gooddata/models/project.rb +248 -50
- data/lib/gooddata/models/project_creator.rb +2 -2
- data/lib/gooddata/models/project_metadata.rb +1 -1
- data/lib/gooddata/models/project_role.rb +1 -1
- data/lib/gooddata/models/report_data_result.rb +1 -1
- data/lib/gooddata/models/schedule.rb +49 -13
- data/lib/gooddata/models/segment.rb +3 -3
- data/lib/gooddata/models/style_setting.rb +71 -0
- data/lib/gooddata/models/subscription.rb +181 -0
- data/lib/gooddata/models/tab_builder.rb +1 -1
- data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +1 -1
- data/lib/gooddata/models/user_filters/user_filter.rb +1 -1
- data/lib/gooddata/models/user_filters/user_filter_builder.rb +11 -5
- data/lib/gooddata/models/user_filters/user_filters.rb +1 -1
- data/lib/gooddata/models/user_filters/variable_user_filter.rb +1 -1
- data/lib/gooddata/models/user_group.rb +19 -12
- data/lib/gooddata/rest/client.rb +9 -1
- data/lib/gooddata/rest/connection.rb +18 -9
- data/lib/gooddata/rest/object.rb +1 -1
- data/lib/gooddata/rest/object_factory.rb +1 -1
- data/lib/gooddata/rest/resource.rb +1 -1
- data/lib/gooddata/rest/rest.rb +1 -1
- data/lib/gooddata/version.rb +2 -2
- data/spec/.rubocop.yml +16 -0
- data/spec/bricks/bricks_spec.rb +13 -15
- data/spec/data/blueprints/attribute_sort_order_blueprint.json +72 -0
- data/spec/data/gooddata_version_process/gooddata_version.rb +1 -1
- data/spec/data/hello_world_process/hello_world.rb +2 -2
- data/spec/data/ruby_params_process/ruby_params.rb +1 -1
- data/spec/data/ruby_process/process.rb +2 -2
- data/spec/data/wire_models/attribute_sort_by_model.json +73 -0
- data/spec/environment/default.rb +14 -13
- data/spec/environment/develop.rb +26 -11
- data/spec/environment/environment.rb +2 -1
- data/spec/environment/hotfix.rb +15 -7
- data/spec/environment/production.rb +6 -14
- data/spec/environment/staging.rb +9 -10
- data/spec/helpers/blueprint_helper.rb +11 -10
- data/spec/helpers/cli_helper.rb +26 -24
- data/spec/helpers/connection_helper.rb +28 -26
- data/spec/helpers/crypto_helper.rb +8 -6
- data/spec/helpers/csv_helper.rb +7 -5
- data/spec/helpers/process_helper.rb +13 -11
- data/spec/helpers/project_helper.rb +36 -34
- data/spec/helpers/schedule_helper.rb +13 -11
- data/spec/helpers/spec_helper.rb +8 -6
- data/spec/integration/ads_output_stage_spec.rb +55 -0
- data/spec/integration/blueprint_updates_spec.rb +22 -16
- data/spec/integration/blueprint_with_grain_spec.rb +5 -3
- data/spec/integration/channel_configuration_spec.rb +67 -0
- data/spec/integration/clients_spec.rb +31 -22
- data/spec/integration/command_datawarehouse_spec.rb +4 -4
- data/spec/integration/command_projects_spec.rb +6 -6
- data/spec/integration/create_from_template_spec.rb +4 -3
- data/spec/integration/create_project_spec.rb +7 -4
- data/spec/integration/date_dim_switch_spec.rb +25 -28
- data/spec/integration/deprecated_load_spec.rb +11 -9
- data/spec/integration/full_process_schedule_spec.rb +82 -13
- data/spec/integration/full_project_spec.rb +67 -45
- data/spec/integration/lcm_spec.rb +41 -0
- data/spec/integration/over_to_user_filters_spec.rb +14 -10
- data/spec/integration/partial_md_export_import_spec.rb +3 -4
- data/spec/integration/project_spec.rb +101 -42
- data/spec/integration/rest_spec.rb +5 -4
- data/spec/integration/schedule_spec.rb +28 -39
- data/spec/integration/segments_spec.rb +42 -31
- data/spec/integration/subscription_spec.rb +63 -0
- data/spec/integration/user_filters_spec.rb +49 -39
- data/spec/integration/user_group_spec.rb +25 -5
- data/spec/integration/variables_spec.rb +34 -32
- data/spec/logging_in_logging_out_spec.rb +6 -8
- data/spec/spec_helper.rb +3 -3
- data/spec/unit/bricks/bricks_spec.rb +3 -4
- data/spec/unit/bricks/middleware/aws_middelware_spec.rb +8 -15
- data/spec/unit/bricks/middleware/bench_middleware_spec.rb +2 -2
- data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +2 -2
- data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +2 -2
- data/spec/unit/bricks/middleware/logger_middleware_spec.rb +2 -2
- data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +3 -3
- data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +3 -3
- data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +3 -3
- data/spec/unit/cli/cli_spec.rb +3 -3
- data/spec/unit/cli/commands/cmd_auth_spec.rb +2 -2
- data/spec/unit/commands/command_projects_spec.rb +3 -3
- data/spec/unit/core/connection_spec.rb +3 -4
- data/spec/unit/core/logging_spec.rb +2 -5
- data/spec/unit/core/nil_logger_spec.rb +2 -2
- data/spec/unit/core/project_spec.rb +4 -4
- data/spec/unit/extensions/hash_spec.rb +3 -4
- data/spec/unit/godzilla/goodzilla_spec.rb +22 -26
- data/spec/unit/helpers/csv_helper_spec.rb +3 -3
- data/spec/unit/helpers/data_helper_spec.rb +6 -18
- data/spec/unit/helpers/global_helpers_spec.rb +112 -28
- data/spec/unit/helpers_spec.rb +139 -2
- data/spec/unit/models/blueprint/attribute_sort_by_spec.rb +20 -0
- data/spec/unit/models/blueprint/attributes_spec.rb +1 -2
- data/spec/unit/models/blueprint/dataset_spec.rb +2 -3
- data/spec/unit/models/blueprint/labels_spec.rb +1 -2
- data/spec/unit/models/blueprint/project_blueprint_spec.rb +34 -35
- data/spec/unit/models/blueprint/reference_spec.rb +1 -2
- data/spec/unit/models/blueprint/schema_builder_spec.rb +5 -7
- data/spec/unit/models/blueprint/to_wire_spec.rb +76 -55
- data/spec/unit/models/domain_spec.rb +4 -5
- data/spec/unit/models/execution_spec.rb +16 -15
- data/spec/unit/models/from_wire_spec.rb +24 -19
- data/spec/unit/models/invitation_spec.rb +1 -1
- data/spec/unit/models/membership_spec.rb +36 -41
- data/spec/unit/models/metadata_spec.rb +20 -18
- data/spec/unit/models/metric_spec.rb +67 -55
- data/spec/unit/models/model_spec.rb +32 -37
- data/spec/unit/models/params_spec.rb +1 -1
- data/spec/unit/models/profile_spec.rb +40 -45
- data/spec/unit/models/project_creator_spec.rb +27 -29
- data/spec/unit/models/project_role_spec.rb +1 -1
- data/spec/unit/models/project_spec.rb +65 -2
- data/spec/unit/models/report_result_data_spec.rb +7 -12
- data/spec/unit/models/schedule_spec.rb +71 -35
- data/spec/unit/models/to_manifest_spec.rb +69 -4
- data/spec/unit/models/unit_project_spec.rb +12 -12
- data/spec/unit/models/user_filters_spec.rb +40 -40
- data/spec/unit/models/variable_spec.rb +108 -93
- data/spec/unit/rest/polling_spec.rb +7 -7
- data/spec/unit/rest/resource_spec.rb +2 -2
- metadata +145 -228
- data/spec/environment/release.rb +0 -21
- data/spec/environment/staging_3.rb +0 -36
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ require 'gooddata'
|
|
|
9
9
|
describe "Over-To data permissions implementation", :constraint => 'slow' do
|
|
10
10
|
before(:all) do
|
|
11
11
|
@spec = JSON.parse(File.read("./spec/data/blueprints/m_n_model.json"), :symbolize_names => true)
|
|
12
|
-
@client = ConnectionHelper
|
|
12
|
+
@client = ConnectionHelper.create_default_connection
|
|
13
13
|
@blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
|
|
14
14
|
@project = @client.create_project_from_blueprint(@blueprint, :token => ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
|
|
15
15
|
@domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
|
|
@@ -19,27 +19,31 @@ describe "Over-To data permissions implementation", :constraint => 'slow' do
|
|
|
19
19
|
['label.commits.id', 'fact.commits.lines_changed', 'dataset.users'],
|
|
20
20
|
[1, 1, 1],
|
|
21
21
|
[2, 3, 2],
|
|
22
|
-
[3, 5, 3]
|
|
22
|
+
[3, 5, 3]
|
|
23
|
+
]
|
|
23
24
|
@project.upload(data, @blueprint, 'dataset.commits')
|
|
24
|
-
|
|
25
|
+
|
|
25
26
|
data = [
|
|
26
27
|
["label.users.id", "label.users.id.email"],
|
|
27
28
|
[1, "tomas@gooddata.com"],
|
|
28
29
|
[2, "petr@gooddata.com"],
|
|
29
|
-
[3, "jirka@gooddata.com"]
|
|
30
|
+
[3, "jirka@gooddata.com"]
|
|
31
|
+
]
|
|
30
32
|
@project.upload(data, @blueprint, 'dataset.users')
|
|
31
33
|
|
|
32
34
|
data = [
|
|
33
35
|
["label.permission.id", "label.permission.id.email"],
|
|
34
36
|
[1, "tomas@gooddata.com"],
|
|
35
37
|
[2, "petr@gooddata.com"],
|
|
36
|
-
[3, "jirka@gooddata.com"]
|
|
38
|
+
[3, "jirka@gooddata.com"]
|
|
39
|
+
]
|
|
37
40
|
@project.upload(data, @blueprint, 'dataset.permission_users')
|
|
38
41
|
|
|
39
42
|
data = [
|
|
40
43
|
['label.visibility.id', 'dataset.permission_users', 'dataset.commits'],
|
|
41
44
|
[1, 1, 1],
|
|
42
|
-
[3, 1, 3]
|
|
45
|
+
[3, 1, 3]
|
|
46
|
+
]
|
|
43
47
|
@project.upload(data, @blueprint, 'dataset.visibility')
|
|
44
48
|
|
|
45
49
|
@variable = @project.create_variable(title: 'uaaa', attribute: @label.attribute).save
|
|
@@ -51,7 +55,7 @@ describe "Over-To data permissions implementation", :constraint => 'slow' do
|
|
|
51
55
|
{
|
|
52
56
|
login: ConnectionHelper::DEFAULT_USERNAME,
|
|
53
57
|
filters: [
|
|
54
|
-
{ label: @label.uri, values: ["tomas@gooddata.com"], over: @attr1.uri, to: @attr2.uri}
|
|
58
|
+
{ label: @label.uri, values: ["tomas@gooddata.com"], over: @attr1.uri, to: @attr2.uri }
|
|
55
59
|
]
|
|
56
60
|
}
|
|
57
61
|
]
|
|
@@ -62,7 +66,7 @@ describe "Over-To data permissions implementation", :constraint => 'slow' do
|
|
|
62
66
|
end
|
|
63
67
|
|
|
64
68
|
after(:each) do
|
|
65
|
-
@project.data_permissions.pmap
|
|
69
|
+
@project.data_permissions.pmap(&:delete)
|
|
66
70
|
end
|
|
67
71
|
|
|
68
72
|
it "should fail if you are specifying OVER TO filter and variables. Variables do not support OVER TO" do
|
|
@@ -71,7 +75,7 @@ describe "Over-To data permissions implementation", :constraint => 'slow' do
|
|
|
71
75
|
end.to raise_exception
|
|
72
76
|
end
|
|
73
77
|
|
|
74
|
-
it "should create an over to filter transparently" do
|
|
78
|
+
it "should create an over to filter transparently" do
|
|
75
79
|
metric = @project.create_metric("SELECT SUM(#\"Fact.Commits.Lines Changed\")", :title => 'x')
|
|
76
80
|
expect(metric.execute).to eq 9
|
|
77
81
|
@project.add_data_permissions(@filters)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -11,7 +11,7 @@ describe "Object export between projects", :constraint => 'slow' do
|
|
|
11
11
|
@client = ConnectionHelper.create_default_connection
|
|
12
12
|
|
|
13
13
|
spec = MultiJson.load(File.read("./spec/data/blueprints/test_project_model_spec.json"), :symbolize_keys => true)
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
@source_project = @client.create_project_from_blueprint(spec, token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
|
|
16
16
|
@target_project = @client.create_project_from_blueprint(spec, token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
|
|
17
17
|
end
|
|
@@ -29,7 +29,7 @@ describe "Object export between projects", :constraint => 'slow' do
|
|
|
29
29
|
metric = @source_project.create_metric("SELECT SUM(#\"#{f.title}\")", :title => metric_title)
|
|
30
30
|
metric.save
|
|
31
31
|
|
|
32
|
-
@target_project.metrics.count.
|
|
32
|
+
expect(@target_project.metrics.count).to eq 0
|
|
33
33
|
|
|
34
34
|
@source_project.partial_md_export(metric, :project => @target_project)
|
|
35
35
|
|
|
@@ -38,5 +38,4 @@ describe "Object export between projects", :constraint => 'slow' do
|
|
|
38
38
|
expect(metric).not_to be_nil
|
|
39
39
|
expect(metric.title).to eq metric_title
|
|
40
40
|
end
|
|
41
|
-
|
|
42
41
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ require 'gooddata'
|
|
|
9
9
|
|
|
10
10
|
describe GoodData::Project, :constraint => 'slow' do
|
|
11
11
|
before(:all) do
|
|
12
|
-
@client = ConnectionHelper
|
|
12
|
+
@client = ConnectionHelper.create_default_connection
|
|
13
13
|
@project = @client.create_project(title: ProjectHelper::PROJECT_TITLE, auth_token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
|
|
14
14
|
@domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
|
|
15
15
|
end
|
|
@@ -38,7 +38,7 @@ describe GoodData::Project, :constraint => 'slow' do
|
|
|
38
38
|
|
|
39
39
|
describe '#add_users' do
|
|
40
40
|
it 'Adding user without domain should fail if it is not in the project' do
|
|
41
|
-
users = (1..5).to_a.map do
|
|
41
|
+
users = (1..5).to_a.map do
|
|
42
42
|
{
|
|
43
43
|
user: ProjectHelper.create_random_user(@client),
|
|
44
44
|
role: 'Admin'
|
|
@@ -50,47 +50,69 @@ describe GoodData::Project, :constraint => 'slow' do
|
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
it 'Adding users with domain should pass and users should be added to domain' do
|
|
53
|
-
users = (1..5).to_a.map do
|
|
53
|
+
users = (1..5).to_a.map do
|
|
54
54
|
{
|
|
55
55
|
user: ProjectHelper.create_random_user(@client),
|
|
56
56
|
role: 'Admin'
|
|
57
57
|
}
|
|
58
58
|
end
|
|
59
|
-
@domain.create_users(users.map {|u| u[:user]})
|
|
59
|
+
@domain.create_users(users.map { |u| u[:user] })
|
|
60
60
|
res = @project.add_users(users, domain: @domain)
|
|
61
|
-
links = res.select { |r|
|
|
61
|
+
links = res.select { |r| r[:type] == :successful }.map { |i| GoodData::Helpers.last_uri_part(i[:user]) }
|
|
62
62
|
expect(@project.members?(links).all?).to be_truthy
|
|
63
63
|
end
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
describe '#import_users' do
|
|
67
|
+
it 'should add user which login contains a part of whitelists' do
|
|
68
|
+
users = [ProjectHelper.create_random_user(@client, login: "#{rand(1e7)}+rubydev+admin@gooddata.com")]
|
|
69
|
+
@domain.create_users(users)
|
|
70
|
+
@project.import_users(users, domain: @domain, whitelists: ['rubydev+admin@gooddata.com'])
|
|
71
|
+
expect(@domain.members?(users)).to be_truthy
|
|
72
|
+
expect(@project.members?(users)).to be_truthy
|
|
73
|
+
expect(@project.members.count).to eq 2
|
|
74
|
+
end
|
|
75
|
+
|
|
67
76
|
it "Updates user's name and surname and removes the users" do
|
|
68
|
-
users = (1..2).to_a.map {
|
|
77
|
+
users = (1..2).to_a.map { ProjectHelper.create_random_user(@client) }
|
|
69
78
|
@domain.create_users(users)
|
|
70
|
-
|
|
79
|
+
@project.import_users(users, domain: @domain, whitelists: [/admin@gooddata.com/])
|
|
71
80
|
expect(@domain.members?(users)).to be_truthy
|
|
72
81
|
expect(@project.members?(users)).to be_truthy
|
|
73
|
-
expect(@project.members.count).to eq
|
|
82
|
+
expect(@project.members.count).to eq 4
|
|
74
83
|
# update some user stuff
|
|
75
84
|
bill = users[0]
|
|
76
85
|
bill.first_name = 'buffalo'
|
|
77
86
|
bill.last_name = 'bill'
|
|
78
87
|
# import
|
|
79
|
-
@domain.create_users(users, domain: @domain, whitelists: [/
|
|
80
|
-
@project.import_users(users, domain: @domain, whitelists: [/
|
|
88
|
+
@domain.create_users(users, domain: @domain, whitelists: [/admin@gooddata.com/])
|
|
89
|
+
@project.import_users(users, domain: @domain, whitelists: [/admin@gooddata.com/])
|
|
81
90
|
# it should be updated
|
|
82
91
|
bill_changed = @domain.get_user(bill)
|
|
83
92
|
expect(bill_changed.first_name).to eq 'buffalo'
|
|
84
93
|
expect(bill_changed.last_name).to eq 'bill'
|
|
85
94
|
expect(@project.members?(users)).to be_truthy
|
|
86
|
-
expect(@project.members.count).to eq
|
|
95
|
+
expect(@project.members.count).to eq 4
|
|
87
96
|
expect(@project.member?(bill_changed)).to be_truthy
|
|
88
97
|
|
|
89
98
|
# remove everybody but buffalo bill.
|
|
90
|
-
@project.import_users([bill], domain: @domain, whitelists: [/
|
|
91
|
-
expect(@project.members.count).to eq
|
|
99
|
+
@project.import_users([bill], domain: @domain, whitelists: [/admin@gooddata.com/])
|
|
100
|
+
expect(@project.members.count).to eq 3
|
|
101
|
+
expect(@project.member?(bill)).to be_truthy
|
|
102
|
+
disabled_users = users - [bill]
|
|
103
|
+
expect(@project.members?(disabled_users).any?).to be_falsey
|
|
104
|
+
disabled_users.each do |user|
|
|
105
|
+
expect(@project.users(disabled: true).find { |member| member.login.downcase == user.login.downcase }).not_to be_nil
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# remove completely everybody but buffalo bill.
|
|
109
|
+
@project.import_users([bill], domain: @domain, whitelists: [/admin@gooddata.com/], remove_users_from_project: true)
|
|
110
|
+
expect(@project.members.count).to eq 3
|
|
92
111
|
expect(@project.member?(bill)).to be_truthy
|
|
93
|
-
expect(@project.members?(
|
|
112
|
+
expect(@project.members?(disabled_users).any?).to be_falsey
|
|
113
|
+
disabled_users.each do |user|
|
|
114
|
+
expect(@project.users(disabled: true).find { |member| member.login.downcase == user.login.downcase }).to be_nil
|
|
115
|
+
end
|
|
94
116
|
|
|
95
117
|
# Add additional user while changing Buffalos surname and role.
|
|
96
118
|
bill.last_name = 'Billie'
|
|
@@ -98,25 +120,25 @@ describe GoodData::Project, :constraint => 'slow' do
|
|
|
98
120
|
additional_batch = [bill, other_guy]
|
|
99
121
|
|
|
100
122
|
@domain.create_users(additional_batch, domain: @domain)
|
|
101
|
-
@project.import_users(additional_batch.map { |u| {user: u, role: u.role} }, domain: @domain, whitelists: [/
|
|
123
|
+
@project.import_users(additional_batch.map { |u| { user: u, role: u.role } }, domain: @domain, whitelists: [/admin@gooddata.com/])
|
|
102
124
|
|
|
103
|
-
expect(@project.members.count).to eq
|
|
125
|
+
expect(@project.members.count).to eq 4
|
|
104
126
|
expect(@project.member?(bill)).to be_truthy
|
|
105
127
|
expect(@project.members?(users - additional_batch).any?).to be_falsey
|
|
106
128
|
end
|
|
107
129
|
|
|
108
130
|
it "Updates user's role in a project" do
|
|
109
|
-
users = (1..5).to_a.map {
|
|
131
|
+
users = (1..5).to_a.map { ProjectHelper.create_random_user(@client).to_hash }
|
|
110
132
|
@domain.create_users(users, domain: @domain)
|
|
111
|
-
@project.import_users(users, domain: @domain, whitelists: [/
|
|
133
|
+
@project.import_users(users, domain: @domain, whitelists: [/admin@gooddata.com/])
|
|
112
134
|
|
|
113
135
|
expect(@project.members?(users)).to be_truthy
|
|
114
136
|
user_role_changed = users[1]
|
|
115
137
|
users_unchanged = users - [user_role_changed]
|
|
116
138
|
new_role = users[1][:role] = users[1][:role] == "admin" ? "editor" : "admin"
|
|
117
|
-
@project.import_users(users, domain: @domain, whitelists: [/
|
|
139
|
+
@project.import_users(users, domain: @domain, whitelists: [/admin@gooddata.com/])
|
|
118
140
|
expect(@project.get_user(user_role_changed).role.identifier).to eq "#{new_role}Role"
|
|
119
|
-
expect(users_unchanged.map {|u| @project.get_user(u)}.map(&:role).map(&:title).uniq).to eq ['Editor']
|
|
141
|
+
expect(users_unchanged.map { |u| @project.get_user(u) }.map(&:role).map(&:title).uniq).to eq ['Editor']
|
|
120
142
|
end
|
|
121
143
|
|
|
122
144
|
it "ignores user from both project and end state batch when whitelisted" do
|
|
@@ -124,22 +146,21 @@ describe GoodData::Project, :constraint => 'slow' do
|
|
|
124
146
|
uh = u.to_hash
|
|
125
147
|
uh[:role] = 'editor'
|
|
126
148
|
|
|
127
|
-
users = (1..5).to_a.map {
|
|
149
|
+
users = (1..5).to_a.map { ProjectHelper.create_random_user(@client).to_hash } + [uh]
|
|
128
150
|
@domain.create_users(users, domain: @domain)
|
|
129
151
|
expect(@project.member?(u)).to be_truthy
|
|
130
152
|
expect(u.role.title).to eq 'Admin'
|
|
131
|
-
@project.import_users(users, domain: @domain, whitelists: [/
|
|
153
|
+
@project.import_users(users, domain: @domain, whitelists: [/admin@gooddata.com/])
|
|
132
154
|
expect(@project.member?(u)).to be_truthy
|
|
133
155
|
expect(@project.members?(users).all?).to be_truthy
|
|
134
156
|
expect(@project.get_user(ConnectionHelper::DEFAULT_USERNAME).role.title).to eq 'Admin'
|
|
135
157
|
end
|
|
136
|
-
|
|
137
158
|
end
|
|
138
159
|
|
|
139
160
|
describe '#set_user_roles' do
|
|
140
161
|
it 'Properly updates user roles as needed' do
|
|
141
|
-
users_to_import = @domain.users.drop(rand(100)).take(5).map {|u| { user: u, role: 'admin' }}
|
|
142
|
-
@project.import_users(users_to_import, domain: @domain, whitelists: [/
|
|
162
|
+
users_to_import = @domain.users.drop(rand(100)).take(5).map { |u| { user: u, role: 'admin' } }
|
|
163
|
+
@project.import_users(users_to_import, domain: @domain, whitelists: [/admin@gooddata.com/])
|
|
143
164
|
users_without_owner = @project.users.reject { |u| u.login == ConnectionHelper::DEFAULT_USERNAME }.pselect { |u| u.role.title == 'Admin' }
|
|
144
165
|
|
|
145
166
|
user_to_change = users_without_owner.sample
|
|
@@ -180,51 +201,64 @@ describe GoodData::Project, :constraint => 'slow' do
|
|
|
180
201
|
# set the roles
|
|
181
202
|
res = @project.set_users_roles(list)
|
|
182
203
|
expect(res.select { |r| r[:type] == :successful }.length).to equal(list.length)
|
|
183
|
-
expect(logins.map {|l| users.find {|u| u.login == l}}.pmap {|u| u.role.title}).to eq roles.flatten
|
|
204
|
+
expect(logins.map { |l| users.find { |u| u.login == l } }.pmap { |u| u.role.title }).to eq roles.flatten
|
|
184
205
|
end
|
|
185
|
-
|
|
206
|
+
|
|
186
207
|
it 'Properly updates user roles when user specified by email and :roles specified as string with role name' do
|
|
187
208
|
users = @project.users
|
|
188
209
|
users_without_owner = users
|
|
189
210
|
.reject { |u| u.login == ConnectionHelper::DEFAULT_USERNAME }
|
|
190
211
|
.reject(&:deleted?)
|
|
191
212
|
.pselect { |u| u.role.title =~ /^(Admin|Editor)/ }
|
|
192
|
-
|
|
213
|
+
|
|
193
214
|
users_to_change = users_without_owner.sample(10)
|
|
194
|
-
|
|
215
|
+
|
|
195
216
|
logins = users_to_change.map(&:login)
|
|
196
217
|
roles = users_to_change.map { |u| u.role.title == 'Admin' ? 'Editor' : 'Admin' }
|
|
197
|
-
|
|
218
|
+
|
|
198
219
|
list = users_to_change.map do |u|
|
|
199
220
|
{
|
|
200
221
|
:user => u.login,
|
|
201
222
|
:roles => u.role.title == 'Admin' ? 'Editor' : 'Admin'
|
|
202
223
|
}
|
|
203
224
|
end
|
|
204
|
-
|
|
225
|
+
|
|
205
226
|
res = @project.set_users_roles(list)
|
|
206
227
|
expect(res.select { |r| r[:type] == :successful }.length).to equal(list.length)
|
|
207
|
-
expect(logins.map {|l| users.find {|u| u.login == l}}.pmap {|u| u.role.title}).to eq roles.flatten
|
|
208
|
-
|
|
228
|
+
expect(logins.map { |l| users.find { |u| u.login == l } }.pmap { |u| u.role.title }).to eq roles.flatten
|
|
209
229
|
end
|
|
210
230
|
|
|
211
231
|
it 'can work with groups as well. Groups have to be set up. It can only eat hashes on input in this case' do
|
|
212
|
-
users = (1..5).to_a.map {
|
|
213
|
-
group_names =
|
|
232
|
+
users = (1..5).to_a.map { ProjectHelper.create_random_user(@client).to_hash }
|
|
233
|
+
group_names = %w(group_1 group_2)
|
|
214
234
|
groups = group_names.map { |g| @project.create_group(name: g) }
|
|
215
|
-
users_with_groups = users.map
|
|
235
|
+
users_with_groups = users.map do |u|
|
|
236
|
+
u[:user_group] = groups.take(rand(2) + 1).map(&:name)
|
|
237
|
+
u
|
|
238
|
+
end
|
|
216
239
|
@domain.create_users(users_with_groups, domain: @domain)
|
|
217
|
-
@project.import_users(users_with_groups, domain: @domain, whitelists: [/
|
|
240
|
+
@project.import_users(users_with_groups, domain: @domain, whitelists: [/admin@gooddata.com/])
|
|
218
241
|
expect(users_with_groups.flat_map { |u| u[:user_group].map { |g| [u[:login], g] } }.all? do |u, g|
|
|
219
|
-
|
|
242
|
+
begin
|
|
243
|
+
@project.user_groups(g).member?(@project.member(u).uri)
|
|
244
|
+
rescue
|
|
245
|
+
false
|
|
246
|
+
end
|
|
220
247
|
end).to be_truthy
|
|
221
248
|
|
|
222
|
-
users_with_group = users.map
|
|
249
|
+
users_with_group = users.map do |u|
|
|
250
|
+
u[:user_group] = ['group_1']
|
|
251
|
+
u
|
|
252
|
+
end
|
|
223
253
|
to_whitelist = @project.user_groups('group_2').members.to_a.sample
|
|
224
|
-
@project.import_users(users_with_group, domain: @domain, whitelists: [to_whitelist.login, /
|
|
254
|
+
@project.import_users(users_with_group, domain: @domain, whitelists: [to_whitelist.login, /admin@gooddata.com/])
|
|
225
255
|
expect(@project.user_groups('group_2').members.map(&:login)).to eq [to_whitelist.login]
|
|
226
256
|
expect(users_with_group.flat_map { |u| u[:user_group].map { |g| [u[:login], g] } }.all? do |u, g|
|
|
227
|
-
|
|
257
|
+
begin
|
|
258
|
+
@project.user_groups(g).member?(@project.member(u).uri)
|
|
259
|
+
rescue
|
|
260
|
+
false
|
|
261
|
+
end
|
|
228
262
|
end).to be_truthy
|
|
229
263
|
end
|
|
230
264
|
end
|
|
@@ -261,4 +295,29 @@ describe GoodData::Project, :constraint => 'slow' do
|
|
|
261
295
|
expect(user.project).not_to be_nil
|
|
262
296
|
end
|
|
263
297
|
end
|
|
298
|
+
|
|
299
|
+
describe 'color palette' do
|
|
300
|
+
it 'should return empty when project is not set color' do
|
|
301
|
+
expect(@project.current_color_palette.colors).to eq []
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
it 'should be able to set custom color' do
|
|
305
|
+
colors = [{ r: 155, g: 255, b: 0 }]
|
|
306
|
+
@project.create_custom_color_palette(colors)
|
|
307
|
+
expect(@project.current_color_palette.colors).to eq colors
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
it 'should be able to reset custom color' do
|
|
311
|
+
colors = [{ r: 155, g: 255, b: 0 }]
|
|
312
|
+
@project.create_custom_color_palette(colors)
|
|
313
|
+
@project.reset_color_palette
|
|
314
|
+
expect(@project.current_color_palette.colors).to eq []
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
it 'should not contains duplicate color' do
|
|
318
|
+
colors = [{ r: 155, g: 255, b: 0 }, { r: 155, g: 255, b: 0 }]
|
|
319
|
+
@project.create_custom_color_palette(colors)
|
|
320
|
+
expect(@project.current_color_palette.colors).to eq [{ r: 155, g: 255, b: 0 }]
|
|
321
|
+
end
|
|
322
|
+
end
|
|
264
323
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -28,7 +28,6 @@ describe GoodData do
|
|
|
28
28
|
|
|
29
29
|
def test_webdav_upload(params)
|
|
30
30
|
GoodData.with_project(@project, :client => @client) do
|
|
31
|
-
|
|
32
31
|
# use current timestamp as a directory name on webdav
|
|
33
32
|
dir = params[:no_dir] ? nil : Time.now.to_i.to_s
|
|
34
33
|
dir = "#{dir}/#{dir}" if params[:nested_dir]
|
|
@@ -72,7 +71,9 @@ describe GoodData do
|
|
|
72
71
|
|
|
73
72
|
# if it's unknown it should raise an error, otherwise it should download the right stuff
|
|
74
73
|
if params[:unknown_file]
|
|
75
|
-
expect
|
|
74
|
+
expect do
|
|
75
|
+
download_block.call
|
|
76
|
+
end.to raise_error(ArgumentError)
|
|
76
77
|
else
|
|
77
78
|
download_block.call
|
|
78
79
|
|
|
@@ -210,4 +211,4 @@ describe GoodData do
|
|
|
210
211
|
expect(@client.user_webdav_path).to eq GoodData::Environment::ConnectionHelper::STAGING_URI
|
|
211
212
|
end
|
|
212
213
|
end
|
|
213
|
-
end
|
|
214
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: UTF-8
|
|
2
2
|
#
|
|
3
|
-
# Copyright (c) 2010-
|
|
3
|
+
# Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
|
|
4
4
|
# This source code is licensed under the BSD-style license found in the
|
|
5
5
|
# LICENSE file in the root directory of this source tree.
|
|
6
6
|
|
|
@@ -11,13 +11,6 @@ describe GoodData::Schedule do
|
|
|
11
11
|
SCHEDULE_ID = ScheduleHelper::SCHEDULE_ID
|
|
12
12
|
SCHEDULE_URL = "/gdc/projects/#{ProjectHelper::PROJECT_ID}/schedules/#{SCHEDULE_ID}"
|
|
13
13
|
|
|
14
|
-
before(:all) do
|
|
15
|
-
@client = ConnectionHelper.create_default_connection
|
|
16
|
-
@project = ProjectHelper.get_default_project(:client => @client)
|
|
17
|
-
# ScheduleHelper.remove_old_schedules(@project)
|
|
18
|
-
# ProcessHelper.remove_old_processes(@project)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
14
|
before(:each) do
|
|
22
15
|
@client = ConnectionHelper.create_default_connection
|
|
23
16
|
|
|
@@ -103,9 +96,9 @@ describe GoodData::Schedule do
|
|
|
103
96
|
it 'Throws exception when no process ID specified' do
|
|
104
97
|
schedule = nil
|
|
105
98
|
begin
|
|
106
|
-
expect
|
|
99
|
+
expect do
|
|
107
100
|
schedule = @project.create_schedule(nil, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
|
|
108
|
-
|
|
101
|
+
end.to raise_error 'Process ID has to be provided'
|
|
109
102
|
ensure
|
|
110
103
|
schedule && schedule.delete
|
|
111
104
|
end
|
|
@@ -114,9 +107,9 @@ describe GoodData::Schedule do
|
|
|
114
107
|
it 'Throws exception when no executable specified' do
|
|
115
108
|
schedule = nil
|
|
116
109
|
begin
|
|
117
|
-
expect
|
|
110
|
+
expect do
|
|
118
111
|
schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, nil, @test_data)
|
|
119
|
-
|
|
112
|
+
end.to raise_error 'Executable has to be provided'
|
|
120
113
|
ensure
|
|
121
114
|
schedule && schedule.delete
|
|
122
115
|
end
|
|
@@ -127,9 +120,9 @@ describe GoodData::Schedule do
|
|
|
127
120
|
data[:cron] = nil
|
|
128
121
|
schedule = nil
|
|
129
122
|
begin
|
|
130
|
-
expect
|
|
123
|
+
expect do
|
|
131
124
|
schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, nil, ProcessHelper::DEPLOY_NAME, data)
|
|
132
|
-
|
|
125
|
+
end.to raise_error 'Trigger schedule has to be provided'
|
|
133
126
|
ensure
|
|
134
127
|
schedule && schedule.delete
|
|
135
128
|
end
|
|
@@ -140,9 +133,9 @@ describe GoodData::Schedule do
|
|
|
140
133
|
schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, data)
|
|
141
134
|
schedule.timezone = nil
|
|
142
135
|
begin
|
|
143
|
-
expect
|
|
136
|
+
expect do
|
|
144
137
|
schedule.save
|
|
145
|
-
|
|
138
|
+
end.to raise_error 'A timezone has to be provided'
|
|
146
139
|
ensure
|
|
147
140
|
schedule && schedule.delete
|
|
148
141
|
end
|
|
@@ -154,9 +147,9 @@ describe GoodData::Schedule do
|
|
|
154
147
|
begin
|
|
155
148
|
schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, data)
|
|
156
149
|
schedule.type = nil
|
|
157
|
-
expect
|
|
150
|
+
expect do
|
|
158
151
|
schedule.save
|
|
159
|
-
|
|
152
|
+
end.to raise_error 'Schedule type has to be provided'
|
|
160
153
|
ensure
|
|
161
154
|
schedule && schedule.delete
|
|
162
155
|
end
|
|
@@ -225,9 +218,11 @@ describe GoodData::Schedule do
|
|
|
225
218
|
describe '#execute' do
|
|
226
219
|
it 'Waits for execution result by default' do
|
|
227
220
|
begin
|
|
228
|
-
process = @project.deploy_process(
|
|
229
|
-
|
|
230
|
-
|
|
221
|
+
process = @project.deploy_process(
|
|
222
|
+
'./spec/data/gooddata_version_process/gooddata_version.zip',
|
|
223
|
+
type: 'RUBY',
|
|
224
|
+
name: 'Test ETL zipped file GoodData Process'
|
|
225
|
+
)
|
|
231
226
|
schedule = process.create_schedule('0 15 27 7 *', process.executables.first)
|
|
232
227
|
res = schedule.execute
|
|
233
228
|
expect(res).to be_an_instance_of(GoodData::Execution)
|
|
@@ -319,7 +314,7 @@ describe GoodData::Schedule do
|
|
|
319
314
|
schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
|
|
320
315
|
old_params = schedule.hidden_params
|
|
321
316
|
|
|
322
|
-
test_parameter = {'test_parameter' => 'just_testing' }
|
|
317
|
+
test_parameter = { 'test_parameter' => 'just_testing' }
|
|
323
318
|
schedule.set_hidden_parameter(test_parameter.keys.first, test_parameter.values.first)
|
|
324
319
|
expect(schedule.hidden_params).to eq(old_params.merge(test_parameter))
|
|
325
320
|
expect(schedule.dirty).to eq(true)
|
|
@@ -335,7 +330,7 @@ describe GoodData::Schedule do
|
|
|
335
330
|
schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
|
|
336
331
|
old_params = schedule.params
|
|
337
332
|
|
|
338
|
-
test_parameter = {'test_parameter' => 'just_testing' }
|
|
333
|
+
test_parameter = { 'test_parameter' => 'just_testing' }
|
|
339
334
|
schedule.set_parameter(test_parameter.keys.first, test_parameter.values.first)
|
|
340
335
|
expect(schedule.params).to eq(old_params.merge(test_parameter))
|
|
341
336
|
expect(schedule.dirty).to eq(true)
|
|
@@ -344,7 +339,6 @@ describe GoodData::Schedule do
|
|
|
344
339
|
end
|
|
345
340
|
end
|
|
346
341
|
end
|
|
347
|
-
|
|
348
342
|
|
|
349
343
|
describe '#params' do
|
|
350
344
|
it 'Should return execution params as hash' do
|
|
@@ -364,7 +358,6 @@ describe GoodData::Schedule do
|
|
|
364
358
|
it 'Assigns the params and marks the object dirty' do
|
|
365
359
|
begin
|
|
366
360
|
schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
|
|
367
|
-
old_params = schedule.params
|
|
368
361
|
|
|
369
362
|
test_params = {
|
|
370
363
|
'some_new_param' => '1-2-3-4'
|
|
@@ -538,7 +531,7 @@ describe GoodData::Schedule do
|
|
|
538
531
|
it 'should be able to get name of the schedule.' do
|
|
539
532
|
begin
|
|
540
533
|
schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
|
|
541
|
-
expect(schedule.name).to eq ProcessHelper::DEPLOY_NAME
|
|
534
|
+
expect("cc/graph/#{schedule.name}").to eq ProcessHelper::DEPLOY_NAME
|
|
542
535
|
ensure
|
|
543
536
|
schedule && schedule.delete
|
|
544
537
|
end
|
|
@@ -587,7 +580,7 @@ describe GoodData::Schedule do
|
|
|
587
580
|
begin
|
|
588
581
|
process = @project.processes(ProcessHelper::PROCESS_ID)
|
|
589
582
|
schedule = process.create_schedule(@test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
|
|
590
|
-
expect(schedule.name).to eq ProcessHelper::DEPLOY_NAME
|
|
583
|
+
expect("cc/graph/#{schedule.name}").to eq ProcessHelper::DEPLOY_NAME
|
|
591
584
|
schedule.name = 'MY NAME'
|
|
592
585
|
schedule.save
|
|
593
586
|
schedule2 = process.schedules.find { |s| s.obj_id == schedule.obj_id }
|
|
@@ -602,20 +595,16 @@ describe GoodData::Schedule do
|
|
|
602
595
|
it 'should preserve the hidden parmeters.' do
|
|
603
596
|
begin
|
|
604
597
|
process = @project.processes(ProcessHelper::PROCESS_ID)
|
|
605
|
-
schedule = process.create_schedule(
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
}
|
|
609
|
-
|
|
610
|
-
|
|
598
|
+
schedule = process.create_schedule(
|
|
599
|
+
@test_cron,
|
|
600
|
+
ProcessHelper::DEPLOY_NAME,
|
|
601
|
+
@test_data_with_optional_param.merge(hidden_params: { "a" => { "b" => "c" } })
|
|
602
|
+
)
|
|
603
|
+
|
|
611
604
|
schedule.save
|
|
612
|
-
expect(schedule.hidden_params).to eq(
|
|
613
|
-
GoodData::Helpers::ENCODED_HIDDEN_PARAMS_KEY => nil
|
|
614
|
-
})
|
|
605
|
+
expect(schedule.hidden_params).to eq(GoodData::Helpers::ENCODED_HIDDEN_PARAMS_KEY => nil)
|
|
615
606
|
schedule2 = process.schedules.find { |s| s.uri == schedule.uri }
|
|
616
|
-
expect(schedule2.to_update_payload['schedule']['hiddenParams']).to eq
|
|
617
|
-
GoodData::Helpers::ENCODED_HIDDEN_PARAMS_KEY => nil
|
|
618
|
-
})
|
|
607
|
+
expect(schedule2.to_update_payload['schedule']['hiddenParams']).to eq(GoodData::Helpers::ENCODED_HIDDEN_PARAMS_KEY => nil)
|
|
619
608
|
ensure
|
|
620
609
|
schedule && schedule.delete
|
|
621
610
|
end
|