gooddata-edge 0.6.27.edge

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 (364) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.gitignore +36 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +89 -0
  6. data/.yardopts +22 -0
  7. data/CHANGELOG.md +196 -0
  8. data/CLI.md +439 -0
  9. data/DEPENDENCIES.md +817 -0
  10. data/Gemfile +4 -0
  11. data/Guardfile +5 -0
  12. data/LICENSE +22 -0
  13. data/LICENSE.rb +5 -0
  14. data/README.md +75 -0
  15. data/Rakefile +179 -0
  16. data/TODO.md +32 -0
  17. data/authors.sh +4 -0
  18. data/bin/gooddata +7 -0
  19. data/dependency_decisions.yml +104 -0
  20. data/gooddata +9 -0
  21. data/gooddata.gemspec +63 -0
  22. data/lib/gooddata.rb +31 -0
  23. data/lib/gooddata/app/app.rb +16 -0
  24. data/lib/gooddata/bricks/base_downloader.rb +86 -0
  25. data/lib/gooddata/bricks/brick.rb +38 -0
  26. data/lib/gooddata/bricks/bricks.rb +15 -0
  27. data/lib/gooddata/bricks/middleware/aws_middleware.rb +29 -0
  28. data/lib/gooddata/bricks/middleware/base_middleware.rb +56 -0
  29. data/lib/gooddata/bricks/middleware/bench_middleware.rb +24 -0
  30. data/lib/gooddata/bricks/middleware/bulk_salesforce_middleware.rb +37 -0
  31. data/lib/gooddata/bricks/middleware/decode_params_middleware.rb +20 -0
  32. data/lib/gooddata/bricks/middleware/fs_download_middleware.rb +48 -0
  33. data/lib/gooddata/bricks/middleware/fs_upload_middleware.rb +36 -0
  34. data/lib/gooddata/bricks/middleware/gooddata_middleware.rb +39 -0
  35. data/lib/gooddata/bricks/middleware/logger_middleware.rb +29 -0
  36. data/lib/gooddata/bricks/middleware/middleware.rb +12 -0
  37. data/lib/gooddata/bricks/middleware/restforce_middleware.rb +61 -0
  38. data/lib/gooddata/bricks/middleware/stdout_middleware.rb +23 -0
  39. data/lib/gooddata/bricks/middleware/twitter_middleware.rb +29 -0
  40. data/lib/gooddata/bricks/middleware/undot_params_middleware.rb +37 -0
  41. data/lib/gooddata/bricks/pipeline.rb +32 -0
  42. data/lib/gooddata/bricks/utils.rb +18 -0
  43. data/lib/gooddata/cli/cli.rb +27 -0
  44. data/lib/gooddata/cli/commands/auth_cmd.rb +29 -0
  45. data/lib/gooddata/cli/commands/domain_cmd.rb +28 -0
  46. data/lib/gooddata/cli/commands/project_cmd.rb +45 -0
  47. data/lib/gooddata/cli/hooks.rb +57 -0
  48. data/lib/gooddata/cli/shared.rb +61 -0
  49. data/lib/gooddata/cli/terminal.rb +20 -0
  50. data/lib/gooddata/client.rb +67 -0
  51. data/lib/gooddata/commands/api.rb +64 -0
  52. data/lib/gooddata/commands/auth.rb +107 -0
  53. data/lib/gooddata/commands/base.rb +12 -0
  54. data/lib/gooddata/commands/commands.rb +12 -0
  55. data/lib/gooddata/commands/datasets.rb +148 -0
  56. data/lib/gooddata/commands/datawarehouse.rb +20 -0
  57. data/lib/gooddata/commands/domain.rb +40 -0
  58. data/lib/gooddata/commands/process.rb +67 -0
  59. data/lib/gooddata/commands/project.rb +175 -0
  60. data/lib/gooddata/commands/projects.rb +20 -0
  61. data/lib/gooddata/commands/role.rb +36 -0
  62. data/lib/gooddata/commands/runners.rb +47 -0
  63. data/lib/gooddata/commands/scaffold.rb +69 -0
  64. data/lib/gooddata/commands/user.rb +39 -0
  65. data/lib/gooddata/connection.rb +127 -0
  66. data/lib/gooddata/core/core.rb +12 -0
  67. data/lib/gooddata/core/logging.rb +105 -0
  68. data/lib/gooddata/core/nil_logger.rb +23 -0
  69. data/lib/gooddata/core/project.rb +74 -0
  70. data/lib/gooddata/core/rest.rb +149 -0
  71. data/lib/gooddata/core/user.rb +20 -0
  72. data/lib/gooddata/data/data.rb +12 -0
  73. data/lib/gooddata/data/guesser.rb +122 -0
  74. data/lib/gooddata/exceptions/attr_element_not_found.rb +16 -0
  75. data/lib/gooddata/exceptions/command_failed.rb +11 -0
  76. data/lib/gooddata/exceptions/exceptions.rb +12 -0
  77. data/lib/gooddata/exceptions/execution_limit_exceeded.rb +13 -0
  78. data/lib/gooddata/exceptions/filter_maqlization.rb +16 -0
  79. data/lib/gooddata/exceptions/malformed_user.rb +15 -0
  80. data/lib/gooddata/exceptions/no_project_error.rb +15 -0
  81. data/lib/gooddata/exceptions/object_migration.rb +32 -0
  82. data/lib/gooddata/exceptions/project_not_found.rb +13 -0
  83. data/lib/gooddata/exceptions/segment_not_empty.rb +18 -0
  84. data/lib/gooddata/exceptions/uncomputable_report.rb +13 -0
  85. data/lib/gooddata/exceptions/user_in_different_domain.rb +15 -0
  86. data/lib/gooddata/exceptions/validation_error.rb +16 -0
  87. data/lib/gooddata/extensions/big_decimal.rb +17 -0
  88. data/lib/gooddata/extensions/enumerable.rb +39 -0
  89. data/lib/gooddata/extensions/extensions.rb +10 -0
  90. data/lib/gooddata/extensions/false.rb +15 -0
  91. data/lib/gooddata/extensions/hash.rb +38 -0
  92. data/lib/gooddata/extensions/nil.rb +15 -0
  93. data/lib/gooddata/extensions/numeric.rb +15 -0
  94. data/lib/gooddata/extensions/object.rb +27 -0
  95. data/lib/gooddata/extensions/symbol.rb +15 -0
  96. data/lib/gooddata/extensions/true.rb +15 -0
  97. data/lib/gooddata/extract.rb +21 -0
  98. data/lib/gooddata/goodzilla/goodzilla.rb +159 -0
  99. data/lib/gooddata/helpers/auth_helpers.rb +75 -0
  100. data/lib/gooddata/helpers/csv_helper.rb +61 -0
  101. data/lib/gooddata/helpers/data_helper.rb +116 -0
  102. data/lib/gooddata/helpers/global_helpers.rb +331 -0
  103. data/lib/gooddata/helpers/global_helpers_params.rb +172 -0
  104. data/lib/gooddata/helpers/helpers.rb +10 -0
  105. data/lib/gooddata/mixins/author.rb +26 -0
  106. data/lib/gooddata/mixins/content_getter.rb +15 -0
  107. data/lib/gooddata/mixins/content_property_reader.rb +17 -0
  108. data/lib/gooddata/mixins/content_property_writer.rb +17 -0
  109. data/lib/gooddata/mixins/contributor.rb +20 -0
  110. data/lib/gooddata/mixins/data_getter.rb +15 -0
  111. data/lib/gooddata/mixins/data_property_reader.rb +19 -0
  112. data/lib/gooddata/mixins/data_property_writer.rb +19 -0
  113. data/lib/gooddata/mixins/inspector.rb +53 -0
  114. data/lib/gooddata/mixins/is_attribute.rb +17 -0
  115. data/lib/gooddata/mixins/is_dimension.rb +17 -0
  116. data/lib/gooddata/mixins/is_fact.rb +17 -0
  117. data/lib/gooddata/mixins/is_label.rb +19 -0
  118. data/lib/gooddata/mixins/links.rb +15 -0
  119. data/lib/gooddata/mixins/md_finders.rb +77 -0
  120. data/lib/gooddata/mixins/md_grantees.rb +42 -0
  121. data/lib/gooddata/mixins/md_id_to_uri.rb +34 -0
  122. data/lib/gooddata/mixins/md_json.rb +15 -0
  123. data/lib/gooddata/mixins/md_lock.rb +87 -0
  124. data/lib/gooddata/mixins/md_object_id.rb +15 -0
  125. data/lib/gooddata/mixins/md_object_indexer.rb +64 -0
  126. data/lib/gooddata/mixins/md_object_query.rb +128 -0
  127. data/lib/gooddata/mixins/md_relations.rb +43 -0
  128. data/lib/gooddata/mixins/meta_getter.rb +17 -0
  129. data/lib/gooddata/mixins/meta_property_reader.rb +19 -0
  130. data/lib/gooddata/mixins/meta_property_writer.rb +19 -0
  131. data/lib/gooddata/mixins/mixins.rb +19 -0
  132. data/lib/gooddata/mixins/not_attribute.rb +17 -0
  133. data/lib/gooddata/mixins/not_exportable.rb +15 -0
  134. data/lib/gooddata/mixins/not_fact.rb +17 -0
  135. data/lib/gooddata/mixins/not_group.rb +17 -0
  136. data/lib/gooddata/mixins/not_label.rb +19 -0
  137. data/lib/gooddata/mixins/not_metric.rb +19 -0
  138. data/lib/gooddata/mixins/obj_id.rb +15 -0
  139. data/lib/gooddata/mixins/rest_getters.rb +17 -0
  140. data/lib/gooddata/mixins/rest_resource.rb +47 -0
  141. data/lib/gooddata/mixins/root_key_getter.rb +15 -0
  142. data/lib/gooddata/mixins/root_key_setter.rb +15 -0
  143. data/lib/gooddata/mixins/timestamps.rb +19 -0
  144. data/lib/gooddata/mixins/to_json.rb +11 -0
  145. data/lib/gooddata/mixins/uri_getter.rb +9 -0
  146. data/lib/gooddata/models/blueprint/anchor_field.rb +64 -0
  147. data/lib/gooddata/models/blueprint/attribute_field.rb +29 -0
  148. data/lib/gooddata/models/blueprint/blueprint.rb +11 -0
  149. data/lib/gooddata/models/blueprint/blueprint_field.rb +70 -0
  150. data/lib/gooddata/models/blueprint/dashboard_builder.rb +30 -0
  151. data/lib/gooddata/models/blueprint/dataset_blueprint.rb +449 -0
  152. data/lib/gooddata/models/blueprint/date_dimension.rb +14 -0
  153. data/lib/gooddata/models/blueprint/fact_field.rb +20 -0
  154. data/lib/gooddata/models/blueprint/label_field.rb +43 -0
  155. data/lib/gooddata/models/blueprint/project_blueprint.rb +746 -0
  156. data/lib/gooddata/models/blueprint/project_builder.rb +83 -0
  157. data/lib/gooddata/models/blueprint/reference_field.rb +43 -0
  158. data/lib/gooddata/models/blueprint/schema_blueprint.rb +160 -0
  159. data/lib/gooddata/models/blueprint/schema_builder.rb +89 -0
  160. data/lib/gooddata/models/blueprint/to_manifest.rb +181 -0
  161. data/lib/gooddata/models/blueprint/to_wire.rb +154 -0
  162. data/lib/gooddata/models/client.rb +182 -0
  163. data/lib/gooddata/models/client_synchronization_result.rb +31 -0
  164. data/lib/gooddata/models/client_synchronization_result_details.rb +41 -0
  165. data/lib/gooddata/models/datawarehouse.rb +92 -0
  166. data/lib/gooddata/models/domain.rb +479 -0
  167. data/lib/gooddata/models/execution.rb +115 -0
  168. data/lib/gooddata/models/execution_detail.rb +81 -0
  169. data/lib/gooddata/models/from_wire.rb +160 -0
  170. data/lib/gooddata/models/invitation.rb +75 -0
  171. data/lib/gooddata/models/links.rb +50 -0
  172. data/lib/gooddata/models/membership.rb +441 -0
  173. data/lib/gooddata/models/metadata.rb +272 -0
  174. data/lib/gooddata/models/metadata/attribute.rb +134 -0
  175. data/lib/gooddata/models/metadata/dashboard.rb +108 -0
  176. data/lib/gooddata/models/metadata/dashboard/dashboard_item.rb +76 -0
  177. data/lib/gooddata/models/metadata/dashboard/filter_apply_item.rb +37 -0
  178. data/lib/gooddata/models/metadata/dashboard/filter_item.rb +64 -0
  179. data/lib/gooddata/models/metadata/dashboard/geo_chart_item.rb +56 -0
  180. data/lib/gooddata/models/metadata/dashboard/headline_item.rb +56 -0
  181. data/lib/gooddata/models/metadata/dashboard/iframe_item.rb +46 -0
  182. data/lib/gooddata/models/metadata/dashboard/report_item.rb +92 -0
  183. data/lib/gooddata/models/metadata/dashboard/text_item.rb +55 -0
  184. data/lib/gooddata/models/metadata/dashboard_tab.rb +141 -0
  185. data/lib/gooddata/models/metadata/dataset.rb +64 -0
  186. data/lib/gooddata/models/metadata/dimension.rb +54 -0
  187. data/lib/gooddata/models/metadata/fact.rb +44 -0
  188. data/lib/gooddata/models/metadata/label.rb +128 -0
  189. data/lib/gooddata/models/metadata/metadata.rb +12 -0
  190. data/lib/gooddata/models/metadata/metric.rb +198 -0
  191. data/lib/gooddata/models/metadata/report.rb +247 -0
  192. data/lib/gooddata/models/metadata/report_definition.rb +264 -0
  193. data/lib/gooddata/models/metadata/scheduled_mail.rb +274 -0
  194. data/lib/gooddata/models/metadata/scheduled_mail/dashboard_attachment.rb +62 -0
  195. data/lib/gooddata/models/metadata/scheduled_mail/report_attachment.rb +64 -0
  196. data/lib/gooddata/models/metadata/variable.rb +91 -0
  197. data/lib/gooddata/models/model.rb +282 -0
  198. data/lib/gooddata/models/models.rb +12 -0
  199. data/lib/gooddata/models/module_constants.rb +31 -0
  200. data/lib/gooddata/models/process.rb +316 -0
  201. data/lib/gooddata/models/profile.rb +426 -0
  202. data/lib/gooddata/models/project.rb +1514 -0
  203. data/lib/gooddata/models/project_creator.rb +126 -0
  204. data/lib/gooddata/models/project_metadata.rb +67 -0
  205. data/lib/gooddata/models/project_role.rb +79 -0
  206. data/lib/gooddata/models/report_data_result.rb +266 -0
  207. data/lib/gooddata/models/schedule.rb +518 -0
  208. data/lib/gooddata/models/segment.rb +201 -0
  209. data/lib/gooddata/models/tab_builder.rb +27 -0
  210. data/lib/gooddata/models/user_filters/mandatory_user_filter.rb +76 -0
  211. data/lib/gooddata/models/user_filters/user_filter.rb +100 -0
  212. data/lib/gooddata/models/user_filters/user_filter_builder.rb +512 -0
  213. data/lib/gooddata/models/user_filters/user_filters.rb +13 -0
  214. data/lib/gooddata/models/user_filters/variable_user_filter.rb +31 -0
  215. data/lib/gooddata/models/user_group.rb +241 -0
  216. data/lib/gooddata/rest/README.md +37 -0
  217. data/lib/gooddata/rest/client.rb +389 -0
  218. data/lib/gooddata/rest/connection.rb +765 -0
  219. data/lib/gooddata/rest/object.rb +69 -0
  220. data/lib/gooddata/rest/object_factory.rb +76 -0
  221. data/lib/gooddata/rest/resource.rb +27 -0
  222. data/lib/gooddata/rest/rest.rb +24 -0
  223. data/lib/gooddata/version.rb +23 -0
  224. data/lib/templates/bricks/brick.rb.erb +7 -0
  225. data/lib/templates/bricks/main.rb.erb +5 -0
  226. data/lib/templates/project/Goodfile.erb +4 -0
  227. data/lib/templates/project/data/commits.csv +4 -0
  228. data/lib/templates/project/data/devs.csv +4 -0
  229. data/lib/templates/project/data/repos.csv +3 -0
  230. data/lib/templates/project/model/model.rb.erb +20 -0
  231. data/spec/bricks/bricks_spec.rb +112 -0
  232. data/spec/bricks/default-config.json +8 -0
  233. data/spec/data/.gooddata +4 -0
  234. data/spec/data/blueprints/additional_dataset_module.json +32 -0
  235. data/spec/data/blueprints/big_blueprint_not_pruned.json +2079 -0
  236. data/spec/data/blueprints/invalid_blueprint.json +103 -0
  237. data/spec/data/blueprints/m_n_model.json +104 -0
  238. data/spec/data/blueprints/model_module.json +25 -0
  239. data/spec/data/blueprints/test_blueprint.json +38 -0
  240. data/spec/data/blueprints/test_project_model_spec.json +106 -0
  241. data/spec/data/cc/data/source/commits.csv +4 -0
  242. data/spec/data/cc/data/source/devs.csv +4 -0
  243. data/spec/data/cc/data/source/repos.csv +3 -0
  244. data/spec/data/cc/devel.prm +0 -0
  245. data/spec/data/cc/graph/graph.grf +11 -0
  246. data/spec/data/cc/workspace.prm +19 -0
  247. data/spec/data/column_based_permissions.csv +7 -0
  248. data/spec/data/column_based_permissions2.csv +6 -0
  249. data/spec/data/gd_gse_data_blueprint.json +1371 -0
  250. data/spec/data/gd_gse_data_manifest.json +1424 -0
  251. data/spec/data/gd_gse_data_model.json +1772 -0
  252. data/spec/data/gooddata_version_process/gooddata_version.rb +9 -0
  253. data/spec/data/gooddata_version_process/gooddata_version.zip +0 -0
  254. data/spec/data/hello_world_process/hello_world.rb +9 -0
  255. data/spec/data/hello_world_process/hello_world.zip +0 -0
  256. data/spec/data/line_based_permissions.csv +3 -0
  257. data/spec/data/manifests/test_blueprint.json +32 -0
  258. data/spec/data/manifests/test_project.json +107 -0
  259. data/spec/data/reports/left_attr_report.json +108 -0
  260. data/spec/data/reports/metric_only_one_line.json +83 -0
  261. data/spec/data/reports/report_1.json +197 -0
  262. data/spec/data/reports/top_attr_report.json +108 -0
  263. data/spec/data/ruby_params_process/ruby_params.rb +9 -0
  264. data/spec/data/ruby_process/deep_files/deep_stuff.txt +1 -0
  265. data/spec/data/ruby_process/process.rb +8 -0
  266. data/spec/data/ruby_process/stuff.txt +1 -0
  267. data/spec/data/superfluous_titles_view.json +81 -0
  268. data/spec/data/test-ci-data.csv +2 -0
  269. data/spec/data/users.csv +12 -0
  270. data/spec/data/wire_models/model_view.json +1775 -0
  271. data/spec/data/wire_models/nu_model.json +3046 -0
  272. data/spec/data/wire_models/test_blueprint.json +63 -0
  273. data/spec/data/wire_test_project.json +150 -0
  274. data/spec/environment/default.rb +41 -0
  275. data/spec/environment/develop.rb +31 -0
  276. data/spec/environment/environment.rb +18 -0
  277. data/spec/environment/hotfix.rb +21 -0
  278. data/spec/environment/production.rb +35 -0
  279. data/spec/environment/release.rb +21 -0
  280. data/spec/environment/staging.rb +30 -0
  281. data/spec/environment/staging_3.rb +36 -0
  282. data/spec/helpers/blueprint_helper.rb +26 -0
  283. data/spec/helpers/cli_helper.rb +36 -0
  284. data/spec/helpers/connection_helper.rb +41 -0
  285. data/spec/helpers/crypto_helper.rb +17 -0
  286. data/spec/helpers/csv_helper.rb +18 -0
  287. data/spec/helpers/process_helper.rb +33 -0
  288. data/spec/helpers/project_helper.rb +59 -0
  289. data/spec/helpers/schedule_helper.rb +31 -0
  290. data/spec/helpers/spec_helper.rb +15 -0
  291. data/spec/integration/blueprint_updates_spec.rb +101 -0
  292. data/spec/integration/blueprint_with_grain_spec.rb +72 -0
  293. data/spec/integration/clients_spec.rb +134 -0
  294. data/spec/integration/command_datawarehouse_spec.rb +39 -0
  295. data/spec/integration/command_projects_spec.rb +32 -0
  296. data/spec/integration/create_from_template_spec.rb +22 -0
  297. data/spec/integration/create_project_spec.rb +24 -0
  298. data/spec/integration/date_dim_switch_spec.rb +142 -0
  299. data/spec/integration/deprecated_load_spec.rb +58 -0
  300. data/spec/integration/full_process_schedule_spec.rb +298 -0
  301. data/spec/integration/full_project_spec.rb +569 -0
  302. data/spec/integration/over_to_user_filters_spec.rb +94 -0
  303. data/spec/integration/partial_md_export_import_spec.rb +42 -0
  304. data/spec/integration/project_spec.rb +264 -0
  305. data/spec/integration/rest_spec.rb +213 -0
  306. data/spec/integration/schedule_spec.rb +626 -0
  307. data/spec/integration/segments_spec.rb +141 -0
  308. data/spec/integration/user_filters_spec.rb +290 -0
  309. data/spec/integration/user_group_spec.rb +127 -0
  310. data/spec/integration/variables_spec.rb +188 -0
  311. data/spec/logging_in_logging_out_spec.rb +93 -0
  312. data/spec/spec_helper.rb +95 -0
  313. data/spec/unit/bricks/bricks_spec.rb +35 -0
  314. data/spec/unit/bricks/middleware/aws_middelware_spec.rb +51 -0
  315. data/spec/unit/bricks/middleware/bench_middleware_spec.rb +15 -0
  316. data/spec/unit/bricks/middleware/bulk_salesforce_middleware_spec.rb +15 -0
  317. data/spec/unit/bricks/middleware/gooddata_middleware_spec.rb +15 -0
  318. data/spec/unit/bricks/middleware/logger_middleware_spec.rb +15 -0
  319. data/spec/unit/bricks/middleware/restforce_middleware_spec.rb +15 -0
  320. data/spec/unit/bricks/middleware/stdout_middleware_spec.rb +15 -0
  321. data/spec/unit/bricks/middleware/twitter_middleware_spec.rb +15 -0
  322. data/spec/unit/cli/cli_spec.rb +17 -0
  323. data/spec/unit/cli/commands/cmd_auth_spec.rb +17 -0
  324. data/spec/unit/commands/command_projects_spec.rb +22 -0
  325. data/spec/unit/core/connection_spec.rb +57 -0
  326. data/spec/unit/core/logging_spec.rb +133 -0
  327. data/spec/unit/core/nil_logger_spec.rb +13 -0
  328. data/spec/unit/core/project_spec.rb +54 -0
  329. data/spec/unit/extensions/hash_spec.rb +23 -0
  330. data/spec/unit/godzilla/goodzilla_spec.rb +78 -0
  331. data/spec/unit/helpers/csv_helper_spec.rb +22 -0
  332. data/spec/unit/helpers/data_helper_spec.rb +61 -0
  333. data/spec/unit/helpers/global_helpers_spec.rb +111 -0
  334. data/spec/unit/helpers_spec.rb +86 -0
  335. data/spec/unit/models/blueprint/attributes_spec.rb +29 -0
  336. data/spec/unit/models/blueprint/dataset_spec.rb +121 -0
  337. data/spec/unit/models/blueprint/labels_spec.rb +44 -0
  338. data/spec/unit/models/blueprint/project_blueprint_spec.rb +648 -0
  339. data/spec/unit/models/blueprint/reference_spec.rb +29 -0
  340. data/spec/unit/models/blueprint/schema_builder_spec.rb +38 -0
  341. data/spec/unit/models/blueprint/to_wire_spec.rb +174 -0
  342. data/spec/unit/models/domain_spec.rb +144 -0
  343. data/spec/unit/models/execution_spec.rb +108 -0
  344. data/spec/unit/models/from_wire_spec.rb +296 -0
  345. data/spec/unit/models/invitation_spec.rb +17 -0
  346. data/spec/unit/models/membership_spec.rb +132 -0
  347. data/spec/unit/models/metadata_spec.rb +104 -0
  348. data/spec/unit/models/metric_spec.rb +117 -0
  349. data/spec/unit/models/model_spec.rb +82 -0
  350. data/spec/unit/models/params_spec.rb +118 -0
  351. data/spec/unit/models/profile_spec.rb +215 -0
  352. data/spec/unit/models/project_creator_spec.rb +127 -0
  353. data/spec/unit/models/project_role_spec.rb +94 -0
  354. data/spec/unit/models/project_spec.rb +162 -0
  355. data/spec/unit/models/report_result_data_spec.rb +199 -0
  356. data/spec/unit/models/schedule_spec.rb +418 -0
  357. data/spec/unit/models/to_manifest_spec.rb +63 -0
  358. data/spec/unit/models/unit_project_spec.rb +125 -0
  359. data/spec/unit/models/user_filters_spec.rb +95 -0
  360. data/spec/unit/models/variable_spec.rb +265 -0
  361. data/spec/unit/rest/polling_spec.rb +89 -0
  362. data/spec/unit/rest/resource_spec.rb +10 -0
  363. data/yard-server.sh +3 -0
  364. metadata +1125 -0
@@ -0,0 +1,626 @@
1
+ # encoding: UTF-8
2
+ #
3
+ # Copyright (c) 2010-2015 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(:all) do
15
+ @client = ConnectionHelper.create_default_connection
16
+
17
+ @project = ProjectHelper.get_default_project(:client => @client)
18
+
19
+ # ScheduleHelper.remove_old_schedules(@project)
20
+ # ProcessHelper.remove_old_processes(@project)
21
+ end
22
+
23
+ before(:each) do
24
+ @client = ConnectionHelper.create_default_connection
25
+
26
+ @project = ProjectHelper.get_default_project(:client => @client)
27
+ @test_cron = '0 15 27 7 *'
28
+ @test_data = {
29
+ :timezone => 'UTC',
30
+ :cron => '2 2 2 2 *',
31
+ :client => @client,
32
+ :project => @project,
33
+ :params => {
34
+ 'a' => 'b',
35
+ 'b' => 'c'
36
+ }
37
+ }
38
+
39
+ @test_data_with_optional_param = {
40
+ :timezone => 'UTC',
41
+ :cron => '2 2 2 2 *',
42
+ :reschedule => 15,
43
+ :client => @client,
44
+ :project => @project
45
+ }
46
+ end
47
+
48
+ after(:each) do
49
+ @client.disconnect
50
+ end
51
+
52
+ describe '#[]' do
53
+ it 'Returns all schedules when :all passed' do
54
+ res = @project.schedules
55
+ res.should_not be_nil
56
+ res.should be_a_kind_of(Array)
57
+ res.each do |schedule|
58
+ schedule.should be_a_kind_of(GoodData::Schedule)
59
+ end
60
+ end
61
+
62
+ it 'Returns specific schedule when schedule ID passed' do
63
+ res = @project.schedules(SCHEDULE_ID)
64
+ res.should_not be_nil
65
+ res.should be_a_kind_of(GoodData::Schedule)
66
+ end
67
+
68
+ it 'Returns specific schedule when schedule URL passed' do
69
+ res = @project.schedules(SCHEDULE_ID)
70
+ res.should_not be_nil
71
+ res.should be_a_kind_of(GoodData::Schedule)
72
+ end
73
+ end
74
+
75
+ describe '#all' do
76
+ it 'Returns all schedules' do
77
+ res = @project.schedules
78
+ res.should_not be_nil
79
+ res.should be_a_kind_of(Array)
80
+ res.each do |schedule|
81
+ schedule.should be_a_kind_of(GoodData::Schedule)
82
+ end
83
+ end
84
+ end
85
+
86
+ describe '#create' do
87
+ it 'Creates new schedule if mandatory params passed' do
88
+ begin
89
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
90
+ expect(schedule).to be_truthy
91
+ ensure
92
+ schedule && schedule.delete
93
+ end
94
+ end
95
+
96
+ it 'Creates new schedule if mandatory params passed and optional params are present' do
97
+ begin
98
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
99
+ expect(schedule).to be_truthy
100
+ ensure
101
+ schedule && schedule.delete
102
+ end
103
+ end
104
+
105
+ it 'Throws exception when no process ID specified' do
106
+ schedule = nil
107
+ begin
108
+ expect {
109
+ schedule = @project.create_schedule(nil, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
110
+ }.to raise_error 'Process ID has to be provided'
111
+ ensure
112
+ schedule && schedule.delete
113
+ end
114
+ end
115
+
116
+ it 'Throws exception when no executable specified' do
117
+ schedule = nil
118
+ begin
119
+ expect {
120
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, nil, @test_data)
121
+ }.to raise_error 'Executable has to be provided'
122
+ ensure
123
+ schedule && schedule.delete
124
+ end
125
+ end
126
+
127
+ it 'Throws exception when no cron is specified' do
128
+ data = GoodData::Helpers.deep_dup(@test_data)
129
+ data[:cron] = nil
130
+ schedule = nil
131
+ begin
132
+ expect {
133
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, nil, ProcessHelper::DEPLOY_NAME, data)
134
+ }.to raise_error 'Trigger schedule has to be provided'
135
+ ensure
136
+ schedule && schedule.delete
137
+ end
138
+ end
139
+
140
+ it 'Throws exception when no timezone specified' do
141
+ data = GoodData::Helpers.deep_dup(@test_data)
142
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, data)
143
+ schedule.timezone = nil
144
+ begin
145
+ expect {
146
+ schedule.save
147
+ }.to raise_error 'A timezone has to be provided'
148
+ ensure
149
+ schedule && schedule.delete
150
+ end
151
+ end
152
+
153
+ it 'Throws exception when no schedule type is specified' do
154
+ schedule = nil
155
+ data = GoodData::Helpers.deep_dup(@test_data)
156
+ begin
157
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, data)
158
+ schedule.type = nil
159
+ expect {
160
+ schedule.save
161
+ }.to raise_error 'Schedule type has to be provided'
162
+ ensure
163
+ schedule && schedule.delete
164
+ end
165
+ end
166
+ end
167
+
168
+ describe '#cron' do
169
+ it 'Should return cron as string' do
170
+ begin
171
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
172
+ res = schedule.cron
173
+ res.should_not be_nil
174
+ res.should_not be_empty
175
+ res.should be_a_kind_of(String)
176
+ expect(schedule.time_based?).to be_truthy
177
+ ensure
178
+ schedule && schedule.delete
179
+ end
180
+ end
181
+ end
182
+
183
+ describe '#cron=' do
184
+ it 'Assigns the cron and marks the object dirty' do
185
+ test_cron = '2 2 2 2 *'
186
+
187
+ begin
188
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
189
+ schedule.cron = test_cron
190
+ expect(schedule.cron).to eq(test_cron)
191
+ expect(schedule.dirty).to eq(true)
192
+ ensure
193
+ schedule && schedule.delete
194
+ end
195
+ end
196
+ end
197
+
198
+ describe '#executable' do
199
+ it 'Should return executable as string' do
200
+ begin
201
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
202
+ res = schedule.executable
203
+ res.should_not be_nil
204
+ res.should_not be_empty
205
+ res.should be_a_kind_of(String)
206
+ ensure
207
+ schedule && schedule.delete
208
+ end
209
+ end
210
+ end
211
+
212
+ describe '#executable=' do
213
+ it 'Assigns the executable and marks the object dirty' do
214
+ test_executable = 'this/is/test.grf'
215
+
216
+ begin
217
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
218
+ schedule.executable = test_executable
219
+ expect(schedule.executable).to eq(test_executable)
220
+ expect(schedule.dirty).to eq(true)
221
+ ensure
222
+ schedule && schedule.delete
223
+ end
224
+ end
225
+ end
226
+
227
+ describe '#execute' do
228
+ it 'Waits for execution result by default' do
229
+ begin
230
+ process = @project.deploy_process('./spec/data/gooddata_version_process/gooddata_version.zip',
231
+ type: 'RUBY',
232
+ name: 'Test ETL zipped file GoodData Process')
233
+ schedule = process.create_schedule('0 15 27 7 *', process.executables.first)
234
+ res = schedule.execute
235
+ expect(res).to be_an_instance_of(GoodData::Execution)
236
+ expect([:ok, :error].include?(res.status)).to be_truthy
237
+ ensure
238
+ schedule && schedule.delete
239
+ process && process.delete
240
+ end
241
+ end
242
+
243
+ it 'can be overridden to do not wait for execution result' do
244
+ begin
245
+ process = @project.deploy_process('./spec/data/gooddata_version_process/gooddata_version.zip',
246
+ type: 'RUBY',
247
+ name: 'Test ETL zipped file GoodData Process')
248
+ schedule = process.create_schedule('0 15 27 7 *', process.executables.first)
249
+ res = schedule.execute(:wait => false)
250
+ expect(res).to be_an_instance_of(GoodData::Execution)
251
+ expect([:scheduled, :running].include?(res.status)).to be_truthy
252
+ ensure
253
+ schedule && schedule.delete
254
+ process && process.delete
255
+ end
256
+ end
257
+ end
258
+
259
+ describe '#execution_url' do
260
+ it 'Should return execution URL as string' do
261
+ begin
262
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
263
+ res = schedule.execution_url
264
+ res.should_not be_nil
265
+ res.should_not be_empty
266
+ res.should be_a_kind_of(String)
267
+ ensure
268
+ schedule && schedule.delete
269
+ end
270
+ end
271
+ end
272
+
273
+ describe '#type' do
274
+ it 'Should return execution type as string' do
275
+ begin
276
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
277
+ res = schedule.type
278
+ res.should_not be_nil
279
+ res.should be_a_kind_of(String)
280
+ ensure
281
+ schedule && schedule.delete
282
+ end
283
+ end
284
+ end
285
+
286
+ describe '#hidden_params' do
287
+ it 'Should return execution hidden_params as hash' do
288
+ begin
289
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
290
+ res = schedule.hidden_params
291
+ res.should_not be_nil
292
+ res.should be_a_kind_of(Hash)
293
+ ensure
294
+ schedule && schedule.delete
295
+ end
296
+ end
297
+ end
298
+
299
+ describe '#hidden_params=' do
300
+ it 'Assigns the hidden params and marks the object dirty' do
301
+ begin
302
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
303
+ old_params = schedule.hidden_params
304
+
305
+ test_params = {
306
+ 'PROCESS_ID' => '1-2-3-4'
307
+ }
308
+
309
+ schedule.hidden_params = test_params
310
+ expect(schedule.hidden_params).to eq(old_params.merge(test_params))
311
+ expect(schedule.dirty).to eq(true)
312
+ ensure
313
+ schedule && schedule.delete
314
+ end
315
+ end
316
+ end
317
+
318
+ describe '#set_hidden_parameter' do
319
+ it 'Assigns the hidden parameter and marks the object dirty' do
320
+ begin
321
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
322
+ old_params = schedule.hidden_params
323
+
324
+ test_parameter = {'test_parameter' => 'just_testing' }
325
+ schedule.set_hidden_parameter(test_parameter.keys.first, test_parameter.values.first)
326
+ expect(schedule.hidden_params).to eq(old_params.merge(test_parameter))
327
+ expect(schedule.dirty).to eq(true)
328
+ ensure
329
+ schedule && schedule.delete
330
+ end
331
+ end
332
+ end
333
+
334
+ describe '#set_parameter' do
335
+ it 'Assigns the hidden parameter and marks the object dirty' do
336
+ begin
337
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
338
+ old_params = schedule.params
339
+
340
+ test_parameter = {'test_parameter' => 'just_testing' }
341
+ schedule.set_parameter(test_parameter.keys.first, test_parameter.values.first)
342
+ expect(schedule.params).to eq(old_params.merge(test_parameter))
343
+ expect(schedule.dirty).to eq(true)
344
+ ensure
345
+ schedule && schedule.delete
346
+ end
347
+ end
348
+ end
349
+
350
+
351
+ describe '#params' do
352
+ it 'Should return execution params as hash' do
353
+ begin
354
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
355
+ res = schedule.params
356
+ res.should_not be_nil
357
+ res.should_not be_empty
358
+ res.should be_a_kind_of(Hash)
359
+ ensure
360
+ schedule && schedule.delete
361
+ end
362
+ end
363
+ end
364
+
365
+ describe '#params=' do
366
+ it 'Assigns the params and marks the object dirty' do
367
+ begin
368
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
369
+ old_params = schedule.params
370
+
371
+ test_params = {
372
+ 'some_new_param' => '1-2-3-4'
373
+ }
374
+
375
+ schedule.params = test_params
376
+ expect(schedule.params.keys).to eq(%w(PROCESS_ID EXECUTABLE some_new_param))
377
+ expect(schedule.params['some_new_param']).to eq '1-2-3-4'
378
+ expect(schedule.dirty).to eq(true)
379
+ schedule.save
380
+ ensure
381
+ schedule && schedule.delete
382
+ end
383
+ end
384
+ end
385
+
386
+ describe '#process_id' do
387
+ it 'Should return process id as string' do
388
+ begin
389
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
390
+ res = schedule.process_id
391
+ res.should_not be_nil
392
+ res.should_not be_empty
393
+ res.should be_a_kind_of(String)
394
+ ensure
395
+ schedule && schedule.delete
396
+ end
397
+ end
398
+ end
399
+
400
+ describe '#process_id=' do
401
+ it 'Assigns the process_id and marks the object dirty' do
402
+ test_process_id = '1-2-3-4'
403
+
404
+ begin
405
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
406
+ schedule.process_id = test_process_id
407
+ expect(schedule.process_id).to eq(test_process_id)
408
+ expect(schedule.dirty).to eq(true)
409
+ ensure
410
+ schedule && schedule.delete
411
+ end
412
+ end
413
+ end
414
+
415
+ describe '#save' do
416
+ it 'Should save a schedule' do
417
+ begin
418
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
419
+ expect(@project.schedules(schedule.uri)).to eq schedule
420
+ expect(@project.schedules).to include(schedule)
421
+ ensure
422
+ schedule && schedule.delete
423
+ end
424
+ end
425
+ end
426
+
427
+ describe '#state' do
428
+ it 'Should return execution state as string' do
429
+ begin
430
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
431
+ res = schedule.state
432
+ res.should_not be_nil
433
+ res.should_not be_empty
434
+ res.should be_a_kind_of(String)
435
+ ensure
436
+ schedule && schedule.delete
437
+ end
438
+ end
439
+ end
440
+
441
+ describe '#type' do
442
+ it 'Should return execution type as string' do
443
+ begin
444
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
445
+ res = schedule.type
446
+ res.should_not be_nil
447
+ res.should_not be_empty
448
+ res.should be_a_kind_of(String)
449
+ ensure
450
+ schedule && schedule.delete
451
+ end
452
+ end
453
+ end
454
+
455
+ describe '#type=' do
456
+ it 'Assigns the type the object dirty' do
457
+ test_type = 'TEST'
458
+
459
+ begin
460
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
461
+ schedule.type = test_type
462
+ expect(schedule.type).to eq(test_type)
463
+ expect(schedule.dirty).to eq(true)
464
+ ensure
465
+ schedule && schedule.delete
466
+ end
467
+ end
468
+ end
469
+
470
+ describe '#timezone' do
471
+ it 'Should return timezone as string' do
472
+ begin
473
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
474
+ res = schedule.timezone
475
+ res.should_not be_nil
476
+ res.should_not be_empty
477
+ res.should be_a_kind_of(String)
478
+ ensure
479
+ schedule && schedule.delete
480
+ end
481
+ end
482
+ end
483
+
484
+ describe '#timezone=' do
485
+ it 'Assigns the timezone and marks the object dirty' do
486
+ test_timezone = 'PST'
487
+
488
+ begin
489
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data)
490
+ schedule.timezone = test_timezone
491
+ expect(schedule.timezone).to eq(test_timezone)
492
+ expect(schedule.dirty).to eq(true)
493
+ ensure
494
+ schedule && schedule.delete
495
+ end
496
+ end
497
+ end
498
+
499
+ describe '#reschedule' do
500
+ it 'Should return reschedule as integer' do
501
+ begin
502
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
503
+ res = schedule.reschedule
504
+ res.should_not be_nil
505
+ res.should be_a_kind_of(Integer)
506
+ ensure
507
+ schedule && schedule.delete
508
+ end
509
+ end
510
+ end
511
+
512
+ describe '#reschedule=' do
513
+ it 'Assigns the reschedule and marks the object dirty' do
514
+ test_reschedule = 45
515
+
516
+ begin
517
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
518
+ schedule.reschedule = test_reschedule
519
+ expect(schedule.reschedule).to eq(test_reschedule)
520
+ expect(schedule.dirty).to eq(true)
521
+ ensure
522
+ schedule && schedule.delete
523
+ end
524
+ end
525
+ end
526
+
527
+ describe '#executions' do
528
+ it 'Returns executions' do
529
+ begin
530
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
531
+ expect(schedule.executions.to_a).to be_empty
532
+ schedule.execute
533
+ ensure
534
+ schedule && schedule.delete
535
+ end
536
+ end
537
+ end
538
+
539
+ describe '#name' do
540
+ it 'should be able to get name of the schedule.' do
541
+ begin
542
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
543
+ expect(schedule.name).to eq 'graph.grf'
544
+ ensure
545
+ schedule && schedule.delete
546
+ end
547
+ end
548
+
549
+ it 'should be able to return your name if specified during creation.' do
550
+ begin
551
+ schedule = @project.create_schedule(ProcessHelper::PROCESS_ID, @test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param.merge(name: 'My schedule name'))
552
+ expect(schedule.name).to eq 'My schedule name'
553
+ ensure
554
+ schedule && schedule.delete
555
+ end
556
+ end
557
+ end
558
+
559
+ describe '#trigger_id=' do
560
+ it 'should be able to set trigger_id of the schedule.' do
561
+ begin
562
+ process = @project.processes(ProcessHelper::PROCESS_ID)
563
+ schedule = process.create_schedule(@test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
564
+ expect(schedule.dirty).to be_falsey
565
+ schedule.trigger_id = 'some_other_id'
566
+ expect(schedule.dirty).to be_truthy
567
+ ensure
568
+ schedule && schedule.delete
569
+ end
570
+ end
571
+ end
572
+
573
+ describe '#trigger_id=' do
574
+ it 'should be able to set trigger_id of the schedule.' do
575
+ begin
576
+ process = @project.processes(ProcessHelper::PROCESS_ID)
577
+ schedule = process.create_schedule(@test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
578
+ expect(schedule.dirty).to be_falsey
579
+ schedule.trigger_id = 'some_other_id'
580
+ expect(schedule.dirty).to be_truthy
581
+ ensure
582
+ schedule && schedule.delete
583
+ end
584
+ end
585
+ end
586
+
587
+ describe '#name=' do
588
+ it 'should be able to set name of the schedule.' do
589
+ begin
590
+ process = @project.processes(ProcessHelper::PROCESS_ID)
591
+ schedule = process.create_schedule(@test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param)
592
+ expect(schedule.name).to eq 'graph.grf'
593
+ schedule.name = 'MY NAME'
594
+ schedule.save
595
+ schedule2 = process.schedules.find { |s| s.obj_id == schedule.obj_id }
596
+ expect(schedule2.name).to eq 'MY NAME'
597
+ ensure
598
+ schedule && schedule.delete
599
+ end
600
+ end
601
+ end
602
+
603
+ describe '#disable' do
604
+ it 'should preserve the hidden parmeters.' do
605
+ begin
606
+ process = @project.processes(ProcessHelper::PROCESS_ID)
607
+ schedule = process.create_schedule(@test_cron, ProcessHelper::DEPLOY_NAME, @test_data_with_optional_param.merge({hidden_params: {
608
+ "a" => {
609
+ "b" => "c"
610
+ }
611
+ }}))
612
+
613
+ schedule.save
614
+ expect(schedule.hidden_params).to eq({
615
+ GoodData::Helpers::ENCODED_HIDDEN_PARAMS_KEY => nil
616
+ })
617
+ schedule2 = process.schedules.find { |s| s.uri == schedule.uri }
618
+ expect(schedule2.to_update_payload['schedule']['hiddenParams']).to eq ({
619
+ GoodData::Helpers::ENCODED_HIDDEN_PARAMS_KEY => nil
620
+ })
621
+ ensure
622
+ schedule && schedule.delete
623
+ end
624
+ end
625
+ end
626
+ end