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.
Files changed (390) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -4
  3. data/CLI.md +0 -4
  4. data/DEPENDENCIES.md +0 -8
  5. data/Dockerfile.jruby +19 -0
  6. data/Dockerfile.ruby +19 -0
  7. data/LICENSE +2 -2
  8. data/LICENSE.rb +1 -1
  9. data/Rakefile +1 -1
  10. data/gooddata.gemspec +29 -28
  11. data/lib/gooddata.rb +2 -1
  12. data/lib/gooddata/app/app.rb +1 -1
  13. data/lib/gooddata/bricks/base_downloader.rb +1 -1
  14. data/lib/gooddata/bricks/brick.rb +3 -4
  15. data/lib/gooddata/bricks/bricks.rb +3 -1
  16. data/lib/gooddata/bricks/middleware/aws_middleware.rb +6 -8
  17. data/lib/gooddata/bricks/middleware/base_middleware.rb +2 -1
  18. data/lib/gooddata/bricks/middleware/bench_middleware.rb +2 -1
  19. data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +3 -3
  20. data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +3 -2
  21. data/lib/gooddata/bricks/middleware/dwh_middleware.rb +28 -0
  22. data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +2 -2
  23. data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +2 -2
  24. data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +84 -21
  25. data/lib/gooddata/bricks/middleware/logger_middleware.rb +1 -1
  26. data/lib/gooddata/bricks/middleware/middleware.rb +1 -1
  27. data/lib/gooddata/bricks/middleware/params_inspect_middleware.rb +21 -0
  28. data/lib/gooddata/bricks/middleware/restforce_middleware.rb +26 -26
  29. data/lib/gooddata/bricks/middleware/stdout_middleware.rb +1 -1
  30. data/lib/gooddata/bricks/middleware/twitter_middleware.rb +1 -1
  31. data/lib/gooddata/bricks/middleware/undot_params_middleware.rb +1 -1
  32. data/lib/gooddata/bricks/pipeline.rb +6 -13
  33. data/lib/gooddata/bricks/utils.rb +3 -3
  34. data/lib/gooddata/cli/cli.rb +1 -1
  35. data/lib/gooddata/cli/commands/auth_cmd.rb +1 -1
  36. data/lib/gooddata/cli/commands/domain_cmd.rb +1 -1
  37. data/lib/gooddata/cli/commands/project_cmd.rb +1 -18
  38. data/lib/gooddata/cli/hooks.rb +1 -2
  39. data/lib/gooddata/cli/shared.rb +1 -1
  40. data/lib/gooddata/cli/terminal.rb +1 -1
  41. data/lib/gooddata/client.rb +1 -1
  42. data/lib/gooddata/commands/api.rb +1 -1
  43. data/lib/gooddata/commands/auth.rb +1 -1
  44. data/lib/gooddata/commands/base.rb +1 -1
  45. data/lib/gooddata/commands/commands.rb +1 -1
  46. data/lib/gooddata/commands/datasets.rb +1 -1
  47. data/lib/gooddata/commands/datawarehouse.rb +1 -1
  48. data/lib/gooddata/commands/domain.rb +1 -1
  49. data/lib/gooddata/commands/process.rb +1 -1
  50. data/lib/gooddata/commands/project.rb +2 -31
  51. data/lib/gooddata/commands/projects.rb +1 -1
  52. data/lib/gooddata/commands/role.rb +1 -1
  53. data/lib/gooddata/commands/runners.rb +1 -1
  54. data/lib/gooddata/commands/scaffold.rb +1 -1
  55. data/lib/gooddata/commands/user.rb +1 -1
  56. data/lib/gooddata/connection.rb +1 -1
  57. data/lib/gooddata/core/core.rb +1 -1
  58. data/lib/gooddata/core/logging.rb +1 -1
  59. data/lib/gooddata/core/nil_logger.rb +1 -1
  60. data/lib/gooddata/core/project.rb +1 -1
  61. data/lib/gooddata/core/rest.rb +1 -1
  62. data/lib/gooddata/core/user.rb +1 -1
  63. data/lib/gooddata/data/data.rb +1 -1
  64. data/lib/gooddata/data/guesser.rb +1 -1
  65. data/lib/gooddata/exceptions/attr_element_not_found.rb +1 -1
  66. data/lib/gooddata/exceptions/command_failed.rb +1 -1
  67. data/lib/gooddata/exceptions/exceptions.rb +1 -1
  68. data/lib/gooddata/exceptions/execution_limit_exceeded.rb +1 -1
  69. data/lib/gooddata/exceptions/export_clone.rb +4 -0
  70. data/lib/gooddata/exceptions/filter_maqlization.rb +1 -1
  71. data/lib/gooddata/exceptions/import_clone.rb +4 -0
  72. data/lib/gooddata/exceptions/malformed_user.rb +1 -1
  73. data/lib/gooddata/exceptions/maql_execution.rb +1 -1
  74. data/lib/gooddata/exceptions/no_project_error.rb +1 -1
  75. data/lib/gooddata/exceptions/object_migration.rb +1 -1
  76. data/lib/gooddata/exceptions/project_not_found.rb +1 -1
  77. data/lib/gooddata/exceptions/segment_not_empty.rb +1 -1
  78. data/lib/gooddata/exceptions/uncomputable_report.rb +1 -1
  79. data/lib/gooddata/exceptions/user_in_different_domain.rb +1 -1
  80. data/lib/gooddata/exceptions/validation_error.rb +1 -1
  81. data/lib/gooddata/extensions/big_decimal.rb +1 -1
  82. data/lib/gooddata/extensions/class.rb +11 -0
  83. data/lib/gooddata/extensions/enumerable.rb +1 -1
  84. data/lib/gooddata/extensions/extensions.rb +1 -1
  85. data/lib/gooddata/extensions/false.rb +9 -1
  86. data/lib/gooddata/extensions/hash.rb +12 -1
  87. data/lib/gooddata/extensions/integer.rb +5 -0
  88. data/lib/gooddata/extensions/nil.rb +5 -1
  89. data/lib/gooddata/extensions/numeric.rb +1 -1
  90. data/lib/gooddata/extensions/object.rb +5 -1
  91. data/lib/gooddata/extensions/symbol.rb +1 -1
  92. data/lib/gooddata/extensions/true.rb +9 -1
  93. data/lib/gooddata/extract.rb +1 -1
  94. data/lib/gooddata/goodzilla/goodzilla.rb +1 -1
  95. data/lib/gooddata/helpers/auth_helpers.rb +1 -1
  96. data/lib/gooddata/helpers/csv_helper.rb +1 -1
  97. data/lib/gooddata/helpers/data_helper.rb +19 -10
  98. data/lib/gooddata/helpers/erb_helper.rb +23 -0
  99. data/lib/gooddata/helpers/global_helpers.rb +5 -73
  100. data/lib/gooddata/helpers/global_helpers_params.rb +73 -7
  101. data/lib/gooddata/helpers/helpers.rb +1 -1
  102. data/lib/gooddata/lcm/actions/actions.rb +12 -0
  103. data/lib/gooddata/lcm/actions/associate_clients.rb +46 -0
  104. data/lib/gooddata/lcm/actions/base_action.rb +23 -0
  105. data/lib/gooddata/lcm/actions/collect_clients.rb +89 -0
  106. data/lib/gooddata/lcm/actions/collect_segment_clients.rb +103 -0
  107. data/lib/gooddata/lcm/actions/collect_segments.rb +59 -0
  108. data/lib/gooddata/lcm/actions/create_segment_masters.rb +167 -0
  109. data/lib/gooddata/lcm/actions/ensure_release_table.rb +56 -0
  110. data/lib/gooddata/lcm/actions/ensure_segments.rb +35 -0
  111. data/lib/gooddata/lcm/actions/ensure_technical_users_domain.rb +66 -0
  112. data/lib/gooddata/lcm/actions/ensure_technical_users_project.rb +68 -0
  113. data/lib/gooddata/lcm/actions/ensure_titles.rb +54 -0
  114. data/lib/gooddata/lcm/actions/hello_world.rb +44 -0
  115. data/lib/gooddata/lcm/actions/print_actions.rb +61 -0
  116. data/lib/gooddata/lcm/actions/print_modes.rb +72 -0
  117. data/lib/gooddata/lcm/actions/print_types.rb +55 -0
  118. data/lib/gooddata/lcm/actions/provision_clients.rb +80 -0
  119. data/lib/gooddata/lcm/actions/purge_clients.rb +78 -0
  120. data/lib/gooddata/lcm/actions/segments_filter.rb +50 -0
  121. data/lib/gooddata/lcm/actions/synchronize_attribute_drillpaths.rb +60 -0
  122. data/lib/gooddata/lcm/actions/synchronize_clients.rb +87 -0
  123. data/lib/gooddata/lcm/actions/synchronize_color_palette.rb +59 -0
  124. data/lib/gooddata/lcm/actions/synchronize_label_types.rb +61 -0
  125. data/lib/gooddata/lcm/actions/synchronize_ldm.rb +64 -0
  126. data/lib/gooddata/lcm/actions/synchronize_meta.rb +55 -0
  127. data/lib/gooddata/lcm/actions/synchronize_new_segments.rb +55 -0
  128. data/lib/gooddata/lcm/actions/synchronize_processes.rb +66 -0
  129. data/lib/gooddata/lcm/actions/synchronize_schedules.rb +81 -0
  130. data/lib/gooddata/lcm/actions/update_release_table.rb +80 -0
  131. data/lib/gooddata/lcm/data/create_lcm_release.sql.erb +5 -0
  132. data/lib/gooddata/lcm/data/insert_into_lcm_release.sql.erb +11 -0
  133. data/lib/gooddata/lcm/data/select_from_lcm_release.sql.erb +8 -0
  134. data/lib/gooddata/lcm/data/update_lcm_release.sql.erb +7 -0
  135. data/lib/gooddata/lcm/dsl/dsl.rb +50 -0
  136. data/lib/gooddata/lcm/dsl/params_dsl.rb +61 -0
  137. data/lib/gooddata/lcm/dsl/type_dsl.rb +61 -0
  138. data/lib/gooddata/lcm/helpers/check_helper.rb +37 -0
  139. data/lib/gooddata/lcm/helpers/helpers.rb +12 -0
  140. data/lib/gooddata/lcm/lcm.rb +161 -20
  141. data/lib/gooddata/lcm/lcm2.rb +260 -0
  142. data/lib/gooddata/lcm/types/base_type.rb +29 -0
  143. data/lib/gooddata/lcm/types/class/ads_client.rb +35 -0
  144. data/lib/gooddata/lcm/types/class/class.rb +21 -0
  145. data/lib/gooddata/lcm/types/class/gd_client.rb +35 -0
  146. data/lib/gooddata/lcm/types/class/types.rb +12 -0
  147. data/lib/gooddata/lcm/types/complex/complex.rb +33 -0
  148. data/lib/gooddata/lcm/types/complex/release_query.rb +35 -0
  149. data/lib/gooddata/lcm/types/complex/segment.rb +37 -0
  150. data/lib/gooddata/lcm/types/complex/synchronization_info.rb +32 -0
  151. data/lib/gooddata/lcm/types/complex/tokens.rb +31 -0
  152. data/lib/gooddata/lcm/types/complex/types.rb +12 -0
  153. data/lib/gooddata/lcm/types/complex/update_preference.rb +32 -0
  154. data/lib/gooddata/lcm/types/param.rb +16 -0
  155. data/lib/gooddata/lcm/types/scalar/bool.rb +22 -0
  156. data/lib/gooddata/lcm/types/scalar/hash.rb +22 -0
  157. data/lib/gooddata/lcm/types/scalar/integer.rb +22 -0
  158. data/lib/gooddata/lcm/types/scalar/object.rb +22 -0
  159. data/lib/gooddata/lcm/types/scalar/string.rb +22 -0
  160. data/lib/gooddata/lcm/types/scalar/types.rb +12 -0
  161. data/lib/gooddata/lcm/types/special/array.rb +35 -0
  162. data/lib/gooddata/lcm/types/special/enum.rb +17 -0
  163. data/lib/gooddata/lcm/types/special/types.rb +12 -0
  164. data/lib/gooddata/lcm/types/types.rb +12 -0
  165. data/lib/gooddata/mixins/author.rb +1 -1
  166. data/lib/gooddata/mixins/content_getter.rb +1 -1
  167. data/lib/gooddata/mixins/content_property_reader.rb +1 -1
  168. data/lib/gooddata/mixins/content_property_writer.rb +1 -1
  169. data/lib/gooddata/mixins/contributor.rb +1 -1
  170. data/lib/gooddata/mixins/data_getter.rb +1 -1
  171. data/lib/gooddata/mixins/data_property_reader.rb +1 -1
  172. data/lib/gooddata/mixins/data_property_writer.rb +1 -1
  173. data/lib/gooddata/mixins/inspector.rb +1 -1
  174. data/lib/gooddata/mixins/is_attribute.rb +1 -1
  175. data/lib/gooddata/mixins/is_dimension.rb +1 -1
  176. data/lib/gooddata/mixins/is_fact.rb +1 -1
  177. data/lib/gooddata/mixins/is_label.rb +1 -1
  178. data/lib/gooddata/mixins/links.rb +1 -1
  179. data/lib/gooddata/mixins/md_finders.rb +1 -1
  180. data/lib/gooddata/mixins/md_grantees.rb +1 -1
  181. data/lib/gooddata/mixins/md_id_to_uri.rb +9 -3
  182. data/lib/gooddata/mixins/md_json.rb +1 -1
  183. data/lib/gooddata/mixins/md_lock.rb +1 -1
  184. data/lib/gooddata/mixins/md_object_id.rb +1 -1
  185. data/lib/gooddata/mixins/md_object_indexer.rb +1 -1
  186. data/lib/gooddata/mixins/md_object_query.rb +1 -1
  187. data/lib/gooddata/mixins/md_relations.rb +1 -1
  188. data/lib/gooddata/mixins/meta_getter.rb +1 -1
  189. data/lib/gooddata/mixins/meta_property_reader.rb +1 -1
  190. data/lib/gooddata/mixins/meta_property_writer.rb +1 -1
  191. data/lib/gooddata/mixins/mixins.rb +1 -1
  192. data/lib/gooddata/mixins/not_attribute.rb +1 -1
  193. data/lib/gooddata/mixins/not_exportable.rb +1 -1
  194. data/lib/gooddata/mixins/not_fact.rb +1 -1
  195. data/lib/gooddata/mixins/not_group.rb +1 -1
  196. data/lib/gooddata/mixins/not_label.rb +1 -1
  197. data/lib/gooddata/mixins/not_metric.rb +1 -1
  198. data/lib/gooddata/mixins/obj_id.rb +1 -1
  199. data/lib/gooddata/mixins/rest_getters.rb +1 -1
  200. data/lib/gooddata/mixins/rest_resource.rb +1 -1
  201. data/lib/gooddata/mixins/root_key_getter.rb +1 -1
  202. data/lib/gooddata/mixins/root_key_setter.rb +1 -1
  203. data/lib/gooddata/mixins/timestamps.rb +1 -1
  204. data/lib/gooddata/models/ads_output_stage.rb +85 -0
  205. data/lib/gooddata/models/automated_data_distribution.rb +36 -0
  206. data/lib/gooddata/models/blueprint/anchor_field.rb +4 -3
  207. data/lib/gooddata/models/blueprint/attribute_field.rb +18 -2
  208. data/lib/gooddata/models/blueprint/blueprint.rb +1 -1
  209. data/lib/gooddata/models/blueprint/blueprint_field.rb +1 -1
  210. data/lib/gooddata/models/blueprint/dashboard_builder.rb +1 -1
  211. data/lib/gooddata/models/blueprint/dataset_blueprint.rb +6 -1
  212. data/lib/gooddata/models/blueprint/date_dimension.rb +1 -1
  213. data/lib/gooddata/models/blueprint/fact_field.rb +1 -1
  214. data/lib/gooddata/models/blueprint/label_field.rb +5 -1
  215. data/lib/gooddata/models/blueprint/project_blueprint.rb +1 -1
  216. data/lib/gooddata/models/blueprint/project_builder.rb +1 -1
  217. data/lib/gooddata/models/blueprint/reference_field.rb +1 -1
  218. data/lib/gooddata/models/blueprint/schema_blueprint.rb +1 -1
  219. data/lib/gooddata/models/blueprint/schema_builder.rb +1 -1
  220. data/lib/gooddata/models/blueprint/to_manifest.rb +7 -3
  221. data/lib/gooddata/models/blueprint/to_wire.rb +12 -1
  222. data/lib/gooddata/models/channel_configuration.rb +112 -0
  223. data/lib/gooddata/models/client.rb +42 -6
  224. data/lib/gooddata/models/client_synchronization_result.rb +1 -1
  225. data/lib/gooddata/models/client_synchronization_result_details.rb +1 -1
  226. data/lib/gooddata/models/datawarehouse.rb +25 -3
  227. data/lib/gooddata/models/domain.rb +29 -4
  228. data/lib/gooddata/models/execution.rb +1 -1
  229. data/lib/gooddata/models/execution_detail.rb +1 -1
  230. data/lib/gooddata/models/from_wire.rb +8 -1
  231. data/lib/gooddata/models/invitation.rb +1 -1
  232. data/lib/gooddata/models/links.rb +1 -1
  233. data/lib/gooddata/models/membership.rb +1 -1
  234. data/lib/gooddata/models/metadata.rb +3 -2
  235. data/lib/gooddata/models/metadata/attribute.rb +7 -1
  236. data/lib/gooddata/models/metadata/dashboard.rb +3 -3
  237. data/lib/gooddata/models/metadata/dashboard/dashboard_item.rb +1 -1
  238. data/lib/gooddata/models/metadata/dashboard/filter_apply_item.rb +2 -2
  239. data/lib/gooddata/models/metadata/dashboard/filter_item.rb +2 -2
  240. data/lib/gooddata/models/metadata/dashboard/geo_chart_item.rb +2 -2
  241. data/lib/gooddata/models/metadata/dashboard/headline_item.rb +2 -2
  242. data/lib/gooddata/models/metadata/dashboard/iframe_item.rb +2 -2
  243. data/lib/gooddata/models/metadata/dashboard/report_item.rb +2 -2
  244. data/lib/gooddata/models/metadata/dashboard/text_item.rb +2 -2
  245. data/lib/gooddata/models/metadata/dashboard_tab.rb +2 -2
  246. data/lib/gooddata/models/metadata/dataset.rb +1 -1
  247. data/lib/gooddata/models/metadata/dimension.rb +1 -1
  248. data/lib/gooddata/models/metadata/fact.rb +1 -1
  249. data/lib/gooddata/models/metadata/folder.rb +1 -1
  250. data/lib/gooddata/models/metadata/label.rb +1 -1
  251. data/lib/gooddata/models/metadata/metadata.rb +1 -1
  252. data/lib/gooddata/models/metadata/metric.rb +1 -1
  253. data/lib/gooddata/models/metadata/report.rb +1 -1
  254. data/lib/gooddata/models/metadata/report_definition.rb +1 -1
  255. data/lib/gooddata/models/metadata/scheduled_mail.rb +2 -2
  256. data/lib/gooddata/models/metadata/scheduled_mail/dashboard_attachment.rb +1 -1
  257. data/lib/gooddata/models/metadata/scheduled_mail/report_attachment.rb +1 -1
  258. data/lib/gooddata/models/metadata/variable.rb +1 -1
  259. data/lib/gooddata/models/model.rb +1 -1
  260. data/lib/gooddata/models/models.rb +1 -1
  261. data/lib/gooddata/models/module_constants.rb +1 -1
  262. data/lib/gooddata/models/notification_rule.rb +113 -0
  263. data/lib/gooddata/models/process.rb +10 -3
  264. data/lib/gooddata/models/profile.rb +9 -1
  265. data/lib/gooddata/models/project.rb +248 -50
  266. data/lib/gooddata/models/project_creator.rb +2 -2
  267. data/lib/gooddata/models/project_metadata.rb +1 -1
  268. data/lib/gooddata/models/project_role.rb +1 -1
  269. data/lib/gooddata/models/report_data_result.rb +1 -1
  270. data/lib/gooddata/models/schedule.rb +49 -13
  271. data/lib/gooddata/models/segment.rb +3 -3
  272. data/lib/gooddata/models/style_setting.rb +71 -0
  273. data/lib/gooddata/models/subscription.rb +181 -0
  274. data/lib/gooddata/models/tab_builder.rb +1 -1
  275. data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +1 -1
  276. data/lib/gooddata/models/user_filters/user_filter.rb +1 -1
  277. data/lib/gooddata/models/user_filters/user_filter_builder.rb +11 -5
  278. data/lib/gooddata/models/user_filters/user_filters.rb +1 -1
  279. data/lib/gooddata/models/user_filters/variable_user_filter.rb +1 -1
  280. data/lib/gooddata/models/user_group.rb +19 -12
  281. data/lib/gooddata/rest/client.rb +9 -1
  282. data/lib/gooddata/rest/connection.rb +18 -9
  283. data/lib/gooddata/rest/object.rb +1 -1
  284. data/lib/gooddata/rest/object_factory.rb +1 -1
  285. data/lib/gooddata/rest/resource.rb +1 -1
  286. data/lib/gooddata/rest/rest.rb +1 -1
  287. data/lib/gooddata/version.rb +2 -2
  288. data/spec/.rubocop.yml +16 -0
  289. data/spec/bricks/bricks_spec.rb +13 -15
  290. data/spec/data/blueprints/attribute_sort_order_blueprint.json +72 -0
  291. data/spec/data/gooddata_version_process/gooddata_version.rb +1 -1
  292. data/spec/data/hello_world_process/hello_world.rb +2 -2
  293. data/spec/data/ruby_params_process/ruby_params.rb +1 -1
  294. data/spec/data/ruby_process/process.rb +2 -2
  295. data/spec/data/wire_models/attribute_sort_by_model.json +73 -0
  296. data/spec/environment/default.rb +14 -13
  297. data/spec/environment/develop.rb +26 -11
  298. data/spec/environment/environment.rb +2 -1
  299. data/spec/environment/hotfix.rb +15 -7
  300. data/spec/environment/production.rb +6 -14
  301. data/spec/environment/staging.rb +9 -10
  302. data/spec/helpers/blueprint_helper.rb +11 -10
  303. data/spec/helpers/cli_helper.rb +26 -24
  304. data/spec/helpers/connection_helper.rb +28 -26
  305. data/spec/helpers/crypto_helper.rb +8 -6
  306. data/spec/helpers/csv_helper.rb +7 -5
  307. data/spec/helpers/process_helper.rb +13 -11
  308. data/spec/helpers/project_helper.rb +36 -34
  309. data/spec/helpers/schedule_helper.rb +13 -11
  310. data/spec/helpers/spec_helper.rb +8 -6
  311. data/spec/integration/ads_output_stage_spec.rb +55 -0
  312. data/spec/integration/blueprint_updates_spec.rb +22 -16
  313. data/spec/integration/blueprint_with_grain_spec.rb +5 -3
  314. data/spec/integration/channel_configuration_spec.rb +67 -0
  315. data/spec/integration/clients_spec.rb +31 -22
  316. data/spec/integration/command_datawarehouse_spec.rb +4 -4
  317. data/spec/integration/command_projects_spec.rb +6 -6
  318. data/spec/integration/create_from_template_spec.rb +4 -3
  319. data/spec/integration/create_project_spec.rb +7 -4
  320. data/spec/integration/date_dim_switch_spec.rb +25 -28
  321. data/spec/integration/deprecated_load_spec.rb +11 -9
  322. data/spec/integration/full_process_schedule_spec.rb +82 -13
  323. data/spec/integration/full_project_spec.rb +67 -45
  324. data/spec/integration/lcm_spec.rb +41 -0
  325. data/spec/integration/over_to_user_filters_spec.rb +14 -10
  326. data/spec/integration/partial_md_export_import_spec.rb +3 -4
  327. data/spec/integration/project_spec.rb +101 -42
  328. data/spec/integration/rest_spec.rb +5 -4
  329. data/spec/integration/schedule_spec.rb +28 -39
  330. data/spec/integration/segments_spec.rb +42 -31
  331. data/spec/integration/subscription_spec.rb +63 -0
  332. data/spec/integration/user_filters_spec.rb +49 -39
  333. data/spec/integration/user_group_spec.rb +25 -5
  334. data/spec/integration/variables_spec.rb +34 -32
  335. data/spec/logging_in_logging_out_spec.rb +6 -8
  336. data/spec/spec_helper.rb +3 -3
  337. data/spec/unit/bricks/bricks_spec.rb +3 -4
  338. data/spec/unit/bricks/middleware/aws_middelware_spec.rb +8 -15
  339. data/spec/unit/bricks/middleware/bench_middleware_spec.rb +2 -2
  340. data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +2 -2
  341. data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +2 -2
  342. data/spec/unit/bricks/middleware/logger_middleware_spec.rb +2 -2
  343. data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +3 -3
  344. data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +3 -3
  345. data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +3 -3
  346. data/spec/unit/cli/cli_spec.rb +3 -3
  347. data/spec/unit/cli/commands/cmd_auth_spec.rb +2 -2
  348. data/spec/unit/commands/command_projects_spec.rb +3 -3
  349. data/spec/unit/core/connection_spec.rb +3 -4
  350. data/spec/unit/core/logging_spec.rb +2 -5
  351. data/spec/unit/core/nil_logger_spec.rb +2 -2
  352. data/spec/unit/core/project_spec.rb +4 -4
  353. data/spec/unit/extensions/hash_spec.rb +3 -4
  354. data/spec/unit/godzilla/goodzilla_spec.rb +22 -26
  355. data/spec/unit/helpers/csv_helper_spec.rb +3 -3
  356. data/spec/unit/helpers/data_helper_spec.rb +6 -18
  357. data/spec/unit/helpers/global_helpers_spec.rb +112 -28
  358. data/spec/unit/helpers_spec.rb +139 -2
  359. data/spec/unit/models/blueprint/attribute_sort_by_spec.rb +20 -0
  360. data/spec/unit/models/blueprint/attributes_spec.rb +1 -2
  361. data/spec/unit/models/blueprint/dataset_spec.rb +2 -3
  362. data/spec/unit/models/blueprint/labels_spec.rb +1 -2
  363. data/spec/unit/models/blueprint/project_blueprint_spec.rb +34 -35
  364. data/spec/unit/models/blueprint/reference_spec.rb +1 -2
  365. data/spec/unit/models/blueprint/schema_builder_spec.rb +5 -7
  366. data/spec/unit/models/blueprint/to_wire_spec.rb +76 -55
  367. data/spec/unit/models/domain_spec.rb +4 -5
  368. data/spec/unit/models/execution_spec.rb +16 -15
  369. data/spec/unit/models/from_wire_spec.rb +24 -19
  370. data/spec/unit/models/invitation_spec.rb +1 -1
  371. data/spec/unit/models/membership_spec.rb +36 -41
  372. data/spec/unit/models/metadata_spec.rb +20 -18
  373. data/spec/unit/models/metric_spec.rb +67 -55
  374. data/spec/unit/models/model_spec.rb +32 -37
  375. data/spec/unit/models/params_spec.rb +1 -1
  376. data/spec/unit/models/profile_spec.rb +40 -45
  377. data/spec/unit/models/project_creator_spec.rb +27 -29
  378. data/spec/unit/models/project_role_spec.rb +1 -1
  379. data/spec/unit/models/project_spec.rb +65 -2
  380. data/spec/unit/models/report_result_data_spec.rb +7 -12
  381. data/spec/unit/models/schedule_spec.rb +71 -35
  382. data/spec/unit/models/to_manifest_spec.rb +69 -4
  383. data/spec/unit/models/unit_project_spec.rb +12 -12
  384. data/spec/unit/models/user_filters_spec.rb +40 -40
  385. data/spec/unit/models/variable_spec.rb +108 -93
  386. data/spec/unit/rest/polling_spec.rb +7 -7
  387. data/spec/unit/rest/resource_spec.rb +2 -2
  388. metadata +145 -228
  389. data/spec/environment/release.rb +0 -21
  390. data/spec/environment/staging_3.rb +0 -36
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  #
3
- # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
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
 
@@ -8,26 +8,31 @@ require 'gooddata/models/segment'
8
8
  require 'securerandom'
9
9
 
10
10
  describe GoodData::Segment do
11
- TOKEN = 'mustangs'
12
-
13
11
  before(:all) do
14
- @client = GoodData.connect('mustang@gooddata.com', 'jindrisska', server: 'https://mustangs.intgdc.com', verify_ssl: false )
15
- @domain = @client.domain('mustangs')
12
+ @client = ConnectionHelper.create_default_connection
13
+ @domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
14
+ GoodData::Segment.all(domain: @domain).each do |segment|
15
+ begin
16
+ segment.delete
17
+ rescue StandardError => e
18
+ GoodData.logger.warn "Failed to delete segment: #{e}"
19
+ end
20
+ end
16
21
  end
17
22
 
18
23
  before(:each) do
19
24
  @uuid = SecureRandom.uuid
20
- @master_project = @client.create_project(title: "Test MASTER project for #{@uuid}", auth_token: TOKEN)
25
+ @master_project = @client.create_project(title: "Test MASTER project for #{@uuid}", auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
21
26
  @segment_name = "segment-#{@uuid}"
22
27
  @segment = @domain.create_segment(segment_id: @segment_name, master_project: @master_project)
23
28
  end
24
29
 
25
30
  after(:each) do
31
+ @master_project.delete if @master_project
26
32
  @segment && @segment.delete(force: true)
27
33
  end
28
34
 
29
35
  after(:all) do
30
- @master_project.delete if @master_project
31
36
  @client.disconnect
32
37
  end
33
38
 
@@ -39,7 +44,7 @@ describe GoodData::Segment do
39
44
 
40
45
  it 'Returns specific segment when segment ID passed' do
41
46
  s = @domain.segments(@segment_name)
42
- @segment.uri == s.uri
47
+ expect(@segment.uri).to eq s.uri
43
48
  expect(s).to be_an_instance_of(GoodData::Segment)
44
49
  expect(@segment).to be_an_instance_of(GoodData::Segment)
45
50
  end
@@ -50,7 +55,7 @@ describe GoodData::Segment do
50
55
  old_count = @domain.segments.count
51
56
  s = @domain.segments(@segment_name)
52
57
  s.delete
53
- expect(@domain.segments.length).to eq (old_count - 1)
58
+ expect(@domain.segments.length).to eq(old_count - 1)
54
59
  # prevent delete attempt in the after hook
55
60
  @segment = nil
56
61
  end
@@ -58,30 +63,35 @@ describe GoodData::Segment do
58
63
 
59
64
  describe '#save' do
60
65
  it 'can update a segment master project' do
61
- different_master = @client.create_project(title: 'Test project', auth_token: TOKEN)
62
- @segment.master_project = different_master
63
- @segment.save
64
- @segment = @domain.segments(@segment_name)
65
- expect(@segment.master_project_uri).not_to eq @master_project.uri
66
- expect(@segment.master_project_uri).to eq different_master.uri
66
+ begin
67
+ different_master = @client.create_project(title: 'Test project', auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
68
+ @segment.master_project = different_master
69
+ @segment.save
70
+ @segment = @domain.segments(@segment_name)
71
+ expect(@segment.master_project_uri).not_to eq @master_project.uri
72
+ expect(@segment.master_project_uri).to eq different_master.uri
73
+ ensure
74
+ different_master.delete if different_master
75
+ end
67
76
  end
68
77
 
69
78
  it 'cannot update a segment id' do
70
79
  @segment.segment_id = 'different_id'
71
- expect {
80
+ expect do
72
81
  @segment.save
73
- }.to raise_error RestClient::BadRequest
82
+ end.to raise_error RestClient::BadRequest
74
83
  end
75
84
  end
76
85
 
77
86
  describe '#create_client' do
78
87
  it 'can create a new client in a segment' do
79
88
  begin
80
- client_project = @client.create_project(title: 'client_1 project', auth_token: TOKEN)
89
+ client_project = @client.create_project(title: 'client_1 project', auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
81
90
  segment_client = @segment.create_client(id: 'tenant_1', project: client_project)
82
91
  expect(segment_client).to be_an_instance_of(GoodData::Client)
83
92
  expect(@segment.clients.count).to eq 1
84
93
  ensure
94
+ client_project.delete if client_project
85
95
  segment_client && segment_client.delete
86
96
  end
87
97
  end
@@ -106,34 +116,35 @@ describe GoodData::Segment do
106
116
  it 'can create a new client in a segment without project and then provision' do
107
117
  begin
108
118
  uuid_2 = SecureRandom.uuid
109
- master_project_2 = @client.create_project(title: "Test MASTER project for #{uuid_2}", auth_token: TOKEN)
119
+ master_project_2 = @client.create_project(title: "Test MASTER project for #{uuid_2}", auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
110
120
  segment_name_2 = "segment-#{uuid_2}"
111
121
  segment_2 = @domain.create_segment(segment_id: segment_name_2, master_project: master_project_2)
112
122
 
113
123
  client_1 = "client-#{SecureRandom.uuid}"
114
124
  client_2 = "client-#{SecureRandom.uuid}"
115
- data = [{id: client_1, segment: segment_name_2 },
116
- {id: client_2, segment: @segment_name }]
117
- res = @domain.update_clients(data)
125
+ data = [{ id: client_1, segment: segment_name_2 },
126
+ { id: client_2, segment: @segment_name }]
127
+ @domain.update_clients(data)
118
128
  expect(@domain.segments.map(&:id)).to include(@segment.id, segment_2.id)
119
- expect(@domain.segments.pmapcat {|s| s.clients.to_a }.map(&:id)).to include(client_1, client_2)
129
+ expect(@domain.segments.pmapcat { |s| s.clients.to_a }.map(&:id)).to include(client_1, client_2)
120
130
 
121
131
  client_3 = "client-#{SecureRandom.uuid}"
122
132
  client_4 = "client-#{SecureRandom.uuid}"
123
- data = [{id: client_3, segment: segment_name_2 },
124
- {id: client_4, segment: @segment_name }]
125
- res = @domain.update_clients(data)
126
- expect(@domain.segments.pmapcat {|s| s.clients.to_a }.map(&:id)).to include(client_1, client_2, client_3, client_4)
133
+ data = [{ id: client_3, segment: segment_name_2 },
134
+ { id: client_4, segment: @segment_name }]
135
+ @domain.update_clients(data)
136
+ expect(@domain.segments.pmapcat { |s| s.clients.to_a }.map(&:id)).to include(client_1, client_2, client_3, client_4)
127
137
 
128
138
  # bring the projects
129
139
  @domain.synchronize_clients
130
140
  @domain.provision_client_projects
131
- projects_to_delete = @domain.segments.pmapcat {|s| s.clients.to_a }.select { |c| [client_1, client_2].include?(c.id) }.map(&:project)
132
- res = @domain.update_clients(data, delete_extra: true)
133
- expect(@domain.segments.pmapcat {|s| s.clients.to_a }.map(&:id)).to include(client_3, client_4)
134
- expect(@domain.segments.pmapcat {|s| s.clients.to_a }.map(&:id)).not_to include(client_1, client_2)
141
+ projects_to_delete = @domain.segments.pmapcat { |s| s.clients.to_a }.select { |c| [client_1, client_2].include?(c.id) }.map(&:project)
142
+ @domain.update_clients(data, delete_extra: true)
143
+ expect(@domain.segments.pmapcat { |s| s.clients.to_a }.map(&:id)).to include(client_3, client_4)
144
+ expect(@domain.segments.pmapcat { |s| s.clients.to_a }.map(&:id)).not_to include(client_1, client_2)
135
145
  expect(projects_to_delete.pmap(&:reload!).map(&:state)).to eq [:deleted, :deleted]
136
146
  ensure
147
+ master_project_2.delete if master_project_2
137
148
  segment_2.delete(force: true) if segment_2
138
149
  end
139
150
  end
@@ -0,0 +1,63 @@
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
+ describe GoodData::Subscription, :constraint => 'slow' do
10
+ before(:all) do
11
+ @client = ConnectionHelper.create_default_connection
12
+ @channel = GoodData::ChannelConfiguration.create(client: @client)
13
+ subscriptions = GoodData::Subscription.all(project: ProjectHelper::PROJECT_ID, client: @client)
14
+ subscriptions.each(&:delete)
15
+ end
16
+
17
+ after(:all) do
18
+ @channel && @channel.delete
19
+ @client && @client.disconnect
20
+ end
21
+
22
+ it 'should be able to create a subscription' do
23
+ begin
24
+ subscription = GoodData::Subscription.create(client: @client, project: ProjectHelper::PROJECT_ID, channels: @channel, message: 'hello world', process: ProcessHelper::PROCESS_ID, project_events: GoodData::Subscription::PROCESS_SUCCESS_EVENT)
25
+ expect(subscription.title).to eq ConnectionHelper::DEFAULT_USERNAME
26
+ expect(subscription.channels).to eq [@channel.uri]
27
+ expect(subscription.message).to eq 'hello world'
28
+ expect(subscription.process).to eq ProcessHelper::PROCESS_ID
29
+ expect(subscription.project_events).to eq [GoodData::Subscription::PROCESS_SUCCESS_EVENT]
30
+ ensure
31
+ subscription && subscription.delete
32
+ end
33
+ end
34
+
35
+ it 'should be able to edit a subscription' do
36
+ begin
37
+ subscription = GoodData::Subscription.create(client: @client, project: ProjectHelper::PROJECT_ID, channels: @channel, process: ProcessHelper::PROCESS_ID, project_events: GoodData::Subscription::PROCESS_SUCCESS_EVENT)
38
+ expect(subscription.title).to eq ConnectionHelper::DEFAULT_USERNAME
39
+
40
+ subscription.title = 'My title'
41
+ subscription.save
42
+
43
+ expect(GoodData::Subscription[subscription.subscription_id, project: ProjectHelper::PROJECT_ID, client: @client].title).to eq 'My title'
44
+ ensure
45
+ subscription && subscription.delete
46
+ end
47
+ end
48
+
49
+ it 'should be able to list all subscriptions' do
50
+ begin
51
+ expect(GoodData::Subscription.all(project: ProjectHelper::PROJECT_ID, client: @client)).to eq []
52
+ subscription = GoodData::Subscription.create(client: @client, project: ProjectHelper::PROJECT_ID, channels: @channel, process: ProcessHelper::PROCESS_ID, project_events: GoodData::Subscription::PROCESS_SUCCESS_EVENT)
53
+ expect(GoodData::Subscription.all(project: ProjectHelper::PROJECT_ID, client: @client)).to eq [subscription]
54
+ ensure
55
+ subscription && subscription.delete
56
+ end
57
+ end
58
+
59
+ it 'should be able to delete a subscription' do
60
+ subscription = GoodData::Subscription.create(client: @client, project: ProjectHelper::PROJECT_ID, channels: @channel, process: ProcessHelper::PROCESS_ID, project_events: GoodData::Subscription::PROCESS_SUCCESS_EVENT)
61
+ subscription.delete
62
+ end
63
+ end
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  #
3
- # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
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 "User filters implementation", :constraint => 'slow' do
10
10
  before(:all) do
11
11
  @spec = JSON.parse(File.read("./spec/data/blueprints/test_project_model_spec.json"), :symbolize_names => true)
12
- @client = ConnectionHelper::create_default_connection
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)
@@ -17,25 +17,28 @@ describe "User filters implementation", :constraint => 'slow' do
17
17
  @label = GoodData::Attribute.find_first_by_title('Dev', client: @client, project: @project).label_by_name('email')
18
18
 
19
19
  commits_data = [
20
- ["lines_changed","committed_on","dev_id","repo_id"],
21
- [1,"01/01/2014",1,1],
22
- [3,"01/02/2014",2,2],
23
- [5,"05/02/2014",3,1],
24
- [6,"05/02/2014",1,2]]
20
+ %w(lines_changed committed_on dev_id repo_id),
21
+ [1, "01/01/2014", 1, 1],
22
+ [3, "01/02/2014", 2, 2],
23
+ [5, "05/02/2014", 3, 1],
24
+ [6, "05/02/2014", 1, 2]
25
+ ]
25
26
  @project.upload(commits_data, blueprint, 'dataset.commits')
26
27
 
27
28
  devs_data = [
28
- ["dev_id", "email"],
29
+ %w(dev_id email),
29
30
  [1, "tomas@gooddata.com"],
30
31
  [2, "petr@gooddata.com"],
31
- [3, "jirka@gooddata.com"]]
32
+ [3, "jirka@gooddata.com"]
33
+ ]
32
34
  @project.upload(devs_data, blueprint, 'dataset.devs')
33
35
 
34
36
  repos_data = [
35
- ["repo_id", "repo_name"],
37
+ %w(repo_id repo_name),
36
38
  [1, "goodot"],
37
39
  [2, "bam"],
38
- [3, "infra"]]
40
+ [3, "infra"]
41
+ ]
39
42
  @project.upload(repos_data, blueprint, 'dataset.repos')
40
43
  end
41
44
 
@@ -44,7 +47,7 @@ describe "User filters implementation", :constraint => 'slow' do
44
47
  end
45
48
 
46
49
  after(:each) do
47
- @project.data_permissions.pmap &:delete
50
+ @project.data_permissions.pmap(&:delete)
48
51
  end
49
52
 
50
53
  it "should create a mandatory user filter" do
@@ -54,13 +57,18 @@ describe "User filters implementation", :constraint => 'slow' do
54
57
  # [jirka@gooddata.com | petr@gooddata.com | tomas@gooddata.com]
55
58
  # [5.0 | 3.0 | 1.0 ]
56
59
 
57
- metric.execute.should == 15
60
+ expect(metric.execute).to eq(15)
58
61
  @project.add_data_permissions(filters)
59
- metric.execute.should == 12
62
+ expect(metric.execute).to eq(12)
60
63
  r = @project.compute_report(left: [metric], top: [@label.attribute])
61
- r.include_column?(['tomas@gooddata.com', 7]).should == true
62
- r.include_column?(['jirka@gooddata.com', 5]).should == true
63
- r.include_column?(['petr@gooddata.com', 3]).should == false
64
+ expect(r.include_column?(['tomas@gooddata.com', 7])).to be_truthy
65
+ expect(r.include_column?(['jirka@gooddata.com', 5])).to be_truthy
66
+ expect(r.include_column?(['petr@gooddata.com', 3])).to be_falsy
67
+
68
+ # should not re-create the same MUF for the same user
69
+ result = @project.add_data_permissions(filters, dry_run: true)
70
+ expect(result[:created].count).to eq 0
71
+ expect(result[:deleted].count).to eq 0
64
72
  end
65
73
 
66
74
  it "should return errors when asked to set a user not in project. Some filters are set up though." do
@@ -94,7 +102,8 @@ describe "User filters implementation", :constraint => 'slow' do
94
102
 
95
103
  it "should fail when asked to set a value not in the project" do
96
104
  filters = [
97
- [ConnectionHelper::DEFAULT_USERNAME, @label.uri, '%^&*( nonexistent value', 'tomas@gooddata.com']]
105
+ [ConnectionHelper::DEFAULT_USERNAME, @label.uri, '%^&*( nonexistent value', 'tomas@gooddata.com']
106
+ ]
98
107
  expect do
99
108
  @project.add_data_permissions(filters)
100
109
  end.to raise_error
@@ -108,7 +117,7 @@ describe "User filters implementation", :constraint => 'slow' do
108
117
 
109
118
  it 'should fail but return all values if specified' do
110
119
  domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
111
- u = domain.users.find { |u| u.login != ConnectionHelper::DEFAULT_USERNAME }
120
+ u = domain.users.find { |user| user.login != ConnectionHelper::DEFAULT_USERNAME }
112
121
  filters = [
113
122
  [ConnectionHelper::DEFAULT_USERNAME, @label.uri, '%^&*( nonexistent value', 'tomas@gooddata.com'],
114
123
  [u.login, @label.uri, '%^&*( other nonexistent value', 'jirka@gooddata.com']
@@ -128,16 +137,16 @@ describe "User filters implementation", :constraint => 'slow' do
128
137
  filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, '%^&*( nonexistent value', 'jirka@gooddata.com']]
129
138
  @project.add_data_permissions(filters, ignore_missing_values: true)
130
139
 
131
- expect(@project.data_permissions.pmap {|m| m.pretty_expression}).to eq ["[Dev] IN ([jirka@gooddata.com])"]
140
+ expect(@project.data_permissions.pmap(&:pretty_expression)).to eq ["[Dev] IN ([jirka@gooddata.com])"]
132
141
  expect(@project.data_permissions.count).to eq 1
133
142
  end
134
143
 
135
144
  it "should be able to add mandatory filter to a user not in the project if domain is provided" do
136
145
  domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
137
- u = domain.users.find { |u| u.login != ConnectionHelper::DEFAULT_USERNAME }
146
+ u = domain.users.find { |user| user.login != ConnectionHelper::DEFAULT_USERNAME }
138
147
 
139
148
  filters = [[u.login, @label.uri, "tomas@gooddata.com"]]
140
- results = @project.add_data_permissions(filters)
149
+ @project.add_data_permissions(filters)
141
150
  filters = @project.data_permissions
142
151
  expect(filters.first.related.login).to eq u.login
143
152
  expect(filters.select(&:related_uri).count).to eq 1
@@ -148,7 +157,7 @@ describe "User filters implementation", :constraint => 'slow' do
148
157
  filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com"]]
149
158
  @project.add_data_permissions(filters)
150
159
  perms = @project.data_permissions
151
- pretty = perms.pmap {|f| [f.related.login, f.pretty_expression]}
160
+ pretty = perms.pmap { |f| [f.related.login, f.pretty_expression] }
152
161
  expect(perms.first.related).to eq @client.user
153
162
  expect(pretty).to eq [[ConnectionHelper::DEFAULT_USERNAME, "[Dev] IN ([tomas@gooddata.com])"]]
154
163
  end
@@ -161,7 +170,7 @@ describe "User filters implementation", :constraint => 'slow' do
161
170
  [user_with_already_set_up_filter.login, @label.uri, "tomas@gooddata.com"]
162
171
  ]
163
172
  @project.add_data_permissions(filters)
164
- expect(@project.data_permissions.map {|f| [f.related.login, f.pretty_expression] })
173
+ expect(@project.data_permissions.map { |f| [f.related.login, f.pretty_expression] })
165
174
  .to eq [[ConnectionHelper::DEFAULT_USERNAME, "[Dev] IN ([tomas@gooddata.com])"]]
166
175
 
167
176
  # Now let's add user filter to a different user. If we do not explicitely state that
@@ -172,7 +181,7 @@ describe "User filters implementation", :constraint => 'slow' do
172
181
  [another_user.login, @label.uri, "tomas@gooddata.com"]
173
182
  ]
174
183
  @project.add_data_permissions(new_filters)
175
- expect(@project.data_permissions.map {|f| [f.related.login, f.pretty_expression] })
184
+ expect(@project.data_permissions.map { |f| [f.related.login, f.pretty_expression] })
176
185
  .to eq [[another_user.login, "[Dev] IN ([tomas@gooddata.com])"]]
177
186
  end
178
187
 
@@ -194,7 +203,7 @@ describe "User filters implementation", :constraint => 'slow' do
194
203
  [user_with_already_set_up_filter.login, @label.uri, "tomas@gooddata.com"]
195
204
  ]
196
205
  @project.add_data_permissions(filters)
197
- expect(@project.data_permissions.map {|f| [f.related.login, f.pretty_expression] })
206
+ expect(@project.data_permissions.map { |f| [f.related.login, f.pretty_expression] })
198
207
  .to eq [[ConnectionHelper::DEFAULT_USERNAME, "[Dev] IN ([tomas@gooddata.com])"]]
199
208
 
200
209
  # Now let's add user filter to a different user. If we do not explicitely state that
@@ -205,11 +214,11 @@ describe "User filters implementation", :constraint => 'slow' do
205
214
  [another_user.login, @label.uri, "tomas@gooddata.com"]
206
215
  ]
207
216
  @project.add_data_permissions(new_filters, do_not_touch_filters_that_are_not_mentioned: true)
208
- expect(@project.data_permissions.map {|f| [f.related.login, f.pretty_expression] })
217
+ expect(@project.data_permissions.map { |f| [f.related.login, f.pretty_expression] })
209
218
  .to include([ConnectionHelper::DEFAULT_USERNAME, "[Dev] IN ([tomas@gooddata.com])"], [another_user.login, "[Dev] IN ([tomas@gooddata.com])"])
210
219
  end
211
220
 
212
- it "should be able to update the filter value" do
221
+ it "should be able to update the filter value", broken: true do
213
222
  pending 'FIXME: We cannot swap filters yet'
214
223
 
215
224
  filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com", "jirka@gooddata.com"]]
@@ -226,7 +235,7 @@ describe "User filters implementation", :constraint => 'slow' do
226
235
  ['nonexistent_user@gooddata.com', @label.uri, "tomas@gooddata.com"],
227
236
  [ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com"]
228
237
  ]
229
- results = @project.add_data_permissions(filters)
238
+ @project.add_data_permissions(filters)
230
239
 
231
240
  # now let's do a correct run
232
241
  filters = [
@@ -234,17 +243,16 @@ describe "User filters implementation", :constraint => 'slow' do
234
243
  ]
235
244
  results = @project.add_data_permissions(filters)
236
245
  expect(results[:results].all? { |r| r[:status] == :successful }).to be_truthy
237
- expect(results[:results].select {|r| r[:type] == :create }.count).to eq 1
246
+ expect(results[:results].select { |r| r[:type] == :create }.count).to eq 0
238
247
  expect(@project.data_permissions.count).to eq 1
239
248
  end
240
249
 
241
250
  it "should create a mandatory user filter with double filters" do
242
-
243
251
  repo_label = @project.labels('some_attr_label_id')
244
252
  metric = @project.create_metric("SELECT SUM(#\"Lines Changed\")")
245
253
 
246
254
  # we want to compute stuff on different user than we are setting it on
247
- u = @domain.users.find { |u| u.login != ConnectionHelper::DEFAULT_USERNAME }
255
+ u = @domain.users.find { |user| user.login != ConnectionHelper::DEFAULT_USERNAME }
248
256
  password = 'abcd1234'
249
257
  u.json['accountSetting']['password'] = password
250
258
  @domain.update_user(u)
@@ -260,10 +268,11 @@ describe "User filters implementation", :constraint => 'slow' do
260
268
  # lets restrict tomas to goodot only
261
269
  filters = [[u.login, @label.uri, 'tomas@gooddata.com'],
262
270
  [u.login, repo_label.uri, 'goodot']]
263
- results = @project.add_data_permissions(filters)
264
- expect(@project.data_permissions.pmap {|f| [f.related.login, f.pretty_expression]}).to eq [
271
+ @project.add_data_permissions(filters)
272
+ expect(@project.data_permissions.pmap { |f| [f.related.login, f.pretty_expression] }).to eq [
265
273
  [u.login, "[Dev] IN ([tomas@gooddata.com])"],
266
- [u.login, "[Repository Name] IN ([goodot])"]]
274
+ [u.login, "[Repository Name] IN ([goodot])"]
275
+ ]
267
276
 
268
277
  r = computation_project.compute_report(left: [metric, 'some_attr_label_id'], top: [@label])
269
278
  expect(r.column(2)).to eq ["tomas@gooddata.com", 1]
@@ -271,18 +280,19 @@ describe "User filters implementation", :constraint => 'slow' do
271
280
  # Now lets change repo to bam
272
281
  filters = [[u.login, @label.uri, 'tomas@gooddata.com'],
273
282
  [u.login, repo_label.uri, 'bam']]
274
- results = @project.add_data_permissions(filters)
283
+ @project.add_data_permissions(filters)
275
284
 
276
- expect(@project.data_permissions.pmap {|f| [f.related.login, f.pretty_expression]}).to eq [
285
+ expect(@project.data_permissions.pmap { |f| [f.related.login, f.pretty_expression] }).to eq [
277
286
  [u.login, "[Dev] IN ([tomas@gooddata.com])"],
278
- [u.login, "[Repository Name] IN ([bam])"]]
287
+ [u.login, "[Repository Name] IN ([bam])"]
288
+ ]
279
289
 
280
290
  r = computation_project.compute_report(left: [metric, 'some_attr_label_id'], top: [@label])
281
291
  expect(r.column(2)).to eq ["tomas@gooddata.com", 6]
282
292
 
283
293
  # let's remove the repo restriction
284
294
  filters = [[u.login, @label.uri, 'tomas@gooddata.com']]
285
- results = @project.add_data_permissions(filters)
295
+ @project.add_data_permissions(filters)
286
296
 
287
297
  r = computation_project.compute_report(left: [metric, 'some_attr_label_id'], top: [@label])
288
298
  expect(r.column(2)).to eq ["tomas@gooddata.com", 6, 1]