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,94 @@
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'
8
+
9
+ describe "Over-To data permissions implementation", :constraint => 'slow' do
10
+ before(:all) do
11
+ @spec = JSON.parse(File.read("./spec/data/blueprints/m_n_model.json"), :symbolize_names => true)
12
+ @client = ConnectionHelper::create_default_connection
13
+ @blueprint = GoodData::Model::ProjectBlueprint.new(@spec)
14
+ @project = @client.create_project_from_blueprint(@blueprint, :token => ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
15
+ @domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
16
+ @label = @project.attributes('attr.permission.id').label_by_name('label.permission.id.email')
17
+
18
+ data = [
19
+ ['label.commits.id', 'fact.commits.lines_changed', 'dataset.users'],
20
+ [1, 1, 1],
21
+ [2, 3, 2],
22
+ [3, 5, 3]]
23
+ @project.upload(data, @blueprint, 'dataset.commits')
24
+
25
+ data = [
26
+ ["label.users.id", "label.users.id.email"],
27
+ [1, "tomas@gooddata.com"],
28
+ [2, "petr@gooddata.com"],
29
+ [3, "jirka@gooddata.com"]]
30
+ @project.upload(data, @blueprint, 'dataset.users')
31
+
32
+ data = [
33
+ ["label.permission.id", "label.permission.id.email"],
34
+ [1, "tomas@gooddata.com"],
35
+ [2, "petr@gooddata.com"],
36
+ [3, "jirka@gooddata.com"]]
37
+ @project.upload(data, @blueprint, 'dataset.permission_users')
38
+
39
+ data = [
40
+ ['label.visibility.id', 'dataset.permission_users', 'dataset.commits'],
41
+ [1, 1, 1],
42
+ [3, 1, 3]]
43
+ @project.upload(data, @blueprint, 'dataset.visibility')
44
+
45
+ @variable = @project.create_variable(title: 'uaaa', attribute: @label.attribute).save
46
+
47
+ @attr1 = @project.attributes('attr.visibility.id')
48
+ @attr2 = @project.attributes('attr.commits.id')
49
+
50
+ @filters = [
51
+ {
52
+ login: ConnectionHelper::DEFAULT_USERNAME,
53
+ filters: [
54
+ { label: @label.uri, values: ["tomas@gooddata.com"], over: @attr1.uri, to: @attr2.uri}
55
+ ]
56
+ }
57
+ ]
58
+ end
59
+
60
+ after(:all) do
61
+ @project.delete if @project
62
+ end
63
+
64
+ after(:each) do
65
+ @project.data_permissions.pmap &:delete
66
+ end
67
+
68
+ it "should fail if you are specifying OVER TO filter and variables. Variables do not support OVER TO" do
69
+ expect do
70
+ @project.add_variable_permissions(@filters, @variable)
71
+ end.to raise_exception
72
+ end
73
+
74
+ it "should create an over to filter transparently" do
75
+ metric = @project.create_metric("SELECT SUM(#\"Fact.Commits.Lines Changed\")", :title => 'x')
76
+ expect(metric.execute).to eq 9
77
+ @project.add_data_permissions(@filters)
78
+ expect(metric.execute).to eq 6
79
+
80
+ r = @project.compute_report(left: [metric], top: ['label.users.id.email'])
81
+ expect(r.include_column?(['tomas@gooddata.com', 1])).to eq true
82
+ expect(r.include_column?(['jirka@gooddata.com', 5])).to eq true
83
+ expect(r.include_column?(['petr@gooddata.com', 3])).to eq false
84
+
85
+ data = [['label.visibility.id', 'dataset.permission_users', 'dataset.commits'], [1, 1, 1]]
86
+ @project.upload(data, @blueprint, 'dataset.visibility')
87
+
88
+ expect(metric.execute).to eq 1
89
+ r = @project.compute_report(left: [metric], top: ['label.users.id.email'])
90
+ expect(r.include_column?(['tomas@gooddata.com', 1])).to eq true
91
+ expect(r.include_column?(['jirka@gooddata.com', 5])).to eq false
92
+ expect(r.include_column?(['petr@gooddata.com', 3])).to eq false
93
+ end
94
+ end
@@ -0,0 +1,42 @@
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'
8
+
9
+ describe "Object export between projects", :constraint => 'slow' do
10
+ before(:all) do
11
+ @client = ConnectionHelper.create_default_connection
12
+
13
+ spec = MultiJson.load(File.read("./spec/data/blueprints/test_project_model_spec.json"), :symbolize_keys => true)
14
+
15
+ @source_project = @client.create_project_from_blueprint(spec, token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
16
+ @target_project = @client.create_project_from_blueprint(spec, token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
17
+ end
18
+
19
+ after(:all) do
20
+ @source_project.delete unless @source_project.nil?
21
+ @target_project.delete unless @target_project.nil?
22
+
23
+ @client.disconnect
24
+ end
25
+
26
+ it "should transfer a metric" do
27
+ f = GoodData::Fact.find_first_by_title('Lines Changed', :client => @client, :project => @source_project)
28
+ metric_title = "Testing metric to be exported"
29
+ metric = @source_project.create_metric("SELECT SUM(#\"#{f.title}\")", :title => metric_title)
30
+ metric.save
31
+
32
+ @target_project.metrics.count.should == 0
33
+
34
+ @source_project.partial_md_export(metric, :project => @target_project)
35
+
36
+ expect(@target_project.metrics.count).to eq 1
37
+ metric = GoodData::Metric.find_first_by_title(metric_title, :client => @client, :project => @target_project)
38
+ expect(metric).not_to be_nil
39
+ expect(metric.title).to eq metric_title
40
+ end
41
+
42
+ end
@@ -0,0 +1,264 @@
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 'pmap'
8
+ require 'gooddata'
9
+
10
+ describe GoodData::Project, :constraint => 'slow' do
11
+ before(:all) do
12
+ @client = ConnectionHelper::create_default_connection
13
+ @project = @client.create_project(title: ProjectHelper::PROJECT_TITLE, auth_token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
14
+ @domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
15
+ end
16
+
17
+ after(:all) do
18
+ @project && @project.delete
19
+ @client.disconnect
20
+ end
21
+
22
+ describe '#add_user' do
23
+ it 'Adding user without domain should fail if it is not in the domain' do
24
+ user = ProjectHelper.create_random_user(@client)
25
+ expect do
26
+ @project.add_user(user, 'Admin')
27
+ end.to raise_exception(ArgumentError)
28
+ end
29
+
30
+ it 'Adding user with domain should be added to a project' do
31
+ user = ProjectHelper.create_random_user(@client)
32
+ @domain.create_users([user])
33
+ res = @project.add_user(user, 'Admin', domain: @domain)
34
+ login = GoodData::Helpers.last_uri_part(res['projectUsersUpdateResult']['successful'].first)
35
+ expect(@project.member?(login)).to be_truthy
36
+ end
37
+ end
38
+
39
+ describe '#add_users' do
40
+ it 'Adding user without domain should fail if it is not in the project' do
41
+ users = (1..5).to_a.map do |x|
42
+ {
43
+ user: ProjectHelper.create_random_user(@client),
44
+ role: 'Admin'
45
+ }
46
+ end
47
+
48
+ res = @project.add_users(users)
49
+ expect(res.select { |r| r[:type] == :failed }.count).to eq users.length
50
+ end
51
+
52
+ it 'Adding users with domain should pass and users should be added to domain' do
53
+ users = (1..5).to_a.map do |x|
54
+ {
55
+ user: ProjectHelper.create_random_user(@client),
56
+ role: 'Admin'
57
+ }
58
+ end
59
+ @domain.create_users(users.map {|u| u[:user]})
60
+ res = @project.add_users(users, domain: @domain)
61
+ links = res.select { |r| r[:type] == :successful }.map { |i| GoodData::Helpers.last_uri_part(i[:user]) }
62
+ expect(@project.members?(links).all?).to be_truthy
63
+ end
64
+ end
65
+
66
+ describe '#import_users' do
67
+ it "Updates user's name and surname and removes the users" do
68
+ users = (1..2).to_a.map { |x| ProjectHelper.create_random_user(@client) }
69
+ @domain.create_users(users)
70
+ result = @project.import_users(users, domain: @domain, whitelists: [/gem_tester@gooddata.com/])
71
+ expect(@domain.members?(users)).to be_truthy
72
+ expect(@project.members?(users)).to be_truthy
73
+ expect(@project.members.count).to eq 3
74
+ # update some user stuff
75
+ bill = users[0]
76
+ bill.first_name = 'buffalo'
77
+ bill.last_name = 'bill'
78
+ # import
79
+ @domain.create_users(users, domain: @domain, whitelists: [/gem_tester@gooddata.com/])
80
+ @project.import_users(users, domain: @domain, whitelists: [/gem_tester@gooddata.com/])
81
+ # it should be updated
82
+ bill_changed = @domain.get_user(bill)
83
+ expect(bill_changed.first_name).to eq 'buffalo'
84
+ expect(bill_changed.last_name).to eq 'bill'
85
+ expect(@project.members?(users)).to be_truthy
86
+ expect(@project.members.count).to eq 3
87
+ expect(@project.member?(bill_changed)).to be_truthy
88
+
89
+ # remove everybody but buffalo bill.
90
+ @project.import_users([bill], domain: @domain, whitelists: [/gem_tester@gooddata.com/])
91
+ expect(@project.members.count).to eq 2
92
+ expect(@project.member?(bill)).to be_truthy
93
+ expect(@project.members?(users - [bill]).any?).to be_falsey
94
+
95
+ # Add additional user while changing Buffalos surname and role.
96
+ bill.last_name = 'Billie'
97
+ other_guy = ProjectHelper.create_random_user(@client)
98
+ additional_batch = [bill, other_guy]
99
+
100
+ @domain.create_users(additional_batch, domain: @domain)
101
+ @project.import_users(additional_batch.map { |u| {user: u, role: u.role} }, domain: @domain, whitelists: [/gem_tester@gooddata.com/])
102
+
103
+ expect(@project.members.count).to eq 3
104
+ expect(@project.member?(bill)).to be_truthy
105
+ expect(@project.members?(users - additional_batch).any?).to be_falsey
106
+ end
107
+
108
+ it "Updates user's role in a project" do
109
+ users = (1..5).to_a.map { |x| ProjectHelper.create_random_user(@client).to_hash }
110
+ @domain.create_users(users, domain: @domain)
111
+ @project.import_users(users, domain: @domain, whitelists: [/gem_tester@gooddata.com/])
112
+
113
+ expect(@project.members?(users)).to be_truthy
114
+ user_role_changed = users[1]
115
+ users_unchanged = users - [user_role_changed]
116
+ new_role = users[1][:role] = users[1][:role] == "admin" ? "editor" : "admin"
117
+ @project.import_users(users, domain: @domain, whitelists: [/gem_tester@gooddata.com/])
118
+ expect(@project.get_user(user_role_changed).role.identifier).to eq "#{new_role}Role"
119
+ expect(users_unchanged.map {|u| @project.get_user(u)}.map(&:role).map(&:title).uniq).to eq ['Editor']
120
+ end
121
+
122
+ it "ignores user from both project and end state batch when whitelisted" do
123
+ u = @project.get_user(ConnectionHelper::DEFAULT_USERNAME)
124
+ uh = u.to_hash
125
+ uh[:role] = 'editor'
126
+
127
+ users = (1..5).to_a.map { |x| ProjectHelper.create_random_user(@client).to_hash } + [uh]
128
+ @domain.create_users(users, domain: @domain)
129
+ expect(@project.member?(u)).to be_truthy
130
+ expect(u.role.title).to eq 'Admin'
131
+ @project.import_users(users, domain: @domain, whitelists: [/gem_tester@gooddata.com/])
132
+ expect(@project.member?(u)).to be_truthy
133
+ expect(@project.members?(users).all?).to be_truthy
134
+ expect(@project.get_user(ConnectionHelper::DEFAULT_USERNAME).role.title).to eq 'Admin'
135
+ end
136
+
137
+ end
138
+
139
+ describe '#set_user_roles' do
140
+ it 'Properly updates user roles as needed' do
141
+ users_to_import = @domain.users.drop(rand(100)).take(5).map {|u| { user: u, role: 'admin' }}
142
+ @project.import_users(users_to_import, domain: @domain, whitelists: [/gem_tester@gooddata.com/])
143
+ users_without_owner = @project.users.reject { |u| u.login == ConnectionHelper::DEFAULT_USERNAME }.pselect { |u| u.role.title == 'Admin' }
144
+
145
+ user_to_change = users_without_owner.sample
146
+ @project.set_user_roles(user_to_change, 'editor')
147
+ expect(user_to_change.role.title).to eq 'Editor'
148
+ @project.set_user_roles(user_to_change, 'admin')
149
+ expect(user_to_change.role.title).to eq 'Admin'
150
+
151
+ # Try different notation
152
+ @project.set_users_roles([user: user_to_change, role: 'editor'])
153
+ expect(user_to_change.role.title).to eq 'Editor'
154
+ @project.set_users_roles([user: user_to_change, role: 'admin'])
155
+ expect(user_to_change.role.title).to eq 'Admin'
156
+ end
157
+
158
+ it 'Properly updates user roles when user specified by email and :roles specified as array of string with role names' do
159
+ # pick non deleted users that are not owner and have other roles than admin or editor
160
+ users = @project.users
161
+ users_without_owner = users
162
+ .reject { |u| u.login == ConnectionHelper::DEFAULT_USERNAME }
163
+ .reject { |u| u.login =~ /^deleted/ }
164
+ .pselect { |u| u.role.title =~ /^(Admin|Editor)/ }
165
+
166
+ # take 10 users that we will exercise
167
+ users_to_change = users_without_owner.sample(10)
168
+
169
+ # alternate roles and prepare structure
170
+ logins = users_to_change.map(&:login)
171
+ roles = users_to_change.map { |u| u.role.title == 'Admin' ? ['Editor'] : ['Admin'] }
172
+
173
+ list = users_to_change.map do |u|
174
+ {
175
+ :user => u.login,
176
+ :roles => u.role.title == 'Admin' ? ['Editor'] : ['Admin']
177
+ }
178
+ end
179
+
180
+ # set the roles
181
+ res = @project.set_users_roles(list)
182
+ expect(res.select { |r| r[:type] == :successful }.length).to equal(list.length)
183
+ expect(logins.map {|l| users.find {|u| u.login == l}}.pmap {|u| u.role.title}).to eq roles.flatten
184
+ end
185
+
186
+ it 'Properly updates user roles when user specified by email and :roles specified as string with role name' do
187
+ users = @project.users
188
+ users_without_owner = users
189
+ .reject { |u| u.login == ConnectionHelper::DEFAULT_USERNAME }
190
+ .reject(&:deleted?)
191
+ .pselect { |u| u.role.title =~ /^(Admin|Editor)/ }
192
+
193
+ users_to_change = users_without_owner.sample(10)
194
+
195
+ logins = users_to_change.map(&:login)
196
+ roles = users_to_change.map { |u| u.role.title == 'Admin' ? 'Editor' : 'Admin' }
197
+
198
+ list = users_to_change.map do |u|
199
+ {
200
+ :user => u.login,
201
+ :roles => u.role.title == 'Admin' ? 'Editor' : 'Admin'
202
+ }
203
+ end
204
+
205
+ res = @project.set_users_roles(list)
206
+ expect(res.select { |r| r[:type] == :successful }.length).to equal(list.length)
207
+ expect(logins.map {|l| users.find {|u| u.login == l}}.pmap {|u| u.role.title}).to eq roles.flatten
208
+
209
+ end
210
+
211
+ it 'can work with groups as well. Groups have to be set up. It can only eat hashes on input in this case' do
212
+ users = (1..5).to_a.map { |x| ProjectHelper.create_random_user(@client).to_hash }
213
+ group_names = ['group_1', 'group_2']
214
+ groups = group_names.map { |g| @project.create_group(name: g) }
215
+ users_with_groups = users.map { |u| u[:user_group] = groups.take(rand(2) + 1).map(&:name); u}
216
+ @domain.create_users(users_with_groups, domain: @domain)
217
+ @project.import_users(users_with_groups, domain: @domain, whitelists: [/gem_tester@gooddata.com/])
218
+ expect(users_with_groups.flat_map { |u| u[:user_group].map { |g| [u[:login], g] } }.all? do |u, g|
219
+ @project.user_groups(g).member?(@project.member(u).uri) rescue false
220
+ end).to be_truthy
221
+
222
+ users_with_group = users.map { |u| u[:user_group] = ['group_1']; u}
223
+ to_whitelist = @project.user_groups('group_2').members.to_a.sample
224
+ @project.import_users(users_with_group, domain: @domain, whitelists: [to_whitelist.login, /gem_tester@gooddata.com/])
225
+ expect(@project.user_groups('group_2').members.map(&:login)).to eq [to_whitelist.login]
226
+ expect(users_with_group.flat_map { |u| u[:user_group].map { |g| [u[:login], g] } }.all? do |u, g|
227
+ @project.user_groups(g).member?(@project.member(u).uri) rescue false
228
+ end).to be_truthy
229
+ end
230
+ end
231
+
232
+ describe '#summary' do
233
+ it 'Properly gets summary of project' do
234
+ res = @project.summary
235
+ expect(res).to include(ProjectHelper::PROJECT_SUMMARY)
236
+ end
237
+ end
238
+
239
+ describe '#title' do
240
+ it 'Properly gets title of project' do
241
+ res = @project.title
242
+ expect(res).to include(ProjectHelper::PROJECT_TITLE)
243
+ end
244
+ end
245
+
246
+ describe 'enabling and disabling users' do
247
+ it 'should be able to enable and disable a user' do
248
+ users_without_owner = @project.users
249
+ .reject { |u| u.login == ConnectionHelper::DEFAULT_USERNAME }
250
+ .reject(&:deleted?)
251
+ .select(&:enabled?)
252
+ user = users_without_owner.sample
253
+ expect(user.enabled?).to be_truthy
254
+ expect(user.disabled?).to be_falsey
255
+ user.disable
256
+ expect(user.disabled?).to be_truthy
257
+ expect(user.enabled?).to be_falsey
258
+ user.enable
259
+ expect(user.enabled?).to be_truthy
260
+ expect(user.disabled?).to be_falsey
261
+ expect(user.project).not_to be_nil
262
+ end
263
+ end
264
+ end
@@ -0,0 +1,213 @@
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 'tempfile'
8
+
9
+ require 'gooddata/core/rest'
10
+
11
+ describe GoodData do
12
+ before(:each) do
13
+ @client = ConnectionHelper.create_default_connection
14
+ # @project = ProjectHelper.get_default_project(:client => @client)
15
+ @project = @client.create_project(title: 'Project for schedule testing', auth_token: ConnectionHelper::GD_PROJECT_TOKEN, environment: ProjectHelper::ENVIRONMENT)
16
+ end
17
+
18
+ after(:each) do
19
+ @project && @project.delete
20
+ @client.disconnect
21
+ end
22
+
23
+ describe '#project_webdav_path' do
24
+ it 'Returns path' do
25
+ @client.project_webdav_path(:project => @project)
26
+ end
27
+ end
28
+
29
+ def test_webdav_upload(params)
30
+ GoodData.with_project(@project, :client => @client) do
31
+
32
+ # use current timestamp as a directory name on webdav
33
+ dir = params[:no_dir] ? nil : Time.now.to_i.to_s
34
+ dir = "#{dir}/#{dir}" if params[:nested_dir]
35
+ dir = "#{dir}/" if params[:slash_in_dir]
36
+
37
+ # local file path
38
+ path = 'spec/data/test-ci-data.csv'
39
+
40
+ if params[:special_chars]
41
+ source_file = Tempfile.new('abc-16:55:29+ha#he.csv')
42
+ FileUtils.cp(path, source_file)
43
+ path = source_file.path
44
+ end
45
+
46
+ path = File.expand_path(path) if params[:absolute_path]
47
+
48
+ # upload it there
49
+ upload_method = GoodData.method(params[:upload_method])
50
+ upload_method.call(path, directory: dir)
51
+
52
+ # download it from there
53
+ temp_file = Tempfile.new('foo.csv')
54
+ expect(temp_file.size).to be == 0
55
+
56
+ download_method = GoodData.method(params[:download_method])
57
+
58
+ file_basename = File.basename(path)
59
+ file_basename = "NOTTHERE_#{file_basename}" if params[:unknown_file]
60
+
61
+ download_block = proc do
62
+ if params[:path_in_file]
63
+ # pass the dir directly in the first param
64
+ # e.g. GoodData.download_from_project_webdav('1234/test-ci-data.csv', '/tmp/myfile.csv')
65
+ download_method.call(File.join(dir, file_basename).to_s, temp_file)
66
+ else
67
+ # pass the dir in the :directory option
68
+ # e.g. GoodData.download_from_project_webdav('test-ci-data.csv', '/tmp/myfile.csv', :directory => '1234')
69
+ download_method.call(file_basename, temp_file, directory: dir)
70
+ end
71
+ end
72
+
73
+ # if it's unknown it should raise an error, otherwise it should download the right stuff
74
+ if params[:unknown_file]
75
+ expect{ download_block.call }.to raise_error(ArgumentError)
76
+ else
77
+ download_block.call
78
+
79
+ expect(temp_file.size).to be > 0
80
+
81
+ # expect the contents of the original file and the downloaded file are the same
82
+ expect(IO.read(temp_file)).to be == IO.read(path)
83
+ end
84
+ end
85
+ end
86
+
87
+ describe '#download_from_project_webdav' do
88
+ it "Works with directory directly in the 'file' param for project" do
89
+ test_webdav_upload(
90
+ upload_method: 'upload_to_project_webdav',
91
+ download_method: 'download_from_project_webdav',
92
+ path_in_file: true
93
+ )
94
+ end
95
+ it "Works with directory directly in the 'file' param for user" do
96
+ test_webdav_upload(
97
+ upload_method: 'upload_to_user_webdav',
98
+ download_method: 'download_from_user_webdav',
99
+ path_in_file: true
100
+ )
101
+ end
102
+ it "Works with directories with slash at the end for project" do
103
+ test_webdav_upload(
104
+ upload_method: 'upload_to_project_webdav',
105
+ download_method: 'download_from_project_webdav',
106
+ slash_in_dir: true
107
+ )
108
+ end
109
+ it "Works with directories with slash at the end for user" do
110
+ test_webdav_upload(
111
+ upload_method: 'upload_to_user_webdav',
112
+ download_method: 'download_from_user_webdav',
113
+ slash_in_dir: true
114
+ )
115
+ end
116
+ it "Fails for non-existing file for project" do
117
+ test_webdav_upload(
118
+ upload_method: 'upload_to_project_webdav',
119
+ download_method: 'download_from_project_webdav',
120
+ unknown_file: true
121
+ )
122
+ end
123
+ it "Fails for non-existing file for user" do
124
+ test_webdav_upload(
125
+ upload_method: 'upload_to_user_webdav',
126
+ download_method: 'download_from_user_webdav',
127
+ unknown_file: true
128
+ )
129
+ end
130
+ it 'Works with nested directories for project' do
131
+ test_webdav_upload(
132
+ upload_method: 'upload_to_project_webdav',
133
+ download_method: 'download_from_project_webdav',
134
+ nested_dir: true
135
+ )
136
+ end
137
+ it 'Works with nested directories for user' do
138
+ test_webdav_upload(
139
+ upload_method: 'upload_to_user_webdav',
140
+ download_method: 'download_from_user_webdav',
141
+ nested_dir: true
142
+ )
143
+ end
144
+ it 'Works with no directory for user' do
145
+ test_webdav_upload(
146
+ upload_method: 'upload_to_user_webdav',
147
+ download_method: 'download_from_user_webdav',
148
+ no_dir: true
149
+ )
150
+ end
151
+ it 'Works with no directory for project' do
152
+ test_webdav_upload(
153
+ upload_method: 'upload_to_project_webdav',
154
+ download_method: 'download_from_project_webdav',
155
+ no_dir: true
156
+ )
157
+ end
158
+ end
159
+ describe '#upload_to_project_webdav' do
160
+ it 'Uploads file with relative path to a dir' do
161
+ test_webdav_upload(
162
+ upload_method: 'upload_to_project_webdav',
163
+ download_method: 'download_from_project_webdav'
164
+ )
165
+ end
166
+
167
+ it 'Uploads file with absolute path to a dir' do
168
+ test_webdav_upload(
169
+ absolute_path: true,
170
+ upload_method: 'upload_to_project_webdav',
171
+ download_method: 'download_from_project_webdav'
172
+ )
173
+ end
174
+
175
+ it 'Uploads file with special chars in filename' do
176
+ test_webdav_upload(
177
+ special_chars: true,
178
+ upload_method: 'upload_to_project_webdav',
179
+ download_method: 'download_from_project_webdav'
180
+ )
181
+ end
182
+ end
183
+
184
+ describe '#upload_to_user_webdav' do
185
+ it 'Uploads file with relative path to a dir' do
186
+ test_webdav_upload(
187
+ upload_method: 'upload_to_user_webdav',
188
+ download_method: 'download_from_user_webdav'
189
+ )
190
+ end
191
+
192
+ it 'Uploads file with absolute path to a dir' do
193
+ test_webdav_upload(
194
+ absolute_path: true,
195
+ upload_method: 'upload_to_user_webdav',
196
+ download_method: 'download_from_user_webdav'
197
+ )
198
+ end
199
+ it 'Uploads file with special chars in filename' do
200
+ test_webdav_upload(
201
+ special_chars: true,
202
+ upload_method: 'upload_to_user_webdav',
203
+ download_method: 'download_from_user_webdav'
204
+ )
205
+ end
206
+ end
207
+
208
+ describe '#user_webdav_path' do
209
+ it 'Gets the path' do
210
+ expect(@client.user_webdav_path).to eq GoodData::Environment::ConnectionHelper::STAGING_URI
211
+ end
212
+ end
213
+ end