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,225 @@
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::Project, :constraint => 'slow' do
10
+ before(:all) do
11
+ @client = ConnectionHelper.create_default_connection
12
+ @project = ProjectHelper.get_default_project(:client => @client)
13
+ @domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
14
+ end
15
+
16
+ after(:all) do
17
+ @client.disconnect
18
+ end
19
+
20
+ describe 'projects' do
21
+ it 'Can get all projects' do
22
+ projects = @client.projects
23
+ expect(projects).to_not be_nil
24
+ expect(projects).to be_a_kind_of(Array)
25
+ projects.pmap do |project|
26
+ expect(project).to be_an_instance_of(GoodData::Project)
27
+ end
28
+ end
29
+
30
+ it 'Returns project if ID passed' do
31
+ expect(@project).to_not be_nil
32
+ expect(@project).to be_a_kind_of(GoodData::Project)
33
+ expect(@project.pid).to eq @project.pid
34
+ end
35
+
36
+ it 'Returns project if URL passed' do
37
+ expect(@project).to_not be_nil
38
+ expect(@project).to be_a_kind_of(GoodData::Project)
39
+ expect(@project.pid).to eq @project.pid
40
+ end
41
+
42
+ it 'Throws an exception when invalid format of URL passed' do
43
+ invalid_url = '/gdc/invalid_url'
44
+ expect { GoodData::Project[invalid_url] }.to raise_error
45
+ end
46
+ end
47
+
48
+ describe '#all' do
49
+ it 'Returns all projects' do
50
+ projects = GoodData::Project.all(:client => @client)
51
+ expect(projects).to_not be_nil
52
+ expect(projects).to be_a_kind_of(Array)
53
+ end
54
+ end
55
+
56
+ describe '#get_role_by_identifier' do
57
+ it 'Looks up for role by identifier' do
58
+ role = @project.get_role_by_identifier('readOnlyUserRole')
59
+ expect(role).to_not be_nil
60
+ expect(role).to be_a_kind_of(GoodData::ProjectRole)
61
+ end
62
+ end
63
+
64
+ describe '#get_role_by_summary' do
65
+ it 'Looks up for role by summary' do
66
+ role = @project.get_role_by_summary('read only user role')
67
+ expect(role).to_not be_nil
68
+ expect(role).to be_a_kind_of(GoodData::ProjectRole)
69
+ end
70
+ end
71
+
72
+ describe '#get_role_by_title' do
73
+ it 'Looks up for role by title' do
74
+ role = @project.get_role_by_title('Viewer')
75
+ expect(role).to_not be_nil
76
+ expect(role).to be_a_kind_of(GoodData::ProjectRole)
77
+ end
78
+ end
79
+
80
+ describe "#member" do
81
+ it 'Returns GoodData::Membership when looking for existing user using login' do
82
+ res = @project.get_user(ConnectionHelper::DEFAULT_USERNAME)
83
+ expect(res).to be_instance_of(GoodData::Membership)
84
+ end
85
+
86
+ it 'Returns GoodData::Membership when looking for existing user using URL' do
87
+ res = @project.get_user(ConnectionHelper::DEFAULT_USER_URL)
88
+ expect(res).to be_instance_of(GoodData::Membership)
89
+ end
90
+
91
+ it 'Returns GoodData::Membership when looking for existing user using GoodData::Profile' do
92
+ user = @project.members.first
93
+ res = @project.get_user(user)
94
+ expect(res).to be_instance_of(GoodData::Membership)
95
+ end
96
+
97
+ it 'Returns null for non-existing user' do
98
+ res = @project.get_user(ConnectionHelper::TEST_USERNAME)
99
+ expect(res).to be_nil
100
+ end
101
+ end
102
+
103
+ describe "#member?" do
104
+ it 'Returns true when looking for existing user using login' do
105
+ res = @project.member?(ConnectionHelper::DEFAULT_USERNAME)
106
+ expect(res).to be_truthy
107
+ end
108
+
109
+ it 'Returns true when looking for existing user using URL' do
110
+ res = @project.member?(ConnectionHelper::DEFAULT_USER_URL)
111
+ expect(res).to be_truthy
112
+ end
113
+
114
+ it 'Returns true when looking for existing user using GoodData::Profile' do
115
+ user = @project.members.first
116
+ res = @project.member?(user)
117
+ expect(res).to be_truthy
118
+ end
119
+
120
+ it 'Returns false for non-existing user' do
121
+ res = @project.member?(ConnectionHelper::TEST_USERNAME)
122
+ expect(res).to be_falsey
123
+ end
124
+
125
+ it 'Returns true for existing user when using optional list' do
126
+ list = @project.members
127
+ res = @project.member?(ConnectionHelper::DEFAULT_USERNAME, list)
128
+ expect(res).to be_truthy
129
+ end
130
+
131
+ it 'Returns false for non-existing user when using optional list' do
132
+ list = []
133
+ res = @project.member?(ConnectionHelper::DEFAULT_USERNAME, list)
134
+ expect(res).to be_falsey
135
+ end
136
+ end
137
+
138
+ describe '#members?' do
139
+ it 'Returns array of bools when looking for existing users using GoodData::Profile' do
140
+ users = @project.members.take(10)
141
+ res = @project.members?(users)
142
+ expect(res.all?).to be_truthy
143
+ end
144
+
145
+ it 'Support variety of inputs' do
146
+ users = @project.members.take(1)
147
+ res = @project.members?(users + [ConnectionHelper::TEST_USERNAME])
148
+ expect(res).to eq [true, false]
149
+ end
150
+ end
151
+
152
+ describe '#roles' do
153
+ it 'Returns array of GoodData::ProjectRole' do
154
+ roles = @project.roles
155
+ expect(roles).to be_instance_of(Array)
156
+
157
+ roles.each do |role|
158
+ expect(role).to be_instance_of(GoodData::ProjectRole)
159
+ end
160
+ end
161
+ end
162
+
163
+ describe '#export_clone' do
164
+ context 'when exclude_schedule is true' do
165
+ let(:options) { { exclude_schedules: true } }
166
+ let(:clone) { GoodData::Project.create(title: 'project clone', client: @client, auth_token: ConnectionHelper::GD_PROJECT_TOKEN) }
167
+
168
+ after do
169
+ clone.delete if clone
170
+ end
171
+
172
+ it 'excludes scheduled emails' do
173
+ @project.schedule_mail.save
174
+ export_token = @project.export_clone(options)
175
+ clone.import_clone(export_token)
176
+ expect(@project.scheduled_mails.to_a).not_to be_empty
177
+ expect(clone.scheduled_mails.to_a).to be_empty
178
+ end
179
+ end
180
+
181
+ context 'when cross_data_center_export is true' do
182
+ it 'is ok' do
183
+ # there are no staging environments on other datacenters
184
+ # so just checking if the parameter gets accepted
185
+ @project.export_clone(cross_data_center_export: true)
186
+ end
187
+ end
188
+
189
+ context 'when export task fails' do
190
+ let(:fail_response) do
191
+ response = { taskState: { status: 'ERROR' } }
192
+ GoodData::Helpers.stringify_keys(response)
193
+ end
194
+
195
+ before do
196
+ allow(@client)
197
+ .to receive(:poll_on_response).and_return(fail_response)
198
+ end
199
+
200
+ it 'raises ExportCloneError' do
201
+ expect { @project.export_clone }.to raise_error(GoodData::ExportCloneError)
202
+ end
203
+ end
204
+ end
205
+
206
+ describe '#import_clone' do
207
+ let(:clone) { GoodData::Project.create(title: 'import clone test', client: @client, auth_token: ConnectionHelper::GD_PROJECT_TOKEN) }
208
+ let(:fail_response) do
209
+ response = { taskState: { status: 'ERROR' } }
210
+ GoodData::Helpers.stringify_keys(response)
211
+ end
212
+
213
+ after do
214
+ clone.delete if clone
215
+ end
216
+
217
+ context 'when import task fails' do
218
+ it 'raises ImportCloneError' do
219
+ export_token = @project.export_clone
220
+ allow(@client).to receive(:poll_on_response).and_return(fail_response)
221
+ expect { clone.import_clone(export_token) }.to raise_error(GoodData::ImportCloneError)
222
+ end
223
+ end
224
+ end
225
+ end
@@ -0,0 +1,485 @@
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
+
9
+ describe GoodData::Schedule do
10
+ SCHEDULE_ID = ScheduleHelper::SCHEDULE_ID
11
+ SCHEDULE_URL = "/gdc/projects/#{ProjectHelper::PROJECT_ID}/schedules/#{SCHEDULE_ID}"
12
+
13
+ before(:all) do
14
+ @client = ConnectionHelper.create_default_connection
15
+
16
+ @project = ProjectHelper.get_default_project(:client => @client)
17
+
18
+ # ScheduleHelper.remove_old_schedules(@project)
19
+ # ProcessHelper.remove_old_processes(@project)
20
+ end
21
+
22
+ before(:each) do
23
+ @project_executable = 'graph/graph.grf'
24
+ @test_cron = '0 15 27 7 *'
25
+ @test_data = {
26
+ :timezone => 'UTC',
27
+ :cron => '2 2 2 2 *',
28
+ :client => @client,
29
+ :project => @project,
30
+ :params => {
31
+ 'a' => 'b',
32
+ 'b' => 'c'
33
+ }
34
+ }
35
+
36
+ @test_data_with_optional_param = {
37
+ :timezone => 'UTC',
38
+ :cron => '2 2 2 2 *',
39
+ :reschedule => 15,
40
+ :client => @client,
41
+ :project => @project
42
+ }
43
+ end
44
+
45
+ describe '#create' do
46
+ it 'Creates new schedule if mandatory params passed' do
47
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
48
+ expect(schedule).to be_truthy
49
+ end
50
+
51
+ it 'Creates new schedule if mandatory params passed and optional params are present' do
52
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data_with_optional_param)
53
+ expect(schedule).to be_truthy
54
+ end
55
+
56
+ it 'Throws exception when no process ID specified' do
57
+ expect do
58
+ GoodData::Schedule.create(nil, @test_cron, @project_executable, @test_data)
59
+ end.to raise_error 'Process ID has to be provided'
60
+ end
61
+
62
+ it 'Throws exception when no executable specified' do
63
+ expect do
64
+ GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, nil, @test_data)
65
+ end.to raise_error 'Executable has to be provided'
66
+ end
67
+
68
+ it 'Throws exception when no cron is specified' do
69
+ data = GoodData::Helpers.deep_dup(@test_data)
70
+ data[:cron] = nil
71
+ expect do
72
+ GoodData::Schedule.create(ProcessHelper::PROCESS_ID, nil, @project_executable, data)
73
+ end.to raise_error 'Trigger schedule has to be provided'
74
+ end
75
+ end
76
+
77
+ describe '#cron' do
78
+ it 'Should return cron as string' do
79
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
80
+ res = schedule.cron
81
+ expect(res).not_to be_nil
82
+ expect(res).not_to be_empty
83
+ expect(res).to be_a_kind_of(String)
84
+ expect(schedule.time_based?).to be_truthy
85
+ end
86
+ end
87
+
88
+ describe '#cron=' do
89
+ it 'Assigns the cron and marks the object dirty' do
90
+ test_cron = '2 2 2 2 *'
91
+
92
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
93
+ schedule.cron = test_cron
94
+ expect(schedule.cron).to eq(test_cron)
95
+ expect(schedule.dirty).to eq(true)
96
+ expect(schedule.to_hash[:cron]).to eq test_cron
97
+ expect(schedule.to_update_payload['schedule']['cron']).to eq test_cron
98
+ end
99
+ end
100
+
101
+ describe '#executable' do
102
+ it 'Should return executable as string' do
103
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
104
+ res = schedule.executable
105
+ expect(res).not_to be_nil
106
+ expect(res).not_to be_empty
107
+ expect(res).to be_a_kind_of(String)
108
+ end
109
+ end
110
+
111
+ describe '#executable=' do
112
+ it 'Assigns the executable and marks the object dirty' do
113
+ test_executable = 'this/is/test.grf'
114
+
115
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
116
+ schedule.executable = test_executable
117
+ expect(schedule.executable).to eq(test_executable)
118
+ expect(schedule.dirty).to eq(true)
119
+ expect(schedule.to_hash[:executable]).to eq test_executable
120
+ expect(schedule.to_update_payload['schedule']['params']['EXECUTABLE']).to eq test_executable
121
+ end
122
+ end
123
+
124
+ describe '#execute' do
125
+ it 'Cannot be executed if not saved' do
126
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
127
+ expect(schedule.execute).to be_nil
128
+ end
129
+ end
130
+
131
+ describe '#execution_url' do
132
+ it 'Should return execution URL as string' do
133
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
134
+ expect(schedule.execution_url).to be_nil
135
+ end
136
+ end
137
+
138
+ describe '#type' do
139
+ it 'Should return execution type as string' do
140
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
141
+ expect(schedule.type).to eq 'MSETL'
142
+ expect(schedule.to_hash[:type]).to eq 'MSETL'
143
+ expect(schedule.to_update_payload['schedule']['type']).to eq 'MSETL'
144
+ end
145
+ end
146
+
147
+ describe '#type=' do
148
+ it 'Assigns the type the object dirty' do
149
+ test_type = 'TEST'
150
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
151
+ schedule.type = test_type
152
+ expect(schedule.type).to eq(test_type)
153
+ expect(schedule.dirty).to eq(true)
154
+ expect(schedule.to_hash[:type]).to eq test_type
155
+ expect(schedule.to_update_payload['schedule']['type']).to eq test_type
156
+ end
157
+ end
158
+
159
+ describe '#hidden_params' do
160
+ it 'Should return hidden_params as hash. Empty by default.' do
161
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
162
+ res = schedule.hidden_params
163
+ expect(res).not_to be_nil
164
+ expect(res).to be_a_kind_of(Hash)
165
+ end
166
+
167
+ it 'Should return hidden_params as hash. Filled by default if provided.' do
168
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data.merge(hidden_params: { 'a' => 'b' }))
169
+ res = schedule.hidden_params
170
+ expect(res).not_to be_nil
171
+ expect(res).to be_a_kind_of(Hash)
172
+ expect(res['a']).to eq 'b'
173
+ end
174
+ end
175
+
176
+ describe '#hidden_params=' do
177
+ it 'Assigns the hidden params and marks the object dirty' do
178
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
179
+ old_params = schedule.hidden_params
180
+
181
+ test_params = {
182
+ 'PROCESS_ID' => '1-2-3-4'
183
+ }
184
+
185
+ schedule.hidden_params = test_params
186
+ expect(schedule.hidden_params).to eq(old_params.merge(test_params))
187
+ expect(schedule.dirty).to eq(true)
188
+ expect(schedule.to_hash[:hidden_params]).to eq(test_params)
189
+ expect(schedule.to_update_payload['schedule']['hiddenParams']).to eq(test_params)
190
+ end
191
+ end
192
+
193
+ describe '#set_hidden_parameter' do
194
+ it 'Assigns the hidden parameter and marks the object dirty' do
195
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
196
+ old_params = schedule.hidden_params
197
+
198
+ test_parameter = { 'test_parameter' => 'just_testing' }
199
+ schedule.set_hidden_parameter(test_parameter.keys.first, test_parameter.values.first)
200
+ expect(schedule.hidden_params).to eq(old_params.merge(test_parameter))
201
+ expect(schedule.dirty).to eq(true)
202
+ expect(schedule.to_hash[:hidden_params]).to eq(test_parameter)
203
+ expect(schedule.to_update_payload['schedule']['hiddenParams']).to eq(test_parameter)
204
+ end
205
+ end
206
+
207
+ describe '#set_parameter' do
208
+ it 'Assigns the parameter and marks the object dirty' do
209
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
210
+ old_params = schedule.params
211
+
212
+ test_parameter = { 'test_parameter' => 'just_testing' }
213
+ schedule.set_parameter(test_parameter.keys.first, test_parameter.values.first)
214
+ expect(schedule.params).to eq(old_params.merge(test_parameter))
215
+ expect(schedule.dirty).to eq(true)
216
+ expect(schedule.to_hash[:params]).to eq(old_params.merge(test_parameter))
217
+ expect(schedule.to_update_payload['schedule']['params']).to eq(old_params.merge(test_parameter))
218
+ end
219
+ end
220
+
221
+ describe '#params' do
222
+ it 'Should return execution params as hash' do
223
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
224
+ res = schedule.params
225
+ expect(res).not_to be_nil
226
+ expect(res).to be_a_kind_of(Hash)
227
+ end
228
+ end
229
+
230
+ describe '#params=' do
231
+ it 'Updates the params and marks the object dirty' do
232
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
233
+
234
+ test_params = {
235
+ 'some_new_param' => '1-2-3-4'
236
+ }
237
+
238
+ schedule.params = test_params
239
+ expect(schedule.params.keys).to eq(%w(PROCESS_ID EXECUTABLE some_new_param))
240
+ expect(schedule.params['some_new_param']).to eq '1-2-3-4'
241
+ expect(schedule.dirty).to eq(true)
242
+ end
243
+ end
244
+
245
+ describe '#update_params' do
246
+ it 'Updates the params and marks the object dirty' do
247
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data.merge(params: { 'a' => 'b' }))
248
+
249
+ test_params = {
250
+ 'some_new_param' => '1-2-3-4',
251
+ 'a' => 'c'
252
+ }
253
+
254
+ schedule.update_params(test_params)
255
+ expect(schedule.params.keys).to eq(%w(PROCESS_ID EXECUTABLE a some_new_param))
256
+ expect(schedule.params['some_new_param']).to eq '1-2-3-4'
257
+ expect(schedule.params['a']).to eq 'c'
258
+ expect(schedule.dirty).to eq(true)
259
+ end
260
+ end
261
+
262
+ describe '#update_hidden_params' do
263
+ it 'Updates the hidden params and marks the object dirty' do
264
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data.merge(params: { 'a' => 'b' }))
265
+
266
+ schedule.update_hidden_params('some_new_param' => '1-2-3-4', 'a' => 'c', 'x' => '')
267
+ expect(schedule.hidden_params.keys.to_set).to eq(%w(x a some_new_param).to_set)
268
+ expect(schedule.hidden_params['some_new_param']).to eq '1-2-3-4'
269
+ expect(schedule.hidden_params['a']).to eq 'c'
270
+ expect(schedule.dirty).to eq(true)
271
+
272
+ schedule.update_hidden_params('some_new_param' => '1-2-3-4', 'a' => 'd')
273
+ expect(schedule.hidden_params.keys.to_set).to eq(%w(x a some_new_param).to_set)
274
+ expect(schedule.hidden_params['some_new_param']).to eq '1-2-3-4'
275
+ expect(schedule.hidden_params['a']).to eq 'd'
276
+ expect(schedule.hidden_params['x']).to eq ''
277
+ expect(schedule.dirty).to eq(true)
278
+ end
279
+ end
280
+
281
+ describe '#process_id' do
282
+ it 'Should return process id as string' do
283
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
284
+ res = schedule.process_id
285
+ res.should_not be_nil
286
+ res.should_not be_empty
287
+ res.should be_a_kind_of(String)
288
+ end
289
+ end
290
+
291
+ describe '#process_id=' do
292
+ it 'Assigns the process_id and marks the object dirty' do
293
+ test_process_id = '1-2-3-4'
294
+
295
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
296
+ schedule.process_id = test_process_id
297
+ expect(schedule.process_id).to eq(test_process_id)
298
+ expect(schedule.dirty).to eq(true)
299
+ expect(schedule.to_hash[:process_id]).to eq test_process_id
300
+ expect(schedule.to_update_payload['schedule']['params']['PROCESS_ID']).to eq test_process_id
301
+ end
302
+ end
303
+
304
+ describe '#state' do
305
+ it 'Should return schedule state as string' do
306
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
307
+ res = schedule.state
308
+ expect(res).not_to be_nil
309
+ expect(res).to eq 'ENABLED'
310
+ expect(schedule.to_hash[:state]).to eq 'ENABLED'
311
+ expect(schedule.to_update_payload['schedule']['state']).to eq 'ENABLED'
312
+ end
313
+
314
+ it 'Should return schedule state as string as provided' do
315
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data.merge(:state => 'DISABLED'))
316
+ res = schedule.state
317
+ expect(res).not_to be_nil
318
+ expect(res).to eq 'DISABLED'
319
+ expect(schedule.to_hash[:state]).to eq 'DISABLED'
320
+ expect(schedule.to_update_payload['schedule']['state']).to eq 'DISABLED'
321
+ end
322
+ end
323
+
324
+ describe '#timezone' do
325
+ it 'Should return timezone as string' do
326
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
327
+ res = schedule.timezone
328
+ expect(res).not_to be_nil
329
+ expect(res).to be_a_kind_of(String)
330
+ end
331
+ end
332
+
333
+ describe '#timezone=' do
334
+ it 'Assigns the timezone and marks the object dirty' do
335
+ test_timezone = 'PST'
336
+
337
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
338
+ schedule.timezone = test_timezone
339
+ expect(schedule.timezone).to eq(test_timezone)
340
+ expect(schedule.dirty).to eq(true)
341
+ end
342
+ end
343
+
344
+ describe '#reschedule' do
345
+ it 'Should return reschedule nil if not provided' do
346
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
347
+ expect(schedule.reschedule).to eq nil
348
+ end
349
+
350
+ it 'Should return reschedule as integer' do
351
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data_with_optional_param)
352
+ expect(schedule.reschedule).to eq @test_data_with_optional_param[:reschedule]
353
+ expect(schedule.reschedule).to be_a_kind_of(Integer)
354
+ end
355
+ end
356
+
357
+ describe '#reschedule=' do
358
+ it 'Assigns the reschedule and marks the object dirty' do
359
+ test_reschedule = 45
360
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data_with_optional_param)
361
+ expect(schedule.reschedule).to eq @test_data_with_optional_param[:reschedule]
362
+ schedule.reschedule = test_reschedule
363
+ expect(schedule.reschedule).to eq(test_reschedule)
364
+ expect(schedule.dirty).to eq(true)
365
+ expect(schedule.to_hash[:reschedule]).to eq test_reschedule
366
+ expect(schedule.to_update_payload['schedule']['reschedule']).to eq test_reschedule
367
+ end
368
+ end
369
+
370
+ describe '#name' do
371
+ it 'Name is nil if not specified and not saved.' do
372
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data_with_optional_param)
373
+ expect(schedule.name).to eq nil
374
+ expect(schedule.saved?).to eq false
375
+ schedule.name = 'MY NAME'
376
+ expect(schedule.name).to eq 'MY NAME'
377
+ end
378
+
379
+ it 'should be able to return your name if specified during creation.' do
380
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data_with_optional_param.merge(name: 'My schedule name'))
381
+ expect(schedule.name).to eq 'My schedule name'
382
+ end
383
+ end
384
+
385
+ describe '#trigger_id=' do
386
+ it 'should be able to set trigger_id of the schedule.' do
387
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data_with_optional_param)
388
+ expect(schedule.dirty).to be_truthy
389
+ schedule.trigger_id = 'some_other_id'
390
+ expect(schedule.dirty).to be_truthy
391
+ expect(schedule.trigger_id).to eq 'some_other_id'
392
+ end
393
+ end
394
+
395
+ describe '#name=' do
396
+ it 'should be able to set name of the schedule.' do
397
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data_with_optional_param)
398
+ schedule.name = 'MY NAME'
399
+ expect(schedule.name).to eq 'MY NAME'
400
+ end
401
+ end
402
+
403
+ describe '#after' do
404
+ context 'when after is not set' do
405
+ it 'returns nil' do
406
+ schedule = GoodData::Schedule.create(ProcessHelper::PROCESS_ID, @test_cron, @project_executable, @test_data)
407
+ expect(schedule.after).to be_nil
408
+ end
409
+ end
410
+
411
+ context 'when after is set' do
412
+ before do
413
+ @after_process = @project.deploy_process(
414
+ './spec/data/hello_world_process/hello_world.rb',
415
+ type: 'RUBY',
416
+ name: 'After Process'
417
+ )
418
+ @after_schedule = @after_process.create_schedule(
419
+ @test_cron,
420
+ @after_process.executables.first
421
+ )
422
+ @process = @project.deploy_process(
423
+ './spec/data/hello_world_process/hello_world.rb',
424
+ type: 'RUBY',
425
+ name: 'Main Process'
426
+ )
427
+ @schedule = @process.create_schedule(
428
+ @after_schedule,
429
+ @process.executables.first
430
+ )
431
+ end
432
+
433
+ after do
434
+ [@schedule, @process, @after_schedule, @after_process].each do |e|
435
+ e && e.delete
436
+ end
437
+ end
438
+
439
+ it 'returns the after schedule' do
440
+ expect(@schedule.after).to eq @after_schedule
441
+ end
442
+
443
+ it 'returns an updated after schedule' do
444
+ new_schedule = @process.create_schedule(
445
+ '0 0 1 1 *',
446
+ @process.executables.first
447
+ )
448
+ @schedule.after = new_schedule
449
+ expect(@schedule.after).not_to eq @after_schedule
450
+ expect(@schedule.after).to eq new_schedule
451
+ end
452
+ end
453
+ end
454
+
455
+ describe '#save' do
456
+ let(:model) do
457
+ {
458
+ schedule: {
459
+ params: { GRAPH: 'graph.grf' },
460
+ cron: 'foo',
461
+ timezone: 'bar',
462
+ type: 'baz',
463
+ links: { self: 'qux' }
464
+ }
465
+ }
466
+ end
467
+ let(:client) { double('client') }
468
+
469
+ subject { GoodData::Schedule.new(model) }
470
+
471
+ before do
472
+ allow(subject).to receive(:client)
473
+ .and_return(client)
474
+ end
475
+
476
+ it 'rewrites deprecated parameter GRAPH' do
477
+ expect(client).to receive(:put) do |_, body|
478
+ executable = body['schedule']['params']['EXECUTABLE']
479
+ expect(executable).to eq('graph.grf')
480
+ model
481
+ end
482
+ subject.save
483
+ end
484
+ end
485
+ end