gooddata 0.6.49 → 0.6.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -4
  3. data/CLI.md +0 -4
  4. data/DEPENDENCIES.md +0 -8
  5. data/Dockerfile.jruby +19 -0
  6. data/Dockerfile.ruby +19 -0
  7. data/LICENSE +2 -2
  8. data/LICENSE.rb +1 -1
  9. data/Rakefile +1 -1
  10. data/gooddata.gemspec +29 -28
  11. data/lib/gooddata.rb +2 -1
  12. data/lib/gooddata/app/app.rb +1 -1
  13. data/lib/gooddata/bricks/base_downloader.rb +1 -1
  14. data/lib/gooddata/bricks/brick.rb +3 -4
  15. data/lib/gooddata/bricks/bricks.rb +3 -1
  16. data/lib/gooddata/bricks/middleware/aws_middleware.rb +6 -8
  17. data/lib/gooddata/bricks/middleware/base_middleware.rb +2 -1
  18. data/lib/gooddata/bricks/middleware/bench_middleware.rb +2 -1
  19. data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +3 -3
  20. data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +3 -2
  21. data/lib/gooddata/bricks/middleware/dwh_middleware.rb +28 -0
  22. data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +2 -2
  23. data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +2 -2
  24. data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +84 -21
  25. data/lib/gooddata/bricks/middleware/logger_middleware.rb +1 -1
  26. data/lib/gooddata/bricks/middleware/middleware.rb +1 -1
  27. data/lib/gooddata/bricks/middleware/params_inspect_middleware.rb +21 -0
  28. data/lib/gooddata/bricks/middleware/restforce_middleware.rb +26 -26
  29. data/lib/gooddata/bricks/middleware/stdout_middleware.rb +1 -1
  30. data/lib/gooddata/bricks/middleware/twitter_middleware.rb +1 -1
  31. data/lib/gooddata/bricks/middleware/undot_params_middleware.rb +1 -1
  32. data/lib/gooddata/bricks/pipeline.rb +6 -13
  33. data/lib/gooddata/bricks/utils.rb +3 -3
  34. data/lib/gooddata/cli/cli.rb +1 -1
  35. data/lib/gooddata/cli/commands/auth_cmd.rb +1 -1
  36. data/lib/gooddata/cli/commands/domain_cmd.rb +1 -1
  37. data/lib/gooddata/cli/commands/project_cmd.rb +1 -18
  38. data/lib/gooddata/cli/hooks.rb +1 -2
  39. data/lib/gooddata/cli/shared.rb +1 -1
  40. data/lib/gooddata/cli/terminal.rb +1 -1
  41. data/lib/gooddata/client.rb +1 -1
  42. data/lib/gooddata/commands/api.rb +1 -1
  43. data/lib/gooddata/commands/auth.rb +1 -1
  44. data/lib/gooddata/commands/base.rb +1 -1
  45. data/lib/gooddata/commands/commands.rb +1 -1
  46. data/lib/gooddata/commands/datasets.rb +1 -1
  47. data/lib/gooddata/commands/datawarehouse.rb +1 -1
  48. data/lib/gooddata/commands/domain.rb +1 -1
  49. data/lib/gooddata/commands/process.rb +1 -1
  50. data/lib/gooddata/commands/project.rb +2 -31
  51. data/lib/gooddata/commands/projects.rb +1 -1
  52. data/lib/gooddata/commands/role.rb +1 -1
  53. data/lib/gooddata/commands/runners.rb +1 -1
  54. data/lib/gooddata/commands/scaffold.rb +1 -1
  55. data/lib/gooddata/commands/user.rb +1 -1
  56. data/lib/gooddata/connection.rb +1 -1
  57. data/lib/gooddata/core/core.rb +1 -1
  58. data/lib/gooddata/core/logging.rb +1 -1
  59. data/lib/gooddata/core/nil_logger.rb +1 -1
  60. data/lib/gooddata/core/project.rb +1 -1
  61. data/lib/gooddata/core/rest.rb +1 -1
  62. data/lib/gooddata/core/user.rb +1 -1
  63. data/lib/gooddata/data/data.rb +1 -1
  64. data/lib/gooddata/data/guesser.rb +1 -1
  65. data/lib/gooddata/exceptions/attr_element_not_found.rb +1 -1
  66. data/lib/gooddata/exceptions/command_failed.rb +1 -1
  67. data/lib/gooddata/exceptions/exceptions.rb +1 -1
  68. data/lib/gooddata/exceptions/execution_limit_exceeded.rb +1 -1
  69. data/lib/gooddata/exceptions/export_clone.rb +4 -0
  70. data/lib/gooddata/exceptions/filter_maqlization.rb +1 -1
  71. data/lib/gooddata/exceptions/import_clone.rb +4 -0
  72. data/lib/gooddata/exceptions/malformed_user.rb +1 -1
  73. data/lib/gooddata/exceptions/maql_execution.rb +1 -1
  74. data/lib/gooddata/exceptions/no_project_error.rb +1 -1
  75. data/lib/gooddata/exceptions/object_migration.rb +1 -1
  76. data/lib/gooddata/exceptions/project_not_found.rb +1 -1
  77. data/lib/gooddata/exceptions/segment_not_empty.rb +1 -1
  78. data/lib/gooddata/exceptions/uncomputable_report.rb +1 -1
  79. data/lib/gooddata/exceptions/user_in_different_domain.rb +1 -1
  80. data/lib/gooddata/exceptions/validation_error.rb +1 -1
  81. data/lib/gooddata/extensions/big_decimal.rb +1 -1
  82. data/lib/gooddata/extensions/class.rb +11 -0
  83. data/lib/gooddata/extensions/enumerable.rb +1 -1
  84. data/lib/gooddata/extensions/extensions.rb +1 -1
  85. data/lib/gooddata/extensions/false.rb +9 -1
  86. data/lib/gooddata/extensions/hash.rb +12 -1
  87. data/lib/gooddata/extensions/integer.rb +5 -0
  88. data/lib/gooddata/extensions/nil.rb +5 -1
  89. data/lib/gooddata/extensions/numeric.rb +1 -1
  90. data/lib/gooddata/extensions/object.rb +5 -1
  91. data/lib/gooddata/extensions/symbol.rb +1 -1
  92. data/lib/gooddata/extensions/true.rb +9 -1
  93. data/lib/gooddata/extract.rb +1 -1
  94. data/lib/gooddata/goodzilla/goodzilla.rb +1 -1
  95. data/lib/gooddata/helpers/auth_helpers.rb +1 -1
  96. data/lib/gooddata/helpers/csv_helper.rb +1 -1
  97. data/lib/gooddata/helpers/data_helper.rb +19 -10
  98. data/lib/gooddata/helpers/erb_helper.rb +23 -0
  99. data/lib/gooddata/helpers/global_helpers.rb +5 -73
  100. data/lib/gooddata/helpers/global_helpers_params.rb +73 -7
  101. data/lib/gooddata/helpers/helpers.rb +1 -1
  102. data/lib/gooddata/lcm/actions/actions.rb +12 -0
  103. data/lib/gooddata/lcm/actions/associate_clients.rb +46 -0
  104. data/lib/gooddata/lcm/actions/base_action.rb +23 -0
  105. data/lib/gooddata/lcm/actions/collect_clients.rb +89 -0
  106. data/lib/gooddata/lcm/actions/collect_segment_clients.rb +103 -0
  107. data/lib/gooddata/lcm/actions/collect_segments.rb +59 -0
  108. data/lib/gooddata/lcm/actions/create_segment_masters.rb +167 -0
  109. data/lib/gooddata/lcm/actions/ensure_release_table.rb +56 -0
  110. data/lib/gooddata/lcm/actions/ensure_segments.rb +35 -0
  111. data/lib/gooddata/lcm/actions/ensure_technical_users_domain.rb +66 -0
  112. data/lib/gooddata/lcm/actions/ensure_technical_users_project.rb +68 -0
  113. data/lib/gooddata/lcm/actions/ensure_titles.rb +54 -0
  114. data/lib/gooddata/lcm/actions/hello_world.rb +44 -0
  115. data/lib/gooddata/lcm/actions/print_actions.rb +61 -0
  116. data/lib/gooddata/lcm/actions/print_modes.rb +72 -0
  117. data/lib/gooddata/lcm/actions/print_types.rb +55 -0
  118. data/lib/gooddata/lcm/actions/provision_clients.rb +80 -0
  119. data/lib/gooddata/lcm/actions/purge_clients.rb +78 -0
  120. data/lib/gooddata/lcm/actions/segments_filter.rb +50 -0
  121. data/lib/gooddata/lcm/actions/synchronize_attribute_drillpaths.rb +60 -0
  122. data/lib/gooddata/lcm/actions/synchronize_clients.rb +87 -0
  123. data/lib/gooddata/lcm/actions/synchronize_color_palette.rb +59 -0
  124. data/lib/gooddata/lcm/actions/synchronize_label_types.rb +61 -0
  125. data/lib/gooddata/lcm/actions/synchronize_ldm.rb +64 -0
  126. data/lib/gooddata/lcm/actions/synchronize_meta.rb +55 -0
  127. data/lib/gooddata/lcm/actions/synchronize_new_segments.rb +55 -0
  128. data/lib/gooddata/lcm/actions/synchronize_processes.rb +66 -0
  129. data/lib/gooddata/lcm/actions/synchronize_schedules.rb +81 -0
  130. data/lib/gooddata/lcm/actions/update_release_table.rb +80 -0
  131. data/lib/gooddata/lcm/data/create_lcm_release.sql.erb +5 -0
  132. data/lib/gooddata/lcm/data/insert_into_lcm_release.sql.erb +11 -0
  133. data/lib/gooddata/lcm/data/select_from_lcm_release.sql.erb +8 -0
  134. data/lib/gooddata/lcm/data/update_lcm_release.sql.erb +7 -0
  135. data/lib/gooddata/lcm/dsl/dsl.rb +50 -0
  136. data/lib/gooddata/lcm/dsl/params_dsl.rb +61 -0
  137. data/lib/gooddata/lcm/dsl/type_dsl.rb +61 -0
  138. data/lib/gooddata/lcm/helpers/check_helper.rb +37 -0
  139. data/lib/gooddata/lcm/helpers/helpers.rb +12 -0
  140. data/lib/gooddata/lcm/lcm.rb +161 -20
  141. data/lib/gooddata/lcm/lcm2.rb +260 -0
  142. data/lib/gooddata/lcm/types/base_type.rb +29 -0
  143. data/lib/gooddata/lcm/types/class/ads_client.rb +35 -0
  144. data/lib/gooddata/lcm/types/class/class.rb +21 -0
  145. data/lib/gooddata/lcm/types/class/gd_client.rb +35 -0
  146. data/lib/gooddata/lcm/types/class/types.rb +12 -0
  147. data/lib/gooddata/lcm/types/complex/complex.rb +33 -0
  148. data/lib/gooddata/lcm/types/complex/release_query.rb +35 -0
  149. data/lib/gooddata/lcm/types/complex/segment.rb +37 -0
  150. data/lib/gooddata/lcm/types/complex/synchronization_info.rb +32 -0
  151. data/lib/gooddata/lcm/types/complex/tokens.rb +31 -0
  152. data/lib/gooddata/lcm/types/complex/types.rb +12 -0
  153. data/lib/gooddata/lcm/types/complex/update_preference.rb +32 -0
  154. data/lib/gooddata/lcm/types/param.rb +16 -0
  155. data/lib/gooddata/lcm/types/scalar/bool.rb +22 -0
  156. data/lib/gooddata/lcm/types/scalar/hash.rb +22 -0
  157. data/lib/gooddata/lcm/types/scalar/integer.rb +22 -0
  158. data/lib/gooddata/lcm/types/scalar/object.rb +22 -0
  159. data/lib/gooddata/lcm/types/scalar/string.rb +22 -0
  160. data/lib/gooddata/lcm/types/scalar/types.rb +12 -0
  161. data/lib/gooddata/lcm/types/special/array.rb +35 -0
  162. data/lib/gooddata/lcm/types/special/enum.rb +17 -0
  163. data/lib/gooddata/lcm/types/special/types.rb +12 -0
  164. data/lib/gooddata/lcm/types/types.rb +12 -0
  165. data/lib/gooddata/mixins/author.rb +1 -1
  166. data/lib/gooddata/mixins/content_getter.rb +1 -1
  167. data/lib/gooddata/mixins/content_property_reader.rb +1 -1
  168. data/lib/gooddata/mixins/content_property_writer.rb +1 -1
  169. data/lib/gooddata/mixins/contributor.rb +1 -1
  170. data/lib/gooddata/mixins/data_getter.rb +1 -1
  171. data/lib/gooddata/mixins/data_property_reader.rb +1 -1
  172. data/lib/gooddata/mixins/data_property_writer.rb +1 -1
  173. data/lib/gooddata/mixins/inspector.rb +1 -1
  174. data/lib/gooddata/mixins/is_attribute.rb +1 -1
  175. data/lib/gooddata/mixins/is_dimension.rb +1 -1
  176. data/lib/gooddata/mixins/is_fact.rb +1 -1
  177. data/lib/gooddata/mixins/is_label.rb +1 -1
  178. data/lib/gooddata/mixins/links.rb +1 -1
  179. data/lib/gooddata/mixins/md_finders.rb +1 -1
  180. data/lib/gooddata/mixins/md_grantees.rb +1 -1
  181. data/lib/gooddata/mixins/md_id_to_uri.rb +9 -3
  182. data/lib/gooddata/mixins/md_json.rb +1 -1
  183. data/lib/gooddata/mixins/md_lock.rb +1 -1
  184. data/lib/gooddata/mixins/md_object_id.rb +1 -1
  185. data/lib/gooddata/mixins/md_object_indexer.rb +1 -1
  186. data/lib/gooddata/mixins/md_object_query.rb +1 -1
  187. data/lib/gooddata/mixins/md_relations.rb +1 -1
  188. data/lib/gooddata/mixins/meta_getter.rb +1 -1
  189. data/lib/gooddata/mixins/meta_property_reader.rb +1 -1
  190. data/lib/gooddata/mixins/meta_property_writer.rb +1 -1
  191. data/lib/gooddata/mixins/mixins.rb +1 -1
  192. data/lib/gooddata/mixins/not_attribute.rb +1 -1
  193. data/lib/gooddata/mixins/not_exportable.rb +1 -1
  194. data/lib/gooddata/mixins/not_fact.rb +1 -1
  195. data/lib/gooddata/mixins/not_group.rb +1 -1
  196. data/lib/gooddata/mixins/not_label.rb +1 -1
  197. data/lib/gooddata/mixins/not_metric.rb +1 -1
  198. data/lib/gooddata/mixins/obj_id.rb +1 -1
  199. data/lib/gooddata/mixins/rest_getters.rb +1 -1
  200. data/lib/gooddata/mixins/rest_resource.rb +1 -1
  201. data/lib/gooddata/mixins/root_key_getter.rb +1 -1
  202. data/lib/gooddata/mixins/root_key_setter.rb +1 -1
  203. data/lib/gooddata/mixins/timestamps.rb +1 -1
  204. data/lib/gooddata/models/ads_output_stage.rb +85 -0
  205. data/lib/gooddata/models/automated_data_distribution.rb +36 -0
  206. data/lib/gooddata/models/blueprint/anchor_field.rb +4 -3
  207. data/lib/gooddata/models/blueprint/attribute_field.rb +18 -2
  208. data/lib/gooddata/models/blueprint/blueprint.rb +1 -1
  209. data/lib/gooddata/models/blueprint/blueprint_field.rb +1 -1
  210. data/lib/gooddata/models/blueprint/dashboard_builder.rb +1 -1
  211. data/lib/gooddata/models/blueprint/dataset_blueprint.rb +6 -1
  212. data/lib/gooddata/models/blueprint/date_dimension.rb +1 -1
  213. data/lib/gooddata/models/blueprint/fact_field.rb +1 -1
  214. data/lib/gooddata/models/blueprint/label_field.rb +5 -1
  215. data/lib/gooddata/models/blueprint/project_blueprint.rb +1 -1
  216. data/lib/gooddata/models/blueprint/project_builder.rb +1 -1
  217. data/lib/gooddata/models/blueprint/reference_field.rb +1 -1
  218. data/lib/gooddata/models/blueprint/schema_blueprint.rb +1 -1
  219. data/lib/gooddata/models/blueprint/schema_builder.rb +1 -1
  220. data/lib/gooddata/models/blueprint/to_manifest.rb +7 -3
  221. data/lib/gooddata/models/blueprint/to_wire.rb +12 -1
  222. data/lib/gooddata/models/channel_configuration.rb +112 -0
  223. data/lib/gooddata/models/client.rb +42 -6
  224. data/lib/gooddata/models/client_synchronization_result.rb +1 -1
  225. data/lib/gooddata/models/client_synchronization_result_details.rb +1 -1
  226. data/lib/gooddata/models/datawarehouse.rb +25 -3
  227. data/lib/gooddata/models/domain.rb +29 -4
  228. data/lib/gooddata/models/execution.rb +1 -1
  229. data/lib/gooddata/models/execution_detail.rb +1 -1
  230. data/lib/gooddata/models/from_wire.rb +8 -1
  231. data/lib/gooddata/models/invitation.rb +1 -1
  232. data/lib/gooddata/models/links.rb +1 -1
  233. data/lib/gooddata/models/membership.rb +1 -1
  234. data/lib/gooddata/models/metadata.rb +3 -2
  235. data/lib/gooddata/models/metadata/attribute.rb +7 -1
  236. data/lib/gooddata/models/metadata/dashboard.rb +3 -3
  237. data/lib/gooddata/models/metadata/dashboard/dashboard_item.rb +1 -1
  238. data/lib/gooddata/models/metadata/dashboard/filter_apply_item.rb +2 -2
  239. data/lib/gooddata/models/metadata/dashboard/filter_item.rb +2 -2
  240. data/lib/gooddata/models/metadata/dashboard/geo_chart_item.rb +2 -2
  241. data/lib/gooddata/models/metadata/dashboard/headline_item.rb +2 -2
  242. data/lib/gooddata/models/metadata/dashboard/iframe_item.rb +2 -2
  243. data/lib/gooddata/models/metadata/dashboard/report_item.rb +2 -2
  244. data/lib/gooddata/models/metadata/dashboard/text_item.rb +2 -2
  245. data/lib/gooddata/models/metadata/dashboard_tab.rb +2 -2
  246. data/lib/gooddata/models/metadata/dataset.rb +1 -1
  247. data/lib/gooddata/models/metadata/dimension.rb +1 -1
  248. data/lib/gooddata/models/metadata/fact.rb +1 -1
  249. data/lib/gooddata/models/metadata/folder.rb +1 -1
  250. data/lib/gooddata/models/metadata/label.rb +1 -1
  251. data/lib/gooddata/models/metadata/metadata.rb +1 -1
  252. data/lib/gooddata/models/metadata/metric.rb +1 -1
  253. data/lib/gooddata/models/metadata/report.rb +1 -1
  254. data/lib/gooddata/models/metadata/report_definition.rb +1 -1
  255. data/lib/gooddata/models/metadata/scheduled_mail.rb +2 -2
  256. data/lib/gooddata/models/metadata/scheduled_mail/dashboard_attachment.rb +1 -1
  257. data/lib/gooddata/models/metadata/scheduled_mail/report_attachment.rb +1 -1
  258. data/lib/gooddata/models/metadata/variable.rb +1 -1
  259. data/lib/gooddata/models/model.rb +1 -1
  260. data/lib/gooddata/models/models.rb +1 -1
  261. data/lib/gooddata/models/module_constants.rb +1 -1
  262. data/lib/gooddata/models/notification_rule.rb +113 -0
  263. data/lib/gooddata/models/process.rb +10 -3
  264. data/lib/gooddata/models/profile.rb +9 -1
  265. data/lib/gooddata/models/project.rb +248 -50
  266. data/lib/gooddata/models/project_creator.rb +2 -2
  267. data/lib/gooddata/models/project_metadata.rb +1 -1
  268. data/lib/gooddata/models/project_role.rb +1 -1
  269. data/lib/gooddata/models/report_data_result.rb +1 -1
  270. data/lib/gooddata/models/schedule.rb +49 -13
  271. data/lib/gooddata/models/segment.rb +3 -3
  272. data/lib/gooddata/models/style_setting.rb +71 -0
  273. data/lib/gooddata/models/subscription.rb +181 -0
  274. data/lib/gooddata/models/tab_builder.rb +1 -1
  275. data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +1 -1
  276. data/lib/gooddata/models/user_filters/user_filter.rb +1 -1
  277. data/lib/gooddata/models/user_filters/user_filter_builder.rb +11 -5
  278. data/lib/gooddata/models/user_filters/user_filters.rb +1 -1
  279. data/lib/gooddata/models/user_filters/variable_user_filter.rb +1 -1
  280. data/lib/gooddata/models/user_group.rb +19 -12
  281. data/lib/gooddata/rest/client.rb +9 -1
  282. data/lib/gooddata/rest/connection.rb +18 -9
  283. data/lib/gooddata/rest/object.rb +1 -1
  284. data/lib/gooddata/rest/object_factory.rb +1 -1
  285. data/lib/gooddata/rest/resource.rb +1 -1
  286. data/lib/gooddata/rest/rest.rb +1 -1
  287. data/lib/gooddata/version.rb +2 -2
  288. data/spec/.rubocop.yml +16 -0
  289. data/spec/bricks/bricks_spec.rb +13 -15
  290. data/spec/data/blueprints/attribute_sort_order_blueprint.json +72 -0
  291. data/spec/data/gooddata_version_process/gooddata_version.rb +1 -1
  292. data/spec/data/hello_world_process/hello_world.rb +2 -2
  293. data/spec/data/ruby_params_process/ruby_params.rb +1 -1
  294. data/spec/data/ruby_process/process.rb +2 -2
  295. data/spec/data/wire_models/attribute_sort_by_model.json +73 -0
  296. data/spec/environment/default.rb +14 -13
  297. data/spec/environment/develop.rb +26 -11
  298. data/spec/environment/environment.rb +2 -1
  299. data/spec/environment/hotfix.rb +15 -7
  300. data/spec/environment/production.rb +6 -14
  301. data/spec/environment/staging.rb +9 -10
  302. data/spec/helpers/blueprint_helper.rb +11 -10
  303. data/spec/helpers/cli_helper.rb +26 -24
  304. data/spec/helpers/connection_helper.rb +28 -26
  305. data/spec/helpers/crypto_helper.rb +8 -6
  306. data/spec/helpers/csv_helper.rb +7 -5
  307. data/spec/helpers/process_helper.rb +13 -11
  308. data/spec/helpers/project_helper.rb +36 -34
  309. data/spec/helpers/schedule_helper.rb +13 -11
  310. data/spec/helpers/spec_helper.rb +8 -6
  311. data/spec/integration/ads_output_stage_spec.rb +55 -0
  312. data/spec/integration/blueprint_updates_spec.rb +22 -16
  313. data/spec/integration/blueprint_with_grain_spec.rb +5 -3
  314. data/spec/integration/channel_configuration_spec.rb +67 -0
  315. data/spec/integration/clients_spec.rb +31 -22
  316. data/spec/integration/command_datawarehouse_spec.rb +4 -4
  317. data/spec/integration/command_projects_spec.rb +6 -6
  318. data/spec/integration/create_from_template_spec.rb +4 -3
  319. data/spec/integration/create_project_spec.rb +7 -4
  320. data/spec/integration/date_dim_switch_spec.rb +25 -28
  321. data/spec/integration/deprecated_load_spec.rb +11 -9
  322. data/spec/integration/full_process_schedule_spec.rb +82 -13
  323. data/spec/integration/full_project_spec.rb +67 -45
  324. data/spec/integration/lcm_spec.rb +41 -0
  325. data/spec/integration/over_to_user_filters_spec.rb +14 -10
  326. data/spec/integration/partial_md_export_import_spec.rb +3 -4
  327. data/spec/integration/project_spec.rb +101 -42
  328. data/spec/integration/rest_spec.rb +5 -4
  329. data/spec/integration/schedule_spec.rb +28 -39
  330. data/spec/integration/segments_spec.rb +42 -31
  331. data/spec/integration/subscription_spec.rb +63 -0
  332. data/spec/integration/user_filters_spec.rb +49 -39
  333. data/spec/integration/user_group_spec.rb +25 -5
  334. data/spec/integration/variables_spec.rb +34 -32
  335. data/spec/logging_in_logging_out_spec.rb +6 -8
  336. data/spec/spec_helper.rb +3 -3
  337. data/spec/unit/bricks/bricks_spec.rb +3 -4
  338. data/spec/unit/bricks/middleware/aws_middelware_spec.rb +8 -15
  339. data/spec/unit/bricks/middleware/bench_middleware_spec.rb +2 -2
  340. data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +2 -2
  341. data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +2 -2
  342. data/spec/unit/bricks/middleware/logger_middleware_spec.rb +2 -2
  343. data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +3 -3
  344. data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +3 -3
  345. data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +3 -3
  346. data/spec/unit/cli/cli_spec.rb +3 -3
  347. data/spec/unit/cli/commands/cmd_auth_spec.rb +2 -2
  348. data/spec/unit/commands/command_projects_spec.rb +3 -3
  349. data/spec/unit/core/connection_spec.rb +3 -4
  350. data/spec/unit/core/logging_spec.rb +2 -5
  351. data/spec/unit/core/nil_logger_spec.rb +2 -2
  352. data/spec/unit/core/project_spec.rb +4 -4
  353. data/spec/unit/extensions/hash_spec.rb +3 -4
  354. data/spec/unit/godzilla/goodzilla_spec.rb +22 -26
  355. data/spec/unit/helpers/csv_helper_spec.rb +3 -3
  356. data/spec/unit/helpers/data_helper_spec.rb +6 -18
  357. data/spec/unit/helpers/global_helpers_spec.rb +112 -28
  358. data/spec/unit/helpers_spec.rb +139 -2
  359. data/spec/unit/models/blueprint/attribute_sort_by_spec.rb +20 -0
  360. data/spec/unit/models/blueprint/attributes_spec.rb +1 -2
  361. data/spec/unit/models/blueprint/dataset_spec.rb +2 -3
  362. data/spec/unit/models/blueprint/labels_spec.rb +1 -2
  363. data/spec/unit/models/blueprint/project_blueprint_spec.rb +34 -35
  364. data/spec/unit/models/blueprint/reference_spec.rb +1 -2
  365. data/spec/unit/models/blueprint/schema_builder_spec.rb +5 -7
  366. data/spec/unit/models/blueprint/to_wire_spec.rb +76 -55
  367. data/spec/unit/models/domain_spec.rb +4 -5
  368. data/spec/unit/models/execution_spec.rb +16 -15
  369. data/spec/unit/models/from_wire_spec.rb +24 -19
  370. data/spec/unit/models/invitation_spec.rb +1 -1
  371. data/spec/unit/models/membership_spec.rb +36 -41
  372. data/spec/unit/models/metadata_spec.rb +20 -18
  373. data/spec/unit/models/metric_spec.rb +67 -55
  374. data/spec/unit/models/model_spec.rb +32 -37
  375. data/spec/unit/models/params_spec.rb +1 -1
  376. data/spec/unit/models/profile_spec.rb +40 -45
  377. data/spec/unit/models/project_creator_spec.rb +27 -29
  378. data/spec/unit/models/project_role_spec.rb +1 -1
  379. data/spec/unit/models/project_spec.rb +65 -2
  380. data/spec/unit/models/report_result_data_spec.rb +7 -12
  381. data/spec/unit/models/schedule_spec.rb +71 -35
  382. data/spec/unit/models/to_manifest_spec.rb +69 -4
  383. data/spec/unit/models/unit_project_spec.rb +12 -12
  384. data/spec/unit/models/user_filters_spec.rb +40 -40
  385. data/spec/unit/models/variable_spec.rb +108 -93
  386. data/spec/unit/rest/polling_spec.rb +7 -7
  387. data/spec/unit/rest/resource_spec.rb +2 -2
  388. metadata +145 -228
  389. data/spec/environment/release.rb +0 -21
  390. data/spec/environment/staging_3.rb +0 -36
@@ -1,6 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  #
3
- # Copyright (c) 2010-2015 GoodData Corporation. All rights reserved.
3
+ # Copyright (c) 2010-2017 GoodData Corporation. All rights reserved.
4
4
  # This source code is licensed under the BSD-style license found in the
5
5
  # LICENSE file in the root directory of this source tree.
6
6
 
@@ -8,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