Skip to content

Commit

Permalink
fix: 修复CI单元测试,Readme中添加测试说明
Browse files Browse the repository at this point in the history
  • Loading branch information
wenmingchao committed Feb 8, 2025
1 parent 23756e2 commit c1d0e2c
Show file tree
Hide file tree
Showing 3 changed files with 194 additions and 44 deletions.
181 changes: 137 additions & 44 deletions itsm/tests/ticket/test_ticket_view.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@
import mock
from django.test import TestCase, override_settings

from blueapps.core.celery.celery import app
from itsm.service.models import CatalogService
from itsm.ticket.models import Ticket
from itsm.ticket.models import Ticket, AttentionUsers
from pipeline.engine.models import FunctionSwitch


Expand Down Expand Up @@ -265,27 +266,6 @@ def test_export_group_by_service(self, get_user_departments):
rsp = self.client.get(path=url, data=None, content_type="application/json")
self.assertEqual(rsp.status_code, 200)

@override_settings(MIDDLEWARE=("itsm.tests.middlewares.OverrideMiddleware",))
@mock.patch("itsm.role.models.get_user_departments")
@mock.patch("itsm.ticket.serializers.ticket.transform_single_username")
@mock.patch("itsm.component.utils.client_backend_query.get_bk_users")
def test_print_ticket(
self, get_user_departments, transform_single_username, get_bk_users
):
get_user_departments.return_value = ["1"]
get_bk_users.return_value = ["1"]
transform_single_username.return_value = "admin(管理员)"
url = "/api/ticket/receipts/"
rsp = self.client.get(path=url, data=None, content_type="application/json")

url = "/api/ticket/receipts/{}/print_ticket/".format(
rsp.data["data"]["items"][0]["id"]
)
rsp = self.client.get(path=url, data=None, content_type="application/json")
self.assertEqual(rsp.status_code, 200)
self.assertEqual(rsp.data["message"], "success")
self.assertIsInstance(rsp.data["data"], dict)

@override_settings(MIDDLEWARE=("itsm.tests.middlewares.OverrideMiddleware",))
def test_get_global_choices(self):
url = "/api/ticket/receipts/get_global_choices/"
Expand Down Expand Up @@ -441,25 +421,13 @@ def test_my_approval_ticket(self, get_user_departments):
self.assertIsInstance(rsp.data["data"], list)

@override_settings(MIDDLEWARE=("itsm.tests.middlewares.OverrideMiddleware",))
@mock.patch("itsm.component.utils.misc.transform_username")
@mock.patch("itsm.component.utils.misc.transform_single_username")
@mock.patch("itsm.component.utils.client_backend_query.get_bk_users")
@mock.patch("itsm.role.models.get_user_departments")
def test_tickets_processors(
self,
get_user_departments,
patch_get_bk_users,
patch_transform_single_username,
patch_transform_username,
):
def test_tickets_can_operate(self, get_user_departments):
get_user_departments.return_value = ["1"]
patch_get_bk_users.return_value = {"admin": "admin(admin)"}
patch_transform_single_username.return_value = "admin(admin)"
patch_transform_username.return_value = "admin(admin)"
url = "/api/ticket/receipts/"
rsp = self.client.get(path=url, data=None, content_type="application/json")

url = "/api/ticket/receipts/tickets_processors/?ids={}".format(
url = "/api/ticket/receipts/tickets_can_operate/?ids={}".format(
rsp.data["data"]["items"][0]["id"]
)
rsp = self.client.get(path=url, data=None, content_type="application/json")
Expand All @@ -469,12 +437,11 @@ def test_tickets_processors(

@override_settings(MIDDLEWARE=("itsm.tests.middlewares.OverrideMiddleware",))
@mock.patch("itsm.role.models.get_user_departments")
def test_tickets_can_operate(self, get_user_departments):
def test_tree_view(self, get_user_departments):
get_user_departments.return_value = ["1"]
url = "/api/ticket/receipts/"
rsp = self.client.get(path=url, data=None, content_type="application/json")

url = "/api/ticket/receipts/tickets_can_operate/?ids={}".format(
url = "/api/ticket/remark/tree_view/?ticket_id={}&show_type=1".format(
rsp.data["data"]["items"][0]["id"]
)
rsp = self.client.get(path=url, data=None, content_type="application/json")
Expand All @@ -484,26 +451,152 @@ def test_tickets_can_operate(self, get_user_departments):

@override_settings(MIDDLEWARE=("itsm.tests.middlewares.OverrideMiddleware",))
@mock.patch("itsm.role.models.get_user_departments")
def test_tree_view(self, get_user_departments):
def test_remark(self, get_user_departments):
get_user_departments.return_value = ["1"]
url = "/api/ticket/receipts/"
rsp = self.client.get(path=url, data=None, content_type="application/json")
url = "/api/ticket/remark/tree_view/?ticket_id={}&show_type=1".format(
url = "/api/ticket/remark/?ticket_id={}".format(
rsp.data["data"]["items"][0]["id"]
)
rsp = self.client.get(path=url, data=None, content_type="application/json")
self.assertEqual(rsp.status_code, 200)
self.assertEqual(rsp.data["message"], "success")
self.assertIsInstance(rsp.data["data"], dict)


class TicketPrintAndProcessorsTest(TestCase):
def setUp(self):
app.conf.update(CELERY_ALWAYS_EAGER=True)
Ticket.objects.all().delete()
AttentionUsers.objects.all().delete()

CatalogService.objects.create(
service_id=1, is_deleted=False, catalog_id=2, creator="admin"
)

def tearDown(self):
Ticket.objects.all().delete()
AttentionUsers.objects.all().delete()

@override_settings(MIDDLEWARE=("itsm.tests.middlewares.OverrideMiddleware",))
@mock.patch("itsm.role.models.get_user_departments")
def test_remark(self, get_user_departments):
@mock.patch("itsm.ticket.serializers.ticket.transform_single_username")
@mock.patch("itsm.component.utils.client_backend_query.get_bk_users")
@mock.patch("itsm.ticket.permissions.TicketPermissionValidate.has_permission")
def test_print_ticket(
self,
patch_has_permission,
get_user_departments,
transform_single_username,
get_bk_users,
):
patch_has_permission.return_value = True
get_user_departments.return_value = ["1"]
get_bk_users.return_value = ["1"]
transform_single_username.return_value = "admin(管理员)"

data = {
"catalog_id": 3,
"service_id": 1,
"service_type": "request",
"fields": [
{
"type": "STRING",
"id": 1,
"key": "title",
"value": "test_ticket",
"choice": [],
},
{
"type": "STRING",
"id": 5,
"key": "apply_content",
"value": "测试内容",
},
{
"type": "STRING",
"key": "ZHIDINGSHENPIREN",
"value": "test",
},
{
"type": "STRING",
"key": "apply_reason",
"value": "test",
},
],
"creator": "admin",
"attention": True,
}
url = "/api/ticket/receipts/"
rsp = self.client.post(
path=url, data=json.dumps(data), content_type="application/json"
)

url = "/api/ticket/receipts/{}/print_ticket/".format(rsp.data["data"]["id"])
rsp = self.client.get(path=url, data=None, content_type="application/json")
url = "/api/ticket/remark/?ticket_id={}".format(
rsp.data["data"]["items"][0]["id"]
self.assertEqual(rsp.status_code, 200)
self.assertEqual(rsp.data["message"], "success")
self.assertIsInstance(rsp.data["data"], dict)

@override_settings(MIDDLEWARE=("itsm.tests.middlewares.OverrideMiddleware",))
@mock.patch("itsm.component.utils.misc.transform_username")
@mock.patch("itsm.component.utils.misc.transform_single_username")
@mock.patch("itsm.component.utils.client_backend_query.get_bk_users")
@mock.patch("itsm.role.models.get_user_departments")
@mock.patch("itsm.ticket.permissions.TicketPermissionValidate.has_permission")
def test_tickets_processors(
self,
patch_has_permission,
get_user_departments,
patch_get_bk_users,
patch_transform_single_username,
patch_transform_username,
):
patch_has_permission.return_value = True
get_user_departments.return_value = ["1"]
patch_get_bk_users.return_value = {"admin": "admin(admin)"}
patch_transform_single_username.return_value = "admin(admin)"
patch_transform_username.return_value = "admin(admin)"

data = {
"catalog_id": 3,
"service_id": 1,
"service_type": "request",
"fields": [
{
"type": "STRING",
"id": 1,
"key": "title",
"value": "test_ticket",
"choice": [],
},
{
"type": "STRING",
"id": 5,
"key": "apply_content",
"value": "测试内容",
},
{
"type": "STRING",
"key": "ZHIDINGSHENPIREN",
"value": "test",
},
{
"type": "STRING",
"key": "apply_reason",
"value": "test",
},
],
"creator": "admin",
"attention": True,
}
url = "/api/ticket/receipts/"
rsp = self.client.post(
path=url, data=json.dumps(data), content_type="application/json"
)

url = "/api/ticket/receipts/tickets_processors/?ids={}".format(
rsp.data["data"]["id"]
)
rsp = self.client.get(path=url, data=None, content_type="application/json")
self.assertEqual(rsp.status_code, 200)
Expand Down
29 changes: 29 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,35 @@ ITSM (IT 服务管理)是一套帮助企业对 IT 系统的规划、研发、实
- [第三方API接入说明](docs/install/custom_api.md)
- [ITSM 接入指引](docs/wiki/access.md)


## Unit Testing
- 在本地进行单元测试时建议使用如下环境变量配置,需要注意配置好MySQL和Redis
- 建议使用PyCharm中集成的Django Test加载`.env`文件的方式去执行,target填写`itsm.tests`
```.dotenv
RUN_ENV=open
APP_CODE=bk_itsm
APP_ID=bk_itsm
RUN_VER=open
SECRET_KEY=12345678-1234-5678-1234-123456789012
APP_TOKEN=12345678-1234-5678-1234-123456789012
BK_PAAS_HOST=http://127.0.0.1
BK_IAM_V3_INNER_HOST=127.0.0.1
BK_IAM_INNER_HOST=http://127.0.0.1:8080
BROKER_URL=redis://localhost:6379/0
USE_IAM=false
BKAPP_REDIS_HOST=localhost
BKAPP_BK_IAM_SYSTEM_ID=itsm
BKAPP_IAM_INITIAL_FILE=dev
BKAPP_REDIS_PORT=6379
BKAPP_REDIS_PASSWORD=
BK_MYSQL_NAME=bk_itsm_ci
BK_MYSQL_USER=root
BK_MYSQL_PASSWORD=root
BK_MYSQL_HOST=localhost
BK_MYSQL_PORT=3306
BK_MYSQL_TEST_NAME=bk_itsm_ci_test
```

## Version plan
- [版本日志](docs/RELEASE.md)
[(English Documents Available)](docs/RELEASE_EN.md)
Expand Down
28 changes: 28 additions & 0 deletions readme_en.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,34 @@ ITSM is an upper layer SaaS application based on the Tencent Blueking product sy
- [API_Request_Sandbox_Instructions](docs/install/api_sandbox_guide.md)
- [ITSM Access Guidelines](docs/wiki/access.md)

## Unit Testing
- When performing unit tests locally, it is recommended to use the following environment variable configuration. Ensure that MySQL and Redis are properly set up.
- It is advisable to execute the tests using the integrated Django Test feature in PyCharm, which loads the `.env` file. Set the target to `itsm.tests`.
```.dotenv
RUN_ENV=open
APP_CODE=bk_itsm
APP_ID=bk_itsm
RUN_VER=open
SECRET_KEY=12345678-1234-5678-1234-123456789012
APP_TOKEN=12345678-1234-5678-1234-123456789012
BK_PAAS_HOST=http://127.0.0.1
BK_IAM_V3_INNER_HOST=127.0.0.1
BK_IAM_INNER_HOST=http://127.0.0.1:8080
BROKER_URL=redis://localhost:6379/0
USE_IAM=false
BKAPP_REDIS_HOST=localhost
BKAPP_BK_IAM_SYSTEM_ID=itsm
BKAPP_IAM_INITIAL_FILE=dev
BKAPP_REDIS_PORT=6379
BKAPP_REDIS_PASSWORD=
BK_MYSQL_NAME=bk_itsm_ci
BK_MYSQL_USER=root
BK_MYSQL_PASSWORD=root
BK_MYSQL_HOST=localhost
BK_MYSQL_PORT=3306
BK_MYSQL_TEST_NAME=bk_itsm_ci_test
```

## Version plan
- [RELEASE](docs/RELEASE_EN.md)
[(Chinese Documents Available)](docs/RELEASE.md)
Expand Down

0 comments on commit c1d0e2c

Please sign in to comment.