1+ import { expect , test } from "@playwright/test" ;
2+ import { navigateToRepositories } from "../UI/helpers/navHelpers" ;
3+ import { switchToUser , logInWithUsernameAndPassword } from "../helpers/loginHelpers" ;
4+ import { randomName , randomUrl } from '../UI/helpers/repoHelpers' ;
5+ import { closePopupsIfExist , getRowByNameOrUrl } from '../UI/helpers/helpers' ;
6+ import { deleteAllRepos } from '../UI/helpers/deleteRepositories' ;
7+
8+ const repoNamePrefix = 'Repo-RBAC' ;
9+
10+ // Function to generate and cache the repo name
11+ const getRepoName = ( ( ) => {
12+ let name = null ;
13+ return ( ) => {
14+ if ( ! name ) {
15+ name = `${ repoNamePrefix } -${ randomName ( ) } ` ;
16+ }
17+ return name ;
18+ } ;
19+ } ) ( ) ;
20+
21+ const url = randomUrl ( ) ;
22+
23+ test . describe ( "Run as first user" , { tag : "@admin" } , async ( ) => {
24+ test ( "Login as user 1" , async ( { page } ) => {
25+ await test . step ( 'Navigate to the repository page' , async ( ) => {
26+ await switchToUser ( page , process . env . USER1USERNAME ! ) ;
27+ await navigateToRepositories ( page ) ;
28+ await closePopupsIfExist ( page ) ;
29+ } ) ;
30+ await test . step ( 'Delete any test repos that exist' , async ( ) => {
31+ // await deleteAllRepos(page, `&search=${repoNamePrefix}`);
32+ } ) ;
33+ await test . step ( 'Create a repository' , async ( ) => {
34+ await page . getByRole ( 'button' , { name : 'Add repositories' } ) . first ( ) . click ( ) ;
35+ await expect ( page . getByRole ( 'dialog' , { name : 'Add custom repositories' } ) ) . toBeVisible ( ) ;
36+
37+ // Use getRepoName() to get the consistent repo name
38+ await page . getByLabel ( 'Name' ) . fill ( getRepoName ( ) ) ;
39+ await page . getByLabel ( 'Introspect only' ) . click ( ) ;
40+ await page . getByLabel ( 'URL' ) . fill ( url ) ;
41+ await page . getByRole ( 'button' , { name : 'Save' , exact : true } ) . click ( ) ;
42+ } ) ;
43+ await test . step ( 'Read the repo' , async ( ) => {
44+ const row = await getRowByNameOrUrl ( page , getRepoName ( ) ) ;
45+ await expect ( row . getByText ( 'Valid' ) ) . toBeVisible ( ) ;
46+ await row . getByLabel ( 'Kebab toggle' ) . click ( ) ;
47+ await row . getByRole ( 'menuitem' , { name : 'Edit' } ) . click ( ) ;
48+ await expect ( page . getByRole ( 'dialog' , { name : 'Edit custom repository' } ) ) . toBeVisible ( ) ;
49+ await expect ( page . getByPlaceholder ( 'Enter name' , { exact : true } ) ) . toHaveValue ( getRepoName ( ) ) ;
50+ await expect ( page . getByPlaceholder ( 'https://' , { exact : true } ) ) . toHaveValue ( url ) ;
51+ } ) ;
52+ await test . step ( 'Update the repository' , async ( ) => {
53+ await page . getByPlaceholder ( 'Enter name' , { exact : true } ) . fill ( `${ getRepoName ( ) } -Edited` ) ;
54+ await page . getByRole ( 'button' , { name : 'Save changes' , exact : true } ) . click ( ) ;
55+ } ) ;
56+ } ) ;
57+ } ) ;
58+
59+ test . describe ( "Run as second user" , { tag : "@read-only" } , async ( ) => {
60+ test ( "Login as user 2" , async ( { page } ) => {
61+ await test . step ( 'Navigate to the repository page' , async ( ) => {
62+ await switchToUser ( page , process . env . RO_USER_USERNAME ! ) ;
63+ await navigateToRepositories ( page ) ;
64+ await closePopupsIfExist ( page ) ;
65+ } ) ;
66+ await test . step ( 'Read the repo' , async ( ) => {
67+ // Use getRepoName() to get the same repo name
68+ const row = await getRowByNameOrUrl ( page , getRepoName ( ) ) ;
69+ await expect ( row . getByText ( 'Valid' ) ) . toBeVisible ( { timeout : 60000 } ) ;
70+ await row . getByLabel ( 'Kebab toggle' ) . click ( ) ;
71+ await row . getByRole ( 'menuitem' , { name : 'Edit' } ) . click ( ) ;
72+ await expect ( page . getByText ( 'You do not have the required permissions to perform this action' ) ) . toBeVisible ( ) ;
73+ await expect ( page . getByRole ( 'dialog' , { name : 'Edit custom repository' } ) ) . not . toBeVisible ( ) ;
74+ } ) ;
75+ } ) ;
76+ } ) ;
0 commit comments