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
 
@@ -8,7 +8,7 @@ require 'gooddata'
8
8
 
9
9
  describe "Full project implementation", :constraint => 'slow' do
10
10
  before(:all) do
11
- @client = ConnectionHelper::create_default_connection
11
+ @client = ConnectionHelper.create_default_connection
12
12
  @blueprint = GoodData::Model::ProjectBlueprint.build("my_bp") do |p|
13
13
  p.add_dataset("dataset.repos") do |d|
14
14
  d.add_anchor("attr.repository")
@@ -32,10 +32,11 @@ describe "Full project implementation", :constraint => 'slow' do
32
32
  ["label.repository.name", "label.attribute1.name", "some_numbers"],
33
33
  [1, "tomas@gooddata.com", 10],
34
34
  [2, "petr@gooddata.com", 20],
35
- [3, "jirka@gooddata.com", 30]]
35
+ [3, "jirka@gooddata.com", 30]
36
+ ]
36
37
  @project.upload(devs_data, @blueprint, 'dataset.repos')
37
- vals = @project.labels('label.repository.name').values.to_a.map {|l| l[:value]}
38
- expect(vals).to eq ["1", "2", "3"]
38
+ vals = @project.labels('label.repository.name').values.to_a.map { |label| label[:value] }
39
+ expect(vals).to eq %w(1 2 3)
39
40
  end
40
41
 
41
42
  it 'should upload the data when you deprecate attribute with remote blueprint' do
@@ -50,9 +51,10 @@ describe "Full project implementation", :constraint => 'slow' do
50
51
  [1, "tomas@gooddata.com", 10],
51
52
  [2, "petr@gooddata.com", 20],
52
53
  [3, "jirka@gooddata.com", 30],
53
- [4, "jindrich@gooddata.com", 40]]
54
+ [4, "jindrich@gooddata.com", 40]
55
+ ]
54
56
  @project.upload(devs_data, @project.blueprint, 'dataset.repos')
55
- vals = @project.labels('label.repository.name').values.to_a.map {|l| l[:value]}
56
- expect(vals).to eq ["1", "2", "3", "4"]
57
+ vals = @project.labels('label.repository.name').values.to_a.map { |label| label[:value] }
58
+ expect(vals).to eq %w(1 2 3 4)
57
59
  end
58
- end
60
+ 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
 
@@ -27,7 +27,7 @@ describe "Full process and schedule exercise", :constraint => 'slow' do
27
27
  }
28
28
 
29
29
  before(:all) do
30
- @client = ConnectionHelper::create_default_connection
30
+ @client = ConnectionHelper.create_default_connection
31
31
  @project = @client.create_project(title: 'Project for schedule testing', auth_token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
32
32
  @process = @project.deploy_process('./spec/data/ruby_process',
33
33
  type: 'RUBY',
@@ -36,7 +36,6 @@ describe "Full process and schedule exercise", :constraint => 'slow' do
36
36
  @process_cc = @project.deploy_process('./spec/data/cc',
37
37
  type: 'graph',
38
38
  name: 'Test ETL Process (CC)')
39
-
40
39
  end
41
40
 
42
41
  after(:all) do
@@ -44,7 +43,8 @@ describe "Full process and schedule exercise", :constraint => 'slow' do
44
43
  ProcessHelper.remove_old_processes(@project)
45
44
 
46
45
  # @process.delete if @process
47
- # @project.delete if @project
46
+ @project.delete if @project
47
+ GoodData::ChannelConfiguration.all.map(&:delete)
48
48
 
49
49
  @client.disconnect
50
50
  end
@@ -63,7 +63,6 @@ describe "Full process and schedule exercise", :constraint => 'slow' do
63
63
  end
64
64
 
65
65
  it "should be able to grab executables" do
66
-
67
66
  expect(@process.executables).to eq ['process.rb']
68
67
  end
69
68
 
@@ -221,7 +220,7 @@ describe "Full process and schedule exercise", :constraint => 'slow' do
221
220
  schedule = process.create_schedule('0 15 27 7 *', process.executables.first, hidden_params: COMPLEX_PARAMS)
222
221
  result = schedule.execute
223
222
  # expect(result.status).to eq :ok
224
- log = result.log
223
+ result.log
225
224
  expect(process.schedules.count).to eq 1
226
225
  ensure
227
226
  schedule && schedule.delete
@@ -258,9 +257,11 @@ describe "Full process and schedule exercise", :constraint => 'slow' do
258
257
 
259
258
  it "should be able to redeploy directly" do
260
259
  begin
261
- process1 = @project.deploy_process('./spec/data/hello_world_process/hello_world.zip',
262
- type: 'RUBY',
263
- name: 'Test ETL zipped file Process')
260
+ process1 = @project.deploy_process(
261
+ './spec/data/hello_world_process/hello_world.zip',
262
+ type: 'RUBY',
263
+ name: 'Test ETL zipped file Process'
264
+ )
264
265
 
265
266
  process2 = process1.deploy('./spec/data/ruby_process/process.rb')
266
267
  expect(process1.executables).not_to eq process2.executables
@@ -278,16 +279,15 @@ describe "Full process and schedule exercise", :constraint => 'slow' do
278
279
  end
279
280
  end
280
281
 
281
-
282
282
  it 'should be able to clone with etl' do
283
283
  begin
284
284
  # Deploy two schedules
285
285
  process = @project.processes.first
286
286
  schedule_first = process.create_schedule('0 15 27 7 *', process.executables.first)
287
287
  schedule_second = process.create_schedule('0 15 27 8 *', process.executables.first)
288
- cloned_project = GoodData::Project.clone_with_etl(@project)
289
- a = @project.processes.flat_map {|p| p.schedules.map {|s| [p.name, s.name]}}
290
- b = cloned_project.processes.flat_map {|p| p.schedules.map {|s| [p.name, s.name]}}
288
+ cloned_project = GoodData::Project.clone_with_etl(@project, auth_token: ConnectionHelper::GD_PROJECT_TOKEN)
289
+ a = @project.processes.flat_map { |p| p.schedules.map { |s| [p.name, s.name] } }
290
+ b = cloned_project.processes.flat_map { |p| p.schedules.map { |s| [p.name, s.name] } }
291
291
  expect(a).to eq b
292
292
  ensure
293
293
  cloned_project && cloned_project.delete
@@ -295,4 +295,73 @@ describe "Full process and schedule exercise", :constraint => 'slow' do
295
295
  schedule_second && schedule_second.delete
296
296
  end
297
297
  end
298
+
299
+ it 'should have no notification when creating a new process' do
300
+ begin
301
+ process = @project.deploy_process('./spec/data/ruby_params_process', type: 'RUBY', name: 'Ruby params process')
302
+ expect(process.notification_rules).to eq []
303
+ ensure
304
+ process && process.delete
305
+ end
306
+ end
307
+
308
+ it 'should be able to add a notification rule' do
309
+ begin
310
+ process = @project.deploy_process('./spec/data/ruby_params_process', type: 'RUBY', name: 'Ruby params process')
311
+ old_notification_rules = process.notification_rules
312
+ notification_rule = process.create_notification_rule(email: ConnectionHelper::DEFAULT_USERNAME, events: GoodData::Subscription::PROCESS_SUCCESS_EVENT)
313
+ expect(notification_rule.class).to be GoodData::NotificationRule
314
+ expect(old_notification_rules).not_to include(notification_rule)
315
+ new_notification_rules = process.notification_rules
316
+ expect(new_notification_rules).to include(notification_rule)
317
+ expect(old_notification_rules.length + 1).to eq new_notification_rules.length
318
+ ensure
319
+ notification_rule && notification_rule.delete
320
+ process && process.delete
321
+ end
322
+ end
323
+
324
+ it 'should be able to remove a notification rule' do
325
+ begin
326
+ process = @project.deploy_process('./spec/data/ruby_params_process', type: 'RUBY', name: 'Ruby params process')
327
+ old_notification_rules = process.notification_rules
328
+ notification_rule = process.create_notification_rule(email: ConnectionHelper::DEFAULT_USERNAME, events: GoodData::Subscription::PROCESS_SUCCESS_EVENT)
329
+ notification_rule.delete
330
+ new_notification_rules = process.notification_rules
331
+ expect(new_notification_rules).to eq old_notification_rules
332
+ ensure
333
+ process && process.delete
334
+ end
335
+ end
336
+
337
+ it 'should be able to edit a notification rule' do
338
+ begin
339
+ process = @project.deploy_process('./spec/data/ruby_params_process', type: 'RUBY', name: 'Ruby params process')
340
+ notification_rule = process.create_notification_rule(email: ConnectionHelper::DEFAULT_USERNAME, events: GoodData::Subscription::PROCESS_SUCCESS_EVENT)
341
+ expect(notification_rule.email).to eq ConnectionHelper::DEFAULT_USERNAME
342
+ expect(notification_rule.subject).to eq 'Email subject'
343
+ expect(notification_rule.body).to eq 'Email body'
344
+ expect(notification_rule.events).to eq [GoodData::Subscription::PROCESS_SUCCESS_EVENT]
345
+
346
+ notification_rule = GoodData::NotificationRule[notification_rule.notification_rule_id, project: @project, process: process, client: @client]
347
+ notification_rule.events = [GoodData::Subscription::PROCESS_SUCCESS_EVENT, GoodData::Subscription::PROCESS_STARTED_EVENT]
348
+ notification_rule.save
349
+
350
+ expect(process.notification_rules.first.events).to eq [GoodData::Subscription::PROCESS_SUCCESS_EVENT, GoodData::Subscription::PROCESS_STARTED_EVENT]
351
+ ensure
352
+ notification_rule && notification_rule.delete
353
+ process && process.delete
354
+ end
355
+ end
356
+
357
+ it 'should be able to get all notification rules' do
358
+ begin
359
+ process = @project.deploy_process('./spec/data/ruby_params_process', type: 'RUBY', name: 'Ruby params process')
360
+ notification_rule = process.create_notification_rule(email: ConnectionHelper::DEFAULT_USERNAME, events: GoodData::Subscription::PROCESS_SUCCESS_EVENT)
361
+ expect(process.notification_rules).to eq [notification_rule]
362
+ ensure
363
+ notification_rule && notification_rule.delete
364
+ process && process.delete
365
+ end
366
+ end
298
367
  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
 
@@ -10,7 +10,7 @@ describe "Full project 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
12
  @invalid_spec = JSON.parse(File.read("./spec/data/blueprints/invalid_blueprint.json"), :symbolize_names => true)
13
- @client = ConnectionHelper::create_default_connection
13
+ @client = ConnectionHelper.create_default_connection
14
14
  @blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
15
15
  @invalid_blueprint = GoodData::Model::ProjectBlueprint.new(@invalid_spec)
16
16
 
@@ -24,9 +24,9 @@ describe "Full project implementation", :constraint => 'slow' do
24
24
  end
25
25
 
26
26
  it "should not build an invalid model" do
27
- expect {
27
+ expect do
28
28
  @client.create_project_from_blueprint(@invalid_spec, auth_token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
29
- }.to raise_error(GoodData::ValidationError)
29
+ end.to raise_error(GoodData::ValidationError)
30
30
  end
31
31
 
32
32
  it "should do nothing if the project is updated with the same blueprint" do
@@ -49,7 +49,7 @@ describe "Full project implementation", :constraint => 'slow' do
49
49
  expect(results).to eq []
50
50
 
51
51
  # When we change the model using the original blueprint. Basically change the title back.
52
- results = @project.update_from_blueprint(@spec)
52
+ @project.update_from_blueprint(@spec)
53
53
  # It should offer no changes using the original blueprint
54
54
  results = GoodData::Model::ProjectCreator.migrate_datasets(@spec, project: @project, client: @client, dry_run: true)
55
55
  expect(results).to eq []
@@ -95,32 +95,34 @@ describe "Full project implementation", :constraint => 'slow' do
95
95
  end
96
96
 
97
97
  it "should load the data" do
98
- GoodData.with_project(@project) do |p|
98
+ GoodData.with_project(@project) do
99
99
  # blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
100
100
  commits_data = [
101
- ["lines_changed","committed_on","dev_id","repo_id"],
102
- [1,"01/01/2014",1,1],
103
- [3,"01/02/2014",2,2],
104
- [5,"05/02/2014",3,1]]
101
+ %w(lines_changed committed_on dev_id repo_id),
102
+ [1, "01/01/2014", 1, 1],
103
+ [3, "01/02/2014", 2, 2],
104
+ [5, "05/02/2014", 3, 1]
105
+ ]
105
106
  @project.upload(commits_data, @blueprint, 'dataset.commits')
106
107
 
107
108
  devs_data = [
108
- ["dev_id", "email"],
109
+ %w(dev_id email),
109
110
  [1, "tomas@gooddata.com"],
110
111
  [2, "petr@gooddata.com"],
111
- [3, "jirka@gooddata.com"]]
112
+ [3, "jirka@gooddata.com"]
113
+ ]
112
114
  @project.upload(devs_data, @blueprint, 'dataset.devs')
113
115
  end
114
116
  end
115
117
 
116
118
  it "it silently ignores extra columns" do
117
- GoodData.with_project(@project) do |p|
119
+ GoodData.with_project(@project) do
118
120
  blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
119
121
  commits_data = [
120
- ["lines_changed","committed_on","dev_id","repo_id", "extra_column"],
121
- [1,"01/01/2014",1,1,"something"],
122
- [3,"01/02/2014",2,2,"something"],
123
- [5,"05/02/2014",3,1,"something else"]
122
+ %w(lines_changed committed_on dev_id repo_id extra_column),
123
+ [1, "01/01/2014", 1, 1, "something"],
124
+ [3, "01/02/2014", 2, 2, "something"],
125
+ [5, "05/02/2014", 3, 1, "something else"]
124
126
  ]
125
127
  @project.upload(commits_data, blueprint, 'dataset.commits')
126
128
  end
@@ -128,40 +130,46 @@ describe "Full project implementation", :constraint => 'slow' do
128
130
 
129
131
  context "it should give you a reasonable error message" do
130
132
  it "if you omit a column" do
131
- GoodData.with_project(@project) do |p|
133
+ GoodData.with_project(@project) do
132
134
  blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
133
135
  commits_data = [
134
- ["lines_changed","committed_on","dev_id"],
135
- [1,"01/01/2014",1],
136
- [3,"01/02/2014",2],
137
- [5,"05/02/2014",3]
136
+ %w(lines_changed committed_on dev_id),
137
+ [1, "01/01/2014", 1],
138
+ [3, "01/02/2014", 2],
139
+ [5, "05/02/2014", 3]
138
140
  ]
139
- expect {@project.upload(commits_data, blueprint, 'dataset.commits')}.to raise_error(/repo_id/)
141
+ expect do
142
+ @project.upload(commits_data, blueprint, 'dataset.commits')
143
+ end.to raise_error(/repo_id/)
140
144
  end
141
145
  end
142
146
  it "if you give it a malformed CSV" do
143
- GoodData.with_project(@project) do |p|
147
+ GoodData.with_project(@project) do
144
148
  blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
145
149
  # 4 cols in header but not in the data
146
150
  commits_data = [
147
- ["lines_changed","committed_on","dev_id","repo_id"],
148
- [1,"01/01/2014",1],
149
- [3,"01/02/2014",2],
150
- [5,"05/02/2014",3]
151
+ %w(lines_changed committed_on dev_id repo_id),
152
+ [1, "01/01/2014", 1],
153
+ [3, "01/02/2014", 2],
154
+ [5, "05/02/2014", 3]
151
155
  ]
152
- expect {@project.upload(commits_data, blueprint, 'dataset.commits')}.to raise_error(/Number of columns/)
156
+ expect do
157
+ @project.upload(commits_data, blueprint, 'dataset.commits')
158
+ end.to raise_error(/Number of columns/)
153
159
  end
154
160
  end
155
161
  it "if you give it wrong date format" do
156
- GoodData.with_project(@project) do |p|
162
+ GoodData.with_project(@project) do
157
163
  blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
158
164
  commits_data = [
159
- ["lines_changed","committed_on","dev_id","repo_id"],
160
- [1,"01/01/2014",1,1],
161
- [3,"45/50/2014",2,2],
162
- [5,"05/02/2014",3,1]
165
+ %w(lines_changed committed_on dev_id repo_id),
166
+ [1, "01/01/2014", 1, 1],
167
+ [3, "45/50/2014", 2, 2],
168
+ [5, "05/02/2014", 3, 1]
163
169
  ]
164
- expect {@project.upload(commits_data, blueprint, 'dataset.commits')}.to raise_error(%r{45/50/2014})
170
+ expect do
171
+ @project.upload(commits_data, blueprint, 'dataset.commits')
172
+ end.to raise_error(%r{45/50/2014})
165
173
  end
166
174
  end
167
175
  end
@@ -247,9 +255,9 @@ describe "Full project implementation", :constraint => 'slow' do
247
255
  rd = r.latest_report_definition
248
256
  rd.content['chart'] = { 'styles' => { 'global' => { 'colorMapping' => 1 } } }
249
257
 
250
- expect(GoodData::Helpers.get_path(rd.content, %w(chart styles global))).to eq ({ 'colorMapping' => 1 })
258
+ expect(GoodData::Helpers.get_path(rd.content, %w(chart styles global))).to eq('colorMapping' => 1)
251
259
  rd.reset_color_mapping!
252
- expect(GoodData::Helpers.get_path(rd.content, %w(chart styles global))).to eq ({ 'colorMapping' => [] })
260
+ expect(GoodData::Helpers.get_path(rd.content, %w(chart styles global))).to eq('colorMapping' => [])
253
261
  r.delete
254
262
  res = m.used_by
255
263
  res.each do |dependency|
@@ -393,12 +401,13 @@ describe "Full project implementation", :constraint => 'slow' do
393
401
 
394
402
  it "should load the data" do
395
403
  devs_data = [
396
- ["dev_id", "email"],
397
- [4, "josh@gooddata.com"]]
404
+ %w(dev_id email),
405
+ [4, "josh@gooddata.com"]
406
+ ]
398
407
  @project.upload(devs_data, @blueprint, 'dataset.devs', mode: 'INCREMENTAL')
399
408
  end
400
409
 
401
- it "should have more users" do
410
+ it "should have more users" do
402
411
  attribute = @project.attributes('attr.devs.dev_id')
403
412
  expect(attribute.attribute?).to be true
404
413
  expect(attribute.create_metric.execute).to eq 4
@@ -469,14 +478,14 @@ describe "Full project implementation", :constraint => 'slow' do
469
478
 
470
479
  it "should be able to give you values for" do
471
480
  attribute = @project.attributes('attr.devs.dev_id')
472
- values = attribute.labels.find { |l| l.identifier == 'label.devs.dev_id.email'}.values.to_a
481
+ values = attribute.labels.find { |l| l.identifier == 'label.devs.dev_id.email' }.values.to_a
473
482
  id = values.find { |v| v[:value] == 'tomas@gooddata.com' }[:uri][-1].to_i
474
483
  expect(attribute.values_for(id)).to eq ['tomas@gooddata.com', '1']
475
484
  end
476
485
 
477
486
  it "should be able to find specific element and give you the primary label value" do
478
487
  attribute = @project.attributes('attr.devs.dev_id')
479
- values = attribute.labels.find { |l| l.identifier == 'label.devs.dev_id.email'}.values.to_a
488
+ values = attribute.labels.find { |l| l.identifier == 'label.devs.dev_id.email' }.values.to_a
480
489
  uri = values.find { |v| v[:value] == 'tomas@gooddata.com' }[:uri]
481
490
  expect(@project.find_attribute_element_value(uri)).to eq 'tomas@gooddata.com'
482
491
  end
@@ -527,12 +536,12 @@ describe "Full project implementation", :constraint => 'slow' do
527
536
  expect(cloned_metric).to be_nil
528
537
 
529
538
  result = @project.transfer_objects(m, project: [cloned_project], batch_size: 1)
530
- expect(result).to eq [{project: cloned_project, result: true}]
539
+ expect(result).to eq [{ project: cloned_project, result: true }]
531
540
 
532
541
  # should work with pids
533
542
  result = @project.transfer_objects(m, project: [cloned_project.pid], batch_size: 1)
534
543
  expect(result.first[:result]).to be_truthy
535
- ensure
544
+ ensure
536
545
  cloned_project.delete
537
546
  end
538
547
  end
@@ -560,7 +569,7 @@ describe "Full project implementation", :constraint => 'slow' do
560
569
  r.save
561
570
  def_uris = r.definition_uris
562
571
  r.delete
563
- expect { def_uris.each {|uri| @client.get(uri)} }.to raise_error(RestClient::ResourceNotFound)
572
+ expect { def_uris.each { |uri| @client.get(uri) } }.to raise_error(RestClient::ResourceNotFound)
564
573
  end
565
574
 
566
575
  it 'should be possible to delete data from a dataset' do
@@ -569,4 +578,17 @@ describe "Full project implementation", :constraint => 'slow' do
569
578
  dataset.delete_data
570
579
  expect(dataset.attributes.first.create_metric.execute).to be_nil
571
580
  end
581
+
582
+ it 'shoule be able to create project from blueprint support attribute sort order' do
583
+ begin
584
+ attr_sort_order_spec = JSON.parse(File.read("./spec/data/blueprints/attribute_sort_order_blueprint.json"), :symbolize_names => true)
585
+ attr_sort_order_blueprint = GoodData::Model::ProjectBlueprint.new(attr_sort_order_spec)
586
+
587
+ project = @client.create_project_from_blueprint(attr_sort_order_blueprint, token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
588
+ attribute = project.blueprint.datasets('dataset.id').attributes('attr.id.name')
589
+ expect(attribute.order_by).to eq 'label.id.name.name_label_2 - DESC'
590
+ ensure
591
+ project && project.delete
592
+ end
593
+ end
572
594
  end
@@ -0,0 +1,41 @@
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::LCM, :constraint => 'slow' do
10
+ before(:all) do
11
+ @client = ConnectionHelper.create_default_connection
12
+ end
13
+
14
+ after(:all) do
15
+ @client && @client.disconnect
16
+ end
17
+
18
+ it 'should be able to transfer attribute drill paths' do
19
+ begin
20
+ spec = JSON.parse(File.read("./spec/data/blueprints/attribute_sort_order_blueprint.json"), :symbolize_names => true)
21
+ blueprint = GoodData::Model::ProjectBlueprint.new(spec)
22
+
23
+ source_project = @client.create_project_from_blueprint(blueprint, token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
24
+ target_project = @client.create_project_from_blueprint(source_project.blueprint, token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
25
+
26
+ name_attribute_source = source_project.attributes('attr.id.name')
27
+ id_attribute_source = source_project.attributes('attr.id.id')
28
+ name_attribute_source.drill_down(id_attribute_source)
29
+
30
+ GoodData::LCM.transfer_attribute_drillpaths(source_project, target_project)
31
+
32
+ name_attribute_target = target_project.attributes('attr.id.name')
33
+ id_attribute_target = target_project.attributes('attr.id.id')
34
+ name_attribute_target.drill_down(id_attribute_target)
35
+ expect(target_project.labels(name_attribute_target.content['drillDownStepAttributeDF']).attribute_uri).to eq id_attribute_target.meta['uri']
36
+ ensure
37
+ source_project && source_project.delete
38
+ target_project && target_project.delete
39
+ end
40
+ end
41
+ end