gooddata 0.6.20 → 0.6.22

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