new test script
This commit is contained in:
6
.env.e2e
6
.env.e2e
@@ -7,7 +7,7 @@ export TEST_REPO_VALID="jiaojunming/test1"
|
||||
export TEST_REPO_EMPTY="jiaojunming/test2"
|
||||
export TEST_REPO_INVALID="jiaojunming/test3"
|
||||
|
||||
export TEST_USER_ADMIN="jiaojunming"
|
||||
export TEST_PASS_ADMIN="hwyhwy12"
|
||||
export TEST_USER_ADMIN=""
|
||||
export TEST_PASS_ADMIN=""
|
||||
export TEST_ADMIN_USER_ID="1"
|
||||
export TEST_REPO_ADMIN="jiaojunming/test1"
|
||||
export TEST_REPO_ADMIN=""
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
1.在custom/conf下的app.ini中关闭验证码:ENABLE_CAPTCHA = false
|
||||
2.在执行脚本前请下载相关依赖:npx playwright install
|
||||
3.请在.env.e2e文件中配置相关项:
|
||||
GITEA_URL:devstar实例的url,TEST_USER:测试用户,TEST_REPO_VALID:一个干净的,有合理json配置的仓库,TEST_USER_ADMIN:管理员账号(可以是测试用户),TEST_ADMIN_USER_ID:管理员用户的id(管理后台查看)
|
||||
4.在项目根目录执行命令source .env.e2e && npx playwright test ,生成的报告在test/e2e下
|
||||
GITEA_URL:devstar实例的url,TEST_USER:测试用户,现在这个测试用户需要是管理员,这样测试结束时会清理掉所有痕迹
|
||||
4.在项目根目录执行命令source .env.e2e && npx playwright test tests/e2e/devcontainer.test.e2e.ts ,生成的报告在test/e2e下
|
||||
|
||||
|
||||
|
||||
@@ -4,17 +4,12 @@ const {
|
||||
GITEA_URL,
|
||||
TEST_USER,
|
||||
TEST_PASS,
|
||||
TEST_REPO_VALID,
|
||||
TEST_REPO_EMPTY,
|
||||
TEST_REPO_INVALID,
|
||||
TEST_USER_ADMIN,
|
||||
TEST_PASS_ADMIN,
|
||||
TEST_ADMIN_USER_ID,
|
||||
TEST_REPO_ADMIN
|
||||
} = process.env;
|
||||
|
||||
const repoName = `e2e-devcontainer-test`;
|
||||
// 检查关键配置是否存在
|
||||
if (!GITEA_URL || !TEST_USER || !TEST_PASS || !TEST_REPO_VALID) {
|
||||
if (!GITEA_URL || !TEST_USER || !TEST_PASS ) {
|
||||
throw new Error("请确保 .env.e2e 配置文件已加载,并包含 GITEA_URL, TEST_USER, TEST_PASS, TEST_REPO_VALID");
|
||||
}
|
||||
test('DevContainer 功能和配置', async ({ page,context }) => {
|
||||
@@ -25,13 +20,85 @@ test('DevContainer 功能和配置', async ({ page,context }) => {
|
||||
await page.fill('#password', TEST_PASS);
|
||||
await page.getByRole('button', { name: 'Sign In' }).click();
|
||||
await expect(page).toHaveURL(GITEA_URL + '/');
|
||||
console.log("登录成功! ");
|
||||
|
||||
console.log("进入test1仓库");
|
||||
await page.goto(GITEA_URL + '/'+ TEST_REPO_VALID);
|
||||
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 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();
|
||||
|
||||
console.log("正在点击 'Create' (创建模板) 按钮...");
|
||||
await page.getByRole('button', { name: /Create/i }).click();
|
||||
|
||||
console.log("模板已创建. 正在点击 'Edit' 按钮...");
|
||||
await expect(page.getByText('devcontainer.json')).toBeVisible();
|
||||
await expect(page.getByRole('button', { name: 'Create Dev Container' })).toBeVisible();
|
||||
await page.getByRole('link', { name: 'Edit' }).click();
|
||||
|
||||
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"
|
||||
};
|
||||
|
||||
// 转换为JSON 字符串
|
||||
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');
|
||||
}
|
||||
// 粘贴字符串
|
||||
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("创建开发容器");
|
||||
await page.getByRole('button', { name: 'Create Dev Container' }).click();
|
||||
console.log("正在创建");
|
||||
@@ -53,7 +120,7 @@ test('DevContainer 功能和配置', async ({ page,context }) => {
|
||||
const newPage = await pagePromise;
|
||||
await newPage.waitForLoadState(); // 等待新页面加载完成
|
||||
console.log("Web Terminal: 新标签页已打开!");
|
||||
//await expect(newPage.getByText('Successfully connected to the container')).toBeVisible(); 这里ttyd里的信息PlayWright看不见,容器的交互没办法自动化测试
|
||||
//await expect(newPage.getByText('Successfully connected to the container')).toBeVisible(); //这里ttyd里的信息PlayWright看不见,容器的交互没办法自动化测试
|
||||
await page.getByRole('link', { name: 'Delete Dev Container' }).click();
|
||||
await page.locator('#delete-repo-devcontainer-of-user-modal')
|
||||
.getByRole('button', { name: 'Yes' })
|
||||
@@ -63,23 +130,23 @@ test('DevContainer 功能和配置', async ({ page,context }) => {
|
||||
console.log('成功删除!');
|
||||
console.log("test1 检查通过!");
|
||||
|
||||
console.log("test2仓库");
|
||||
await page.goto(GITEA_URL + '/'+ TEST_REPO_EMPTY);
|
||||
await page.getByRole('link', { name: 'Dev Container' }).click();
|
||||
await expect(page.getByText('Oops, it looks like there is no Dev Container Setting in this repository.')).toBeVisible();
|
||||
console.log("test2 检查通过");
|
||||
//console.log("test2仓库");
|
||||
//await page.goto(GITEA_URL + '/'+ TEST_REPO_EMPTY);
|
||||
//await page.getByRole('link', { name: 'Dev Container' }).click();
|
||||
//await expect(page.getByText('Oops, it looks like there is no Dev Container Setting in this repository.')).toBeVisible();
|
||||
//console.log("test2 检查通过");
|
||||
|
||||
console.log("test3仓库");
|
||||
await page.goto(GITEA_URL+ '/' + TEST_REPO_INVALID);
|
||||
await page.getByRole('link', { name: 'Dev Container' }).click();
|
||||
await expect(page.getByText(' Invalid Dev Container Configuration')).toBeVisible();
|
||||
console.log("test3检查通过");
|
||||
//console.log("test3仓库");
|
||||
//await page.goto(GITEA_URL+ '/' + TEST_REPO_INVALID);
|
||||
//await page.getByRole('link', { name: 'Dev Container' }).click();
|
||||
//await expect(page.getByText(' Invalid Dev Container Configuration')).toBeVisible();
|
||||
//console.log("test3检查通过");
|
||||
});
|
||||
test('权限修改相关', async ({ page }) => {
|
||||
console.log("正在登陆");
|
||||
await page.goto(GITEA_URL + '/user/login');
|
||||
await page.fill('#user_name', TEST_USER_ADMIN);
|
||||
await page.fill('#password', TEST_PASS_ADMIN);
|
||||
await page.fill('#user_name', TEST_USER);
|
||||
await page.fill('#password', TEST_PASS);
|
||||
await page.getByRole('button', { name: 'Sign In' }).click();
|
||||
await expect(page).toHaveURL(GITEA_URL + '/');
|
||||
console.log("登录成功! ");
|
||||
@@ -89,10 +156,30 @@ test('权限修改相关', async ({ page }) => {
|
||||
const devContainerCheckbox = page.getByLabel(/May Create Devcontainers/i);
|
||||
await devContainerCheckbox.uncheck();
|
||||
await page.getByRole('button', { name: 'Update User Account' }).click();
|
||||
await page.goto(GITEA_URL + '/' + TEST_REPO_ADMIN);
|
||||
await page.goto(GITEA_URL + '/' + "e2e-devcontainer-test");
|
||||
const devContainerLink = page.getByRole('link', { name: 'Dev Container' });
|
||||
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();
|
||||
|
||||
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.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();
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user