gooddata 1.0.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (517) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.editorconfig +12 -0
  4. data/.flayignore +6 -0
  5. data/.gitignore +38 -0
  6. data/.pronto.yml +3 -0
  7. data/.rspec +5 -0
  8. data/.rubocop.yml +101 -0
  9. data/.travis.yml +9 -0
  10. data/.yardopts +22 -0
  11. data/CHANGELOG.md +272 -0
  12. data/CLI.md +435 -0
  13. data/CONTRIBUTING.md +38 -0
  14. data/DEPENDENCIES.md +880 -0
  15. data/Dockerfile.jruby +17 -0
  16. data/Dockerfile.ruby +19 -0
  17. data/Gemfile +4 -0
  18. data/Guardfile +5 -0
  19. data/LICENSE +22 -0
  20. data/LICENSE.rb +5 -0
  21. data/README.md +78 -0
  22. data/Rakefile +204 -0
  23. data/TODO.md +32 -0
  24. data/authors.sh +4 -0
  25. data/bin/gooddata +7 -0
  26. data/ci.rake +47 -0
  27. data/dependency_decisions.yml +104 -0
  28. data/docker-compose.yml +34 -0
  29. data/gooddata +9 -0
  30. data/gooddata.gemspec +72 -0
  31. data/lib/gooddata.rb +34 -0
  32. data/lib/gooddata/app/app.rb +16 -0
  33. data/lib/gooddata/bricks/base_downloader.rb +86 -0
  34. data/lib/gooddata/bricks/brick.rb +37 -0
  35. data/lib/gooddata/bricks/bricks.rb +17 -0
  36. data/lib/gooddata/bricks/middleware/aws_middleware.rb +41 -0
  37. data/lib/gooddata/bricks/middleware/base_middleware.rb +57 -0
  38. data/lib/gooddata/bricks/middleware/bench_middleware.rb +25 -0
  39. data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +37 -0
  40. data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +21 -0
  41. data/lib/gooddata/bricks/middleware/dwh_middleware.rb +41 -0
  42. data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +48 -0
  43. data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +36 -0
  44. data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +112 -0
  45. data/lib/gooddata/bricks/middleware/logger_middleware.rb +33 -0
  46. data/lib/gooddata/bricks/middleware/middleware.rb +12 -0
  47. data/lib/gooddata/bricks/middleware/restforce_middleware.rb +58 -0
  48. data/lib/gooddata/bricks/middleware/stdout_middleware.rb +23 -0
  49. data/lib/gooddata/bricks/middleware/twitter_middleware.rb +29 -0
  50. data/lib/gooddata/bricks/middleware/undot_params_middleware.rb +37 -0
  51. data/lib/gooddata/bricks/pipeline.rb +25 -0
  52. data/lib/gooddata/bricks/utils.rb +18 -0
  53. data/lib/gooddata/cli/cli.rb +27 -0
  54. data/lib/gooddata/cli/commands/auth_cmd.rb +29 -0
  55. data/lib/gooddata/cli/commands/domain_cmd.rb +28 -0
  56. data/lib/gooddata/cli/commands/project_cmd.rb +28 -0
  57. data/lib/gooddata/cli/hooks.rb +56 -0
  58. data/lib/gooddata/cli/shared.rb +66 -0
  59. data/lib/gooddata/cli/terminal.rb +20 -0
  60. data/lib/gooddata/client.rb +67 -0
  61. data/lib/gooddata/commands/api.rb +64 -0
  62. data/lib/gooddata/commands/auth.rb +107 -0
  63. data/lib/gooddata/commands/base.rb +12 -0
  64. data/lib/gooddata/commands/commands.rb +12 -0
  65. data/lib/gooddata/commands/datasets.rb +148 -0
  66. data/lib/gooddata/commands/datawarehouse.rb +20 -0
  67. data/lib/gooddata/commands/domain.rb +40 -0
  68. data/lib/gooddata/commands/process.rb +67 -0
  69. data/lib/gooddata/commands/project.rb +144 -0
  70. data/lib/gooddata/commands/projects.rb +20 -0
  71. data/lib/gooddata/commands/role.rb +36 -0
  72. data/lib/gooddata/commands/runners.rb +47 -0
  73. data/lib/gooddata/commands/scaffold.rb +69 -0
  74. data/lib/gooddata/commands/user.rb +39 -0
  75. data/lib/gooddata/connection.rb +127 -0
  76. data/lib/gooddata/core/core.rb +12 -0
  77. data/lib/gooddata/core/logging.rb +105 -0
  78. data/lib/gooddata/core/nil_logger.rb +32 -0
  79. data/lib/gooddata/core/project.rb +74 -0
  80. data/lib/gooddata/core/rest.rb +149 -0
  81. data/lib/gooddata/core/user.rb +20 -0
  82. data/lib/gooddata/data/data.rb +12 -0
  83. data/lib/gooddata/data/guesser.rb +122 -0
  84. data/lib/gooddata/exceptions/attr_element_not_found.rb +16 -0
  85. data/lib/gooddata/exceptions/command_failed.rb +11 -0
  86. data/lib/gooddata/exceptions/exceptions.rb +12 -0
  87. data/lib/gooddata/exceptions/execution_limit_exceeded.rb +13 -0
  88. data/lib/gooddata/exceptions/export_clone.rb +4 -0
  89. data/lib/gooddata/exceptions/filter_maqlization.rb +16 -0
  90. data/lib/gooddata/exceptions/import_clone.rb +4 -0
  91. data/lib/gooddata/exceptions/malformed_user.rb +15 -0
  92. data/lib/gooddata/exceptions/maql_execution.rb +16 -0
  93. data/lib/gooddata/exceptions/no_project_error.rb +19 -0
  94. data/lib/gooddata/exceptions/object_migration.rb +32 -0
  95. data/lib/gooddata/exceptions/project_not_found.rb +13 -0
  96. data/lib/gooddata/exceptions/segment_not_empty.rb +18 -0
  97. data/lib/gooddata/exceptions/uncomputable_report.rb +13 -0
  98. data/lib/gooddata/exceptions/user_in_different_domain.rb +15 -0
  99. data/lib/gooddata/exceptions/validation_error.rb +16 -0
  100. data/lib/gooddata/extensions/big_decimal.rb +17 -0
  101. data/lib/gooddata/extensions/class.rb +11 -0
  102. data/lib/gooddata/extensions/enumerable.rb +39 -0
  103. data/lib/gooddata/extensions/extensions.rb +10 -0
  104. data/lib/gooddata/extensions/false.rb +23 -0
  105. data/lib/gooddata/extensions/hash.rb +49 -0
  106. data/lib/gooddata/extensions/integer.rb +5 -0
  107. data/lib/gooddata/extensions/nil.rb +19 -0
  108. data/lib/gooddata/extensions/numeric.rb +15 -0
  109. data/lib/gooddata/extensions/object.rb +31 -0
  110. data/lib/gooddata/extensions/string.rb +7 -0
  111. data/lib/gooddata/extensions/symbol.rb +15 -0
  112. data/lib/gooddata/extensions/true.rb +23 -0
  113. data/lib/gooddata/extract.rb +21 -0
  114. data/lib/gooddata/goodzilla/goodzilla.rb +160 -0
  115. data/lib/gooddata/helpers/auth_helpers.rb +75 -0
  116. data/lib/gooddata/helpers/csv_helper.rb +61 -0
  117. data/lib/gooddata/helpers/data_helper.rb +129 -0
  118. data/lib/gooddata/helpers/erb_helper.rb +23 -0
  119. data/lib/gooddata/helpers/global_helpers.rb +266 -0
  120. data/lib/gooddata/helpers/global_helpers_params.rb +292 -0
  121. data/lib/gooddata/helpers/helpers.rb +10 -0
  122. data/lib/gooddata/lcm/actions/actions.rb +12 -0
  123. data/lib/gooddata/lcm/actions/apply_custom_maql.rb +80 -0
  124. data/lib/gooddata/lcm/actions/associate_clients.rb +87 -0
  125. data/lib/gooddata/lcm/actions/base_action.rb +23 -0
  126. data/lib/gooddata/lcm/actions/collect_ca_metrics.rb +53 -0
  127. data/lib/gooddata/lcm/actions/collect_client_projects.rb +78 -0
  128. data/lib/gooddata/lcm/actions/collect_clients.rb +128 -0
  129. data/lib/gooddata/lcm/actions/collect_data_product.rb +57 -0
  130. data/lib/gooddata/lcm/actions/collect_dynamic_schedule_params.rb +62 -0
  131. data/lib/gooddata/lcm/actions/collect_ldm_objects.rb +56 -0
  132. data/lib/gooddata/lcm/actions/collect_meta.rb +88 -0
  133. data/lib/gooddata/lcm/actions/collect_segment_clients.rb +113 -0
  134. data/lib/gooddata/lcm/actions/collect_segments.rb +72 -0
  135. data/lib/gooddata/lcm/actions/collect_tagged_objects.rb +80 -0
  136. data/lib/gooddata/lcm/actions/collect_users_brick_users.rb +46 -0
  137. data/lib/gooddata/lcm/actions/create_segment_masters.rb +160 -0
  138. data/lib/gooddata/lcm/actions/ensure_data_product.rb +53 -0
  139. data/lib/gooddata/lcm/actions/ensure_release_table.rb +53 -0
  140. data/lib/gooddata/lcm/actions/ensure_segments.rb +32 -0
  141. data/lib/gooddata/lcm/actions/ensure_technical_users_domain.rb +70 -0
  142. data/lib/gooddata/lcm/actions/ensure_technical_users_project.rb +83 -0
  143. data/lib/gooddata/lcm/actions/execute_schedules.rb +128 -0
  144. data/lib/gooddata/lcm/actions/hello_world.rb +41 -0
  145. data/lib/gooddata/lcm/actions/import_object_collections.rb +60 -0
  146. data/lib/gooddata/lcm/actions/print_actions.rb +58 -0
  147. data/lib/gooddata/lcm/actions/print_modes.rb +69 -0
  148. data/lib/gooddata/lcm/actions/print_types.rb +52 -0
  149. data/lib/gooddata/lcm/actions/provision_clients.rb +89 -0
  150. data/lib/gooddata/lcm/actions/purge_clients.rb +58 -0
  151. data/lib/gooddata/lcm/actions/rename_existing_client_projects.rb +70 -0
  152. data/lib/gooddata/lcm/actions/segments_filter.rb +50 -0
  153. data/lib/gooddata/lcm/actions/synchronize_attribute_drillpaths.rb +64 -0
  154. data/lib/gooddata/lcm/actions/synchronize_cas.rb +72 -0
  155. data/lib/gooddata/lcm/actions/synchronize_clients.rb +94 -0
  156. data/lib/gooddata/lcm/actions/synchronize_color_palette.rb +67 -0
  157. data/lib/gooddata/lcm/actions/synchronize_etls_in_segment.rb +155 -0
  158. data/lib/gooddata/lcm/actions/synchronize_label_types.rb +64 -0
  159. data/lib/gooddata/lcm/actions/synchronize_ldm.rb +82 -0
  160. data/lib/gooddata/lcm/actions/synchronize_meta.rb +52 -0
  161. data/lib/gooddata/lcm/actions/synchronize_new_segments.rb +61 -0
  162. data/lib/gooddata/lcm/actions/synchronize_processes.rb +66 -0
  163. data/lib/gooddata/lcm/actions/synchronize_schedules.rb +91 -0
  164. data/lib/gooddata/lcm/actions/synchronize_tag_objects.rb +64 -0
  165. data/lib/gooddata/lcm/actions/synchronize_user_filters.rb +210 -0
  166. data/lib/gooddata/lcm/actions/synchronize_user_groups.rb +53 -0
  167. data/lib/gooddata/lcm/actions/synchronize_users.rb +336 -0
  168. data/lib/gooddata/lcm/actions/update_release_table.rb +77 -0
  169. data/lib/gooddata/lcm/data/create_lcm_release.sql.erb +6 -0
  170. data/lib/gooddata/lcm/data/insert_into_lcm_release.sql.erb +11 -0
  171. data/lib/gooddata/lcm/data/select_from_lcm_release.sql.erb +8 -0
  172. data/lib/gooddata/lcm/data/update_lcm_release.sql.erb +7 -0
  173. data/lib/gooddata/lcm/dsl/dsl.rb +50 -0
  174. data/lib/gooddata/lcm/dsl/params_dsl.rb +61 -0
  175. data/lib/gooddata/lcm/dsl/type_dsl.rb +62 -0
  176. data/lib/gooddata/lcm/helpers/check_helper.rb +41 -0
  177. data/lib/gooddata/lcm/helpers/helpers.rb +12 -0
  178. data/lib/gooddata/lcm/helpers/tags_helper.rb +36 -0
  179. data/lib/gooddata/lcm/lcm.rb +325 -0
  180. data/lib/gooddata/lcm/lcm2.rb +400 -0
  181. data/lib/gooddata/lcm/types/base_type.rb +29 -0
  182. data/lib/gooddata/lcm/types/class/ads_client.rb +35 -0
  183. data/lib/gooddata/lcm/types/class/class.rb +21 -0
  184. data/lib/gooddata/lcm/types/class/gd_client.rb +35 -0
  185. data/lib/gooddata/lcm/types/class/types.rb +12 -0
  186. data/lib/gooddata/lcm/types/complex/complex.rb +33 -0
  187. data/lib/gooddata/lcm/types/complex/release_query.rb +35 -0
  188. data/lib/gooddata/lcm/types/complex/segment.rb +40 -0
  189. data/lib/gooddata/lcm/types/complex/synchronization_info.rb +35 -0
  190. data/lib/gooddata/lcm/types/complex/tokens.rb +31 -0
  191. data/lib/gooddata/lcm/types/complex/types.rb +12 -0
  192. data/lib/gooddata/lcm/types/complex/update_preference.rb +38 -0
  193. data/lib/gooddata/lcm/types/complex/users_brick_config.rb +32 -0
  194. data/lib/gooddata/lcm/types/param.rb +16 -0
  195. data/lib/gooddata/lcm/types/scalar/bool.rb +22 -0
  196. data/lib/gooddata/lcm/types/scalar/hash.rb +22 -0
  197. data/lib/gooddata/lcm/types/scalar/integer.rb +22 -0
  198. data/lib/gooddata/lcm/types/scalar/object.rb +22 -0
  199. data/lib/gooddata/lcm/types/scalar/string.rb +22 -0
  200. data/lib/gooddata/lcm/types/scalar/types.rb +12 -0
  201. data/lib/gooddata/lcm/types/special/array.rb +33 -0
  202. data/lib/gooddata/lcm/types/special/enum.rb +15 -0
  203. data/lib/gooddata/lcm/types/special/types.rb +12 -0
  204. data/lib/gooddata/lcm/types/types.rb +12 -0
  205. data/lib/gooddata/lcm/user_bricks_helper.rb +32 -0
  206. data/lib/gooddata/mixins/author.rb +26 -0
  207. data/lib/gooddata/mixins/content_getter.rb +15 -0
  208. data/lib/gooddata/mixins/content_property_reader.rb +17 -0
  209. data/lib/gooddata/mixins/content_property_writer.rb +17 -0
  210. data/lib/gooddata/mixins/contributor.rb +20 -0
  211. data/lib/gooddata/mixins/data_getter.rb +15 -0
  212. data/lib/gooddata/mixins/data_property_reader.rb +19 -0
  213. data/lib/gooddata/mixins/data_property_writer.rb +19 -0
  214. data/lib/gooddata/mixins/inspector.rb +53 -0
  215. data/lib/gooddata/mixins/is_attribute.rb +17 -0
  216. data/lib/gooddata/mixins/is_dimension.rb +17 -0
  217. data/lib/gooddata/mixins/is_fact.rb +17 -0
  218. data/lib/gooddata/mixins/is_folder.rb +11 -0
  219. data/lib/gooddata/mixins/is_label.rb +19 -0
  220. data/lib/gooddata/mixins/links.rb +15 -0
  221. data/lib/gooddata/mixins/md_finders.rb +79 -0
  222. data/lib/gooddata/mixins/md_grantees.rb +42 -0
  223. data/lib/gooddata/mixins/md_id_to_uri.rb +39 -0
  224. data/lib/gooddata/mixins/md_json.rb +15 -0
  225. data/lib/gooddata/mixins/md_lock.rb +87 -0
  226. data/lib/gooddata/mixins/md_object_id.rb +15 -0
  227. data/lib/gooddata/mixins/md_object_indexer.rb +74 -0
  228. data/lib/gooddata/mixins/md_object_query.rb +134 -0
  229. data/lib/gooddata/mixins/md_relations.rb +43 -0
  230. data/lib/gooddata/mixins/meta_getter.rb +17 -0
  231. data/lib/gooddata/mixins/meta_property_reader.rb +19 -0
  232. data/lib/gooddata/mixins/meta_property_writer.rb +19 -0
  233. data/lib/gooddata/mixins/mixins.rb +19 -0
  234. data/lib/gooddata/mixins/not_attribute.rb +17 -0
  235. data/lib/gooddata/mixins/not_exportable.rb +15 -0
  236. data/lib/gooddata/mixins/not_fact.rb +17 -0
  237. data/lib/gooddata/mixins/not_group.rb +17 -0
  238. data/lib/gooddata/mixins/not_label.rb +19 -0
  239. data/lib/gooddata/mixins/not_metric.rb +19 -0
  240. data/lib/gooddata/mixins/obj_id.rb +15 -0
  241. data/lib/gooddata/mixins/rest_getters.rb +17 -0
  242. data/lib/gooddata/mixins/rest_resource.rb +47 -0
  243. data/lib/gooddata/mixins/root_key_getter.rb +15 -0
  244. data/lib/gooddata/mixins/root_key_setter.rb +15 -0
  245. data/lib/gooddata/mixins/timestamps.rb +19 -0
  246. data/lib/gooddata/mixins/to_json.rb +11 -0
  247. data/lib/gooddata/mixins/uri_getter.rb +9 -0
  248. data/lib/gooddata/models/ads_output_stage.rb +85 -0
  249. data/lib/gooddata/models/automated_data_distribution.rb +36 -0
  250. data/lib/gooddata/models/blueprint/anchor_field.rb +65 -0
  251. data/lib/gooddata/models/blueprint/attribute_field.rb +45 -0
  252. data/lib/gooddata/models/blueprint/blueprint.rb +11 -0
  253. data/lib/gooddata/models/blueprint/blueprint_field.rb +70 -0
  254. data/lib/gooddata/models/blueprint/dashboard_builder.rb +30 -0
  255. data/lib/gooddata/models/blueprint/dataset_blueprint.rb +455 -0
  256. data/lib/gooddata/models/blueprint/date_dimension.rb +20 -0
  257. data/lib/gooddata/models/blueprint/fact_field.rb +20 -0
  258. data/lib/gooddata/models/blueprint/label_field.rb +47 -0
  259. data/lib/gooddata/models/blueprint/project_blueprint.rb +791 -0
  260. data/lib/gooddata/models/blueprint/project_builder.rb +103 -0
  261. data/lib/gooddata/models/blueprint/reference_field.rb +43 -0
  262. data/lib/gooddata/models/blueprint/schema_blueprint.rb +160 -0
  263. data/lib/gooddata/models/blueprint/schema_builder.rb +89 -0
  264. data/lib/gooddata/models/blueprint/to_manifest.rb +185 -0
  265. data/lib/gooddata/models/blueprint/to_wire.rb +173 -0
  266. data/lib/gooddata/models/channel_configuration.rb +112 -0
  267. data/lib/gooddata/models/client.rb +236 -0
  268. data/lib/gooddata/models/client_synchronization_result.rb +31 -0
  269. data/lib/gooddata/models/client_synchronization_result_details.rb +41 -0
  270. data/lib/gooddata/models/data_product.rb +149 -0
  271. data/lib/gooddata/models/datawarehouse.rb +114 -0
  272. data/lib/gooddata/models/domain.rb +505 -0
  273. data/lib/gooddata/models/execution.rb +115 -0
  274. data/lib/gooddata/models/execution_detail.rb +81 -0
  275. data/lib/gooddata/models/from_wire.rb +173 -0
  276. data/lib/gooddata/models/invitation.rb +75 -0
  277. data/lib/gooddata/models/links.rb +50 -0
  278. data/lib/gooddata/models/membership.rb +441 -0
  279. data/lib/gooddata/models/metadata.rb +324 -0
  280. data/lib/gooddata/models/metadata/attribute.rb +155 -0
  281. data/lib/gooddata/models/metadata/dashboard.rb +120 -0
  282. data/lib/gooddata/models/metadata/dashboard/dashboard_item.rb +76 -0
  283. data/lib/gooddata/models/metadata/dashboard/filter_apply_item.rb +37 -0
  284. data/lib/gooddata/models/metadata/dashboard/filter_item.rb +64 -0
  285. data/lib/gooddata/models/metadata/dashboard/geo_chart_item.rb +56 -0
  286. data/lib/gooddata/models/metadata/dashboard/headline_item.rb +56 -0
  287. data/lib/gooddata/models/metadata/dashboard/iframe_item.rb +46 -0
  288. data/lib/gooddata/models/metadata/dashboard/report_item.rb +92 -0
  289. data/lib/gooddata/models/metadata/dashboard/text_item.rb +55 -0
  290. data/lib/gooddata/models/metadata/dashboard_tab.rb +141 -0
  291. data/lib/gooddata/models/metadata/dataset.rb +67 -0
  292. data/lib/gooddata/models/metadata/dimension.rb +57 -0
  293. data/lib/gooddata/models/metadata/fact.rb +51 -0
  294. data/lib/gooddata/models/metadata/folder.rb +49 -0
  295. data/lib/gooddata/models/metadata/label.rb +128 -0
  296. data/lib/gooddata/models/metadata/metadata.rb +12 -0
  297. data/lib/gooddata/models/metadata/metric.rb +206 -0
  298. data/lib/gooddata/models/metadata/report.rb +268 -0
  299. data/lib/gooddata/models/metadata/report_definition.rb +272 -0
  300. data/lib/gooddata/models/metadata/scheduled_mail.rb +277 -0
  301. data/lib/gooddata/models/metadata/scheduled_mail/dashboard_attachment.rb +62 -0
  302. data/lib/gooddata/models/metadata/scheduled_mail/report_attachment.rb +64 -0
  303. data/lib/gooddata/models/metadata/variable.rb +96 -0
  304. data/lib/gooddata/models/model.rb +293 -0
  305. data/lib/gooddata/models/models.rb +12 -0
  306. data/lib/gooddata/models/module_constants.rb +31 -0
  307. data/lib/gooddata/models/notification_rule.rb +113 -0
  308. data/lib/gooddata/models/process.rb +371 -0
  309. data/lib/gooddata/models/profile.rb +451 -0
  310. data/lib/gooddata/models/project.rb +2030 -0
  311. data/lib/gooddata/models/project_creator.rb +209 -0
  312. data/lib/gooddata/models/project_log_formatter.rb +204 -0
  313. data/lib/gooddata/models/project_metadata.rb +67 -0
  314. data/lib/gooddata/models/project_role.rb +79 -0
  315. data/lib/gooddata/models/report_data_result.rb +270 -0
  316. data/lib/gooddata/models/schedule.rb +538 -0
  317. data/lib/gooddata/models/segment.rb +274 -0
  318. data/lib/gooddata/models/style_setting.rb +62 -0
  319. data/lib/gooddata/models/subscription.rb +188 -0
  320. data/lib/gooddata/models/tab_builder.rb +27 -0
  321. data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +76 -0
  322. data/lib/gooddata/models/user_filters/user_filter.rb +101 -0
  323. data/lib/gooddata/models/user_filters/user_filter_builder.rb +553 -0
  324. data/lib/gooddata/models/user_filters/user_filters.rb +13 -0
  325. data/lib/gooddata/models/user_filters/variable_user_filter.rb +33 -0
  326. data/lib/gooddata/models/user_group.rb +250 -0
  327. data/lib/gooddata/rest/README.md +37 -0
  328. data/lib/gooddata/rest/client.rb +396 -0
  329. data/lib/gooddata/rest/connection.rb +776 -0
  330. data/lib/gooddata/rest/object.rb +69 -0
  331. data/lib/gooddata/rest/object_factory.rb +51 -0
  332. data/lib/gooddata/rest/resource.rb +27 -0
  333. data/lib/gooddata/rest/rest.rb +24 -0
  334. data/lib/gooddata/version.rb +23 -0
  335. data/lib/templates/bricks/brick.rb.erb +7 -0
  336. data/lib/templates/bricks/main.rb.erb +5 -0
  337. data/lib/templates/project/Goodfile.erb +4 -0
  338. data/lib/templates/project/data/commits.csv +4 -0
  339. data/lib/templates/project/data/devs.csv +4 -0
  340. data/lib/templates/project/data/repos.csv +3 -0
  341. data/lib/templates/project/model/model.rb.erb +20 -0
  342. data/spec/.rubocop.yml +16 -0
  343. data/spec/bricks/bricks_spec.rb +110 -0
  344. data/spec/bricks/default-config.json +8 -0
  345. data/spec/data/.gooddata +4 -0
  346. data/spec/data/blueprints/additional_dataset_module.json +32 -0
  347. data/spec/data/blueprints/attribute_sort_order_blueprint.json +72 -0
  348. data/spec/data/blueprints/big_blueprint_not_pruned.json +2079 -0
  349. data/spec/data/blueprints/invalid_blueprint.json +103 -0
  350. data/spec/data/blueprints/m_n_model.json +104 -0
  351. data/spec/data/blueprints/model_module.json +25 -0
  352. data/spec/data/blueprints/test_blueprint.json +39 -0
  353. data/spec/data/blueprints/test_project_model_spec.json +106 -0
  354. data/spec/data/cc/data/source/commits.csv +4 -0
  355. data/spec/data/cc/data/source/devs.csv +4 -0
  356. data/spec/data/cc/data/source/repos.csv +3 -0
  357. data/spec/data/cc/devel.prm +0 -0
  358. data/spec/data/cc/graph/graph.grf +11 -0
  359. data/spec/data/cc/workspace.prm +19 -0
  360. data/spec/data/column_based_permissions.csv +7 -0
  361. data/spec/data/column_based_permissions2.csv +6 -0
  362. data/spec/data/dynamic_schedule_params_table.csv +7 -0
  363. data/spec/data/gd_gse_data_blueprint.json +1371 -0
  364. data/spec/data/gd_gse_data_manifest.json +1424 -0
  365. data/spec/data/gd_gse_data_model.json +1772 -0
  366. data/spec/data/gooddata_version_process/gooddata_version.rb +9 -0
  367. data/spec/data/gooddata_version_process/gooddata_version.zip +0 -0
  368. data/spec/data/hello_world_process/hello_world.rb +9 -0
  369. data/spec/data/hello_world_process/hello_world.zip +0 -0
  370. data/spec/data/line_based_permissions.csv +3 -0
  371. data/spec/data/manifests/test_blueprint.json +32 -0
  372. data/spec/data/manifests/test_project.json +107 -0
  373. data/spec/data/reports/left_attr_report.json +108 -0
  374. data/spec/data/reports/metric_only_one_line.json +83 -0
  375. data/spec/data/reports/report_1.json +197 -0
  376. data/spec/data/reports/top_attr_report.json +108 -0
  377. data/spec/data/ruby_params_process/ruby_params.rb +9 -0
  378. data/spec/data/ruby_process/deep_files/deep_stuff.txt +1 -0
  379. data/spec/data/ruby_process/process.rb +8 -0
  380. data/spec/data/ruby_process/stuff.txt +1 -0
  381. data/spec/data/superfluous_titles_view.json +81 -0
  382. data/spec/data/test-ci-data.csv +2 -0
  383. data/spec/data/users.csv +12 -0
  384. data/spec/data/wire_models/attribute_sort_by_model.json +73 -0
  385. data/spec/data/wire_models/model_view.json +1775 -0
  386. data/spec/data/wire_models/nu_model.json +3046 -0
  387. data/spec/data/wire_models/test_blueprint.json +66 -0
  388. data/spec/data/wire_test_project.json +150 -0
  389. data/spec/data/workspace_table.csv +3 -0
  390. data/spec/environment/default.rb +43 -0
  391. data/spec/environment/development.rb +32 -0
  392. data/spec/environment/environment.rb +38 -0
  393. data/spec/environment/production.rb +27 -0
  394. data/spec/environment/staging.rb +33 -0
  395. data/spec/environment/testing.rb +32 -0
  396. data/spec/helpers/blueprint_helper.rb +27 -0
  397. data/spec/helpers/cli_helper.rb +38 -0
  398. data/spec/helpers/connection_helper.rb +43 -0
  399. data/spec/helpers/crypto_helper.rb +19 -0
  400. data/spec/helpers/csv_helper.rb +20 -0
  401. data/spec/helpers/process_helper.rb +35 -0
  402. data/spec/helpers/project_helper.rb +74 -0
  403. data/spec/helpers/schedule_helper.rb +33 -0
  404. data/spec/helpers/spec_helper.rb +17 -0
  405. data/spec/integration/ads_output_stage_spec.rb +45 -0
  406. data/spec/integration/blueprint_updates_spec.rb +107 -0
  407. data/spec/integration/blueprint_with_ca_spec.rb +56 -0
  408. data/spec/integration/blueprint_with_grain_spec.rb +74 -0
  409. data/spec/integration/channel_configuration_spec.rb +67 -0
  410. data/spec/integration/clients_spec.rb +164 -0
  411. data/spec/integration/command_datawarehouse_spec.rb +45 -0
  412. data/spec/integration/command_projects_spec.rb +32 -0
  413. data/spec/integration/commands/command_projects_spec.rb +22 -0
  414. data/spec/integration/core/connection_spec.rb +56 -0
  415. data/spec/integration/core/logging_spec.rb +130 -0
  416. data/spec/integration/core/project_spec.rb +54 -0
  417. data/spec/integration/create_from_template_spec.rb +29 -0
  418. data/spec/integration/create_project_spec.rb +27 -0
  419. data/spec/integration/date_dim_switch_spec.rb +150 -0
  420. data/spec/integration/deprecated_load_spec.rb +60 -0
  421. data/spec/integration/full_process_schedule_spec.rb +367 -0
  422. data/spec/integration/full_project_spec.rb +592 -0
  423. data/spec/integration/helpers_spec.rb +16 -0
  424. data/spec/integration/lcm_spec.rb +54 -0
  425. data/spec/integration/mixins/id_to_uri_spec.rb +44 -0
  426. data/spec/integration/models/data_product_spec.rb +71 -0
  427. data/spec/integration/models/domain_spec.rb +162 -0
  428. data/spec/integration/models/invitation_spec.rb +17 -0
  429. data/spec/integration/models/membership_spec.rb +127 -0
  430. data/spec/integration/models/metadata/report_spec.rb +54 -0
  431. data/spec/integration/models/params_spec.rb +118 -0
  432. data/spec/integration/models/profile_spec.rb +210 -0
  433. data/spec/integration/models/project_role_spec.rb +94 -0
  434. data/spec/integration/models/project_spec.rb +225 -0
  435. data/spec/integration/models/schedule_spec.rb +485 -0
  436. data/spec/integration/models/unit_project_spec.rb +130 -0
  437. data/spec/integration/over_to_user_filters_spec.rb +98 -0
  438. data/spec/integration/partial_md_export_import_spec.rb +41 -0
  439. data/spec/integration/project_spec.rb +381 -0
  440. data/spec/integration/rest_spec.rb +214 -0
  441. data/spec/integration/schedule_spec.rb +613 -0
  442. data/spec/integration/segments_spec.rb +100 -0
  443. data/spec/integration/subscription_spec.rb +88 -0
  444. data/spec/integration/urn_date_dim_spec.rb +53 -0
  445. data/spec/integration/user_filters_spec.rb +306 -0
  446. data/spec/integration/user_group_spec.rb +147 -0
  447. data/spec/integration/variables_spec.rb +189 -0
  448. data/spec/logging_in_logging_out_spec.rb +91 -0
  449. data/spec/spec_helper.rb +66 -0
  450. data/spec/unit/actions/associate_clients_spec.rb +47 -0
  451. data/spec/unit/actions/collect_client_projects_spec.rb +47 -0
  452. data/spec/unit/actions/collect_clients_spec.rb +65 -0
  453. data/spec/unit/actions/collect_data_product_spec.rb +56 -0
  454. data/spec/unit/actions/collect_dynamic_schedule_params_spec.rb +56 -0
  455. data/spec/unit/actions/collect_meta_spec.rb +88 -0
  456. data/spec/unit/actions/collect_segment_clients_spec.rb +81 -0
  457. data/spec/unit/actions/collect_tagged_objects_spec.rb +126 -0
  458. data/spec/unit/actions/collect_users_brick_users_spec.rb +36 -0
  459. data/spec/unit/actions/create_segment_masters_spec.rb +64 -0
  460. data/spec/unit/actions/ensure_data_product_spec.rb +38 -0
  461. data/spec/unit/actions/ensure_technical_users_domain_spec.rb +51 -0
  462. data/spec/unit/actions/ensure_technical_users_project_spec.rb +72 -0
  463. data/spec/unit/actions/execute_schedules_spec.rb +94 -0
  464. data/spec/unit/actions/provision_clients_spec.rb +45 -0
  465. data/spec/unit/actions/purge_clients_spec.rb +47 -0
  466. data/spec/unit/actions/rename_existing_client_projects_spec.rb +54 -0
  467. data/spec/unit/actions/segments_filter_spec.rb +46 -0
  468. data/spec/unit/actions/shared_examples_for_user_actions.rb +26 -0
  469. data/spec/unit/actions/synchronize_cas_spec.rb +58 -0
  470. data/spec/unit/actions/synchronize_etls_in_segment_spec.rb +212 -0
  471. data/spec/unit/actions/synchronize_ldm_spec.rb +57 -0
  472. data/spec/unit/actions/synchronize_user_filters_spec.rb +146 -0
  473. data/spec/unit/actions/synchronize_user_groups_spec.rb +49 -0
  474. data/spec/unit/actions/synchronize_users_spec.rb +134 -0
  475. data/spec/unit/bricks/bricks_spec.rb +34 -0
  476. data/spec/unit/bricks/middleware/aws_middelware_spec.rb +98 -0
  477. data/spec/unit/bricks/middleware/bench_middleware_spec.rb +15 -0
  478. data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +15 -0
  479. data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +15 -0
  480. data/spec/unit/bricks/middleware/logger_middleware_spec.rb +30 -0
  481. data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +15 -0
  482. data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +15 -0
  483. data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +15 -0
  484. data/spec/unit/cli/cli_spec.rb +17 -0
  485. data/spec/unit/cli/commands/cmd_auth_spec.rb +17 -0
  486. data/spec/unit/core/nil_logger_spec.rb +13 -0
  487. data/spec/unit/extensions/hash_spec.rb +22 -0
  488. data/spec/unit/godzilla/goodzilla_spec.rb +74 -0
  489. data/spec/unit/helpers/csv_helper_spec.rb +22 -0
  490. data/spec/unit/helpers/data_helper_spec.rb +67 -0
  491. data/spec/unit/helpers/global_helpers_spec.rb +264 -0
  492. data/spec/unit/helpers_spec.rb +254 -0
  493. data/spec/unit/lcm/user_bricks_helper_spec.rb +58 -0
  494. data/spec/unit/models/blueprint/attribute_sort_by_spec.rb +20 -0
  495. data/spec/unit/models/blueprint/attributes_spec.rb +28 -0
  496. data/spec/unit/models/blueprint/dataset_spec.rb +120 -0
  497. data/spec/unit/models/blueprint/labels_spec.rb +43 -0
  498. data/spec/unit/models/blueprint/project_blueprint_spec.rb +642 -0
  499. data/spec/unit/models/blueprint/reference_spec.rb +28 -0
  500. data/spec/unit/models/blueprint/schema_builder_spec.rb +36 -0
  501. data/spec/unit/models/blueprint/to_wire_spec.rb +195 -0
  502. data/spec/unit/models/execution_spec.rb +109 -0
  503. data/spec/unit/models/from_wire_spec.rb +301 -0
  504. data/spec/unit/models/metadata_spec.rb +140 -0
  505. data/spec/unit/models/metric_spec.rb +129 -0
  506. data/spec/unit/models/model_spec.rb +77 -0
  507. data/spec/unit/models/project_creator_spec.rb +90 -0
  508. data/spec/unit/models/project_spec.rb +94 -0
  509. data/spec/unit/models/report_result_data_spec.rb +194 -0
  510. data/spec/unit/models/to_manifest_spec.rb +136 -0
  511. data/spec/unit/models/user_filters/user_filter_builder_spec.rb +110 -0
  512. data/spec/unit/models/user_filters_spec.rb +95 -0
  513. data/spec/unit/models/variable_spec.rb +280 -0
  514. data/spec/unit/rest/polling_spec.rb +101 -0
  515. data/spec/unit/rest/resource_spec.rb +10 -0
  516. data/yard-server.sh +3 -0
  517. metadata +1207 -0
@@ -0,0 +1,214 @@
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 'tempfile'
8
+
9
+ require 'gooddata/core/rest'
10
+
11
+ describe GoodData do
12
+ before(:each) do
13
+ @client = ConnectionHelper.create_default_connection
14
+ # @project = ProjectHelper.get_default_project(:client => @client)
15
+ @project = @client.create_project(title: 'Project for schedule testing', auth_token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
16
+ end
17
+
18
+ after(:each) do
19
+ @project && @project.delete
20
+ @client.disconnect
21
+ end
22
+
23
+ describe '#project_webdav_path' do
24
+ it 'Returns path' do
25
+ @client.project_webdav_path(:project => @project)
26
+ end
27
+ end
28
+
29
+ def test_webdav_upload(params)
30
+ GoodData.with_project(@project, :client => @client) do
31
+ # use current timestamp as a directory name on webdav
32
+ dir = params[:no_dir] ? nil : Time.now.to_i.to_s
33
+ dir = "#{dir}/#{dir}" if params[:nested_dir]
34
+ dir = "#{dir}/" if params[:slash_in_dir]
35
+
36
+ # local file path
37
+ path = 'spec/data/test-ci-data.csv'
38
+
39
+ if params[:special_chars]
40
+ source_file = Tempfile.new('abc-16:55:29+ha#he.csv')
41
+ FileUtils.cp(path, source_file)
42
+ path = source_file.path
43
+ end
44
+
45
+ path = File.expand_path(path) if params[:absolute_path]
46
+
47
+ # upload it there
48
+ upload_method = GoodData.method(params[:upload_method])
49
+ upload_method.call(path, directory: dir)
50
+
51
+ # download it from there
52
+ temp_file = Tempfile.new('foo.csv')
53
+ expect(temp_file.size).to be == 0
54
+
55
+ download_method = GoodData.method(params[:download_method])
56
+
57
+ file_basename = File.basename(path)
58
+ file_basename = "NOTTHERE_#{file_basename}" if params[:unknown_file]
59
+
60
+ download_block = proc do
61
+ if params[:path_in_file]
62
+ # pass the dir directly in the first param
63
+ # e.g. GoodData.download_from_project_webdav('1234/test-ci-data.csv', '/tmp/myfile.csv')
64
+ download_method.call(File.join(dir, file_basename).to_s, temp_file)
65
+ else
66
+ # pass the dir in the :directory option
67
+ # e.g. GoodData.download_from_project_webdav('test-ci-data.csv', '/tmp/myfile.csv', :directory => '1234')
68
+ download_method.call(file_basename, temp_file, directory: dir)
69
+ end
70
+ end
71
+
72
+ # if it's unknown it should raise an error, otherwise it should download the right stuff
73
+ if params[:unknown_file]
74
+ expect do
75
+ download_block.call
76
+ end.to raise_error(ArgumentError)
77
+ else
78
+ download_block.call
79
+
80
+ expect(temp_file.size).to be > 0
81
+
82
+ # expect the contents of the original file and the downloaded file are the same
83
+ expect(IO.read(temp_file)).to be == IO.read(path)
84
+ end
85
+ end
86
+ end
87
+
88
+ describe '#download_from_project_webdav' do
89
+ it "Works with directory directly in the 'file' param for project" do
90
+ test_webdav_upload(
91
+ upload_method: 'upload_to_project_webdav',
92
+ download_method: 'download_from_project_webdav',
93
+ path_in_file: true
94
+ )
95
+ end
96
+ it "Works with directory directly in the 'file' param for user" do
97
+ test_webdav_upload(
98
+ upload_method: 'upload_to_user_webdav',
99
+ download_method: 'download_from_user_webdav',
100
+ path_in_file: true
101
+ )
102
+ end
103
+ it "Works with directories with slash at the end for project" do
104
+ test_webdav_upload(
105
+ upload_method: 'upload_to_project_webdav',
106
+ download_method: 'download_from_project_webdav',
107
+ slash_in_dir: true
108
+ )
109
+ end
110
+ it "Works with directories with slash at the end for user" do
111
+ test_webdav_upload(
112
+ upload_method: 'upload_to_user_webdav',
113
+ download_method: 'download_from_user_webdav',
114
+ slash_in_dir: true
115
+ )
116
+ end
117
+ it "Fails for non-existing file for project" do
118
+ test_webdav_upload(
119
+ upload_method: 'upload_to_project_webdav',
120
+ download_method: 'download_from_project_webdav',
121
+ unknown_file: true
122
+ )
123
+ end
124
+ it "Fails for non-existing file for user" do
125
+ test_webdav_upload(
126
+ upload_method: 'upload_to_user_webdav',
127
+ download_method: 'download_from_user_webdav',
128
+ unknown_file: true
129
+ )
130
+ end
131
+ it 'Works with nested directories for project' do
132
+ test_webdav_upload(
133
+ upload_method: 'upload_to_project_webdav',
134
+ download_method: 'download_from_project_webdav',
135
+ nested_dir: true
136
+ )
137
+ end
138
+ it 'Works with nested directories for user' do
139
+ test_webdav_upload(
140
+ upload_method: 'upload_to_user_webdav',
141
+ download_method: 'download_from_user_webdav',
142
+ nested_dir: true
143
+ )
144
+ end
145
+ it 'Works with no directory for user' do
146
+ test_webdav_upload(
147
+ upload_method: 'upload_to_user_webdav',
148
+ download_method: 'download_from_user_webdav',
149
+ no_dir: true
150
+ )
151
+ end
152
+ it 'Works with no directory for project' do
153
+ test_webdav_upload(
154
+ upload_method: 'upload_to_project_webdav',
155
+ download_method: 'download_from_project_webdav',
156
+ no_dir: true
157
+ )
158
+ end
159
+ end
160
+ describe '#upload_to_project_webdav' do
161
+ it 'Uploads file with relative path to a dir' do
162
+ test_webdav_upload(
163
+ upload_method: 'upload_to_project_webdav',
164
+ download_method: 'download_from_project_webdav'
165
+ )
166
+ end
167
+
168
+ it 'Uploads file with absolute path to a dir' do
169
+ test_webdav_upload(
170
+ absolute_path: true,
171
+ upload_method: 'upload_to_project_webdav',
172
+ download_method: 'download_from_project_webdav'
173
+ )
174
+ end
175
+
176
+ it 'Uploads file with special chars in filename' do
177
+ test_webdav_upload(
178
+ special_chars: true,
179
+ upload_method: 'upload_to_project_webdav',
180
+ download_method: 'download_from_project_webdav'
181
+ )
182
+ end
183
+ end
184
+
185
+ describe '#upload_to_user_webdav' do
186
+ it 'Uploads file with relative path to a dir' do
187
+ test_webdav_upload(
188
+ upload_method: 'upload_to_user_webdav',
189
+ download_method: 'download_from_user_webdav'
190
+ )
191
+ end
192
+
193
+ it 'Uploads file with absolute path to a dir' do
194
+ test_webdav_upload(
195
+ absolute_path: true,
196
+ upload_method: 'upload_to_user_webdav',
197
+ download_method: 'download_from_user_webdav'
198
+ )
199
+ end
200
+ it 'Uploads file with special chars in filename' do
201
+ test_webdav_upload(
202
+ special_chars: true,
203
+ upload_method: 'upload_to_user_webdav',
204
+ download_method: 'download_from_user_webdav'
205
+ )
206
+ end
207
+ end
208
+
209
+ describe '#user_webdav_path' do
210
+ it 'Gets the path' do
211
+ expect(@client.user_webdav_path).to eq GoodData::Environment::ConnectionHelper::STAGING_URI
212
+ end
213
+ end
214
+ end
@@ -0,0 +1,613 @@
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/models/schedule'
8
+ require 'gooddata/helpers/global_helpers'
9
+
10
+ describe GoodData::Schedule do
11
+ SCHEDULE_ID = ScheduleHelper::SCHEDULE_ID
12
+ SCHEDULE_URL = "/gdc/projects/#{ProjectHelper::PROJECT_ID}/schedules/#{SCHEDULE_ID}"
13
+
14
+ before(:each) do
15
+ @client = ConnectionHelper.create_default_connection
16
+
17
+ @project = ProjectHelper.get_default_project(:client => @client)
18
+ @test_cron = '0 15 27 7 *'
19
+ @test_data = {
20
+ :timezone => 'UTC',
21
+ :cron => '2 2 2 2 *',
22
+ :client => @client,
23
+ :project => @project,
24
+ :params => {
25
+ 'a' => 'b',
26
+ 'b' => 'c'
27
+ }
28
+ }
29
+
30
+ @test_data_with_optional_param = {
31
+ :timezone => 'UTC',
32
+ :cron => '2 2 2 2 *',
33
+ :reschedule => 15,
34
+ :client => @client,
35
+ :project => @project
36
+ }
37
+ end
38
+
39
+ after(:each) do
40
+ @client.disconnect
41
+ end
42
+
43
+ describe '#[]' do
44
+ it 'Returns all schedules when :all passed' do
45
+ res = @project.schedules
46
+ res.should_not be_nil
47
+ res.should be_a_kind_of(Array)
48
+ res.each do |schedule|
49
+ schedule.should be_a_kind_of(GoodData::Schedule)
50
+ end
51
+ end
52
+
53
+ it 'Returns specific schedule when schedule ID passed' do
54
+ res = @project.schedules(SCHEDULE_ID)
55
+ res.should_not be_nil
56
+ res.should be_a_kind_of(GoodData::Schedule)
57
+ end
58
+
59
+ it 'Returns specific schedule when schedule URL passed' do
60
+ res = @project.schedules(SCHEDULE_ID)
61
+ res.should_not be_nil
62
+ res.should be_a_kind_of(GoodData::Schedule)
63
+ end
64
+ end
65
+
66
+ describe '#all' do
67
+ it 'Returns all schedules' do
68
+ res = @project.schedules
69
+ res.should_not be_nil
70
+ res.should be_a_kind_of(Array)
71
+ res.each do |schedule|
72
+ schedule.should be_a_kind_of(GoodData::Schedule)
73
+ end
74
+ end
75
+ end
76
+
77
+ describe '#create' do
78
+ it 'Creates new schedule if mandatory params passed' do
79
+ begin
80
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
81
+ expect(schedule).to be_truthy
82
+ ensure
83
+ schedule && schedule.delete
84
+ end
85
+ end
86
+
87
+ it 'Creates new schedule if mandatory params passed and optional params are present' do
88
+ begin
89
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
90
+ expect(schedule).to be_truthy
91
+ ensure
92
+ schedule && schedule.delete
93
+ end
94
+ end
95
+
96
+ it 'Throws exception when no process ID specified' do
97
+ schedule = nil
98
+ begin
99
+ expect do
100
+ schedule = @project.create_schedule(nil, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
101
+ end.to raise_error 'Process ID has to be provided'
102
+ ensure
103
+ schedule && schedule.delete
104
+ end
105
+ end
106
+
107
+ it 'Throws exception when no executable specified' do
108
+ schedule = nil
109
+ begin
110
+ expect do
111
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, nil, @test_data)
112
+ end.to raise_error 'Executable has to be provided'
113
+ ensure
114
+ schedule && schedule.delete
115
+ end
116
+ end
117
+
118
+ it 'Throws exception when no cron is specified' do
119
+ data = GoodData::Helpers.deep_dup(@test_data)
120
+ data[:cron] = nil
121
+ schedule = nil
122
+ begin
123
+ expect do
124
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, nil, ProcessHelper::DEPLOY_NAME, data)
125
+ end.to raise_error 'Trigger schedule has to be provided'
126
+ ensure
127
+ schedule && schedule.delete
128
+ end
129
+ end
130
+
131
+ it 'Throws exception when no timezone specified' do
132
+ data = GoodData::Helpers.deep_dup(@test_data)
133
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, data)
134
+ schedule.timezone = nil
135
+ begin
136
+ expect do
137
+ schedule.save
138
+ end.to raise_error 'A timezone has to be provided'
139
+ ensure
140
+ schedule && schedule.delete
141
+ end
142
+ end
143
+
144
+ it 'Throws exception when no schedule type is specified' do
145
+ schedule = nil
146
+ data = GoodData::Helpers.deep_dup(@test_data)
147
+ begin
148
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, data)
149
+ schedule.type = nil
150
+ expect do
151
+ schedule.save
152
+ end.to raise_error 'Schedule type has to be provided'
153
+ ensure
154
+ schedule && schedule.delete
155
+ end
156
+ end
157
+ end
158
+
159
+ describe '#cron' do
160
+ it 'Should return cron as string' do
161
+ begin
162
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
163
+ res = schedule.cron
164
+ res.should_not be_nil
165
+ res.should_not be_empty
166
+ res.should be_a_kind_of(String)
167
+ expect(schedule.time_based?).to be_truthy
168
+ ensure
169
+ schedule && schedule.delete
170
+ end
171
+ end
172
+ end
173
+
174
+ describe '#cron=' do
175
+ it 'Assigns the cron and marks the object dirty' do
176
+ test_cron = '2 2 2 2 *'
177
+
178
+ begin
179
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
180
+ schedule.cron = test_cron
181
+ expect(schedule.cron).to eq(test_cron)
182
+ expect(schedule.dirty).to eq(true)
183
+ ensure
184
+ schedule && schedule.delete
185
+ end
186
+ end
187
+ end
188
+
189
+ describe '#executable' do
190
+ it 'Should return executable as string' do
191
+ begin
192
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
193
+ res = schedule.executable
194
+ res.should_not be_nil
195
+ res.should_not be_empty
196
+ res.should be_a_kind_of(String)
197
+ ensure
198
+ schedule && schedule.delete
199
+ end
200
+ end
201
+ end
202
+
203
+ describe '#executable=' do
204
+ it 'Assigns the executable and marks the object dirty' do
205
+ test_executable = 'this/is/test.grf'
206
+
207
+ begin
208
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
209
+ schedule.executable = test_executable
210
+ expect(schedule.executable).to eq(test_executable)
211
+ expect(schedule.dirty).to eq(true)
212
+ ensure
213
+ schedule && schedule.delete
214
+ end
215
+ end
216
+ end
217
+
218
+ describe '#execute' do
219
+ it 'Waits for execution result by default' do
220
+ begin
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
+ )
226
+ schedule = process.create_schedule('0 15 27 7 *', process.executables.first)
227
+ res = schedule.execute
228
+ expect(res).to be_an_instance_of(GoodData::Execution)
229
+ expect([:ok, :error].include?(res.status)).to be_truthy
230
+ ensure
231
+ schedule && schedule.delete
232
+ process && process.delete
233
+ end
234
+ end
235
+
236
+ it 'can be overridden to do not wait for execution result' do
237
+ begin
238
+ process = @project.deploy_process('./spec/data/gooddata_version_process/gooddata_version.zip',
239
+ type: 'RUBY',
240
+ name: 'Test ETL zipped file GoodData Process')
241
+ schedule = process.create_schedule('0 15 27 7 *', process.executables.first)
242
+ res = schedule.execute(:wait => false)
243
+ expect(res).to be_an_instance_of(GoodData::Execution)
244
+ expect([:scheduled, :running].include?(res.status)).to be_truthy
245
+ ensure
246
+ schedule && schedule.delete
247
+ process && process.delete
248
+ end
249
+ end
250
+ end
251
+
252
+ describe '#execution_url' do
253
+ it 'Should return execution URL as string' do
254
+ begin
255
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
256
+ res = schedule.execution_url
257
+ res.should_not be_nil
258
+ res.should_not be_empty
259
+ res.should be_a_kind_of(String)
260
+ ensure
261
+ schedule && schedule.delete
262
+ end
263
+ end
264
+ end
265
+
266
+ describe '#type' do
267
+ it 'Should return execution type as string' do
268
+ begin
269
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
270
+ res = schedule.type
271
+ res.should_not be_nil
272
+ res.should be_a_kind_of(String)
273
+ ensure
274
+ schedule && schedule.delete
275
+ end
276
+ end
277
+ end
278
+
279
+ describe '#hidden_params' do
280
+ it 'Should return execution hidden_params as hash' do
281
+ begin
282
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
283
+ res = schedule.hidden_params
284
+ res.should_not be_nil
285
+ res.should be_a_kind_of(Hash)
286
+ ensure
287
+ schedule && schedule.delete
288
+ end
289
+ end
290
+ end
291
+
292
+ describe '#hidden_params=' do
293
+ it 'Assigns the hidden params and marks the object dirty' do
294
+ begin
295
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
296
+ old_params = schedule.hidden_params
297
+
298
+ test_params = {
299
+ 'PROCESS_ID' => '1-2-3-4'
300
+ }
301
+
302
+ schedule.hidden_params = test_params
303
+ expect(schedule.hidden_params).to eq(old_params.merge(test_params))
304
+ expect(schedule.dirty).to eq(true)
305
+ ensure
306
+ schedule && schedule.delete
307
+ end
308
+ end
309
+ end
310
+
311
+ describe '#set_hidden_parameter' do
312
+ it 'Assigns the hidden parameter and marks the object dirty' do
313
+ begin
314
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
315
+ old_params = schedule.hidden_params
316
+
317
+ test_parameter = { 'test_parameter' => 'just_testing' }
318
+ schedule.set_hidden_parameter(test_parameter.keys.first, test_parameter.values.first)
319
+ expect(schedule.hidden_params).to eq(old_params.merge(test_parameter))
320
+ expect(schedule.dirty).to eq(true)
321
+ ensure
322
+ schedule && schedule.delete
323
+ end
324
+ end
325
+ end
326
+
327
+ describe '#set_parameter' do
328
+ it 'Assigns the hidden parameter and marks the object dirty' do
329
+ begin
330
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
331
+ old_params = schedule.params
332
+
333
+ test_parameter = { 'test_parameter' => 'just_testing' }
334
+ schedule.set_parameter(test_parameter.keys.first, test_parameter.values.first)
335
+ expect(schedule.params).to eq(old_params.merge(test_parameter))
336
+ expect(schedule.dirty).to eq(true)
337
+ ensure
338
+ schedule && schedule.delete
339
+ end
340
+ end
341
+ end
342
+
343
+ describe '#params' do
344
+ it 'Should return execution params as hash' do
345
+ begin
346
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
347
+ res = schedule.params
348
+ res.should_not be_nil
349
+ res.should_not be_empty
350
+ res.should be_a_kind_of(Hash)
351
+ ensure
352
+ schedule && schedule.delete
353
+ end
354
+ end
355
+ end
356
+
357
+ describe '#params=' do
358
+ it 'Assigns the params and marks the object dirty' do
359
+ begin
360
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
361
+
362
+ test_params = {
363
+ 'some_new_param' => '1-2-3-4'
364
+ }
365
+
366
+ schedule.params = test_params
367
+ expect(schedule.params.keys).to eq(%w(PROCESS_ID EXECUTABLE some_new_param))
368
+ expect(schedule.params['some_new_param']).to eq '1-2-3-4'
369
+ expect(schedule.dirty).to eq(true)
370
+ schedule.save
371
+ ensure
372
+ schedule && schedule.delete
373
+ end
374
+ end
375
+ end
376
+
377
+ describe '#process_id' do
378
+ it 'Should return process id as string' do
379
+ begin
380
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
381
+ res = schedule.process_id
382
+ res.should_not be_nil
383
+ res.should_not be_empty
384
+ res.should be_a_kind_of(String)
385
+ ensure
386
+ schedule && schedule.delete
387
+ end
388
+ end
389
+ end
390
+
391
+ describe '#process_id=' do
392
+ it 'Assigns the process_id and marks the object dirty' do
393
+ test_process_id = '1-2-3-4'
394
+
395
+ begin
396
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
397
+ schedule.process_id = test_process_id
398
+ expect(schedule.process_id).to eq(test_process_id)
399
+ expect(schedule.dirty).to eq(true)
400
+ ensure
401
+ schedule && schedule.delete
402
+ end
403
+ end
404
+ end
405
+
406
+ describe '#save' do
407
+ it 'Should save a schedule' do
408
+ begin
409
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
410
+ expect(@project.schedules(schedule.uri)).to eq schedule
411
+ expect(@project.schedules).to include(schedule)
412
+ ensure
413
+ schedule && schedule.delete
414
+ end
415
+ end
416
+ end
417
+
418
+ describe '#state' do
419
+ it 'Should return execution state as string' do
420
+ begin
421
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
422
+ res = schedule.state
423
+ res.should_not be_nil
424
+ res.should_not be_empty
425
+ res.should be_a_kind_of(String)
426
+ ensure
427
+ schedule && schedule.delete
428
+ end
429
+ end
430
+ end
431
+
432
+ describe '#type' do
433
+ it 'Should return execution type as string' do
434
+ begin
435
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
436
+ res = schedule.type
437
+ res.should_not be_nil
438
+ res.should_not be_empty
439
+ res.should be_a_kind_of(String)
440
+ ensure
441
+ schedule && schedule.delete
442
+ end
443
+ end
444
+ end
445
+
446
+ describe '#type=' do
447
+ it 'Assigns the type the object dirty' do
448
+ test_type = 'TEST'
449
+
450
+ begin
451
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
452
+ schedule.type = test_type
453
+ expect(schedule.type).to eq(test_type)
454
+ expect(schedule.dirty).to eq(true)
455
+ ensure
456
+ schedule && schedule.delete
457
+ end
458
+ end
459
+ end
460
+
461
+ describe '#timezone' do
462
+ it 'Should return timezone as string' do
463
+ begin
464
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
465
+ res = schedule.timezone
466
+ res.should_not be_nil
467
+ res.should_not be_empty
468
+ res.should be_a_kind_of(String)
469
+ ensure
470
+ schedule && schedule.delete
471
+ end
472
+ end
473
+ end
474
+
475
+ describe '#timezone=' do
476
+ it 'Assigns the timezone and marks the object dirty' do
477
+ test_timezone = 'PST'
478
+
479
+ begin
480
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
481
+ schedule.timezone = test_timezone
482
+ expect(schedule.timezone).to eq(test_timezone)
483
+ expect(schedule.dirty).to eq(true)
484
+ ensure
485
+ schedule && schedule.delete
486
+ end
487
+ end
488
+ end
489
+
490
+ describe '#reschedule' do
491
+ it 'Should return reschedule as integer' do
492
+ begin
493
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
494
+ res = schedule.reschedule
495
+ res.should_not be_nil
496
+ res.should be_a_kind_of(Integer)
497
+ ensure
498
+ schedule && schedule.delete
499
+ end
500
+ end
501
+ end
502
+
503
+ describe '#reschedule=' do
504
+ it 'Assigns the reschedule and marks the object dirty' do
505
+ test_reschedule = 45
506
+
507
+ begin
508
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
509
+ schedule.reschedule = test_reschedule
510
+ expect(schedule.reschedule).to eq(test_reschedule)
511
+ expect(schedule.dirty).to eq(true)
512
+ ensure
513
+ schedule && schedule.delete
514
+ end
515
+ end
516
+ end
517
+
518
+ describe '#executions' do
519
+ it 'Returns executions' do
520
+ begin
521
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
522
+ expect(schedule.executions.to_a).to be_empty
523
+ schedule.execute
524
+ ensure
525
+ schedule && schedule.delete
526
+ end
527
+ end
528
+ end
529
+
530
+ describe '#name' do
531
+ it 'should be able to get name of the schedule.' do
532
+ begin
533
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
534
+ expect("cc/graph/#{schedule.name}").to eq ProcessHelper::DEPLOY_NAME
535
+ ensure
536
+ schedule && schedule.delete
537
+ end
538
+ end
539
+
540
+ it 'should be able to return your name if specified during creation.' do
541
+ begin
542
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param.merge(name: 'My schedule name'))
543
+ expect(schedule.name).to eq 'My schedule name'
544
+ ensure
545
+ schedule && schedule.delete
546
+ end
547
+ end
548
+ end
549
+
550
+ describe '#trigger_id=' do
551
+ it 'should be able to set trigger_id of the schedule.' do
552
+ begin
553
+ process = @project.processes(ProcessHelper::PROCESS_ID)
554
+ schedule = process.create_schedule(@test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
555
+ expect(schedule.dirty).to be_falsey
556
+ schedule.trigger_id = 'some_other_id'
557
+ expect(schedule.dirty).to be_truthy
558
+ ensure
559
+ schedule && schedule.delete
560
+ end
561
+ end
562
+ end
563
+
564
+ describe '#trigger_id=' do
565
+ it 'should be able to set trigger_id of the schedule.' do
566
+ begin
567
+ process = @project.processes(ProcessHelper::PROCESS_ID)
568
+ schedule = process.create_schedule(@test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
569
+ expect(schedule.dirty).to be_falsey
570
+ schedule.trigger_id = 'some_other_id'
571
+ expect(schedule.dirty).to be_truthy
572
+ ensure
573
+ schedule && schedule.delete
574
+ end
575
+ end
576
+ end
577
+
578
+ describe '#name=' do
579
+ it 'should be able to set name of the schedule.' do
580
+ begin
581
+ process = @project.processes(ProcessHelper::PROCESS_ID)
582
+ schedule = process.create_schedule(@test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
583
+ expect("cc/graph/#{schedule.name}").to eq ProcessHelper::DEPLOY_NAME
584
+ schedule.name = 'MY NAME'
585
+ schedule.save
586
+ schedule2 = process.schedules.find { |s| s.obj_id == schedule.obj_id }
587
+ expect(schedule2.name).to eq 'MY NAME'
588
+ ensure
589
+ schedule && schedule.delete
590
+ end
591
+ end
592
+ end
593
+
594
+ describe '#disable' do
595
+ it 'should preserve the hidden parmeters.' do
596
+ begin
597
+ process = @project.processes(ProcessHelper::PROCESS_ID)
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
+
604
+ schedule.save
605
+ expect(schedule.hidden_params).to eq(GoodData::Helpers::ENCODED_HIDDEN_PARAMS_KEY => nil)
606
+ schedule2 = process.schedules.find { |s| s.uri == schedule.uri }
607
+ expect(schedule2.to_update_payload['schedule']['hiddenParams']).to eq(GoodData::Helpers::ENCODED_HIDDEN_PARAMS_KEY => nil)
608
+ ensure
609
+ schedule && schedule.delete
610
+ end
611
+ end
612
+ end
613
+ end