gooddata 0.6.49 → 0.6.50

Sign up to get free protection for your applications and to get access to all the features.
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
 
@@ -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::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)
@@ -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 &:delete
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-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
 
@@ -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.should == 0
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-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
 
10
10
  describe GoodData::Project, :constraint => 'slow' do
11
11
  before(:all) do
12
- @client = ConnectionHelper::create_default_connection
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 |x|
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 |x|
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| r[:type] == :successful }.map { |i| GoodData::Helpers.last_uri_part(i[:user]) }
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 { |x| ProjectHelper.create_random_user(@client) }
77
+ users = (1..2).to_a.map { ProjectHelper.create_random_user(@client) }
69
78
  @domain.create_users(users)
70
- result = @project.import_users(users, domain: @domain, whitelists: [/gem_tester@gooddata.com/])
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 3
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: [/gem_tester@gooddata.com/])
80
- @project.import_users(users, domain: @domain, whitelists: [/gem_tester@gooddata.com/])
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 3
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: [/gem_tester@gooddata.com/])
91
- expect(@project.members.count).to eq 2
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?(users - [bill]).any?).to be_falsey
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: [/gem_tester@gooddata.com/])
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 3
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 { |x| ProjectHelper.create_random_user(@client).to_hash }
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: [/gem_tester@gooddata.com/])
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: [/gem_tester@gooddata.com/])
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 { |x| ProjectHelper.create_random_user(@client).to_hash } + [uh]
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: [/gem_tester@gooddata.com/])
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: [/gem_tester@gooddata.com/])
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 { |x| ProjectHelper.create_random_user(@client).to_hash }
213
- group_names = ['group_1', 'group_2']
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 { |u| u[:user_group] = groups.take(rand(2) + 1).map(&:name); u}
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: [/gem_tester@gooddata.com/])
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
- @project.user_groups(g).member?(@project.member(u).uri) rescue false
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 { |u| u[:user_group] = ['group_1']; u}
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, /gem_tester@gooddata.com/])
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
- @project.user_groups(g).member?(@project.member(u).uri) rescue false
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-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
 
@@ -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{ download_block.call }.to raise_error(ArgumentError)
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-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
 
@@ -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
- }.to raise_error 'Process ID has to be provided'
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
- }.to raise_error 'Executable has to be provided'
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
- }.to raise_error 'Trigger schedule has to be provided'
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
- }.to raise_error 'A timezone has to be provided'
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
- }.to raise_error 'Schedule type has to be provided'
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('./spec/data/gooddata_version_process/gooddata_version.zip',
229
- type: 'RUBY',
230
- name: 'Test ETL zipped file GoodData Process')
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(@test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param.merge({hidden_params: {
606
- "a" => {
607
- "b" => "c"
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