gooddata 1.1.0-java → 1.2.0-java

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.
Files changed (285) hide show
  1. checksums.yaml +4 -4
  2. data/.document +0 -0
  3. data/.flayignore +2 -0
  4. data/.travis.yml +24 -7
  5. data/.yardopts +0 -0
  6. data/CHANGELOG.md +144 -0
  7. data/CLI.md +0 -0
  8. data/Dockerfile.jruby +7 -2
  9. data/Dockerfile.ruby +1 -1
  10. data/Gemfile +0 -0
  11. data/Guardfile +0 -0
  12. data/Rakefile +23 -9
  13. data/TODO.md +0 -0
  14. data/bin/gitflow-init.sh +8 -0
  15. data/ci.rake +3 -3
  16. data/data/2008.crt +39 -0
  17. data/data/new_ca.cer +22 -0
  18. data/dependency_decisions.yml +0 -0
  19. data/docker-compose.lcm.yml +31 -0
  20. data/docker-compose.yml +4 -2
  21. data/gooddata.gemspec +3 -3
  22. data/lcm.rake +288 -0
  23. data/lib/gooddata.rb +1 -0
  24. data/lib/gooddata/bricks/base_downloader.rb +1 -1
  25. data/lib/gooddata/bricks/brick.rb +0 -1
  26. data/lib/gooddata/bricks/middleware/aws_middleware.rb +1 -1
  27. data/lib/gooddata/bricks/middleware/logger_middleware.rb +1 -1
  28. data/lib/gooddata/bricks/pipeline.rb +67 -0
  29. data/lib/gooddata/bricks/provisioning_brick.rb +18 -0
  30. data/lib/gooddata/bricks/release_brick.rb +18 -0
  31. data/lib/gooddata/bricks/rollout_brick.rb +14 -0
  32. data/lib/gooddata/bricks/user_filters_brick.rb +13 -0
  33. data/lib/gooddata/bricks/users_brick.rb +13 -0
  34. data/lib/gooddata/core/logging.rb +1 -1
  35. data/lib/gooddata/exceptions/maql_execution.rb +1 -1
  36. data/lib/gooddata/extensions/string.rb +0 -0
  37. data/lib/gooddata/lcm/actions/associate_clients.rb +34 -8
  38. data/lib/gooddata/lcm/actions/collect_data_product.rb +8 -1
  39. data/lib/gooddata/lcm/actions/collect_segment_clients.rb +13 -23
  40. data/lib/gooddata/lcm/actions/collect_segments.rb +10 -0
  41. data/lib/gooddata/lcm/actions/synchronize_clients.rb +3 -1
  42. data/lib/gooddata/lcm/actions/synchronize_ldm.rb +61 -34
  43. data/lib/gooddata/lcm/actions/synchronize_user_filters.rb +6 -4
  44. data/lib/gooddata/lcm/actions/update_release_table.rb +4 -12
  45. data/lib/gooddata/lcm/dsl/params_dsl.rb +0 -4
  46. data/lib/gooddata/lcm/dsl/type_dsl.rb +0 -4
  47. data/lib/gooddata/lcm/helpers/check_helper.rb +1 -1
  48. data/lib/gooddata/lcm/lcm2.rb +0 -2
  49. data/lib/gooddata/lcm/types/special/enum.rb +6 -0
  50. data/lib/gooddata/lcm/types/special/enum/synchronize_ldm.rb +20 -0
  51. data/lib/gooddata/lcm/types/special/types.rb +1 -1
  52. data/lib/gooddata/mixins/is_folder.rb +0 -0
  53. data/lib/gooddata/mixins/to_json.rb +0 -0
  54. data/lib/gooddata/mixins/uri_getter.rb +0 -0
  55. data/lib/gooddata/models/project_creator.rb +38 -30
  56. data/lib/gooddata/models/user_filters/user_filter_builder.rb +1 -0
  57. data/lib/gooddata/rest/README.md +0 -0
  58. data/lib/gooddata/version.rb +1 -1
  59. data/lib/templates/bricks/brick.rb.erb +0 -0
  60. data/lib/templates/bricks/main.rb.erb +0 -0
  61. data/lib/templates/project/Goodfile.erb +0 -0
  62. data/lib/templates/project/data/commits.csv +0 -0
  63. data/lib/templates/project/data/devs.csv +0 -0
  64. data/lib/templates/project/data/repos.csv +0 -0
  65. data/lib/templates/project/model/model.rb.erb +0 -0
  66. metadata +23 -452
  67. data/lib/gooddata/lcm/actions/ensure_data_product.rb +0 -63
  68. data/spec/.rubocop.yml +0 -16
  69. data/spec/bricks/bricks_spec.rb +0 -110
  70. data/spec/bricks/default-config.json +0 -8
  71. data/spec/data/.gooddata +0 -4
  72. data/spec/data/blueprints/additional_dataset_module.json +0 -32
  73. data/spec/data/blueprints/attribute_sort_order_blueprint.json +0 -72
  74. data/spec/data/blueprints/big_blueprint_not_pruned.json +0 -2079
  75. data/spec/data/blueprints/invalid_blueprint.json +0 -103
  76. data/spec/data/blueprints/m_n_model.json +0 -104
  77. data/spec/data/blueprints/model_module.json +0 -25
  78. data/spec/data/blueprints/test_blueprint.json +0 -39
  79. data/spec/data/blueprints/test_project_model_spec.json +0 -106
  80. data/spec/data/cc/data/source/commits.csv +0 -4
  81. data/spec/data/cc/data/source/devs.csv +0 -4
  82. data/spec/data/cc/data/source/repos.csv +0 -3
  83. data/spec/data/cc/devel.prm +0 -0
  84. data/spec/data/cc/graph/graph.grf +0 -11
  85. data/spec/data/cc/workspace.prm +0 -19
  86. data/spec/data/column_based_permissions.csv +0 -7
  87. data/spec/data/column_based_permissions2.csv +0 -6
  88. data/spec/data/dynamic_schedule_params_table.csv +0 -7
  89. data/spec/data/gd_gse_data_blueprint.json +0 -1371
  90. data/spec/data/gd_gse_data_manifest.json +0 -1424
  91. data/spec/data/gd_gse_data_model.json +0 -1772
  92. data/spec/data/gooddata_version_process/gooddata_version.rb +0 -9
  93. data/spec/data/gooddata_version_process/gooddata_version.zip +0 -0
  94. data/spec/data/hello_world_process/hello_world.rb +0 -9
  95. data/spec/data/hello_world_process/hello_world.zip +0 -0
  96. data/spec/data/integration_model.json +0 -252
  97. data/spec/data/integration_policies.csv +0 -9134
  98. data/spec/data/line_based_permissions.csv +0 -3
  99. data/spec/data/manifests/test_blueprint.json +0 -32
  100. data/spec/data/manifests/test_project.json +0 -107
  101. data/spec/data/reports/left_attr_report.json +0 -108
  102. data/spec/data/reports/metric_only_one_line.json +0 -83
  103. data/spec/data/reports/report_1.json +0 -197
  104. data/spec/data/reports/top_attr_report.json +0 -108
  105. data/spec/data/ruby_params_process/ruby_params.rb +0 -9
  106. data/spec/data/ruby_process/deep_files/deep_stuff.txt +0 -1
  107. data/spec/data/ruby_process/process.rb +0 -8
  108. data/spec/data/ruby_process/stuff.txt +0 -1
  109. data/spec/data/superfluous_titles_view.json +0 -81
  110. data/spec/data/test-ci-data.csv +0 -2
  111. data/spec/data/user_filters.csv +0 -2
  112. data/spec/data/users.csv +0 -12
  113. data/spec/data/wire_models/attribute_sort_by_model.json +0 -73
  114. data/spec/data/wire_models/model_view.json +0 -1775
  115. data/spec/data/wire_models/nu_model.json +0 -3046
  116. data/spec/data/wire_models/test_blueprint.json +0 -66
  117. data/spec/data/wire_test_project.json +0 -150
  118. data/spec/data/workspace_table.csv +0 -3
  119. data/spec/environment/default.rb +0 -43
  120. data/spec/environment/development.rb +0 -32
  121. data/spec/environment/environment.rb +0 -38
  122. data/spec/environment/production.rb +0 -27
  123. data/spec/environment/staging.rb +0 -32
  124. data/spec/environment/testing.rb +0 -32
  125. data/spec/helpers/appstore_project_helper.rb +0 -221
  126. data/spec/helpers/blueprint_helper.rb +0 -27
  127. data/spec/helpers/cli_helper.rb +0 -38
  128. data/spec/helpers/connection_helper.rb +0 -43
  129. data/spec/helpers/constants.rb +0 -32
  130. data/spec/helpers/crypto_helper.rb +0 -19
  131. data/spec/helpers/csv_helper.rb +0 -20
  132. data/spec/helpers/process_helper.rb +0 -35
  133. data/spec/helpers/project_helper.rb +0 -74
  134. data/spec/helpers/schedule_helper.rb +0 -33
  135. data/spec/helpers/spec_helper.rb +0 -17
  136. data/spec/integration/ads_output_stage_spec.rb +0 -45
  137. data/spec/integration/blueprint_updates_spec.rb +0 -107
  138. data/spec/integration/blueprint_with_ca_spec.rb +0 -56
  139. data/spec/integration/blueprint_with_grain_spec.rb +0 -74
  140. data/spec/integration/channel_configuration_spec.rb +0 -67
  141. data/spec/integration/clients_spec.rb +0 -164
  142. data/spec/integration/command_datawarehouse_spec.rb +0 -45
  143. data/spec/integration/command_projects_spec.rb +0 -32
  144. data/spec/integration/commands/command_projects_spec.rb +0 -22
  145. data/spec/integration/connection_spec.rb +0 -37
  146. data/spec/integration/core/connection_spec.rb +0 -56
  147. data/spec/integration/core/logging_spec.rb +0 -132
  148. data/spec/integration/core/project_spec.rb +0 -54
  149. data/spec/integration/create_from_template_spec.rb +0 -29
  150. data/spec/integration/create_project_spec.rb +0 -27
  151. data/spec/integration/date_dim_switch_spec.rb +0 -154
  152. data/spec/integration/deprecated_load_spec.rb +0 -60
  153. data/spec/integration/full_process_schedule_spec.rb +0 -367
  154. data/spec/integration/full_project_spec.rb +0 -592
  155. data/spec/integration/helpers_spec.rb +0 -16
  156. data/spec/integration/lcm_spec.rb +0 -54
  157. data/spec/integration/mandatory_user_filter_spec.rb +0 -53
  158. data/spec/integration/mixins/id_to_uri_spec.rb +0 -56
  159. data/spec/integration/models/data_product_spec.rb +0 -71
  160. data/spec/integration/models/domain_spec.rb +0 -162
  161. data/spec/integration/models/invitation_spec.rb +0 -17
  162. data/spec/integration/models/label_spec.rb +0 -49
  163. data/spec/integration/models/membership_spec.rb +0 -127
  164. data/spec/integration/models/metadata/report_spec.rb +0 -54
  165. data/spec/integration/models/metric_spec.rb +0 -24
  166. data/spec/integration/models/params_spec.rb +0 -118
  167. data/spec/integration/models/process_spec.rb +0 -35
  168. data/spec/integration/models/profile_spec.rb +0 -210
  169. data/spec/integration/models/project_role_spec.rb +0 -94
  170. data/spec/integration/models/project_spec.rb +0 -225
  171. data/spec/integration/models/schedule_spec.rb +0 -477
  172. data/spec/integration/models/unit_project_spec.rb +0 -130
  173. data/spec/integration/over_to_user_filters_spec.rb +0 -98
  174. data/spec/integration/partial_md_export_import_spec.rb +0 -41
  175. data/spec/integration/project_spec.rb +0 -381
  176. data/spec/integration/rest_spec.rb +0 -214
  177. data/spec/integration/schedule_spec.rb +0 -611
  178. data/spec/integration/segments_spec.rb +0 -100
  179. data/spec/integration/subscription_spec.rb +0 -88
  180. data/spec/integration/urn_date_dim_spec.rb +0 -53
  181. data/spec/integration/user_filters_spec.rb +0 -310
  182. data/spec/integration/user_group_spec.rb +0 -147
  183. data/spec/integration/variables_spec.rb +0 -189
  184. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logger/can_assign_a_custom_logger.yml +0 -2287
  185. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logger/client_logs_when_given_custom_message.yml +0 -2287
  186. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logger/has_the_request_id_logged_when_I_passed_it.yml +0 -2287
  187. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logging_off/Disables_logging.yml +0 -2287
  188. data/spec/integration/vcr_cassettes/GoodData_-_logging/_logging_on/Enables_logging.yml +0 -2287
  189. data/spec/integration/vcr_cassettes/GoodData_-_project/_project/Returns_project_assigned.yml +0 -354
  190. data/spec/integration/vcr_cassettes/GoodData_-_project/_project_/Assigns_nil.yml +0 -299
  191. data/spec/integration/vcr_cassettes/GoodData_-_project/_project_/Assigns_project_directly.yml +0 -354
  192. data/spec/integration/vcr_cassettes/GoodData_-_project/_project_/Assigns_project_using_project_ID.yml +0 -354
  193. data/spec/integration/vcr_cassettes/GoodData_-_project/_project_/Assigns_project_using_project_URL.yml +0 -354
  194. data/spec/integration/vcr_cassettes/GoodData_-_project/_with_project/Uses_project_specified.yml +0 -354
  195. data/spec/integration/vcr_cassettes/GoodData_Metric/all.yml +0 -2065
  196. data/spec/integration/vcr_cassettes/GoodData_Metric/should_be_able_to_update_folders.yml +0 -119
  197. data/spec/integration/vcr_cassettes/GoodData_Mixin_MdIdToUri/all.yml +0 -9812
  198. data/spec/integration/vcr_cassettes/GoodData_Mixin_MdIdToUri/should_get_json_containing_correct_id.yml +0 -174
  199. data/spec/integration/vcr_cassettes/GoodData_Mixin_MdIdToUri/should_return_nil_for_unknown_id.yml +0 -58
  200. data/spec/integration/vcr_cassettes/GoodData_Mixin_MdIdToUri/should_throw_BadRequest_for_-1.yml +0 -63
  201. data/spec/integration/vcr_cassettes/GoodData_Rest_Connection/_connect/Connects_using_username_and_password.yml +0 -299
  202. data/spec/integration/vcr_cassettes/GoodData_Rest_Connection/_disconnect/Connects_using_username_and_password.yml +0 -299
  203. data/spec/integration/vcr_cassettes/GoodData_Rest_Connection/_generate_request_id/Generates_a_non-empty_string.yml +0 -2287
  204. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_/Should_list_user_groups_as_Array.yml +0 -56
  205. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_add_members/Should_add_member.yml +0 -315
  206. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_members/Should_return_members_as_array.yml +0 -54
  207. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_remove_members/Should_remove_existing_members.yml +0 -258
  208. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_save/updates_existing_group.yml +0 -159
  209. data/spec/integration/vcr_cassettes/GoodData_UserGroup/_set_members/Should_set_new_members.yml +0 -158
  210. data/spec/integration/vcr_cassettes/GoodData_UserGroup/all.yml +0 -809
  211. data/spec/logging_in_logging_out_spec.rb +0 -91
  212. data/spec/spec_helper.rb +0 -110
  213. data/spec/unit/actions/associate_clients_spec.rb +0 -48
  214. data/spec/unit/actions/collect_client_projects_spec.rb +0 -47
  215. data/spec/unit/actions/collect_clients_spec.rb +0 -65
  216. data/spec/unit/actions/collect_data_product_spec.rb +0 -58
  217. data/spec/unit/actions/collect_dynamic_schedule_params_spec.rb +0 -56
  218. data/spec/unit/actions/collect_meta_spec.rb +0 -88
  219. data/spec/unit/actions/collect_segment_clients_spec.rb +0 -82
  220. data/spec/unit/actions/collect_tagged_objects_spec.rb +0 -126
  221. data/spec/unit/actions/collect_users_brick_users_spec.rb +0 -36
  222. data/spec/unit/actions/create_segment_masters_spec.rb +0 -65
  223. data/spec/unit/actions/ensure_data_product_spec.rb +0 -39
  224. data/spec/unit/actions/ensure_technical_users_domain_spec.rb +0 -53
  225. data/spec/unit/actions/ensure_technical_users_project_spec.rb +0 -76
  226. data/spec/unit/actions/execute_schedules_spec.rb +0 -94
  227. data/spec/unit/actions/provision_clients_spec.rb +0 -46
  228. data/spec/unit/actions/purge_clients_spec.rb +0 -47
  229. data/spec/unit/actions/rename_existing_client_projects_spec.rb +0 -54
  230. data/spec/unit/actions/segments_filter_spec.rb +0 -46
  231. data/spec/unit/actions/shared_examples_for_user_actions.rb +0 -43
  232. data/spec/unit/actions/synchronize_cas_spec.rb +0 -58
  233. data/spec/unit/actions/synchronize_clients_spec.rb +0 -71
  234. data/spec/unit/actions/synchronize_etls_in_segment_spec.rb +0 -206
  235. data/spec/unit/actions/synchronize_ldm_spec.rb +0 -70
  236. data/spec/unit/actions/synchronize_user_filters_spec.rb +0 -208
  237. data/spec/unit/actions/synchronize_user_groups_spec.rb +0 -49
  238. data/spec/unit/actions/synchronize_users_spec.rb +0 -180
  239. data/spec/unit/bricks/bricks_spec.rb +0 -34
  240. data/spec/unit/bricks/middleware/aws_middelware_spec.rb +0 -98
  241. data/spec/unit/bricks/middleware/bench_middleware_spec.rb +0 -15
  242. data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +0 -15
  243. data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +0 -15
  244. data/spec/unit/bricks/middleware/logger_middleware_spec.rb +0 -30
  245. data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +0 -15
  246. data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +0 -15
  247. data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +0 -15
  248. data/spec/unit/cli/cli_spec.rb +0 -17
  249. data/spec/unit/cli/commands/cmd_auth_spec.rb +0 -17
  250. data/spec/unit/core/nil_logger_spec.rb +0 -13
  251. data/spec/unit/extensions/hash_spec.rb +0 -22
  252. data/spec/unit/godzilla/goodzilla_spec.rb +0 -74
  253. data/spec/unit/helpers/check_helper_production_spec.rb +0 -34
  254. data/spec/unit/helpers/check_helper_spec.rb +0 -134
  255. data/spec/unit/helpers/csv_helper_spec.rb +0 -22
  256. data/spec/unit/helpers/data_helper_spec.rb +0 -67
  257. data/spec/unit/helpers/global_helpers_spec.rb +0 -264
  258. data/spec/unit/helpers_spec.rb +0 -254
  259. data/spec/unit/lcm/lcm2_spec.rb +0 -100
  260. data/spec/unit/lcm/user_bricks_helper_spec.rb +0 -58
  261. data/spec/unit/models/blueprint/attribute_sort_by_spec.rb +0 -20
  262. data/spec/unit/models/blueprint/attributes_spec.rb +0 -28
  263. data/spec/unit/models/blueprint/dataset_spec.rb +0 -120
  264. data/spec/unit/models/blueprint/label_blueprint_field_spec.rb +0 -43
  265. data/spec/unit/models/blueprint/project_blueprint_spec.rb +0 -642
  266. data/spec/unit/models/blueprint/reference_spec.rb +0 -28
  267. data/spec/unit/models/blueprint/schema_builder_spec.rb +0 -36
  268. data/spec/unit/models/blueprint/to_wire_spec.rb +0 -196
  269. data/spec/unit/models/dataset_blueprint.rb +0 -14
  270. data/spec/unit/models/execution_spec.rb +0 -109
  271. data/spec/unit/models/from_wire_spec.rb +0 -321
  272. data/spec/unit/models/metadata_spec.rb +0 -140
  273. data/spec/unit/models/metric_spec.rb +0 -129
  274. data/spec/unit/models/model_spec.rb +0 -87
  275. data/spec/unit/models/project_creator_spec.rb +0 -90
  276. data/spec/unit/models/project_spec.rb +0 -94
  277. data/spec/unit/models/report_result_data_spec.rb +0 -194
  278. data/spec/unit/models/to_manifest_spec.rb +0 -165
  279. data/spec/unit/models/user_filters/user_filter_builder_spec.rb +0 -149
  280. data/spec/unit/models/user_filters_spec.rb +0 -95
  281. data/spec/unit/models/variable_spec.rb +0 -280
  282. data/spec/unit/rest/phmap_spec.rb +0 -117
  283. data/spec/unit/rest/polling_spec.rb +0 -101
  284. data/spec/unit/rest/resource_spec.rb +0 -10
  285. data/spec/vcr_configurer.rb +0 -63
@@ -1,149 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
4
- # This source code is licensed under the BSD-style license found in the
5
- # LICENSE file in the root directory of this source tree.
6
-
7
- shared_examples 'a user filter deleter' do
8
- it 'deletes the filter' do
9
- expect(existing_filter).to receive(:delete)
10
- result = subject.execute_mufs(filter_definitions, options)
11
- expect(result[:deleted].length).to be(1)
12
- end
13
- end
14
-
15
- describe GoodData::UserFilterBuilder do
16
- describe '.execute_mufs' do
17
- let(:login) { 'rubydev+admin@gooddata.com' }
18
- let(:full_definition_filter) do
19
- {
20
- :login => login,
21
- :filters => [{
22
- :label => label_id,
23
- :over => nil,
24
- :to => nil,
25
- :values => ["Washington"]
26
- }]
27
- }
28
- end
29
-
30
- let(:label_id) { 'label.csv_policies.state' }
31
- let(:label_uri) { '/gdc/md/wock3futg594lz3ornqv70yvbsivf896/obj/270' }
32
- let(:filter_definitions) { [full_definition_filter] }
33
- let(:options) do
34
- { client: client, project: project }
35
- end
36
- let(:users_brick_input) { [{ 'login' => login }] }
37
- let(:client) { double('client') }
38
- let(:project) { double('project') }
39
- let(:user) { double('user') }
40
- let(:project_users) { [user] }
41
- let(:label) { double('label') }
42
- let(:filter) { double('filter') }
43
- let(:existing_filter) { double('existing_filter') }
44
- let(:profile_url) { '/gdc/account/profile/foo' }
45
-
46
- before do
47
- allow(project).to receive(:labels).with(label_uri)
48
- .and_return(label)
49
- allow(project).to receive(:labels).with("label.csv_policies.state")
50
- .and_return(label)
51
- allow(project).to receive(:attributes)
52
- allow(project).to receive(:users).and_return(project_users)
53
- allow(project).to receive(:data_permissions).and_return([existing_filter])
54
- allow(project).to receive(:pid)
55
- allow(label).to receive(:values_count).and_return(666_666)
56
- allow(label).to receive(:uri).and_return(label_uri)
57
- allow(label).to receive(:find_value_uri).with('Washington').and_return('foo')
58
- allow(label).to receive(:attribute_uri).and_return('bar')
59
- allow(label).to receive(:identifier).and_return(label_id)
60
- allow(client).to receive(:create).and_return(filter)
61
- allow(client).to receive(:get)
62
- .and_return('userFilters' => { 'items' => [] })
63
- allow(client).to receive(:post)
64
- .and_return('userFiltersUpdateResult' => [])
65
- allow(filter).to receive(:related_uri)
66
- allow(existing_filter).to receive(:related_uri)
67
- allow(filter).to receive(:save)
68
- allow(filter).to receive(:uri)
69
- allow(user).to receive(:login).and_return(login)
70
- allow(user).to receive(:profile_url).and_return(login)
71
- end
72
-
73
- it 'resolves mufs to be created/deleted' do
74
- expect(existing_filter).to_not receive(:delete)
75
- result = subject.execute_mufs(filter_definitions, options)
76
- expect(result[:created].length).to be(1)
77
- expect(result[:deleted].length).to be(0)
78
- end
79
-
80
- context 'when dry_run option set to true' do
81
- let(:options) do
82
- { client: client,
83
- project: project,
84
- dry_run: true }
85
- end
86
-
87
- it 'does not alter filters' do
88
- expect(client).not_to receive(:post)
89
- subject.execute_mufs(filter_definitions, options)
90
- end
91
-
92
- it 'returns results' do
93
- result = subject.execute_mufs(filter_definitions, options)
94
- expected = [{ status: 'dry_run', user: nil, type: 'create' }]
95
- expect(result[:results]).to eq(expected)
96
- end
97
- end
98
-
99
- context 'when users_brick_input option specified' do
100
- let(:user) { double('user') }
101
- let(:users_brick_input) { [{ 'login' => login }] }
102
- let(:options) do
103
- { client: client,
104
- project: project,
105
- users_brick_input: users_brick_input }
106
- end
107
- before do
108
- allow(project).to receive(:users).and_return([user])
109
- allow(user).to receive(:login).and_return(login)
110
- allow(user).to receive(:profile_url).and_return(profile_url)
111
- end
112
-
113
- context 'when filter has user in users_brick_input' do
114
- before do
115
- allow(existing_filter).to receive(:json)
116
- .and_return(related: profile_url)
117
- end
118
- it_behaves_like 'a user filter deleter'
119
- context 'when users_brick_input has symbols as keys' do
120
- let(:users_brick_input) { [{ login: login }] }
121
- it_behaves_like 'a user filter deleter'
122
- end
123
- end
124
-
125
- context 'when filter does not have user in users_brick_input' do
126
- before do
127
- allow(existing_filter).to receive(:json)
128
- .and_return(related: 'not_in_users_brick_input')
129
- end
130
-
131
- it 'does not delete filter' do
132
- result = subject.execute_mufs(filter_definitions, options)
133
- expect(result[:deleted]).to be_empty
134
- end
135
- end
136
- end
137
-
138
- context 'when creating MUFs results in errors' do
139
- before do
140
- allow(client).to receive(:post)
141
- .and_return 'userFiltersUpdateResult' => { 'failed' => [{ status: :failed }] }
142
- end
143
-
144
- it 'fails' do
145
- expect { subject.execute_mufs(filter_definitions, options) }.to raise_error(/Creating MUFs resulted in errors/)
146
- end
147
- end
148
- end
149
- end
@@ -1,95 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
4
- # This source code is licensed under the BSD-style license found in the
5
- # LICENSE file in the root directory of this source tree.
6
-
7
- require 'gooddata'
8
-
9
- def check_filters(filters)
10
- filters.count.should eq(2)
11
- filter = filters.first
12
- filter[:login].should eq("john.doe@example.com")
13
- filter[:filters].count.should eq(1)
14
- filter[:filters].first[:values].count.should eq(4)
15
- filter[:filters].first[:values].should eq(["USA", "Czech Republic", "Uganda", "Slovakia"])
16
- filter = filters.last
17
- filter[:login].should eq("jane.doe@example.com")
18
- filter[:filters].count.should eq(1)
19
- filter[:filters].first[:values].count.should eq(1)
20
- end
21
-
22
- describe 'User filters implementation' do
23
- it "should create user filters from a file using row based approach" do
24
- filters = GoodData::UserFilterBuilder.get_filters(
25
- './spec/data/line_based_permissions.csv',
26
- :labels => [{ :label => "/gdc/md/lu292gm1077gtv7i383hjl149sva7o1e/obj/2719" }]
27
- )
28
- check_filters(filters)
29
- end
30
-
31
- it "should create user filters from a file using column based approach" do
32
- filters = GoodData::UserFilterBuilder.get_filters(
33
- './spec/data/column_based_permissions.csv',
34
- :labels => [{ :label => "/gdc/md/lu292gm1077gtv7i383hjl149sva7o1e/obj/2719", :column => 'region' }]
35
- )
36
- check_filters(filters)
37
- end
38
-
39
- it "should treat empty like nil, empty value has to be enclosed in quotes" do
40
- filters = GoodData::UserFilterBuilder.get_filters(
41
- './spec/data/column_based_permissions.csv',
42
- :labels => [
43
- { :label => "some_label", :column => 'region' },
44
- { :label => "other_label", :column => 'department' }
45
- ]
46
- )
47
- filters.first[:filters].last[:values].count.should eq(3)
48
- end
49
-
50
- it "should be able to specify columns by number" do
51
- filters = GoodData::UserFilterBuilder.get_filters(
52
- './spec/data/column_based_permissions2.csv',
53
- :user_column => 2,
54
- :labels => [
55
- { :label => "some_label", :column => 0 },
56
- { :label => "other_label", :column => 1 }
57
- ]
58
- )
59
- filters.first[:filters].last[:values].count.should eq(2)
60
- end
61
-
62
- it "should be able to specify columns by name" do
63
- filters = GoodData::UserFilterBuilder.get_filters(
64
- './spec/data/column_based_permissions2.csv',
65
- :user_column => 'login',
66
- :labels => [
67
- { :label => 'some_label', :column => 'region' },
68
- { :label => 'other_label', :column => 'department' }
69
- ]
70
- )
71
- filters.first[:filters].last[:values].count.should eq(2)
72
- end
73
-
74
- it "should normalize simplified filters" do
75
- filters = [
76
- [
77
- "svarovsky+gem_tester@gooddata.com",
78
- "/gdc/md/zndbmx87kh69vk8liods10mwxesaxn3k/obj/213",
79
- "tomas@gooddata.com",
80
- "jirka@gooddata.com"
81
- ]
82
- ]
83
- GoodData::UserFilterBuilder.normalize_filters(filters).should eq([
84
- {
85
- :login => "svarovsky+gem_tester@gooddata.com",
86
- :filters => [
87
- {
88
- :label => "/gdc/md/zndbmx87kh69vk8liods10mwxesaxn3k/obj/213",
89
- :values => ["tomas@gooddata.com", "jirka@gooddata.com"]
90
- }
91
- ]
92
- }
93
- ])
94
- end
95
- end
@@ -1,280 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
4
- # This source code is licensed under the BSD-style license found in the
5
- # LICENSE file in the root directory of this source tree.
6
-
7
- require 'gooddata'
8
-
9
- ROW_BASED_DATA = [
10
- ['tomas@gooddata.com', 'US', 'CZ', 'KZ'],
11
- ['petr@gooddata.com', 'US'],
12
- ['petr@gooddata.com', 'KZ']
13
- ]
14
- COLUMN_BASED_DATA_WITH_HEADERS = [
15
- {
16
- :login => 'tomas@gooddata.com',
17
- :country => 'US',
18
- :age => 14
19
- },
20
- {
21
- :login => 'petr@gooddata.com',
22
- :country => 'US',
23
- :age => 19
24
- },
25
- {
26
- :login => 'petr@gooddata.com',
27
- :country => 'KZ',
28
- :age => 30
29
- }
30
- ]
31
-
32
- COLUMN_BASED_DATA_WITH_HEADERS_AND_NIL_VAL = [
33
- {
34
- :login => 'tomas@gooddata.com',
35
- :country => 'US',
36
- :age => 14
37
- },
38
- {
39
- :login => 'petr@gooddata.com',
40
- :country => 'US',
41
- :age => 19
42
- },
43
- {
44
- :login => 'petr@gooddata.com',
45
- :country => 'KZ',
46
- :age => nil
47
- }
48
- ]
49
-
50
- COLUMN_BASED_DATA_WITH_HEADERS_AND_EMPTY_VAL = [
51
- {
52
- :login => 'tomas@gooddata.com',
53
- :country => 'US',
54
- :age => 14
55
- },
56
- {
57
- :login => 'petr@gooddata.com',
58
- :country => 'US',
59
- :age => 19
60
- },
61
- {
62
- :login => 'petr@gooddata.com',
63
- :country => 'KZ',
64
- :age => ''
65
- }
66
- ]
67
-
68
- describe "DSL" do
69
- it "should pick the values from row based file" do
70
- results = GoodData::UserFilterBuilder.get_values(ROW_BASED_DATA, :labels => [{ :label => "label/34" }])
71
- results.should == {
72
- "tomas@gooddata.com" => [
73
- { :label => "label/34", :values => %w(US CZ KZ), :over => nil, :to => nil }
74
- ],
75
- "petr@gooddata.com" => [
76
- { :label => "label/34", :values => ["US"], :over => nil, :to => nil },
77
- { :label => "label/34", :values => ["KZ"], :over => nil, :to => nil }
78
- ]
79
- }
80
- end
81
-
82
- it "should pick the values from column based file" do
83
- results = GoodData::UserFilterBuilder.get_values(
84
- COLUMN_BASED_DATA_WITH_HEADERS,
85
- :type => :filter,
86
- :user_column => :login,
87
- :labels => [{ :label => "label/34", :column => :country }]
88
- )
89
- results.should == {
90
- "tomas@gooddata.com" => [
91
- { :label => "label/34", :values => ["US"], :over => nil, :to => nil }
92
- ],
93
- "petr@gooddata.com" => [
94
- { :label => "label/34", :values => ["US"], :over => nil, :to => nil },
95
- { :label => "label/34", :values => ["KZ"], :over => nil, :to => nil }
96
- ]
97
- }
98
- end
99
-
100
- it "should pick the values from column based file with multiple columns" do
101
- results = GoodData::UserFilterBuilder.get_values(
102
- COLUMN_BASED_DATA_WITH_HEADERS,
103
- :type => :filter,
104
- :user_column => :login,
105
- :labels => [{ :label => "label/34", :column => :country }, { :label => "label/99", :column => :age }]
106
- )
107
- results.should == {
108
- "tomas@gooddata.com" => [
109
- { :label => "label/34", :values => ["US"], :over => nil, :to => nil },
110
- { :label => "label/99", :values => [14], :over => nil, :to => nil }
111
- ],
112
- "petr@gooddata.com" => [
113
- { :label => "label/34", :values => ["US"], :over => nil, :to => nil },
114
- { :label => "label/99", :values => [19], :over => nil, :to => nil },
115
- { :label => "label/34", :values => ["KZ"], :over => nil, :to => nil },
116
- { :label => "label/99", :values => [30], :over => nil, :to => nil }
117
- ]
118
- }
119
- end
120
-
121
- it "should process end to end" do
122
- result = GoodData::UserFilterBuilder.get_filters(
123
- COLUMN_BASED_DATA_WITH_HEADERS,
124
- :user_column => :login,
125
- :labels => [{ :label => { :uri => "label/34" }, :column => :country }, { :label => { :uri => "label/99" }, :column => :age }]
126
- )
127
- result.should == [
128
- {
129
- :login => "tomas@gooddata.com",
130
- :filters => [
131
- { :label => { :uri => "label/34" }, :values => ["US"], :over => nil, :to => nil },
132
- { :label => { :uri => "label/99" }, :values => [14], :over => nil, :to => nil }
133
- ]
134
- },
135
- {
136
- :login => "petr@gooddata.com",
137
- :filters => [
138
- { :label => { :uri => "label/34" }, :values => %w(US KZ), :over => nil, :to => nil },
139
- { :label => { :uri => "label/99" }, :values => [19, 30], :over => nil, :to => nil }
140
- ]
141
- }
142
- ]
143
- end
144
-
145
- it "should process end to end nil value should be ignored" do
146
- result = GoodData::UserFilterBuilder.get_filters(
147
- COLUMN_BASED_DATA_WITH_HEADERS_AND_NIL_VAL,
148
- :user_column => :login,
149
- :labels => [{ :label => { :uri => "label/34" }, :column => :country }, { :label => { :uri => "label/99" }, :column => :age }]
150
- )
151
- result.should == [
152
- {
153
- :login => "tomas@gooddata.com",
154
- :filters => [
155
- { :label => { :uri => "label/34" }, :values => ["US"], :over => nil, :to => nil },
156
- { :label => { :uri => "label/99" }, :values => [14], :over => nil, :to => nil }
157
- ]
158
- },
159
- {
160
- :login => "petr@gooddata.com",
161
- :filters => [
162
- { :label => { :uri => "label/34" }, :values => %w(US KZ), :over => nil, :to => nil },
163
- { :label => { :uri => "label/99" }, :values => [19], :over => nil, :to => nil }
164
- ]
165
- }
166
- ]
167
- end
168
-
169
- it "should process end to end nil value should be ignored" do
170
- result = GoodData::UserFilterBuilder.get_filters(
171
- COLUMN_BASED_DATA_WITH_HEADERS_AND_EMPTY_VAL,
172
- :user_column => :login,
173
- :labels => [
174
- { :label => { :uri => "label/34" }, :column => :country },
175
- { :label => { :uri => "label/99" }, :column => :age }
176
- ]
177
- )
178
- result.should == [
179
- {
180
- :login => "tomas@gooddata.com",
181
- :filters => [
182
- { :label => { :uri => "label/34" }, :values => ["US"], :over => nil, :to => nil },
183
- { :label => { :uri => "label/99" }, :values => [14], :over => nil, :to => nil }
184
- ]
185
- },
186
- {
187
- :login => "petr@gooddata.com",
188
- :filters => [
189
- { :label => { :uri => "label/34" }, :values => %w(US KZ), :over => nil, :to => nil },
190
- { :label => { :uri => "label/99" }, :values => [19, ""], :over => nil, :to => nil }
191
- ]
192
- }
193
- ]
194
- end
195
-
196
- it "should collect values for every user" do
197
- data = {
198
- "tomas" => [
199
- { :label => "label/34", :values => ["US"] },
200
- { :label => "label/34", :values => ["KZ"] },
201
- { :label => "label/99", :values => [18] },
202
- { :label => "label/99", :values => [20] }
203
- ],
204
- "petr" => [
205
- { :label => "label/34", :values => ["US"] },
206
- { :label => "label/99", :values => [2] },
207
- { :label => "label/99", :values => [1] }
208
- ]
209
- }
210
- result = GoodData::UserFilterBuilder.reduce_results(data)
211
- result.should == [
212
- {
213
- :login => "tomas",
214
- :filters => [
215
- { :label => "label/34", :values => %w(US KZ), :over => nil, :to => nil },
216
- { :label => "label/99", :values => [18, 20], :over => nil, :to => nil }
217
- ]
218
- },
219
- {
220
- :login => "petr",
221
- :filters => [
222
- { :label => "label/34", :values => ["US"], :over => nil, :to => nil },
223
- { :label => "label/99", :values => [2, 1], :over => nil, :to => nil }
224
- ]
225
- }
226
- ]
227
- end
228
-
229
- it "should collect values for every label" do
230
- data = [
231
- { :label => "label/34", :values => ["US"] },
232
- { :label => "label/34", :values => ["KZ"] },
233
- { :label => "label/99", :values => [18] },
234
- { :label => "label/99", :values => [20] }
235
- ]
236
- result = GoodData::UserFilterBuilder.collect_labels(data)
237
- result.should == [
238
- { :label => "label/34", :values => %w(US KZ), :over => nil, :to => nil },
239
- { :label => "label/99", :values => [18, 20], :over => nil, :to => nil }
240
- ]
241
- end
242
-
243
- it "should collect values" do
244
- data = [
245
- { :label => "label/34", :values => ["US"] },
246
- { :label => "label/34", :values => ["KZ"] }
247
- ]
248
- results = GoodData::UserFilterBuilder.collect_values(data)
249
- results.should == %w(US KZ)
250
- end
251
-
252
- it "should translate filters into MAQL filters" do
253
- data = [
254
- {
255
- :login => "tomas@gooddata.com",
256
- :filters => [
257
- { :label => "label/34", :values => ["US"] },
258
- { :label => "label/99", :values => [14] }
259
- ]
260
- },
261
- {
262
- :login => "petr@gooddata.com",
263
- :filters => [
264
- { :label => "label/34", :values => %w(US KZ) },
265
- { :label => "label/99", :values => [19] }
266
- ]
267
- }
268
- ]
269
- results = data.map do |user_data|
270
- {
271
- :login => user_data[:login],
272
- :maql_filter => user_data[:filters].map { |item| "[#{item[:label]}] IN (#{item[:values].join(', ')})" }.join(" AND ")
273
- }
274
- end
275
- results.should == [
276
- { :login => "tomas@gooddata.com", :maql_filter => "[label/34] IN (US) AND [label/99] IN (14)" },
277
- { :login => "petr@gooddata.com", :maql_filter => "[label/34] IN (US, KZ) AND [label/99] IN (19)" }
278
- ]
279
- end
280
- end