@@ -24,95 +24,53 @@ test('DevContainer 功能和配置', async ({ page,context }) => {
console . log ( ` 正在创建新仓库: ${ repoName } ` ) ;
await page . goto ( GITEA_URL + '/repo/create' ) ;
await page . fill ( 'input[name="repo_name"]' , repoName ) ;
await page . getByRole ( 'button' , { name : 'Create Repository ' } ) . click ( ) ;
await page . getByRole ( 'button' , { name : '创建仓库 ' } ) . click ( ) ;
await expect ( page ) . toHaveURL ( GITEA_URL + '/' + TEST_USER + '/' + repoName ) ;
console . log ( "仓库创建成功." ) ;
await expect ( page ) . toHaveURL ( GITEA_URL + '/' + TEST_USER + '/' + repoName ) ;
console . log ( "正在点击 'Dev Container' 标签页..." ) ;
await page . getByRole ( 'link' , { name : 'Dev Container ' } ) . click ( ) ;
await page . getByRole ( 'link' , { name : '开发容器 ' } ) . click ( ) ;
console . log ( "正在点击 'Create' (创建模板) 按钮..." ) ;
await page . getByRole ( 'button' , { name : /Create/i } ) . click ( ) ;
await page . waitForTimeout ( 10000 ) ;
console . log ( "模板已创建. 正在点击 'Edit' 按钮..." ) ;
await expect( page . getByText( 'devcontainer.json') ) . toBeVisible ( ) ;
await page . getByRole ( 'link' , { name : 'Edit' } ) . click ( ) ;
await page . waitForTimeout ( 5000 ) ;
console . log ( "已跳转到编辑器. 正在修改内容" ) ;
const newJsonAsObject = {
"name" : "Gitea DevContainer" ,
"image" : "mcr.microsoft.com/devcontainers/go:1.24-bookworm" ,
"features" : {
"ghcr.io/devcontainers/features/node:1" : {
"version" : "lts"
} ,
"ghcr.io/devcontainers/features/git-lfs:1.2.2" : { } ,
"ghcr.io/devcontainers-extra/features/poetry:2" : { } ,
"ghcr.io/devcontainers/features/python:1" : {
"version" : "3.12"
} ,
"ghcr.io/warrenbuckley/codespace-features/sqlite:1" : { }
} ,
"customizations" : {
"vscode" : {
"settings" : { } ,
"extensions" : [
"editorconfig.editorconfig" ,
"dbaeumer.vscode-eslint" ,
"golang.go" ,
"stylelint.vscode-stylelint" ,
"DavidAnson.vscode-markdownlint" ,
"Vue.volar" ,
"ms-azuretools.vscode-docker" ,
"vitest.explorer" ,
"cweijan.vscode-database-client2" ,
"GitHub.vscode-pull-request-github" ,
"Azurite.azurite"
]
}
} ,
"portsAttributes" : {
"3000" : {
"label" : "Gitea Web" ,
"onAutoForward" : "notify"
}
} ,
"postCreateCommand" : "make deps"
} ;
// await expect(page. getByText( 'devcontainer.json')).toBeVisible();
//转换为JSON 字符串
const newJsonString = JSON . stringify( newJsonAsObject) ;
// const newJsonString = JSON. stringify( newJsonAsObject);
// 设置焦点
await page. locator( '.view-lines > div:nth-child(20)') . click ( ) ;
console . log ( "正在手动删除模板内容 " ) ;
for ( let i = 0 ; i < 500 ; i ++ ) {
await page. keyboard. press ( 'Backspace') ;
}
// await page. locator( '.view-lines > div:nth-child(20)').click();
//console.log( "正在手动删除模板内容 ");
//for (let i = 0; i < 500; i++) {
// await page. keyboard.press( 'Backspace');
// }
//粘贴字符串
console. log ( "正在粘贴JSON 内容...") ;
await page. keyboard. insertText( newJsonString ) ;
await page. getByRole( 'button', { name : 'Commit Changes' } ) . click ( ) ;
console . log ( "devcontainer.json 修改并提交成功." ) ;
console . log ( "正在导航回 Dev Container 标签页进行验证..." ) ;
await page. getByRole( 'link', { name : 'Dev Container' } ) . click ( ) ;
// console.log( "正在粘贴JSON 内容...");
// await page. keyboard. insertText( newJsonString);
// await page. getByRole( 'button', { name: 'Commit Changes' }).click();
//console.log( "devcontainer.json 修改并提交成功.");
//console.log( "正在导航回 Dev Container 标签页进行验证...");
// await page. getByRole( 'link', { name: '开发容器' }).click();
console . log ( "创建开发容器" ) ;
await page . getByRole ( 'button' , { name : 'Create Dev Container ' } ) . click ( ) ;
await page . getByRole ( 'button' , { name : '创建开发容器 ' } ) . click ( ) ;
console . log ( "正在创建" ) ;
await expect ( page . getByRole ( 'button' , { name : 'Stop Dev Container ' } ) )
await expect ( page . getByRole ( 'button' , { name : '停止开发容器 ' } ) )
. toBeVisible ( { timeout : 180000 } ) ;
console . log ( "Dev container 创建成功!" ) ;
await page . getByRole ( 'button' , { name : 'Stop Dev Container ' } ) . click ( ) ;
await page . getByRole ( 'button' , { name : '停止开发容器 ' } ) . click ( ) ;
console . log ( "正在停止" ) ;
await expect ( page . getByRole ( 'button' , { name : 'Start Dev Container ' } ) ) . toBeVisible ( { timeout : 180000 } ) ;
await expect ( page . getByRole ( 'button' , { name : '启动开发容器 ' } ) ) . toBeVisible ( { timeout : 180000 } ) ;
console . log ( "成功停止开发容器!" ) ;
await page . getByRole ( 'button' , { name : 'Start Dev Container ' } ) . click ( ) ;
await page . getByRole ( 'button' , { name : '启动开发容器 ' } ) . click ( ) ;
console . log ( "正在启动开发容器" ) ;
await expect ( page . getByRole ( 'button' , { name : 'Stop Dev Container ' } ) ) . toBeVisible ( { timeout : 180000 } ) ;
await expect ( page . getByRole ( 'button' , { name : '停止开发容器 ' } ) ) . toBeVisible ( { timeout : 180000 } ) ;
console . log ( "成功启动!" ) ;
console . log ( "保存开发容器" ) ;
const pagePromise = context . waitForEvent ( 'page' ) ;
@@ -122,12 +80,12 @@ test('DevContainer 功能和配置', async ({ page,context }) => {
await newPage . waitForLoadState ( ) ; // 等待新页面加载完成
console . log ( "Web Terminal: 新标签页已打开!" ) ;
//await expect(newPage.getByText('Successfully connected to the container')).toBeVisible(); //这里ttyd里的信息PlayWright看不见, 容器的交互没办法自动化测试
await page . getByRole ( 'link' , { name : 'Delete Dev Container ' } ) . click ( ) ;
await page . getByRole ( 'link' , { name : '删除开发容器 ' } ) . click ( ) ;
await page . locator ( '#delete-repo-devcontainer-of-user-modal' )
. getByRole ( 'button' , { name : 'Yes ' } )
. getByRole ( 'button' , { name : '确认操作 ' } )
. click ( ) ;
console . log ( '正在删除!' ) ;
await expect ( page . getByRole ( 'button' , { name : 'Create Dev Container ' } ) ) . toBeVisible ( ) ;
await expect ( page . getByRole ( 'button' , { name : '创建开发容器 ' } ) ) . toBeVisible ( ) ;
console . log ( '成功删除!' ) ;
console . log ( "test1 检查通过!" ) ;
@@ -146,40 +104,38 @@ test('DevContainer 功能和配置', async ({ page,context }) => {
test ( '权限修改相关' , async ( { page } ) = > {
console . log ( '权限配置' ) ;
await page . getByRole ( 'link' , { name : 'Site Administration ' } ) . click ( ) ;
await page . getByText ( 'Identity & Access ' ) . click ( ) ;
await page . getByRole ( 'link' , { name : 'User Accounts ' } ) . click ( ) ;
await page . getByRole ( 'link' , { name : '管理后台 ' } ) . click ( ) ;
await page . getByText ( '身份及认证 ' ) . click ( ) ;
await page . getByRole ( 'link' , { name : '帐户管理 ' } ) . click ( ) ;
await page . getByRole ( 'row' )
. filter ( { hasText : TEST_USER } )
. getByRole ( 'link' , { name : 'Edit ' } )
. getByRole ( 'link' , { name : '编辑 ' } )
. click ( ) ;
const devContainerCheckbox = page . getByLabel ( /May Create Devcontainers /i ) ;
const devContainerCheckbox = page . getByLabel ( /允许创建开发容器 /i ) ;
await devContainerCheckbox . uncheck ( ) ;
await page . getByRole ( 'button' , { name : 'Update User Account ' } ) . click ( ) ;
await page . getByRole ( 'button' , { name : '更新帐户 ' } ) . click ( ) ;
await page . goto ( GITEA_URL + '/' + "e2e-devcontainer-test" ) ;
const devContainerLink = page . getByRole ( 'link' , { name : 'Dev Container ' } ) ;
const devContainerLink = page . getByRole ( 'link' , { name : '开发容器 ' } ) ;
await expect ( devContainerLink ) . toBeHidden ( { timeout : 10000 } ) ;
console . log ( '权限设置成功!' ) ;
console . log ( '现在恢复原环境' ) ;
await page . goto ( GITEA_URL + '/-/admin/users/' + TEST_ADMIN_USER_ID + '/edit' ) ;
await devContainerCheckbox . check ( ) ;
await page . getByRole ( 'button' , { name : 'Update User Account ' } ) . click ( ) ;
await page . getByRole ( 'button' , { name : '更新帐户 ' } ) . click ( ) ;
console . log ( '现在清理测试仓库' ) ;
console . log ( "正在导航到仓库设置页面..." ) ;
await page . goto ( GITEA_URL + '/' + TEST_USER + '/' + repoName + '/settings' ) ;
console . log ( "正在点击 'Delete This Repository' 按钮..." ) ;
await page . getByRole ( 'button' , { name : 'Delete This Repository ' } ) . click ( ) ;
await page . getByRole ( 'button' , { name : '删除本仓库 ' } ) . click ( ) ;
await page . locator ( '#delete-repo-modal' ) . waitFor ( ) ;
console . log ( ` 正在输入 ' ${ repoName } ' 进行确认... ` ) ;
await page . locator ( '#repo_name_to_delete' ) . fill ( repoName ) ;
console . log ( "正在点击最终的删除确认按钮..." ) ;
await page . getByRole ( 'button' , { name : 'Delete Repository ' } ) . click ( ) ;
await page . getByRole ( 'button' , { name : '删除本仓库 ' } ) . click ( ) ;
} ) ;
} )