chemlab 0.0.1

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 (536) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +4 -0
  3. data/.rspec +3 -0
  4. data/.rspec_parallel +5 -0
  5. data/Dockerfile +68 -0
  6. data/Gemfile +23 -0
  7. data/Gemfile.lock +137 -0
  8. data/README.md +201 -0
  9. data/Rakefile +47 -0
  10. data/bin/qa +7 -0
  11. data/bin/test +3 -0
  12. data/chemlab.gemspec +43 -0
  13. data/knapsack/master_report.json +54 -0
  14. data/lib/chemlab.rb +5 -0
  15. data/lib/chemlab/version.rb +5 -0
  16. data/qa.rb +513 -0
  17. data/qa/ce/strategy.rb +21 -0
  18. data/qa/ee.rb +234 -0
  19. data/qa/ee/fixtures/gpg/admin.asc +0 -0
  20. data/qa/ee/fixtures/secure_license_files/.gitlab-ci.yml +12 -0
  21. data/qa/ee/fixtures/secure_license_files/gl-license-management-report.json +24 -0
  22. data/qa/ee/fixtures/secure_premade_reports/.gitlab-ci.yml +61 -0
  23. data/qa/ee/fixtures/secure_premade_reports/gl-container-scanning-report.json +105 -0
  24. data/qa/ee/fixtures/secure_premade_reports/gl-dast-report.json +1 -0
  25. data/qa/ee/fixtures/secure_premade_reports/gl-dependency-scanning-report.json +226 -0
  26. data/qa/ee/fixtures/secure_premade_reports/gl-license-management-report.json +42 -0
  27. data/qa/ee/fixtures/secure_premade_reports/gl-sast-report.json +152 -0
  28. data/qa/ee/fixtures/secure_premade_reports/yarn.lock +10024 -0
  29. data/qa/ee/page/admin/geo/nodes/new.rb +36 -0
  30. data/qa/ee/page/admin/geo/nodes/show.rb +23 -0
  31. data/qa/ee/page/admin/license.rb +41 -0
  32. data/qa/ee/page/admin/menu.rb +55 -0
  33. data/qa/ee/page/admin/monitoring/audit_log.rb +27 -0
  34. data/qa/ee/page/admin/overview/groups/edit.rb +27 -0
  35. data/qa/ee/page/admin/settings/component/elasticsearch.rb +38 -0
  36. data/qa/ee/page/admin/settings/component/email.rb +35 -0
  37. data/qa/ee/page/admin/settings/integration.rb +25 -0
  38. data/qa/ee/page/admin/settings/preferences.rb +25 -0
  39. data/qa/ee/page/admin/settings/templates.rb +40 -0
  40. data/qa/ee/page/component/design_management.rb +80 -0
  41. data/qa/ee/page/component/issue_board/show.rb +154 -0
  42. data/qa/ee/page/component/license_management.rb +62 -0
  43. data/qa/ee/page/component/secure_report.rb +38 -0
  44. data/qa/ee/page/component/web_ide/web_terminal_panel.rb +58 -0
  45. data/qa/ee/page/dashboard/projects.rb +54 -0
  46. data/qa/ee/page/file/show.rb +49 -0
  47. data/qa/ee/page/group/contribution_analytics.rb +29 -0
  48. data/qa/ee/page/group/epic/index.rb +46 -0
  49. data/qa/ee/page/group/epic/show.rb +74 -0
  50. data/qa/ee/page/group/issues_analytics.rb +33 -0
  51. data/qa/ee/page/group/members.rb +19 -0
  52. data/qa/ee/page/group/menu.rb +117 -0
  53. data/qa/ee/page/group/roadmap.rb +34 -0
  54. data/qa/ee/page/group/saml_sso_sign_in.rb +22 -0
  55. data/qa/ee/page/group/saml_sso_sign_up.rb +34 -0
  56. data/qa/ee/page/group/secure/show.rb +24 -0
  57. data/qa/ee/page/group/settings/general.rb +112 -0
  58. data/qa/ee/page/group/settings/ldap_sync.rb +38 -0
  59. data/qa/ee/page/group/settings/saml_sso.rb +93 -0
  60. data/qa/ee/page/insights/show.rb +51 -0
  61. data/qa/ee/page/main/banner.rb +19 -0
  62. data/qa/ee/page/merge_request/new.rb +74 -0
  63. data/qa/ee/page/merge_request/show.rb +326 -0
  64. data/qa/ee/page/profile/menu.rb +15 -0
  65. data/qa/ee/page/project/issue/index.rb +46 -0
  66. data/qa/ee/page/project/issue/show.rb +97 -0
  67. data/qa/ee/page/project/menu.rb +17 -0
  68. data/qa/ee/page/project/milestone/show.rb +41 -0
  69. data/qa/ee/page/project/new.rb +56 -0
  70. data/qa/ee/page/project/operations/kubernetes/show.rb +50 -0
  71. data/qa/ee/page/project/operations/metrics/show.rb +101 -0
  72. data/qa/ee/page/project/packages/index.rb +30 -0
  73. data/qa/ee/page/project/packages/show.rb +29 -0
  74. data/qa/ee/page/project/path_locks/index.rb +30 -0
  75. data/qa/ee/page/project/pipeline/show.rb +34 -0
  76. data/qa/ee/page/project/secure/dependency_list.rb +19 -0
  77. data/qa/ee/page/project/secure/show.rb +17 -0
  78. data/qa/ee/page/project/settings/ci_cd.rb +25 -0
  79. data/qa/ee/page/project/settings/integrations.rb +21 -0
  80. data/qa/ee/page/project/settings/license_compliance.rb +67 -0
  81. data/qa/ee/page/project/settings/merge_request.rb +27 -0
  82. data/qa/ee/page/project/settings/mirroring_repositories.rb +30 -0
  83. data/qa/ee/page/project/settings/protected_branches.rb +37 -0
  84. data/qa/ee/page/project/settings/push_rules.rb +82 -0
  85. data/qa/ee/page/project/settings/repository.rb +27 -0
  86. data/qa/ee/page/project/settings/services/jenkins.rb +56 -0
  87. data/qa/ee/page/project/show.rb +35 -0
  88. data/qa/ee/page/project/sub_menus/packages.rb +27 -0
  89. data/qa/ee/page/project/sub_menus/project.rb +21 -0
  90. data/qa/ee/page/project/sub_menus/repository.rb +29 -0
  91. data/qa/ee/page/project/sub_menus/security_compliance.rb +44 -0
  92. data/qa/ee/page/project/sub_menus/settings.rb +42 -0
  93. data/qa/ee/page/project/wiki/show.rb +31 -0
  94. data/qa/ee/resource/board/base_board.rb +26 -0
  95. data/qa/ee/resource/board/board_list/group/board_list.rb +57 -0
  96. data/qa/ee/resource/board/board_list/project/assignee_board_list.rb +23 -0
  97. data/qa/ee/resource/board/board_list/project/base_board_list.rb +50 -0
  98. data/qa/ee/resource/board/board_list/project/label_board_list.rb +28 -0
  99. data/qa/ee/resource/board/board_list/project/milestone_board_list.rb +28 -0
  100. data/qa/ee/resource/board/group_board.rb +25 -0
  101. data/qa/ee/resource/board/project_board.rb +25 -0
  102. data/qa/ee/resource/epic.rb +60 -0
  103. data/qa/ee/resource/geo/node.rb +31 -0
  104. data/qa/ee/resource/group_label.rb +50 -0
  105. data/qa/ee/resource/license.rb +21 -0
  106. data/qa/ee/resource/project_milestone.rb +20 -0
  107. data/qa/ee/resource/settings/elasticsearch.rb +60 -0
  108. data/qa/ee/runtime/env.rb +30 -0
  109. data/qa/ee/runtime/geo.rb +28 -0
  110. data/qa/ee/runtime/saml.rb +37 -0
  111. data/qa/ee/scenario/test/geo.rb +211 -0
  112. data/qa/ee/scenario/test/integration/elasticsearch.rb +15 -0
  113. data/qa/ee/scenario/test/integration/group_saml.rb +17 -0
  114. data/qa/ee/scenario/test/sanity/selectors.rb +17 -0
  115. data/qa/ee/strategy.rb +28 -0
  116. data/qa/fixtures/auto_devops_rack/Dockerfile +9 -0
  117. data/qa/fixtures/auto_devops_rack/Gemfile +3 -0
  118. data/qa/fixtures/auto_devops_rack/Gemfile.lock +15 -0
  119. data/qa/fixtures/auto_devops_rack/Rakefile +7 -0
  120. data/qa/fixtures/auto_devops_rack/config.ru +1 -0
  121. data/qa/fixtures/ldap/admin/1_add_nodes.ldif +7 -0
  122. data/qa/fixtures/ldap/admin/2_add_users.ldif +63 -0
  123. data/qa/fixtures/ldap/admin/3_add_groups.ldif +16 -0
  124. data/qa/fixtures/ldap/non_admin/1_add_nodes.ldif +7 -0
  125. data/qa/fixtures/ldap/non_admin/2_add_users.ldif +61 -0
  126. data/qa/fixtures/ldap/non_admin/3_add_groups.ldif +16 -0
  127. data/qa/fixtures/monitored_auto_devops/.gitlab-ci.yml +337 -0
  128. data/qa/flow/login.rb +39 -0
  129. data/qa/flow/project.rb +19 -0
  130. data/qa/flow/saml.rb +72 -0
  131. data/qa/flow/user.rb +26 -0
  132. data/qa/git/location.rb +34 -0
  133. data/qa/git/repository.rb +269 -0
  134. data/qa/page/admin/menu.rb +110 -0
  135. data/qa/page/admin/new_session.rb +22 -0
  136. data/qa/page/admin/overview/groups/edit.rb +23 -0
  137. data/qa/page/admin/overview/groups/index.rb +32 -0
  138. data/qa/page/admin/overview/groups/show.rb +21 -0
  139. data/qa/page/admin/overview/users/index.rb +35 -0
  140. data/qa/page/admin/overview/users/show.rb +31 -0
  141. data/qa/page/admin/settings/component/account_and_limit.rb +26 -0
  142. data/qa/page/admin/settings/component/ip_limits.rb +30 -0
  143. data/qa/page/admin/settings/component/outbound_requests.rb +33 -0
  144. data/qa/page/admin/settings/component/performance_bar.rb +27 -0
  145. data/qa/page/admin/settings/component/repository_storage.rb +26 -0
  146. data/qa/page/admin/settings/general.rb +23 -0
  147. data/qa/page/admin/settings/metrics_and_profiling.rb +23 -0
  148. data/qa/page/admin/settings/network.rb +30 -0
  149. data/qa/page/admin/settings/repository.rb +23 -0
  150. data/qa/page/alert/auto_devops_alert.rb +13 -0
  151. data/qa/page/base.rb +348 -0
  152. data/qa/page/component/breadcrumbs.rb +19 -0
  153. data/qa/page/component/ci_badge_link.rb +49 -0
  154. data/qa/page/component/clone_panel.rb +38 -0
  155. data/qa/page/component/confirm_modal.rb +25 -0
  156. data/qa/page/component/dropdown_filter.rb +16 -0
  157. data/qa/page/component/dropzone.rb +33 -0
  158. data/qa/page/component/groups_filter.rb +37 -0
  159. data/qa/page/component/issuable/common.rb +31 -0
  160. data/qa/page/component/lazy_loader.rb +15 -0
  161. data/qa/page/component/legacy_clone_panel.rb +47 -0
  162. data/qa/page/component/note.rb +84 -0
  163. data/qa/page/component/select2.rb +48 -0
  164. data/qa/page/component/users_select.rb +14 -0
  165. data/qa/page/component/web_ide/alert.rb +27 -0
  166. data/qa/page/dashboard/groups.rb +34 -0
  167. data/qa/page/dashboard/projects.rb +37 -0
  168. data/qa/page/dashboard/snippet/index.rb +21 -0
  169. data/qa/page/dashboard/snippet/new.rb +70 -0
  170. data/qa/page/dashboard/snippet/show.rb +63 -0
  171. data/qa/page/dashboard/welcome.rb +17 -0
  172. data/qa/page/element.rb +55 -0
  173. data/qa/page/file/edit.rb +13 -0
  174. data/qa/page/file/form.rb +49 -0
  175. data/qa/page/file/shared/commit_button.rb +25 -0
  176. data/qa/page/file/shared/commit_message.rb +21 -0
  177. data/qa/page/file/shared/editor.rb +33 -0
  178. data/qa/page/file/show.rb +36 -0
  179. data/qa/page/group/menu.rb +52 -0
  180. data/qa/page/group/new.rb +37 -0
  181. data/qa/page/group/settings/general.rb +115 -0
  182. data/qa/page/group/show.rb +74 -0
  183. data/qa/page/group/sub_menus/common.rb +27 -0
  184. data/qa/page/group/sub_menus/members.rb +45 -0
  185. data/qa/page/issuable/sidebar.rb +27 -0
  186. data/qa/page/label/index.rb +34 -0
  187. data/qa/page/label/new.rb +32 -0
  188. data/qa/page/layout/banner.rb +19 -0
  189. data/qa/page/layout/performance_bar.rb +41 -0
  190. data/qa/page/main/login.rb +181 -0
  191. data/qa/page/main/menu.rb +150 -0
  192. data/qa/page/main/oauth.rb +21 -0
  193. data/qa/page/main/sign_up.rb +37 -0
  194. data/qa/page/main/terms.rb +21 -0
  195. data/qa/page/mattermost/login.rb +28 -0
  196. data/qa/page/mattermost/main.rb +15 -0
  197. data/qa/page/merge_request/new.rb +68 -0
  198. data/qa/page/merge_request/show.rb +232 -0
  199. data/qa/page/profile/emails.rb +29 -0
  200. data/qa/page/profile/menu.rb +52 -0
  201. data/qa/page/profile/password.rb +23 -0
  202. data/qa/page/profile/personal_access_tokens.rb +67 -0
  203. data/qa/page/profile/ssh_keys.rb +42 -0
  204. data/qa/page/profile/two_factor_auth.rb +17 -0
  205. data/qa/page/project/activity.rb +17 -0
  206. data/qa/page/project/branches/show.rb +56 -0
  207. data/qa/page/project/commit/show.rb +32 -0
  208. data/qa/page/project/fork/new.rb +19 -0
  209. data/qa/page/project/import/github.rb +78 -0
  210. data/qa/page/project/issue/index.rb +71 -0
  211. data/qa/page/project/issue/new.rb +35 -0
  212. data/qa/page/project/issue/show.rb +168 -0
  213. data/qa/page/project/job/show.rb +53 -0
  214. data/qa/page/project/menu.rb +43 -0
  215. data/qa/page/project/milestone/index.rb +19 -0
  216. data/qa/page/project/milestone/new.rb +29 -0
  217. data/qa/page/project/new.rb +76 -0
  218. data/qa/page/project/operations/environments/index.rb +21 -0
  219. data/qa/page/project/operations/environments/show.rb +23 -0
  220. data/qa/page/project/operations/kubernetes/add.rb +21 -0
  221. data/qa/page/project/operations/kubernetes/add_existing.rb +46 -0
  222. data/qa/page/project/operations/kubernetes/index.rb +25 -0
  223. data/qa/page/project/operations/kubernetes/show.rb +81 -0
  224. data/qa/page/project/operations/metrics/show.rb +87 -0
  225. data/qa/page/project/pipeline/index.rb +43 -0
  226. data/qa/page/project/pipeline/show.rb +76 -0
  227. data/qa/page/project/settings/advanced.rb +75 -0
  228. data/qa/page/project/settings/auto_devops.rb +21 -0
  229. data/qa/page/project/settings/ci_cd.rb +39 -0
  230. data/qa/page/project/settings/ci_variables.rb +56 -0
  231. data/qa/page/project/settings/common.rb +13 -0
  232. data/qa/page/project/settings/deploy_keys.rb +69 -0
  233. data/qa/page/project/settings/deploy_tokens.rb +64 -0
  234. data/qa/page/project/settings/main.rb +60 -0
  235. data/qa/page/project/settings/members.rb +62 -0
  236. data/qa/page/project/settings/merge_request.rb +32 -0
  237. data/qa/page/project/settings/mirroring_repositories.rb +132 -0
  238. data/qa/page/project/settings/protected_branches.rb +72 -0
  239. data/qa/page/project/settings/repository.rb +55 -0
  240. data/qa/page/project/settings/runners.rb +37 -0
  241. data/qa/page/project/settings/visibility_features_permissions.rb +26 -0
  242. data/qa/page/project/show.rb +165 -0
  243. data/qa/page/project/sub_menus/ci_cd.rb +27 -0
  244. data/qa/page/project/sub_menus/common.rb +19 -0
  245. data/qa/page/project/sub_menus/issues.rb +63 -0
  246. data/qa/page/project/sub_menus/operations.rb +58 -0
  247. data/qa/page/project/sub_menus/project.rb +29 -0
  248. data/qa/page/project/sub_menus/repository.rb +48 -0
  249. data/qa/page/project/sub_menus/settings.rb +81 -0
  250. data/qa/page/project/web_ide/edit.rb +139 -0
  251. data/qa/page/project/wiki/edit.rb +21 -0
  252. data/qa/page/project/wiki/git_access.rb +13 -0
  253. data/qa/page/project/wiki/new.rb +61 -0
  254. data/qa/page/project/wiki/show.rb +31 -0
  255. data/qa/page/search/results.rb +55 -0
  256. data/qa/page/settings/common.rb +26 -0
  257. data/qa/page/sub_menus/common.rb +50 -0
  258. data/qa/page/validatable.rb +21 -0
  259. data/qa/page/validator.rb +52 -0
  260. data/qa/page/view.rb +59 -0
  261. data/qa/resource/api_fabricator.rb +137 -0
  262. data/qa/resource/base.rb +170 -0
  263. data/qa/resource/ci_variable.rb +57 -0
  264. data/qa/resource/deploy_key.rb +39 -0
  265. data/qa/resource/deploy_token.rb +48 -0
  266. data/qa/resource/events/base.rb +42 -0
  267. data/qa/resource/events/project.rb +25 -0
  268. data/qa/resource/file.rb +63 -0
  269. data/qa/resource/fork.rb +92 -0
  270. data/qa/resource/group.rb +83 -0
  271. data/qa/resource/issue.rb +61 -0
  272. data/qa/resource/kubernetes_cluster/base.rb +40 -0
  273. data/qa/resource/kubernetes_cluster/project_cluster.rb +72 -0
  274. data/qa/resource/label.rb +61 -0
  275. data/qa/resource/members.rb +36 -0
  276. data/qa/resource/merge_request.rb +105 -0
  277. data/qa/resource/merge_request_from_fork.rb +33 -0
  278. data/qa/resource/personal_access_token.rb +31 -0
  279. data/qa/resource/project.rb +179 -0
  280. data/qa/resource/project_imported_from_github.rb +31 -0
  281. data/qa/resource/project_member.rb +35 -0
  282. data/qa/resource/project_milestone.rb +34 -0
  283. data/qa/resource/protected_branch.rb +76 -0
  284. data/qa/resource/repository/commit.rb +81 -0
  285. data/qa/resource/repository/project_push.rb +44 -0
  286. data/qa/resource/repository/push.rb +113 -0
  287. data/qa/resource/repository/wiki_push.rb +38 -0
  288. data/qa/resource/runner.rb +75 -0
  289. data/qa/resource/sandbox.rb +79 -0
  290. data/qa/resource/settings/hashed_storage.rb +26 -0
  291. data/qa/resource/snippet.rb +30 -0
  292. data/qa/resource/ssh_key.rb +57 -0
  293. data/qa/resource/tag.rb +30 -0
  294. data/qa/resource/user.rb +150 -0
  295. data/qa/resource/user_gpg.rb +46 -0
  296. data/qa/resource/visibility.rb +17 -0
  297. data/qa/resource/wiki.rb +48 -0
  298. data/qa/runtime/address.rb +29 -0
  299. data/qa/runtime/api/client.rb +90 -0
  300. data/qa/runtime/api/request.rb +49 -0
  301. data/qa/runtime/application_settings.rb +46 -0
  302. data/qa/runtime/browser.rb +220 -0
  303. data/qa/runtime/env.rb +330 -0
  304. data/qa/runtime/feature.rb +87 -0
  305. data/qa/runtime/fixtures.rb +43 -0
  306. data/qa/runtime/gpg.rb +37 -0
  307. data/qa/runtime/ip_address.rb +33 -0
  308. data/qa/runtime/key/base.rb +38 -0
  309. data/qa/runtime/key/ecdsa.rb +13 -0
  310. data/qa/runtime/key/ed25519.rb +13 -0
  311. data/qa/runtime/key/rsa.rb +13 -0
  312. data/qa/runtime/logger.rb +24 -0
  313. data/qa/runtime/mail_hog.rb +15 -0
  314. data/qa/runtime/namespace.rb +27 -0
  315. data/qa/runtime/path.rb +13 -0
  316. data/qa/runtime/release.rb +40 -0
  317. data/qa/runtime/scenario.rb +38 -0
  318. data/qa/runtime/search.rb +124 -0
  319. data/qa/runtime/user.rb +57 -0
  320. data/qa/scenario/actable.rb +25 -0
  321. data/qa/scenario/bootable.rb +53 -0
  322. data/qa/scenario/shared_attributes.rb +14 -0
  323. data/qa/scenario/template.rb +64 -0
  324. data/qa/scenario/test/instance.rb +36 -0
  325. data/qa/scenario/test/instance/all.rb +18 -0
  326. data/qa/scenario/test/instance/smoke.rb +20 -0
  327. data/qa/scenario/test/integration/github.rb +20 -0
  328. data/qa/scenario/test/integration/instance_saml.rb +13 -0
  329. data/qa/scenario/test/integration/kubernetes.rb +13 -0
  330. data/qa/scenario/test/integration/ldap_no_server.rb +13 -0
  331. data/qa/scenario/test/integration/ldap_no_tls.rb +13 -0
  332. data/qa/scenario/test/integration/ldap_tls.rb +13 -0
  333. data/qa/scenario/test/integration/mattermost.rb +26 -0
  334. data/qa/scenario/test/integration/object_storage.rb +13 -0
  335. data/qa/scenario/test/integration/smtp.rb +13 -0
  336. data/qa/scenario/test/sanity/framework.rb +19 -0
  337. data/qa/scenario/test/sanity/selectors.rb +61 -0
  338. data/qa/service/cluster_provider/base.rb +41 -0
  339. data/qa/service/cluster_provider/gcloud.rb +115 -0
  340. data/qa/service/cluster_provider/k3d.rb +134 -0
  341. data/qa/service/cluster_provider/k3s.rb +94 -0
  342. data/qa/service/cluster_provider/minikube.rb +26 -0
  343. data/qa/service/docker_run/base.rb +47 -0
  344. data/qa/service/docker_run/gitlab_runner.rb +58 -0
  345. data/qa/service/docker_run/jenkins.rb +43 -0
  346. data/qa/service/docker_run/k3s.rb +46 -0
  347. data/qa/service/docker_run/ldap.rb +41 -0
  348. data/qa/service/docker_run/maven.rb +44 -0
  349. data/qa/service/docker_run/node_js.rb +38 -0
  350. data/qa/service/docker_run/saml_idp.rb +69 -0
  351. data/qa/service/kubernetes_cluster.rb +107 -0
  352. data/qa/service/omnibus.rb +23 -0
  353. data/qa/service/shellout.rb +31 -0
  354. data/qa/specs/features/api/1_manage/.gitkeep +0 -0
  355. data/qa/specs/features/api/1_manage/rate_limits_spec.rb +17 -0
  356. data/qa/specs/features/api/1_manage/users_spec.rb +35 -0
  357. data/qa/specs/features/api/2_plan/.gitkeep +0 -0
  358. data/qa/specs/features/api/2_plan/closes_issue_via_pushing_a_commit_spec.rb +48 -0
  359. data/qa/specs/features/api/3_create/repository/files_spec.rb +106 -0
  360. data/qa/specs/features/api/3_create/repository/project_archive_compare_spec.rb +74 -0
  361. data/qa/specs/features/api/4_verify/.gitkeep +0 -0
  362. data/qa/specs/features/api/5_package/.gitkeep +0 -0
  363. data/qa/specs/features/api/6_release/.gitkeep +0 -0
  364. data/qa/specs/features/api/7_configure/.gitkeep +0 -0
  365. data/qa/specs/features/browser_ui/1_manage/group/create_group_with_mattermost_team_spec.rb +20 -0
  366. data/qa/specs/features/browser_ui/1_manage/group/transfer_project_spec.rb +56 -0
  367. data/qa/specs/features/browser_ui/1_manage/login/log_in_spec.rb +25 -0
  368. data/qa/specs/features/browser_ui/1_manage/login/log_into_gitlab_via_ldap_spec.rb +15 -0
  369. data/qa/specs/features/browser_ui/1_manage/login/log_into_mattermost_via_gitlab_spec.rb +20 -0
  370. data/qa/specs/features/browser_ui/1_manage/login/login_via_instance_wide_saml_sso_spec.rb +19 -0
  371. data/qa/specs/features/browser_ui/1_manage/login/register_spec.rb +27 -0
  372. data/qa/specs/features/browser_ui/1_manage/project/add_project_member_spec.rb +24 -0
  373. data/qa/specs/features/browser_ui/1_manage/project/create_project_spec.rb +23 -0
  374. data/qa/specs/features/browser_ui/1_manage/project/dashboard_images_spec.rb +57 -0
  375. data/qa/specs/features/browser_ui/1_manage/project/import_github_repo_spec.rb +117 -0
  376. data/qa/specs/features/browser_ui/1_manage/project/view_project_activity_spec.rb +22 -0
  377. data/qa/specs/features/browser_ui/2_plan/email/trigger_email_notification_spec.rb +46 -0
  378. data/qa/specs/features/browser_ui/2_plan/issue/check_mentions_for_xss_spec.rb +45 -0
  379. data/qa/specs/features/browser_ui/2_plan/issue/collapse_comments_in_discussions_spec.rb +35 -0
  380. data/qa/specs/features/browser_ui/2_plan/issue/comment_issue_spec.rb +29 -0
  381. data/qa/specs/features/browser_ui/2_plan/issue/create_issue_spec.rb +40 -0
  382. data/qa/specs/features/browser_ui/2_plan/issue/export_as_csv_spec.rb +40 -0
  383. data/qa/specs/features/browser_ui/2_plan/issue/filter_issue_comments_spec.rb +36 -0
  384. data/qa/specs/features/browser_ui/2_plan/issue/issue_suggestions_spec.rb +28 -0
  385. data/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb +35 -0
  386. data/qa/specs/features/browser_ui/3_create/merge_request/create_merge_request_spec.rb +64 -0
  387. data/qa/specs/features/browser_ui/3_create/merge_request/merge_merge_request_from_fork_spec.rb +26 -0
  388. data/qa/specs/features/browser_ui/3_create/merge_request/rebase_merge_request_spec.rb +49 -0
  389. data/qa/specs/features/browser_ui/3_create/merge_request/squash_merge_request_spec.rb +52 -0
  390. data/qa/specs/features/browser_ui/3_create/merge_request/view_merge_request_diff_patch_spec.rb +35 -0
  391. data/qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb +68 -0
  392. data/qa/specs/features/browser_ui/3_create/repository/add_list_delete_branches_spec.rb +88 -0
  393. data/qa/specs/features/browser_ui/3_create/repository/add_ssh_key_spec.rb +30 -0
  394. data/qa/specs/features/browser_ui/3_create/repository/clone_spec.rb +51 -0
  395. data/qa/specs/features/browser_ui/3_create/repository/create_edit_delete_file_via_web_spec.rb +58 -0
  396. data/qa/specs/features/browser_ui/3_create/repository/move_project_create_fork_spec.rb +53 -0
  397. data/qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_http_spec.rb +48 -0
  398. data/qa/specs/features/browser_ui/3_create/repository/protocol_v2_push_ssh_spec.rb +74 -0
  399. data/qa/specs/features/browser_ui/3_create/repository/push_http_private_token_spec.rb +34 -0
  400. data/qa/specs/features/browser_ui/3_create/repository/push_mirroring_over_http_spec.rb +43 -0
  401. data/qa/specs/features/browser_ui/3_create/repository/push_over_http_file_size_spec.rb +81 -0
  402. data/qa/specs/features/browser_ui/3_create/repository/push_over_http_spec.rb +44 -0
  403. data/qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb +63 -0
  404. data/qa/specs/features/browser_ui/3_create/repository/use_ssh_key_spec.rb +37 -0
  405. data/qa/specs/features/browser_ui/3_create/repository/user_views_commit_diff_patch_spec.rb +66 -0
  406. data/qa/specs/features/browser_ui/3_create/snippet/create_snippet_spec.rb +29 -0
  407. data/qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb +69 -0
  408. data/qa/specs/features/browser_ui/3_create/web_ide/review_merge_request_spec.rb +43 -0
  409. data/qa/specs/features/browser_ui/3_create/wiki/create_edit_clone_push_wiki_spec.rb +42 -0
  410. data/qa/specs/features/browser_ui/4_verify/ci_variable/add_remove_ci_variable_spec.rb +60 -0
  411. data/qa/specs/features/browser_ui/4_verify/pipeline/create_and_process_pipeline_spec.rb +89 -0
  412. data/qa/specs/features/browser_ui/4_verify/runner/register_runner_spec.rb +34 -0
  413. data/qa/specs/features/browser_ui/5_package/.gitkeep +0 -0
  414. data/qa/specs/features/browser_ui/6_release/deploy_key/add_deploy_key_spec.rb +28 -0
  415. data/qa/specs/features/browser_ui/6_release/deploy_key/clone_using_deploy_key_spec.rb +102 -0
  416. data/qa/specs/features/browser_ui/6_release/deploy_token/add_deploy_token_spec.rb +22 -0
  417. data/qa/specs/features/browser_ui/6_release/pipeline/parent_child_pipelines_dependent_relationship_spec.rb +122 -0
  418. data/qa/specs/features/browser_ui/6_release/pipeline/parent_child_pipelines_independent_relationship_spec.rb +121 -0
  419. data/qa/specs/features/browser_ui/7_configure/auto_devops/create_project_with_auto_devops_spec.rb +147 -0
  420. data/qa/specs/features/browser_ui/7_configure/kubernetes/kubernetes_integration_spec.rb +38 -0
  421. data/qa/specs/features/browser_ui/8_monitor/apm/dashboards_spec.rb +97 -0
  422. data/qa/specs/features/browser_ui/non_devops/performance_bar_spec.rb +38 -0
  423. data/qa/specs/features/ee/api/1_manage/.gitkeep +0 -0
  424. data/qa/specs/features/ee/api/2_plan/.gitkeep +0 -0
  425. data/qa/specs/features/ee/api/2_plan/epics_milestone_dates_spec.rb +173 -0
  426. data/qa/specs/features/ee/api/3_create/.gitkeep +0 -0
  427. data/qa/specs/features/ee/api/4_verify/.gitkeep +0 -0
  428. data/qa/specs/features/ee/api/5_package/.gitkeep +0 -0
  429. data/qa/specs/features/ee/api/6_release/.gitkeep +0 -0
  430. data/qa/specs/features/ee/api/7_configure/.gitkeep +0 -0
  431. data/qa/specs/features/ee/api/enablement/elasticsearch/advanced_global_advanced_syntax_search_spec.rb +70 -0
  432. data/qa/specs/features/ee/api/enablement/elasticsearch/elasticsearch_api_spec.rb +84 -0
  433. data/qa/specs/features/ee/api/geo/geo_nodes_spec.rb +91 -0
  434. data/qa/specs/features/ee/browser_ui/1_manage/.gitkeep +0 -0
  435. data/qa/specs/features/ee/browser_ui/1_manage/group/group_audit_logs_1_spec.rb +155 -0
  436. data/qa/specs/features/ee/browser_ui/1_manage/group/group_audit_logs_2_spec.rb +103 -0
  437. data/qa/specs/features/ee/browser_ui/1_manage/group/group_file_template_spec.rb +141 -0
  438. data/qa/specs/features/ee/browser_ui/1_manage/group/group_ldap_sync_spec.rb +183 -0
  439. data/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_enforced_sso_spec.rb +115 -0
  440. data/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_group_managed_accounts_spec.rb +178 -0
  441. data/qa/specs/features/ee/browser_ui/1_manage/group/group_saml_non_enforced_sso_spec.rb +87 -0
  442. data/qa/specs/features/ee/browser_ui/1_manage/group/restrict_by_ip_address_spec.rb +107 -0
  443. data/qa/specs/features/ee/browser_ui/1_manage/insights/default_insights_spec.rb +48 -0
  444. data/qa/specs/features/ee/browser_ui/1_manage/instance/instance_audit_logs_spec.rb +124 -0
  445. data/qa/specs/features/ee/browser_ui/1_manage/ldap/admin_ldap_sync_spec.rb +63 -0
  446. data/qa/specs/features/ee/browser_ui/1_manage/project/project_audit_logs_spec.rb +127 -0
  447. data/qa/specs/features/ee/browser_ui/1_manage/project/project_templates_spec.rb +165 -0
  448. data/qa/specs/features/ee/browser_ui/2_plan/.gitkeep +0 -0
  449. data/qa/specs/features/ee/browser_ui/2_plan/burndown_chart/burndown_chart_spec.rb +46 -0
  450. data/qa/specs/features/ee/browser_ui/2_plan/custom_email/custom_email_spec.rb +28 -0
  451. data/qa/specs/features/ee/browser_ui/2_plan/epic/epics_management_spec.rb +96 -0
  452. data/qa/specs/features/ee/browser_ui/2_plan/epic/promote_issue_to_epic_spec.rb +40 -0
  453. data/qa/specs/features/ee/browser_ui/2_plan/epic/roadmap_spec.rb +31 -0
  454. data/qa/specs/features/ee/browser_ui/2_plan/issue_boards/configurable_issue_board_spec.rb +28 -0
  455. data/qa/specs/features/ee/browser_ui/2_plan/issue_boards/configure_issue_board_by_label_spec.rb +44 -0
  456. data/qa/specs/features/ee/browser_ui/2_plan/issue_boards/create_group_issue_board_spec.rb +31 -0
  457. data/qa/specs/features/ee/browser_ui/2_plan/issue_boards/focus_mode_spec.rb +28 -0
  458. data/qa/specs/features/ee/browser_ui/2_plan/issue_boards/group_issue_boards_spec.rb +48 -0
  459. data/qa/specs/features/ee/browser_ui/2_plan/issue_boards/project_issue_boards_spec.rb +103 -0
  460. data/qa/specs/features/ee/browser_ui/2_plan/issue_boards/read_only_board_configuration_spec.rb +37 -0
  461. data/qa/specs/features/ee/browser_ui/2_plan/issue_boards/sum_of_issues_weights_spec.rb +40 -0
  462. data/qa/specs/features/ee/browser_ui/2_plan/issues_analytics/issues_analytics_spec.rb +35 -0
  463. data/qa/specs/features/ee/browser_ui/2_plan/issues_weight/issue_weight_visualization_spec.rb +46 -0
  464. data/qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/four_assignees_spec.rb +45 -0
  465. data/qa/specs/features/ee/browser_ui/2_plan/multiple_assignees_for_issues/more_than_four_assignees_spec.rb +70 -0
  466. data/qa/specs/features/ee/browser_ui/2_plan/related_issues/related_issues_spec.rb +50 -0
  467. data/qa/specs/features/ee/browser_ui/2_plan/scoped_labels/editing_scoped_labels_spec.rb +58 -0
  468. data/qa/specs/features/ee/browser_ui/3_create/.gitkeep +0 -0
  469. data/qa/specs/features/ee/browser_ui/3_create/contribution_analytics_spec.rb +53 -0
  470. data/qa/specs/features/ee/browser_ui/3_create/design_management_spec.rb +29 -0
  471. data/qa/specs/features/ee/browser_ui/3_create/jenkins/jenkins_build_status_spec.rb +158 -0
  472. data/qa/specs/features/ee/browser_ui/3_create/merge_request/add_batch_comments_in_merge_request_spec.rb +80 -0
  473. data/qa/specs/features/ee/browser_ui/3_create/merge_request/approval_rules_spec.rb +97 -0
  474. data/qa/specs/features/ee/browser_ui/3_create/repository/assign_code_owners_spec.rb +83 -0
  475. data/qa/specs/features/ee/browser_ui/3_create/repository/code_owners_spec.rb +75 -0
  476. data/qa/specs/features/ee/browser_ui/3_create/repository/file_locking_spec.rb +161 -0
  477. data/qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_http_spec.rb +52 -0
  478. data/qa/specs/features/ee/browser_ui/3_create/repository/pull_mirroring_over_ssh_with_key_spec.rb +71 -0
  479. data/qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb +202 -0
  480. data/qa/specs/features/ee/browser_ui/3_create/repository/restrict_push_protected_branch_spec.rb +120 -0
  481. data/qa/specs/features/ee/browser_ui/3_create/web_ide/web_terminal_spec.rb +80 -0
  482. data/qa/specs/features/ee/browser_ui/4_verify/.gitkeep +0 -0
  483. data/qa/specs/features/ee/browser_ui/5_package/.gitkeep +0 -0
  484. data/qa/specs/features/ee/browser_ui/5_package/maven_repository_spec.rb +102 -0
  485. data/qa/specs/features/ee/browser_ui/5_package/npm_registry_spec.rb +75 -0
  486. data/qa/specs/features/ee/browser_ui/6_release/.gitkeep +0 -0
  487. data/qa/specs/features/ee/browser_ui/6_release/multi-project_pipelines_spec.rb +98 -0
  488. data/qa/specs/features/ee/browser_ui/6_release/pipelines_for_merged_results_and_merge_trains_spec.rb +137 -0
  489. data/qa/specs/features/ee/browser_ui/7_configure/.gitkeep +0 -0
  490. data/qa/specs/features/ee/browser_ui/8_monitor/.gitkeep +0 -0
  491. data/qa/specs/features/ee/browser_ui/8_monitor/apm/metrics_spec.rb +68 -0
  492. data/qa/specs/features/ee/browser_ui/8_monitor/health/alerting_spec.rb +106 -0
  493. data/qa/specs/features/ee/browser_ui/8_monitor/health/cluster_health_spec.rb +52 -0
  494. data/qa/specs/features/ee/browser_ui/enablement/elasticsearch/elasticsearch_reindexing_spec.rb +78 -0
  495. data/qa/specs/features/ee/browser_ui/geo/attachment_replication_spec.rb +63 -0
  496. data/qa/specs/features/ee/browser_ui/geo/database_delete_replication_spec.rb +60 -0
  497. data/qa/specs/features/ee/browser_ui/geo/http_push_spec.rb +121 -0
  498. data/qa/specs/features/ee/browser_ui/geo/http_push_to_secondary_spec.rb +174 -0
  499. data/qa/specs/features/ee/browser_ui/geo/rename_replication_spec.rb +75 -0
  500. data/qa/specs/features/ee/browser_ui/geo/ssh_push_spec.rb +151 -0
  501. data/qa/specs/features/ee/browser_ui/geo/ssh_push_to_secondary_spec.rb +189 -0
  502. data/qa/specs/features/ee/browser_ui/geo/wiki_http_push_spec.rb +68 -0
  503. data/qa/specs/features/ee/browser_ui/geo/wiki_http_push_to_secondary_spec.rb +105 -0
  504. data/qa/specs/features/ee/browser_ui/geo/wiki_ssh_push_spec.rb +93 -0
  505. data/qa/specs/features/ee/browser_ui/geo/wiki_ssh_push_to_secondary_spec.rb +110 -0
  506. data/qa/specs/features/ee/browser_ui/secure/create_merge_request_with_secure_spec.rb +79 -0
  507. data/qa/specs/features/ee/browser_ui/secure/license_compliance_spec.rb +98 -0
  508. data/qa/specs/features/ee/browser_ui/secure/merge_request_license_widget_spec.rb +134 -0
  509. data/qa/specs/features/ee/browser_ui/secure/security_reports_spec.rb +143 -0
  510. data/qa/specs/features/ee/browser_ui/secure/vulnerability_management_spec.rb +101 -0
  511. data/qa/specs/features/sanity/framework_spec.rb +21 -0
  512. data/qa/specs/helpers/quarantine.rb +84 -0
  513. data/qa/specs/loop_runner.rb +21 -0
  514. data/qa/specs/parallel_runner.rb +33 -0
  515. data/qa/specs/runner.rb +78 -0
  516. data/qa/support/api.rb +71 -0
  517. data/qa/support/dates.rb +21 -0
  518. data/qa/support/page/logging.rb +178 -0
  519. data/qa/support/repeater.rb +65 -0
  520. data/qa/support/retrier.rb +64 -0
  521. data/qa/support/wait_for_requests.rb +25 -0
  522. data/qa/support/waiter.rb +39 -0
  523. data/qa/tools/delete_subgroups.rb +66 -0
  524. data/qa/tools/delete_test_ssh_keys.rb +61 -0
  525. data/qa/tools/generate_perf_testdata.rb +301 -0
  526. data/qa/tools/revoke_all_personal_access_tokens.rb +44 -0
  527. data/qa/vendor/jenkins/page/base.rb +24 -0
  528. data/qa/vendor/jenkins/page/configure.rb +48 -0
  529. data/qa/vendor/jenkins/page/configure_job.rb +72 -0
  530. data/qa/vendor/jenkins/page/last_job_console.rb +44 -0
  531. data/qa/vendor/jenkins/page/login.rb +31 -0
  532. data/qa/vendor/jenkins/page/new_credentials.rb +50 -0
  533. data/qa/vendor/jenkins/page/new_job.rb +38 -0
  534. data/qa/vendor/saml_idp/page/base.rb +14 -0
  535. data/qa/vendor/saml_idp/page/login.rb +31 -0
  536. metadata +835 -0
@@ -0,0 +1,183 @@
1
+ # frozen_string_literal: true
2
+
3
+ module QA
4
+ context 'Manage', :orchestrated, :ldap_tls, :ldap_no_tls, :requires_admin do
5
+ describe 'LDAP Group sync' do
6
+ include Support::Api
7
+
8
+ before(:all) do
9
+ # Create the sandbox group as the LDAP user. Without this the admin user
10
+ # would own the sandbox group and then in subsequent tests the LDAP user
11
+ # would not have enough permission to push etc.
12
+ Resource::Sandbox.fabricate_via_api!
13
+
14
+ # Create an admin personal access token and use it for the remaining API calls
15
+ @original_personal_access_token = Runtime::Env.personal_access_token
16
+
17
+ Page::Main::Menu.perform do |menu|
18
+ menu.sign_out if menu.has_personal_area?
19
+ end
20
+
21
+ Runtime::Browser.visit(:gitlab, Page::Main::Login)
22
+ Page::Main::Login.perform(&:sign_in_using_admin_credentials)
23
+
24
+ Runtime::Env.personal_access_token = Resource::PersonalAccessToken.fabricate!.access_token
25
+ Page::Main::Menu.perform(&:sign_out)
26
+ end
27
+
28
+ after(:all) do
29
+ # Restore the original personal access token so that subsequent tests
30
+ # don't perform API calls as an admin user while logged in as a non-root
31
+ # LDAP user
32
+ Runtime::Env.personal_access_token = @original_personal_access_token
33
+ end
34
+
35
+ context 'using group cn method' do
36
+ let(:ldap_users) do
37
+ [
38
+ {
39
+ name: 'ENG User 1',
40
+ username: 'enguser1',
41
+ email: 'enguser1@example.org',
42
+ provider: 'ldapmain',
43
+ extern_uid: 'uid=enguser1,ou=people,ou=global groups,dc=example,dc=org'
44
+ },
45
+ {
46
+ name: 'ENG User 2',
47
+ username: 'enguser2',
48
+ email: 'enguser2@example.org',
49
+ provider: 'ldapmain',
50
+ extern_uid: 'uid=enguser2,ou=people,ou=global groups,dc=example,dc=org'
51
+ },
52
+ {
53
+ name: 'ENG User 3',
54
+ username: 'enguser3',
55
+ email: 'enguser3@example.org',
56
+ provider: 'ldapmain',
57
+ extern_uid: 'uid=enguser3,ou=people,ou=global groups,dc=example,dc=org'
58
+ }
59
+ ]
60
+ end
61
+ let(:owner_user) { 'enguser1' }
62
+ let(:sync_users) { ['ENG User 2', 'ENG User 3'] }
63
+
64
+ before do
65
+ @created_users = create_users_via_api(ldap_users)
66
+ group = create_group_and_add_user_via_api(owner_user, 'Synched-engineering-group', Resource::Members::AccessLevel::OWNER)
67
+ signin_and_visit_group_as_user(owner_user, group)
68
+
69
+ Page::Group::Menu.perform(&:go_to_ldap_sync_settings)
70
+
71
+ EE::Page::Group::Settings::LDAPSync.perform do |settings|
72
+ settings.set_sync_method('LDAP Group cn')
73
+ settings.set_group_cn('Engineering')
74
+ settings.click_add_sync_button
75
+ end
76
+
77
+ Page::Group::Menu.perform(&:click_group_members_item)
78
+ end
79
+
80
+ it 'has LDAP users synced' do
81
+ verify_users_synced(sync_users)
82
+ end
83
+ end
84
+
85
+ context 'user filter method' do
86
+ let(:ldap_users) do
87
+ [
88
+ {
89
+ name: 'HR User 1',
90
+ username: 'hruser1',
91
+ email: 'hruser1@example.org',
92
+ provider: 'ldapmain',
93
+ extern_uid: 'uid=hruser1,ou=people,ou=global groups,dc=example,dc=org'
94
+ },
95
+ {
96
+ name: 'HR User 2',
97
+ username: 'hruser2',
98
+ email: 'hruser2@example.org',
99
+ provider: 'ldapmain',
100
+ extern_uid: 'uid=hruser2,ou=people,ou=global groups,dc=example,dc=org'
101
+ },
102
+ {
103
+ name: 'HR User 3',
104
+ username: 'hruser3',
105
+ email: 'hruser3@example.org',
106
+ provider: 'ldapmain',
107
+ extern_uid: 'uid=hruser3,ou=people,ou=global groups,dc=example,dc=org'
108
+ }
109
+ ]
110
+ end
111
+ let(:owner_user) { 'hruser1' }
112
+ let(:sync_users) { ['HR User 2', 'HR User 3'] }
113
+
114
+ before do
115
+ @created_users = create_users_via_api(ldap_users)
116
+
117
+ group = create_group_and_add_user_via_api(owner_user, 'Synched-human-resources-group', Resource::Members::AccessLevel::OWNER)
118
+
119
+ signin_and_visit_group_as_user(owner_user, group)
120
+
121
+ Page::Group::Menu.perform(&:go_to_ldap_sync_settings)
122
+
123
+ EE::Page::Group::Settings::LDAPSync.perform do |settings|
124
+ settings.set_user_filter('(&(objectClass=person)(cn=HR*))')
125
+ settings.click_add_sync_button
126
+ end
127
+
128
+ Page::Group::Menu.perform(&:click_group_members_item)
129
+ end
130
+
131
+ it 'has LDAP users synced' do
132
+ verify_users_synced(sync_users)
133
+ end
134
+ end
135
+
136
+ def create_users_via_api(users)
137
+ created_users = {}
138
+
139
+ users.each do |user|
140
+ created_users[user[:username]] = Resource::User.fabricate_via_api! do |resource|
141
+ resource.username = user[:username]
142
+ resource.name = user[:name]
143
+ resource.email = user[:email]
144
+ resource.extern_uid = user[:extern_uid]
145
+ resource.provider = user[:provider]
146
+ end
147
+ end
148
+ created_users
149
+ end
150
+
151
+ def create_group_and_add_user_via_api(user_name, group_name, role)
152
+ group = Resource::Group.fabricate_via_api! do |resource|
153
+ resource.path = "#{group_name}-#{SecureRandom.hex(4)}"
154
+ end
155
+
156
+ group.add_member(@created_users[user_name], role)
157
+
158
+ group
159
+ end
160
+
161
+ def signin_and_visit_group_as_user(user_name, group)
162
+ user = Struct.new(:ldap_username, :ldap_password).new(user_name, 'password')
163
+
164
+ Runtime::Browser.visit(:gitlab, Page::Main::Login)
165
+ Page::Main::Login.perform do |login_page|
166
+ login_page.sign_in_using_ldap_credentials(user: user)
167
+ end
168
+
169
+ group.visit!
170
+ end
171
+
172
+ def verify_users_synced(expected_users)
173
+ EE::Page::Group::Members.perform do |members|
174
+ members.click_sync_now
175
+ users_synchronised = members.retry_until(reload: true) do
176
+ expected_users.map { |user| members.has_content?(user) }.all?
177
+ end
178
+ expect(users_synchronised).to be_truthy
179
+ end
180
+ end
181
+ end
182
+ end
183
+ end
@@ -0,0 +1,115 @@
1
+ # frozen_string_literal: true
2
+
3
+ module QA
4
+ context 'Manage', :group_saml, :orchestrated do
5
+ describe 'Group SAML SSO - Enforced SSO' do
6
+ include Support::Api
7
+
8
+ before do
9
+ Support::Retrier.retry_on_exception do
10
+ Flow::Saml.remove_saml_idp_service(@saml_idp_service) if @saml_idp_service
11
+
12
+ @group = Resource::Sandbox.fabricate_via_api! do |sandbox_group|
13
+ sandbox_group.path = "saml_sso_group_#{SecureRandom.hex(8)}"
14
+ end
15
+
16
+ @developer_user = Resource::User.fabricate_via_api!
17
+
18
+ @group.add_member(@developer_user)
19
+
20
+ @saml_idp_service = Flow::Saml.run_saml_idp_service(@group.path)
21
+
22
+ @managed_group_url = setup_and_enable_enforce_sso
23
+
24
+ Flow::Saml.logout_from_idp(@saml_idp_service)
25
+
26
+ page.visit Runtime::Scenario.gitlab_address
27
+ Page::Main::Menu.perform(&:sign_out_if_signed_in)
28
+ end
29
+ end
30
+
31
+ it 'user clones and pushes to project within a group using Git HTTP' do
32
+ Flow::Login.sign_in
33
+
34
+ @project = Resource::Project.fabricate! do |project|
35
+ project.name = 'project-in-saml-enforced-group'
36
+ project.description = 'project in SAML enforced group for git clone test'
37
+ project.group = @group
38
+ project.initialize_with_readme = true
39
+ end
40
+
41
+ @project.visit!
42
+
43
+ expect do
44
+ Resource::Repository::ProjectPush.fabricate! do |project_push|
45
+ project_push.project = @project
46
+ project_push.branch_name = "new_branch"
47
+ project_push.user = @developer_user
48
+ end
49
+ end.not_to raise_error
50
+ end
51
+
52
+ after do
53
+ page.visit Runtime::Scenario.gitlab_address
54
+ %w[enforced_sso enforced_sso_requires_session group_administration_nav_item].each do |flag|
55
+ Runtime::Feature.remove(flag)
56
+ end
57
+
58
+ @group.remove_via_api!
59
+
60
+ Page::Main::Menu.perform(&:sign_out_if_signed_in)
61
+
62
+ Flow::Saml.remove_saml_idp_service(@saml_idp_service)
63
+ end
64
+ end
65
+
66
+ def setup_and_enable_enforce_sso
67
+ %w[enforced_sso enforced_sso_requires_session group_administration_nav_item].each do |flag|
68
+ Runtime::Feature.enable_and_verify(flag)
69
+ end
70
+
71
+ page.visit Runtime::Scenario.gitlab_address
72
+ Page::Main::Login.perform(&:sign_in_using_credentials) unless Page::Main::Menu.perform(&:signed_in?)
73
+
74
+ Support::Retrier.retry_on_exception do
75
+ Flow::Saml.visit_saml_sso_settings(@group)
76
+ ensure_enforced_sso_button_shown
77
+
78
+ managed_group_url = EE::Page::Group::Settings::SamlSSO.perform do |saml_sso|
79
+ saml_sso.enforce_sso
80
+
81
+ saml_sso.set_id_provider_sso_url(@saml_idp_service.idp_sso_url)
82
+ saml_sso.set_cert_fingerprint(@saml_idp_service.idp_certificate_fingerprint)
83
+
84
+ saml_sso.click_save_changes
85
+
86
+ saml_sso.user_login_url_link_text
87
+ end
88
+
89
+ Flow::Saml.visit_saml_sso_settings(@group, direct: true)
90
+ ensure_enforced_sso_button_shown
91
+
92
+ unless EE::Page::Group::Settings::SamlSSO.perform(&:enforce_sso_enabled?)
93
+ QA::Runtime::Logger.debug "Enforced SSO not setup correctly. About to raise failure."
94
+ QA::Runtime::Logger.debug Capybara::Screenshot.screenshot_and_save_page
95
+ QA::Runtime::Logger.debug Runtime::Feature.get_features
96
+
97
+ raise "Enforced SSO not setup correctly"
98
+ end
99
+
100
+ managed_group_url
101
+ end
102
+ end
103
+
104
+ def ensure_enforced_sso_button_shown
105
+ # Sometimes, the toggle button for SAML SSO does not appear and only appears after a refresh
106
+ # This issue can only be reproduced manually if you are too quick to go to the group setting page
107
+ # after enabling the feature flags.
108
+ Support::Retrier.retry_until(sleep_interval: 1, raise_on_failure: true) do
109
+ condition_met = EE::Page::Group::Settings::SamlSSO.perform(&:has_enforced_sso_button?)
110
+ page.refresh unless condition_met
111
+ condition_met
112
+ end
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,178 @@
1
+ # frozen_string_literal: true
2
+
3
+ module QA
4
+ context 'Manage', :group_saml, :orchestrated, :requires_admin, quarantine: { issue: 'https://gitlab.com/gitlab-org/gitlab/issues/202260', type: :bug } do
5
+ describe 'Group SAML SSO - Group managed accounts' do
6
+ include Support::Api
7
+
8
+ before(:all) do
9
+ # Create a new user (with no existing SAML identities) who will be added as owner to the SAML group.
10
+ @owner_user = Resource::User.fabricate_via_api!
11
+
12
+ Flow::Login.sign_in(as: @owner_user)
13
+
14
+ @group = Resource::Sandbox.fabricate_via_api! do |sandbox_group|
15
+ sandbox_group.path = "saml_sso_group_#{SecureRandom.hex(8)}"
16
+ end
17
+
18
+ @saml_idp_service = Flow::Saml.run_saml_idp_service(@group.path)
19
+
20
+ @api_client = Runtime::API::Client.new(:gitlab, personal_access_token: Runtime::Env.admin_personal_access_token)
21
+
22
+ @developer_user = Resource::User.fabricate_via_api!
23
+
24
+ @group.add_member(@owner_user, QA::Resource::Members::AccessLevel::OWNER)
25
+
26
+ @group.add_member(@developer_user)
27
+
28
+ @managed_group_url = Flow::Saml.enable_saml_sso(@group, @saml_idp_service)
29
+
30
+ @saml_linked_for_admin = false
31
+
32
+ setup_and_enable_group_managed_accounts
33
+
34
+ Page::Main::Menu.perform(&:sign_out_if_signed_in)
35
+
36
+ Flow::Saml.logout_from_idp(@saml_idp_service)
37
+ end
38
+
39
+ it 'removes existing users from the group, forces existing users to create a new account and allows to leave group' do
40
+ expect(@group.list_members.map { |item| item["username"] }).not_to include(@developer_user.username)
41
+
42
+ visit_managed_group_url
43
+
44
+ EE::Page::Group::SamlSSOSignIn.perform(&:click_sign_in)
45
+
46
+ Flow::Saml.login_to_idp_if_required('user3', 'user3pass')
47
+
48
+ expect(page).to have_text("uses group managed accounts. You need to create a new GitLab account which will be managed by")
49
+
50
+ Support::Retrier.retry_until(raise_on_failure: true) do
51
+ @idp_user_email = EE::Page::Group::SamlSSOSignUp.perform(&:current_email)
52
+
53
+ remove_user_if_exists(@idp_user_email)
54
+
55
+ @new_username = EE::Page::Group::SamlSSOSignUp.perform(&:current_username)
56
+
57
+ EE::Page::Group::SamlSSOSignUp.perform(&:click_register_button)
58
+
59
+ page.has_no_content?("Email has already been taken")
60
+ end
61
+
62
+ expect(page).to have_text("Sign up was successful! Please confirm your email to sign in.")
63
+
64
+ QA::Flow::User.confirm_user(@new_username)
65
+
66
+ visit_managed_group_url
67
+
68
+ EE::Page::Group::SamlSSOSignIn.perform(&:click_sign_in)
69
+
70
+ expect(page).to have_text("Signed in with SAML")
71
+
72
+ Page::Group::Show.perform(&:leave_group)
73
+
74
+ expect(page).to have_text("You left")
75
+
76
+ Page::Main::Menu.perform(&:sign_out)
77
+
78
+ visit_managed_group_url
79
+
80
+ EE::Page::Group::SamlSSOSignIn.perform(&:click_sign_in)
81
+
82
+ expect(page).to have_text("uses group managed accounts. You need to create a new GitLab account which will be managed by")
83
+ end
84
+
85
+ after(:all) do
86
+ page.visit Runtime::Scenario.gitlab_address
87
+
88
+ %w[enforced_sso enforced_sso_requires_session group_managed_accounts sign_up_on_sso group_scim group_administration_nav_item].each do |flag|
89
+ Runtime::Feature.remove(flag)
90
+ end
91
+
92
+ remove_user_if_exists(@idp_user_email)
93
+
94
+ @group.remove_via_api!
95
+
96
+ Flow::Saml.remove_saml_idp_service(@saml_idp_service)
97
+
98
+ page.visit Runtime::Scenario.gitlab_address
99
+ Page::Main::Menu.perform(&:sign_out_if_signed_in)
100
+ end
101
+ end
102
+
103
+ def remove_user_if_exists(username_or_email)
104
+ QA::Runtime::Logger.debug("Attempting to remove user \"#{username_or_email}\" via API")
105
+
106
+ return if username_or_email.nil?
107
+
108
+ response = parse_body(get(Runtime::API::Request.new(@api_client, "/users?search=#{username_or_email}").url))
109
+
110
+ if response.any?
111
+ raise "GET /users?search=#{username_or_email} returned multiple results. response: #{response}" if response.size > 1
112
+
113
+ delete_response = delete Runtime::API::Request.new(@api_client, "/users/#{response.first[:id]}").url
114
+
115
+ QA::Runtime::Logger.debug("DELETE \"#{username_or_email}\" response code: #{delete_response.code} message: #{delete_response.body}")
116
+ else
117
+ QA::Runtime::Logger.debug("GET /users?search=#{username_or_email} returned empty response: #{response}")
118
+ end
119
+ end
120
+
121
+ def setup_and_enable_group_managed_accounts
122
+ %w[enforced_sso enforced_sso_requires_session group_managed_accounts sign_up_on_sso group_scim group_administration_nav_item].each do |flag|
123
+ Runtime::Feature.enable_and_verify(flag)
124
+ end
125
+
126
+ Support::Retrier.retry_on_exception do
127
+ # We need to logout from IDP. This is required if this is a retry.
128
+ Flow::Saml.logout_from_idp(@saml_idp_service)
129
+
130
+ page.visit Runtime::Scenario.gitlab_address
131
+
132
+ Page::Main::Menu.perform(&:sign_out_if_signed_in)
133
+
134
+ # The first time you have to be signed in as admin
135
+ unless @saml_linked_for_admin
136
+ Flow::Login.sign_in(as: @owner_user)
137
+ @saml_linked_for_admin = true
138
+ end
139
+
140
+ # We must sign in with SAML before enabling Group Managed Accounts
141
+ visit_managed_group_url
142
+
143
+ EE::Page::Group::SamlSSOSignIn.perform(&:click_sign_in)
144
+
145
+ Flow::Saml.login_to_idp_if_required('user1', 'user1pass')
146
+
147
+ Flow::Saml.visit_saml_sso_settings(@group)
148
+
149
+ EE::Page::Group::Settings::SamlSSO.perform do |saml_sso|
150
+ # Once the feature flags are enabled, it takes some time for the toggle buttons to show on the UI.
151
+ # This issue does not happen manually. Only happens with the test as they are too fast.
152
+ Support::Retrier.retry_until(sleep_interval: 1, raise_on_failure: true) do
153
+ condition_met = saml_sso.has_enforced_sso_button? && saml_sso.has_group_managed_accounts_button?
154
+ page.refresh unless condition_met
155
+
156
+ condition_met
157
+ end
158
+
159
+ saml_sso.enforce_sso
160
+ saml_sso.enable_group_managed_accounts
161
+ saml_sso.click_save_changes
162
+
163
+ saml_sso.user_login_url_link_text
164
+ end
165
+
166
+ Flow::Saml.visit_saml_sso_settings(@group, direct: true)
167
+ raise "Group managed accounts not setup correctly" unless EE::Page::Group::Settings::SamlSSO.perform(&:group_managed_accounts_enabled?)
168
+ end
169
+ end
170
+
171
+ def visit_managed_group_url
172
+ Runtime::Logger.debug(%Q[Visiting managed_group_url at "#{@managed_group_url}"])
173
+
174
+ page.visit @managed_group_url
175
+ Support::Waiter.wait_until { current_url == @managed_group_url }
176
+ end
177
+ end
178
+ end