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,3 +1,9 @@
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
+
1
7
  require 'gooddata'
2
8
 
3
9
  describe "User filters implementation", :constraint => 'slow' do
@@ -14,7 +20,8 @@ describe "User filters implementation", :constraint => 'slow' do
14
20
  ["lines_changed","committed_on","dev_id","repo_id"],
15
21
  [1,"01/01/2014",1,1],
16
22
  [3,"01/02/2014",2,2],
17
- [5,"05/02/2014",3,1]]
23
+ [5,"05/02/2014",3,1],
24
+ [6,"05/02/2014",1,2]]
18
25
  @project.upload(commits_data, blueprint, 'dataset.commits')
19
26
 
20
27
  devs_data = [
@@ -23,6 +30,13 @@ describe "User filters implementation", :constraint => 'slow' do
23
30
  [2, "petr@gooddata.com"],
24
31
  [3, "jirka@gooddata.com"]]
25
32
  @project.upload(devs_data, blueprint, 'dataset.devs')
33
+
34
+ repos_data = [
35
+ ["repo_id", "repo_name"],
36
+ [1, "goodot"],
37
+ [2, "bam"],
38
+ [3, "infra"]]
39
+ @project.upload(repos_data, blueprint, 'dataset.repos')
26
40
  end
27
41
 
28
42
  after(:all) do
@@ -40,25 +54,23 @@ describe "User filters implementation", :constraint => 'slow' do
40
54
  # [jirka@gooddata.com | petr@gooddata.com | tomas@gooddata.com]
41
55
  # [5.0 | 3.0 | 1.0 ]
42
56
 
43
- metric.execute.should == 9
57
+ metric.execute.should == 15
44
58
  @project.add_data_permissions(filters)
45
- metric.execute.should == 6
59
+ metric.execute.should == 12
46
60
  r = @project.compute_report(left: [metric], top: [@label.attribute])
47
-
48
- r.include_column?(['tomas@gooddata.com', 1]).should == true
61
+ r.include_column?(['tomas@gooddata.com', 7]).should == true
49
62
  r.include_column?(['jirka@gooddata.com', 5]).should == true
50
63
  r.include_column?(['petr@gooddata.com', 3]).should == false
51
64
  end
52
65
 
53
- it "should fail when asked to set a user not in project. No filters should be set up." do
66
+ it "should return errors when asked to set a user not in project. Some filters are set up though." do
54
67
  filters = [
55
68
  ['nonexistent_user@gooddata.com', @label.uri, "tomas@gooddata.com"],
56
69
  [ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com"]
57
70
  ]
58
- expect do
59
- @project.add_data_permissions(filters)
60
- end.to raise_error
61
- expect(@project.data_permissions.count).to eq 0
71
+ results = @project.add_data_permissions(filters)
72
+ expect(results[:results].any? { |r| r[:status] == :failed }).to be_truthy
73
+ expect(@project.data_permissions.count).to eq 2
62
74
  end
63
75
 
64
76
  it "should pass and set users that are in the projects" do
@@ -74,18 +86,41 @@ describe "User filters implementation", :constraint => 'slow' do
74
86
  ['nonexistent_user@gooddata.com', @label.uri, 'tomas@gooddata.com'],
75
87
  [ConnectionHelper::DEFAULT_USERNAME, @label.uri, 'tomas@gooddata.com']
76
88
  ]
89
+ # note that filters will be set up even for nonexistent users but they will not be assigned
77
90
  @project.add_data_permissions(filters, users_must_exist: false)
78
- expect(@project.data_permissions.count).to eq 1
79
- expect(@project.data_permissions.first.pretty_expression).to eq "[Dev] IN ([tomas@gooddata.com])"
91
+ expect(@project.data_permissions.select(&:related_uri).count).to eq 1
92
+ expect(@project.data_permissions.select(&:related_uri).first.pretty_expression).to eq "[Dev] IN ([tomas@gooddata.com])"
80
93
  end
81
94
 
82
95
  it "should fail when asked to set a value not in the project" do
83
96
  filters = [
84
- [ConnectionHelper::DEFAULT_USERNAME, @label.uri, '%^&*( nonexistent value', 'tomas@gooddata.com'],
85
- [ConnectionHelper::DEFAULT_USERNAME, @label.uri, 'tomas@gooddata.com']]
97
+ [ConnectionHelper::DEFAULT_USERNAME, @label.uri, '%^&*( nonexistent value', 'tomas@gooddata.com']]
86
98
  expect do
87
99
  @project.add_data_permissions(filters)
88
100
  end.to raise_error
101
+ begin
102
+ @project.add_data_permissions(filters)
103
+ rescue GoodData::FilterMaqlizationError => e
104
+ expect(e.errors.count).to eq 1
105
+ end
106
+ expect(@project.data_permissions.count).to eq 0
107
+ end
108
+
109
+ it 'should fail but return all values if specified' do
110
+ domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
111
+ u = domain.users.find { |u| u.login != ConnectionHelper::DEFAULT_USERNAME }
112
+ filters = [
113
+ [ConnectionHelper::DEFAULT_USERNAME, @label.uri, '%^&*( nonexistent value', 'tomas@gooddata.com'],
114
+ [u.login, @label.uri, '%^&*( other nonexistent value', 'jirka@gooddata.com']
115
+ ]
116
+ expect do
117
+ @project.add_data_permissions(filters, fail_early: false)
118
+ end.to raise_error
119
+ begin
120
+ @project.add_data_permissions(filters, fail_early: false)
121
+ rescue GoodData::FilterMaqlizationError => e
122
+ expect(e.errors.count).to eq 2
123
+ end
89
124
  expect(@project.data_permissions.count).to eq 0
90
125
  end
91
126
 
@@ -102,13 +137,10 @@ describe "User filters implementation", :constraint => 'slow' do
102
137
  u = domain.users.find { |u| u.login != ConnectionHelper::DEFAULT_USERNAME }
103
138
 
104
139
  filters = [[u.login, @label.uri, "tomas@gooddata.com"]]
105
- expect do
106
- @project.add_data_permissions(filters)
107
- end.to raise_error
108
- @project.add_data_permissions(filters, :domain => domain)
140
+ results = @project.add_data_permissions(filters)
109
141
  filters = @project.data_permissions
110
142
  expect(filters.first.related.login).to eq u.login
111
- expect(filters.count).to eq 1
143
+ expect(filters.select(&:related_uri).count).to eq 1
112
144
  expect(filters.first.pretty_expression).to eq "[Dev] IN ([tomas@gooddata.com])"
113
145
  end
114
146
 
@@ -146,9 +178,10 @@ describe "User filters implementation", :constraint => 'slow' do
146
178
 
147
179
  it "should set up false if all values are nonexistent" do
148
180
  metric = GoodData::Fact.find_first_by_title('Lines Changed', client: @client, project: @project).create_metric
181
+
149
182
  filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, "NONEXISTENT1", "NONEXISTENT2", "NONEXISTENT3"]]
150
183
  @project.add_data_permissions(filters, ignore_missing_values: true)
151
- expect(metric.execute).to eq 9
184
+ expect(metric.execute).to eq 15
152
185
  @project.add_data_permissions(filters, ignore_missing_values: true, restrict_if_missing_all_values: true)
153
186
  expect(metric.execute).to eq nil
154
187
  end
@@ -177,7 +210,7 @@ describe "User filters implementation", :constraint => 'slow' do
177
210
  end
178
211
 
179
212
  it "should be able to update the filter value" do
180
- pending('We cannot swap filters yet')
213
+ skip('We cannot swap filters yet')
181
214
  filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com", "jirka@gooddata.com"]]
182
215
  @project.add_data_permissions(filters)
183
216
  perm = @project.data_permissions.first
@@ -185,4 +218,72 @@ describe "User filters implementation", :constraint => 'slow' do
185
218
  @project.add_data_permissions(filters)
186
219
  expect(perm.reload!.pretty_expression).to eq '[Dev] IN ([tomas@gooddata.com, jirka@gooddata.com])'
187
220
  end
221
+
222
+ it 'should not create any superfluous filters if things go well' do
223
+ # first create some filters. This will error out and some filters will stay there
224
+ filters = [
225
+ ['nonexistent_user@gooddata.com', @label.uri, "tomas@gooddata.com"],
226
+ [ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com"]
227
+ ]
228
+ results = @project.add_data_permissions(filters)
229
+
230
+ # now let's do a correct run
231
+ filters = [
232
+ [ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com"]
233
+ ]
234
+ results = @project.add_data_permissions(filters)
235
+ expect(results[:results].all? { |r| r[:status] == :successful }).to be_truthy
236
+ expect(results[:results].select {|r| r[:type] == :create }.count).to eq 1
237
+ expect(@project.data_permissions.count).to eq 1
238
+ end
239
+
240
+ it "should create a mandatory user filter with double filters" do
241
+
242
+ repo_label = @project.labels('some_attr_label_id')
243
+ metric = @project.create_metric("SELECT SUM(#\"Lines Changed\")")
244
+
245
+ # we want to compute stuff on different user than we are setting it on
246
+ u = @domain.users.find { |u| u.login != ConnectionHelper::DEFAULT_USERNAME }
247
+ password = 'abcd1234'
248
+ u.json['accountSetting']['password'] = password
249
+ @domain.update_user(u)
250
+ @project.add_user(u, 'admin')
251
+
252
+ computation_client = GoodData.connect(u.login, password, verify_ssl: false)
253
+ computation_project = computation_client.projects(@project.pid)
254
+
255
+ # verify we are set up
256
+ r = computation_project.compute_report(left: [metric, 'some_attr_label_id'], top: [@label])
257
+ expect(r.column(4)).to eq ["tomas@gooddata.com", 6, 1]
258
+
259
+ # lets restrict tomas to goodot only
260
+ filters = [[u.login, @label.uri, 'tomas@gooddata.com'],
261
+ [u.login, repo_label.uri, 'goodot']]
262
+ results = @project.add_data_permissions(filters)
263
+ expect(@project.data_permissions.pmap {|f| [f.related.login, f.pretty_expression]}).to eq [
264
+ [u.login, "[Dev] IN ([tomas@gooddata.com])"],
265
+ [u.login, "[Repository Name] IN ([goodot])"]]
266
+
267
+ r = computation_project.compute_report(left: [metric, 'some_attr_label_id'], top: [@label])
268
+ expect(r.column(2)).to eq ["tomas@gooddata.com", 1]
269
+
270
+ # Now lets change repo to bam
271
+ filters = [[u.login, @label.uri, 'tomas@gooddata.com'],
272
+ [u.login, repo_label.uri, 'bam']]
273
+ results = @project.add_data_permissions(filters)
274
+
275
+ expect(@project.data_permissions.pmap {|f| [f.related.login, f.pretty_expression]}).to eq [
276
+ [u.login, "[Dev] IN ([tomas@gooddata.com])"],
277
+ [u.login, "[Repository Name] IN ([bam])"]]
278
+
279
+ r = computation_project.compute_report(left: [metric, 'some_attr_label_id'], top: [@label])
280
+ expect(r.column(2)).to eq ["tomas@gooddata.com", 6]
281
+
282
+ # let's remove the repo restriction
283
+ filters = [[u.login, @label.uri, 'tomas@gooddata.com']]
284
+ results = @project.add_data_permissions(filters)
285
+
286
+ r = computation_project.compute_report(left: [metric, 'some_attr_label_id'], top: [@label])
287
+ expect(r.column(2)).to eq ["tomas@gooddata.com", 6, 1]
288
+ end
188
289
  end
@@ -1,3 +1,9 @@
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
+
1
7
  require 'gooddata'
2
8
 
3
9
  describe "Variables implementation", :constraint => 'slow' do
@@ -100,20 +106,7 @@ describe "Variables implementation", :constraint => 'slow' do
100
106
  expect(@variable.user_values.pmap {|m| m.pretty_expression}).to eq ["[Dev] IN ([jirka@gooddata.com])"]
101
107
  expect(@variable.user_values.count).to eq 1
102
108
  end
103
-
104
- it "should be able to add mandatory filter to a user not in the project if domain is provided" do
105
- domain = @client.domain(ConnectionHelper::DEFAULT_DOMAIN)
106
- u = domain.users.find { |u| u.login != ConnectionHelper::DEFAULT_USERNAME }
107
- filters = [[u.login, @label.uri, "tomas@gooddata.com"]]
108
- expect do
109
- @project.add_variable_permissions(filters, @variable)
110
- end.to raise_error
111
- @project.add_variable_permissions(filters, @variable, :domain => domain)
112
- filters = @variable.user_values
113
- expect(filters.first.related.login).to eq u.login
114
- expect(filters.count).to eq 1
115
- end
116
-
109
+
117
110
  it "should be able to print data permissions in a human readable form" do
118
111
  filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com"]]
119
112
  @project.add_variable_permissions(filters, @variable)
@@ -183,7 +176,7 @@ describe "Variables implementation", :constraint => 'slow' do
183
176
  end
184
177
 
185
178
  it "should be able to update the filter value in place" do
186
- pending('We cannot swap filters yet')
179
+ skip('We cannot swap filters yet')
187
180
  filters = [[ConnectionHelper::DEFAULT_USERNAME, @label.uri, "tomas@gooddata.com", "jirka@gooddata.com"]]
188
181
  @project.add_variable_permissions(filters, @variable)
189
182
  perm = @variable.user_values.first
@@ -1,4 +1,8 @@
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.
2
6
 
3
7
  require 'gooddata'
4
8
  require 'pry'
@@ -14,6 +18,48 @@ describe GoodData::Rest::Connection, :constraint => 'slow' do
14
18
  client.disconnect
15
19
  end
16
20
 
21
+ it 'should be able to log in with user name and password as params' do
22
+ client = GoodData.connect(GoodData::Environment::ConnectionHelper::DEFAULT_USERNAME, GoodData::Environment::ConnectionHelper::DEFAULT_PASSWORD,
23
+ server: GoodData::Environment::ConnectionHelper::DEFAULT_SERVER,
24
+ verify_ssl: false)
25
+ client.disconnect
26
+ end
27
+
28
+ it 'should be able to log in with user name and password as hash' do
29
+ client = GoodData.connect(username: GoodData::Environment::ConnectionHelper::DEFAULT_USERNAME,
30
+ password: GoodData::Environment::ConnectionHelper::DEFAULT_PASSWORD,
31
+ server: GoodData::Environment::ConnectionHelper::DEFAULT_SERVER,
32
+ verify_ssl: false)
33
+ client.disconnect
34
+ end
35
+
36
+ it 'should be able to log in with login and password as hash' do
37
+ client = GoodData.connect(login: GoodData::Environment::ConnectionHelper::DEFAULT_USERNAME,
38
+ password: GoodData::Environment::ConnectionHelper::DEFAULT_PASSWORD,
39
+ server: GoodData::Environment::ConnectionHelper::DEFAULT_SERVER,
40
+ verify_ssl: false)
41
+ client.disconnect
42
+ end
43
+
44
+ it 'should be able to pass additional params in hash' do
45
+ client = GoodData.connect(login: GoodData::Environment::ConnectionHelper::DEFAULT_USERNAME,
46
+ password: GoodData::Environment::ConnectionHelper::DEFAULT_PASSWORD,
47
+ server: GoodData::Environment::ConnectionHelper::DEFAULT_SERVER,
48
+ webdav_server: 'https://some_random_server/',
49
+ verify_ssl: false)
50
+ expect(client.opts[:webdav_server]).to eq 'https://some_random_server/'
51
+ client.disconnect
52
+ end
53
+
54
+ it 'should be able to pass additional params in hash when used login/pass' do
55
+ client = GoodData.connect(GoodData::Environment::ConnectionHelper::DEFAULT_USERNAME, GoodData::Environment::ConnectionHelper::DEFAULT_PASSWORD,
56
+ server: GoodData::Environment::ConnectionHelper::DEFAULT_SERVER,
57
+ webdav_server: 'https://some_random_server/',
58
+ verify_ssl: false)
59
+ expect(client.opts[:webdav_server]).to eq 'https://some_random_server/'
60
+ client.disconnect
61
+ end
62
+
17
63
  it "should log in and disconnect with SST" do
18
64
  regular_client = ConnectionHelper::create_default_connection
19
65
  sst = regular_client.connection.sst_token
@@ -25,6 +71,18 @@ describe GoodData::Rest::Connection, :constraint => 'slow' do
25
71
  regular_client.disconnect
26
72
  end
27
73
 
74
+ it "should log in and disconnect with SST with additional params" do
75
+ regular_client = ConnectionHelper::create_default_connection
76
+ sst = regular_client.connection.sst_token
77
+
78
+ sst_client = GoodData.connect(sst_token: sst, verify_ssl: false, webdav_server: 'https://some_random_server/')
79
+ expect(sst_client.projects.count).to be > 0
80
+ expect(sst_client.opts[:webdav_server]).to eq 'https://some_random_server/'
81
+ sst_client.disconnect
82
+
83
+ regular_client.disconnect
84
+ end
85
+
28
86
  it "should be able to regenerate TT" do
29
87
  regular_client = ConnectionHelper::create_default_connection
30
88
  projects = regular_client.projects
data/spec/spec_helper.rb CHANGED
@@ -1,14 +1,16 @@
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.
2
6
 
3
7
  require 'simplecov'
4
8
  require 'pmap'
5
9
  require 'rspec'
6
- require 'coveralls'
7
10
  require 'pathname'
8
11
  require 'webmock/rspec'
9
12
 
10
13
  WebMock.disable!
11
- Coveralls.wear_merged!
12
14
 
13
15
  # Automagically include all helpers/*_helper.rb
14
16
 
@@ -23,7 +25,11 @@ end
23
25
 
24
26
  include GoodData::Helpers
25
27
 
28
+ RSpec::Expectations.configuration.warn_about_potential_false_positives = false
29
+
26
30
  RSpec.configure do |config|
31
+ config.deprecation_stream = File.open('deprecations.txt', 'w')
32
+
27
33
  config.include BlueprintHelper
28
34
  config.include CliHelper
29
35
  config.include ConnectionHelper
@@ -57,7 +63,7 @@ RSpec.configure do |config|
57
63
 
58
64
  config.before(:suite) do
59
65
  # TODO: Setup test project
60
- GoodData.logging_on
66
+ GoodData.logging_off
61
67
  end
62
68
 
63
69
  config.after(:suite) do
@@ -66,8 +72,7 @@ RSpec.configure do |config|
66
72
  end
67
73
 
68
74
  SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
69
- SimpleCov::Formatter::HTMLFormatter,
70
- Coveralls::SimpleCov::Formatter
75
+ SimpleCov::Formatter::HTMLFormatter
71
76
  ]
72
77
 
73
78
  SimpleCov.start do
@@ -1,4 +1,8 @@
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.
2
6
 
3
7
  require 'gooddata/bricks/bricks'
4
8
 
@@ -1,4 +1,8 @@
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.
2
6
 
3
7
  require 'gooddata/bricks/brick'
4
8
  require 'gooddata/bricks/bricks'
@@ -1,4 +1,8 @@
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.
2
6
 
3
7
  require 'gooddata/bricks/brick'
4
8
  require 'gooddata/bricks/bricks'
@@ -1,4 +1,8 @@
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.
2
6
 
3
7
  require 'gooddata/bricks/brick'
4
8
  require 'gooddata/bricks/bricks'
@@ -1,4 +1,8 @@
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.
2
6
 
3
7
  require 'gooddata/bricks/brick'
4
8
  require 'gooddata/bricks/bricks'
@@ -1,4 +1,8 @@
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.
2
6
 
3
7
  require 'gooddata/bricks/brick'
4
8
  require 'gooddata/bricks/bricks'
@@ -1,4 +1,8 @@
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.
2
6
 
3
7
  require 'gooddata/bricks/brick'
4
8
  require 'gooddata/bricks/bricks'