Implements #1

This commit is contained in:
floraachy 2024-10-25 14:41:48 +08:00
parent c721a7c655
commit 5781e285bf
1 changed files with 200 additions and 0 deletions

200
test_repo_issue_flow.py Normal file
View File

@ -0,0 +1,200 @@
# -*- coding: utf-8 -*-
# @Time : 2023/10/31 14:39
# @Author : floraachy
# @File : test_repo_issue_flow.py
# @Software: PyCharm
# @Desc:
# 标准库导入
import os
import re
# 第三方库导入
import allure
import pytest
from playwright.sync_api import BrowserContext
from loguru import logger
# 本地应用/模块导入
from config.path_config import FILES_DIR
from page_objects.projects.issue.repo_issue_page import RepoIssuePage
from page_objects.projects.issue.repo_new_issue_page import RepoNewIssuePage
from page_objects.projects.issue.repo_issue_detail_page import RepoIssueDetailPage
from page_objects.projects.issue.repo_edit_issue_page import RepoEditIssuePage
from utils.requests_utils.api_workflow import get_api_data, api_work_flow
from config.path_config import INTERFACE_DIR
from config.global_vars import GLOBAL_VARS
@pytest.mark.issue
class TestRepoIssueFlow:
"""疑修"""
cases = {
"test_new_search_edit_delete_issue": [
{"issue_title": "new - ${generate_paragraph(nb=1)}",
"issue_desc": "${generate_paragraph()}",
"issue_file": " gitlinklogo2.png, gitlinklogo3.jpg",
"new_issue_success_message": "疑修创建成功!",
"edit_issue_title": "update - ${generate_paragraph(nb=1)}",
"edit_issue_desc": "${generate_paragraph()}",
"delete_issue_file": "gitlinklogo3.jpg",
"file_delete_success_message": "附件删除成功",
"update_issue_success_message": "疑修更新成功!",
"delete_issue_confirm_message": "您确定要删除当前疑修?",
"delete_issue_success_message": "疑修删除成功!",
"run": True}],
"test_search_copy_delete_issue": [
{"new_issue_file": "导入TOC订单.xls, login_demo.yaml",
"copy_issue_title": "update - ${generate_paragraph(nb=1)}",
"copy_issue_desc": "${generate_paragraph()}",
"copy_issue_file": " gitlinklogo2.png, gitlinklogo3.jpg",
"copy_issue_success_message": " 疑修复制成功!",
"delete_issue_confirm_message": "您确定要删除当前疑修?",
"delete_issue_success_message": "疑修删除成功!",
"run": True}]
}
@pytest.fixture(autouse=True)
def start_for_each(self, request, default_user_context: BrowserContext):
logger.info("for each--start: 测试用户打开新建疑修页面")
# 测试用户
user_page = default_user_context.new_page()
self.create_issue_page = RepoNewIssuePage(user_page)
yield
logger.info("for each--end: 后置操作")
@pytest.mark.parametrize("case")
def test_new_issue_success(self, case):
"""
登录 --> 新建疑修 --> 删除疑修
"""
# 进入疑修创建页面
self.create_issue_page.navigate(repo_owner=GLOBAL_VARS.get("repo_owner"),
repo_identifier=GLOBAL_VARS.get("repo_identifier"))
issue_title = case.get("issue_title")
issue_desc = case.get("issue_desc")
# 兼容一下中文逗号,发现有中文逗号,替换为英文逗号, 同时去除file前后空格与保存文件的目录拼接出文件的绝对路径
issue_files = [os.path.join(FILES_DIR, f.strip()) for f in
case.get("issue_file").replace("", ",").split(",")]
# 创建疑修
self.create_issue_page.new_issue_flow(issue_title=issue_title, issue_desc=issue_desc, issue_file=issue_files,
success_message=case.get("new_issue_success_message"))
#
# issue_page = RepoIssuePage(self.create_issue_page.page)
#
# # 点击【疑修(Issue)】导航栏
# issue_page.click_issue_nav()
# # 页面进入:${repo_owner}/${repo_identifier}/issues
# issue_page.have_url(
# f"{GLOBAL_VARS.get('repo_owner')}/{GLOBAL_VARS.get('repo_identifier')}/issues")
# # 在搜索框中输入疑修标题,点击搜索图标
# issue_page.search_issue_by_keyword(text=issue_title)
# # 点击疑修标题
# issue_page.click_issue_title_on_list(title=issue_title)
# # 断言 - 页面进入疑修详情页, 检查网页标题,疑修标题,内容及附件
# expected_issue_title = issue_title
# # 断言 - 网页标题模糊匹配expected['issue_title']-疑修
# issue_page.have_title(re.compile(f"{expected_issue_title}-疑修-.*"))
# # 断言 - 疑修标题,内容及附件
# expected_issue_file = issue_files if isinstance(issue_files, list) else [issue_files]
# expect_files = []
# for issue_file in expected_issue_file:
# expect_files.append(os.path.basename(issue_file) if os.path.isabs(issue_file) else issue_file)
# RepoIssueDetailPage(issue_page.page).assert_issue_title_desc_attachment(expect_tittle=issue_title,
# expect_desc=issue_desc,
# expect_attachment=expect_files)
#
# edit_issue_title = case.get("edit_issue_title")
# edit_issue_desc = case.get("edit_issue_desc")
# # 检查一下需要删除的附件是否传递错误
# # 兼容一下中文逗号,发现有中文逗号,替换为英文逗号, 同时去除file前后空格与保存文件的目录拼接出文件的绝对路径
# delete_issue_files = [os.path.join(FILES_DIR, f.strip()) for f in
# case.get("delete_issue_file").replace("", ",").split(",")]
# logger.error(f"编辑疑修时,需要删除的疑修附件不是疑修有的附件:{delete_issue_files}")
#
# # 编辑疑修
# edit_issue_page = RepoEditIssuePage(issue_page.page)
# edit_issue_page.edit_issue_flow(issue_title=edit_issue_title, issue_desc=edit_issue_desc,
# delete_issue_file=delete_issue_files,
# success_message=case.get("update_issue_success_message"))
# # 断言 - 页面进入疑修详情页, 检查网页标题,疑修标题,内容及附件
# # 断言网页标题模糊匹配expected['issue_title']-疑修
# edit_issue_page.have_title(re.compile(f"{edit_issue_title}-疑修-.*"))
# # 断言 - 疑修标题,内容及附件
# expected_issue_file = list(set(issue_files) - set(delete_issue_files))
# expect_files = []
# for issue_file in expected_issue_file:
# expect_files.append(os.path.basename(issue_file) if os.path.isabs(issue_file) else issue_file)
#
# edit_issue_page.assert_issue_title_desc_attachment(expect_tittle=edit_issue_title,
# expect_desc=edit_issue_desc,
# expect_attachment=expect_files)
# 删除疑修
RepoIssuePage(page).delete_issue(confirm_message=case.get("delete_issue_confirm_message"),
success_message=case.get("delete_issue_success_message"))
@pytest.mark.parametrize("case")
def test_search_copy_delete_issue(self, page: Page, case):
"""
前提条件当前存在一个疑修
1. 登录
2. 访问仓库的疑修详情页
3. 复制疑修
4. 删除刚刚复制的疑修
"""
# 我有一个疑修,疑修带有附件,附件名称是
# 通过接口登录获取登录cookies
if not GLOBAL_VARS.get("cookies"):
login_api = get_api_data(api_file_path=os.path.join(INTERFACE_DIR, "test_gitlink_login.yaml"),
key="gitlink_login_01")
res = api_work_flow(req_data=login_api, source=GLOBAL_VARS)
login_cookies = res["cookies"]
GLOBAL_VARS["cookies"] = login_cookies
# 上传附件获取附件id
issue_files = [f.strip() for f in case.get("new_issue_file").replace("", ",").split(",")]
GLOBAL_VARS["attachment_ids"] = []
for file in issue_files:
GLOBAL_VARS["file_name"] = file
upload_file_api = get_api_data(
api_file_path=os.path.join(INTERFACE_DIR, "projects", "test_gitlink_upload_files.yaml"),
key="gitlink_upload_file_01")
res = api_work_flow(req_data=upload_file_api, source=GLOBAL_VARS)
GLOBAL_VARS["attachment_ids"].append(res["attachment_id"])
# 新建疑修
new_issue_api = get_api_data(
api_file_path=os.path.join(INTERFACE_DIR, "projects", "issues", "test_gitlink_repo_new_issue.yaml"),
key="gitlink_repo_new_issue_01")
res = api_work_flow(req_data=new_issue_api, source=GLOBAL_VARS)
# 访问疑修详情页
issue_index = res["issue_index"]
CommonPage(page).navigate(
f"{GLOBAL_VARS.get('repo_owner')}/{GLOBAL_VARS.get('repo_identifier')}/issues/{issue_index}")
issue_title = case.get("copy_issue_title")
issue_desc = case.get("copy_issue_desc")
# 兼容一下中文逗号,发现有中文逗号,替换为英文逗号, 同时去除file前后空格与保存文件的目录拼接出文件的绝对路径
issue_files = [os.path.join(FILES_DIR, f.strip()) for f in
case.get("copy_issue_file").replace("", ",").split(",")]
# 复制疑修
RepoIssuePage(page).copy_issue(issue_title=issue_title, issue_desc=issue_desc, issue_file=issue_files,
success_message=case.get("copy_issue_success_message"))
# 断言 - 页面进入疑修详情页, 检查网页标题,疑修标题,内容及附件
# 断言网页标题模糊匹配expected['issue_title']-疑修
CommonPage(page).assert_page_title(re.compile(f"{issue_title}-疑修-.*"))
# 断言 - 疑修标题,内容及附件
expected_issue_file = issue_files if isinstance(issue_files, list) else [issue_files]
expect_files = []
for issue_file in expected_issue_file:
expect_files.append(os.path.basename(issue_file) if os.path.isabs(issue_file) else issue_file)
RepoIssuePage(page).assert_issue_title_desc_attachment(expect_tittle=issue_title, expect_desc=issue_desc,
expect_attachment=expect_files)
RepoIssuePage(page).assert_issue_attachments(expect_files)
# 删除疑修
RepoIssuePage(page).delete_issue(confirm_message=case.get("delete_issue_confirm_message"),
success_message=case.get("delete_issue_success_message"))