diff --git a/TestCase/automation/test_03_rule.py b/TestCase/automation/test_03_rule.py new file mode 100644 index 0000000000000000000000000000000000000000..9344bf703b54b09d9ce7a18206d827025112ff87 --- /dev/null +++ b/TestCase/automation/test_03_rule.py @@ -0,0 +1,13 @@ +import pytest +from Utils import yaml_handler +from Utils import req_handler +from TestData.automation.rule_test_data import ruleData + +class TestRule: + + yaml_path = r'automation/rule.yaml' + yaml_data = yaml_handler.yaml_handler.get_case(yaml_path) + @pytest.mark.flaky(reruns=ruleData.rerun, reruns_delay=ruleData.rerun_delay) + @pytest.mark.parametrize('case',yaml_data) + def test_rule(self,case): + req_handler.ReqHandler.send_requests(case=case,var_class=ruleData) diff --git a/TestData/automation/rule_test_data.py b/TestData/automation/rule_test_data.py new file mode 100644 index 0000000000000000000000000000000000000000..d7b567b67781278e588afdf822bef19dda3f261b --- /dev/null +++ b/TestData/automation/rule_test_data.py @@ -0,0 +1,14 @@ +from Utils.global_variate import Global +from Utils.mockData_handler import data_handler +from Utils.sql_handler import SqlHandler +from Utils.config_handler import base_config + +class ruleData(Global): + rule_name = 'autotest_rule%s'%data_handler.random_id() + new_rule_name = 'update_autotest_rule%s'%data_handler.random_id() + rob_id = 'cjerti4uvd8uhr9udkg0' + event_id = 'clsmhcn73uvv6krp8l50' + rule_data = {"logicIf":{"ruleCond":{"condType":2,"robId":event_id,"objName":"IncomingMessage","objDescribe":"Incoming message","objType":"bool","objCategory":"","objKind":3,"valueFrom":3,"parentRobId":"","showType":"","showKind":"","showPlaceholder":"","valueList":[],"specifyOperator":"","compOperatorType":"eq","compOperatorValue":"true","next":None,"logicType":"and"},"result":[{"robId":rob_id,"objName":"CloseConversation","objDescribe":"Close the conversation","objType":"bool","objCategory":"","objKind":2,"valueFrom":1,"parentRobId":"","showType":"","showKind":"","showPlaceholder":"","valueList":[],"specifyOperator":"","objValue":"true"}]}} + rule_db = SqlHandler(address=base_config.get_value('mysql','address'),port=int(base_config.get_value('mysql','port')),account=base_config.get_value('mysql','account'),password=base_config.get_value('mysql','password')) + rule_status = 2 + insert_rule_id = data_handler.random_id() diff --git a/TestData/automation/workflow_test_data.py b/TestData/automation/workflow_test_data.py index 3cd30ef96a9d2fd8965b96f1adb7393ecd7934eb..b71dc791f3847581808de6922f0b3926041bb456 100644 --- a/TestData/automation/workflow_test_data.py +++ b/TestData/automation/workflow_test_data.py @@ -1,4 +1,3 @@ -import Utils.sql_handler from Utils.global_variate import Global from Utils.mockData_handler import data_handler from Utils.sql_handler import SqlHandler diff --git a/TestData/inbox/ticketInfo_test_data.py b/TestData/inbox/ticketInfo_test_data.py index e6fb0991a5cc022239ebcadf240dae6cebba863c..aed1ebb5a25bc89a2d2f2628b682c13f07316e56 100644 --- a/TestData/inbox/ticketInfo_test_data.py +++ b/TestData/inbox/ticketInfo_test_data.py @@ -1,4 +1,5 @@ from Utils.global_variate import Global - +from Utils.sql_handler import SqlHandler +from Utils.config_handler import base_config class ticketInfoData(Global): - pass \ No newline at end of file + ticket_info_db = SqlHandler(address=base_config.get_value('mysql','address'),port=int(base_config.get_value('mysql','port')),account=base_config.get_value('mysql','account'),password=base_config.get_value('mysql','password')) diff --git a/TestFile/automation/rule/rule_select.py b/TestFile/automation/rule/rule_select.py new file mode 100644 index 0000000000000000000000000000000000000000..9ba75597ed94055a9f69afd369879c1e55bbadcc --- /dev/null +++ b/TestFile/automation/rule/rule_select.py @@ -0,0 +1,33 @@ +from TestData.automation.rule_test_data import ruleData + +rule_select_sql = f'select * from `rule_define` where brand_id = {ruleData.brandId} and status != 3 and tpl_id = "{ruleData.rule_parent_template_id}" and child_rule = 0' +rule_select_result = ruleData.rule_db.select_many_value(sql=rule_select_sql) +if rule_select_result: + + rule_num = len(rule_select_result) + rule = rule_select_result[0] + select_rule_id = rule['rule_id'] + select_rule_name = rule['rule_name'] + select_rule_status = rule['status'] + select_rule_sort = str(rule['sorts']) + select_rule_describe = rule['rule_describe'] +else: + insert_rule_raw = '{"ruleId":"%s","tplId":"%s","brandId":%s,"eventId":"%s","ruleName":"%s","status":%s,"ruleLogic":{"logicIf":{"ruleCond":{"condType":2,"robId":"%s","objName":"IncomingMessage","objType":"bool","compOperatorType":"eq","compOperatorValue":"true","logicType":"and"},"result":[{"ruleId":"%s","robId":"cjerr94uvd8ufj7e2os0","objName":"MarkAsSpam","objType":"bool","objKind":2,"objDescribe":"Mark as spam","objValue":"true","resultType":1}],"index":1}}}'%(ruleData.insert_rule_id,ruleData.rule_parent_template_id,ruleData.brandId,ruleData.rule_name,ruleData.rule_status,ruleData.event_id,ruleData.insert_rule_id) + rule_insert_sql = f"""INSERT INTO willdesk.rule_define (rule_id,tpl_id,brand_id,event_id,rule_name,rule_describe,rule_dsl,rule_raw,sorts,parent_ruleid,child_rule,dsl_version,json_version,status,create_at,update_at) VALUES + ('{ruleData.insert_rule_id}','{ruleData.rule_parent_template_id}',{ruleData.brandId},'{ruleData.event_id}','{ruleData.rule_name}','','cnVsZSAiY3A2M3VpdWVvbGE0amZqbGJoa2ciICJhdXRvdGVzdF9ydWxlIiBzYWxpZW5jZSAgJFJVTEVfU09SVFNfUExBQ0UkCmJlZ2luCmlmIGNoZWNrUnVsZUluZGV4KGRhdGEuUnVuSW5kZXhzLDEpIHx8ICgoZGF0YS5DaGVja0RhdGEoIkluY29taW5nTWVzc2FnZSIpICYmIGVxdWFsKGRhdGEuR2V0RGF0YSgiSW5jb21pbmdNZXNzYWdlIiksInRydWUiKSkpIHsKICByZXR1cm4gIlczc2ljblZzWlVsa0lqb2lZM0EyTTNWcGRXVnZiR0UwYW1acWJHSm9hMmNpTENKeWIySkpaQ0k2SW1OcVpYSnlPVFIxZG1RNGRXWnFOMlV5YjNNd0lpd2liMkpxVG1GdFpTSTZJazFoY210QmMxTndZVzBpTENKdlltcFVlWEJsSWpvaVltOXZiQ0lzSW05aWFrdHBibVFpT2pJc0ltOWlha1JsYzJOeWFXSmxJam9pVFdGeWF5QmhjeUJ6Y0dGdElpd2liMkpxVm1Gc2RXVWlPaUowY25WbElpd2ljbVZ6ZFd4MFZIbHdaU0k2TVgxZCIKfQpyZXR1cm4gIlczc2libTlrWlVsdVpHVjRJam94TENKeWRXeGxTV1FpT2lKamNEWXpkV2wxWlc5c1lUUnFabXBzWW1oclp5SXNJbkp2WWtsa0lqb2lZMnh6YldoamJqY3pkWFoyTm10eWNEaHNOVEFpTENKdlltcE9ZVzFsSWpvaVNXNWpiMjFwYm1kTlpYTnpZV2RsSWl3aWIySnFWSGx3WlNJNkltSnZiMndpTENKdlltcExhVzVrSWpveExDSnlaWE4xYkhSVWVYQmxJam94ZlYwPSIKZW5kCg==','{insert_rule_raw}',36180000,'',0,'v2','v2',{ruleData.rule_status},'2024-05-21 14:29:31','2024-05-21 14:30:02'); +""" + ruleData.rule_db.execute_sql(sql=rule_insert_sql) + select_rule_id = ruleData.insert_rule_id + select_rule_name = ruleData.rule_name + select_rule_status = ruleData.rule_status + rule_num = 1 + select_rule_sort = '36180000' + select_rule_describe = ruleData.rule_describe +setattr(ruleData, 'select_rule_id', select_rule_id) +setattr(ruleData, 'rule_num', rule_num) +setattr(ruleData, 'select_rule_name', select_rule_name) +setattr(ruleData, 'select_rule_status', select_rule_status) +setattr(ruleData, 'select_rule_sort', select_rule_sort) +setattr(ruleData, 'select_rule_describe', select_rule_describe) +setattr(ruleData, 'rule_num_less', rule_num - 1) +ruleData.rule_db.close_db() \ No newline at end of file diff --git a/TestFile/automation/rule/rule_template_select.py b/TestFile/automation/rule/rule_template_select.py new file mode 100644 index 0000000000000000000000000000000000000000..5be6958b569f525dac4073e5b20811aed1b94caf --- /dev/null +++ b/TestFile/automation/rule/rule_template_select.py @@ -0,0 +1,7 @@ +from Utils.sql_handler import test_env_conn +from TestData.automation.rule_test_data import ruleData + +template_parent_select_sql = f'select * from rule_template where status = 1 and tpl_category = "willdesk"' +template_parent_select_result = test_env_conn.select_one_value(sql=template_parent_select_sql) +rule_parent_template_id = template_parent_select_result['tpl_id'] +setattr(ruleData, 'rule_parent_template_id', rule_parent_template_id) \ No newline at end of file diff --git a/TestFile/automation/workflow/workflow_select.py b/TestFile/automation/workflow/workflow_select.py index ecf738878ecd8e73228e68fb9bb6b11bb4c720c1..ebaaf374da2c5f967d8e911ae36da66da47a19da 100644 --- a/TestFile/automation/workflow/workflow_select.py +++ b/TestFile/automation/workflow/workflow_select.py @@ -12,7 +12,7 @@ if workflow_select_result: select_workflow_sort = str(workflow['sorts']) select_workflow_describe = workflow['rule_describe'] else: - insert_rule_raw = '{"ruleId":"cp5ccqct7rnv226qoavg","tplId":"cj6d0n6ein6dsof86ng0","brandId":6052,"eventId":"cmk9m1n73uvgh1rfmho0","ruleName":"Triage button and assign to different teams","ruleDescribe":"When a customer opens a new conversation, it is assigned according to the type selected by the user, and the issue information is collected synchronously, add the tag.","status":1,"ruleLogic":{"logicIf":{"ruleCond":{"condType":2,"robId":"cmk9m1n73uvgh1rfmho0","objName":"ChatBotIncomingMessage","objType":"bool","compOperatorType":"eq","compOperatorValue":"true","extendedAttributes":"{\\"x\\":212,\\"y\\":212,\\"nodeId\\":\\"Triggers_35705406543421204\\"}"},"result":[{"extendedAttributes":"{\\"showType\\":\\"next\\",\\"nodeId\\":\\"Actions_7500242750723225\\"}","resultType":2,"inner":[{"ruleId":"cp5ccqct7rnv226qoavg","robId":"cjhg9iuein687habss50","objName":"ChatBotMulReply","objType":"string","objKind":2,"objValue":"{\\"contentList\\":\\"Hi👋~\\",\\"attachmentList\\":[]}","showType":"mulInput","showKind":"chatBotReply","extendedAttributes":"{\\"title\\":\\"Message content\\",\\"nodeId\\":\\"Actions_7500242750723225\\",\\"x\\":658.2869318181818,\\"y\\":270.7599431818181}","resultType":1}]}],"index":1}}}' + insert_rule_raw = '{"ruleId":"%s","tplId":"%s","brandId":%s,"eventId":"%s","ruleName":"%s","ruleDescribe":"%s","status":%s,"ruleLogic":{"logicIf":{"ruleCond":{"condType":2,"robId":"%s","objName":"ChatBotIncomingMessage","objType":"bool","compOperatorType":"eq","compOperatorValue":"true","extendedAttributes":"{\\"x\\":212,\\"y\\":212,\\"nodeId\\":\\"Triggers_35705406543421204\\"}"},"result":[{"extendedAttributes":"{\\"showType\\":\\"next\\",\\"nodeId\\":\\"Actions_7500242750723225\\"}","resultType":2,"inner":[{"ruleId":"cp5ccqct7rnv226qoavg","robId":"cjhg9iuein687habss50","objName":"ChatBotMulReply","objType":"string","objKind":2,"objValue":"{\\"contentList\\":\\"%s\\",\\"attachmentList\\":[]}","showType":"mulInput","showKind":"chatBotReply","extendedAttributes":"{\\"title\\":\\"Message content\\",\\"nodeId\\":\\"Actions_7500242750723225\\",\\"x\\":658.2869318181818,\\"y\\":270.7599431818181}","resultType":1}]}],"index":1}}}'%(workflowData.insert_workflow_id,workflowData.workflow_parent_template_id,workflowData.brandId,workflowData.event_id,workflowData.workflow_name,workflowData.workflow_describe,workflowData.workflow_status,workflowData.event_id,workflowData.workflow_msg) workflow_insert_sql = f"""INSERT INTO willdesk.rule_define (rule_id,tpl_id,brand_id,event_id,rule_name,rule_describe,rule_dsl,rule_raw,sorts,parent_ruleid,child_rule,dsl_version,json_version,status,create_at,update_at) VALUES ('{workflowData.insert_workflow_id}','{workflowData.workflow_parent_template_id}',{workflowData.brandId},'{workflowData.event_id}',{workflowData.workflow_name},'{workflowData.workflow_describe}','cnVsZSAiY3A1Y2NxY3Q3cm52MjI2cW9hdmciICJUcmlhZ2UgYnV0dG9uIGFuZCBhc3NpZ24gdG8gZGlmZmVyZW50IHRlYW1zIiBzYWxpZW5jZSAgJFJVTEVfU09SVFNfUExBQ0UkCmJlZ2luCmlmIGNoZWNrUnVsZUluZGV4KGRhdGEuUnVuSW5kZXhzLDEpIHx8ICgoZGF0YS5DaGVja0RhdGEoIkNoYXRCb3RJbmNvbWluZ01lc3NhZ2UiKSAmJiBlcXVhbChkYXRhLkdldERhdGEoIkNoYXRCb3RJbmNvbWluZ01lc3NhZ2UiKSwidHJ1ZSIpKSkgewogIHJldHVybiAiVzNzaWNuVnNaVWxrSWpvaVkzQTFZMk54WTNRM2NtNTJNakkyY1c5aGRtY2lMQ0p5YjJKSlpDSTZJbU5xYUdjNWFYVmxhVzQyT0Rkb1lXSnpjelV3SWl3aWIySnFUbUZ0WlNJNklrTm9ZWFJDYjNSTmRXeFNaWEJzZVNJc0ltOWlhbFI1Y0dVaU9pSnpkSEpwYm1jaUxDSnZZbXBMYVc1a0lqb3lMQ0p2WW1wV1lXeDFaU0k2SW50Y0ltTnZiblJsYm5STWFYTjBYQ0k2WENKSWFmQ2ZrWXQrWENJc1hDSmhkSFJoWTJodFpXNTBUR2x6ZEZ3aU9sdGRmU0lzSW5Ob2IzZFVlWEJsSWpvaWJYVnNTVzV3ZFhRaUxDSnphRzkzUzJsdVpDSTZJbU5vWVhSQ2IzUlNaWEJzZVNJc0ltVjRkR1Z1WkdWa1FYUjBjbWxpZFhSbGN5STZJbnRjSW5ScGRHeGxYQ0k2WENKTlpYTnpZV2RsSUdOdmJuUmxiblJjSWl4Y0ltNXZaR1ZKWkZ3aU9sd2lRV04wYVc5dWMxODNOVEF3TWpReU56VXdOekl6TWpJMVhDSXNYQ0o0WENJNk5qVTRMakk0Tmprek1UZ3hPREU0TVRnc1hDSjVYQ0k2TWpjd0xqYzFPVGswTXpFNE1UZ3hPREY5SWl3aWNtVnpkV3gwVkhsd1pTSTZNWDFkIgp9CnJldHVybiAiVzNzaWJtOWtaVWx1WkdWNElqb3hMQ0p5ZFd4bFNXUWlPaUpqY0RWalkzRmpkRGR5Ym5ZeU1qWnhiMkYyWnlJc0luSnZZa2xrSWpvaVkyMXJPVzB4YmpjemRYWm5hREZ5Wm0xb2J6QWlMQ0p2WW1wT1lXMWxJam9pUTJoaGRFSnZkRWx1WTI5dGFXNW5UV1Z6YzJGblpTSXNJbTlpYWxSNWNHVWlPaUppYjI5c0lpd2liMkpxUzJsdVpDSTZNU3dpY21WemRXeDBWSGx3WlNJNk1YMWQiCmVuZAo=',{insert_rule_raw},35870000,'',0,'v2','v2',{workflowData.workflow_status},'2024-05-20 11:41:29','2024-05-20 11:41:29'); """ diff --git a/TestFile/inbox/livechat_update_automation.py b/TestFile/inbox/livechat_update_automation.py new file mode 100644 index 0000000000000000000000000000000000000000..8d0bcd35fcf5b880aff0025a22c491a16d4a1425 --- /dev/null +++ b/TestFile/inbox/livechat_update_automation.py @@ -0,0 +1,5 @@ +from Utils.sql_handler import test_env_conn +from TestData.inbox.livechat_test_data import livechatData + +update_automation_sql = f'update `rule_define` set status = 2 where brand_id = {livechatData.brandId} and status = 1' +test_env_conn.execute_sql(sql=update_automation_sql) \ No newline at end of file diff --git a/TestFile/inbox/ticketInfo_select.py b/TestFile/inbox/ticketInfo_select.py index 949ec7f6fdbe852f282b50005cb2572759b1cc75..bfbc9b0edcaba150f216df735e33e38230c2d6eb 100644 --- a/TestFile/inbox/ticketInfo_select.py +++ b/TestFile/inbox/ticketInfo_select.py @@ -1,4 +1,3 @@ -from Utils.sql_handler import test_env_conn from TestData.inbox.ticketInfo_test_data import ticketInfoData all_ticket_select_sql = f'select * from `im_room` where `cate_id` = {ticketInfoData.brandId} and `status` = 1 and `is_ignore` = 0 and room_type != 2' @@ -8,12 +7,12 @@ your_ticket_select_sql = f'select * from `im_room` where `cate_id` = {ticketInfo your_wait_ticket_sql = f'select * from `im_room` where `cate_id` = {ticketInfoData.brandId} and `status` = 2 and `allocation_uid` = {ticketInfoData.userId} and `is_ignore` = 0 and room_type != 2' your_close_ticket_sql = f'select * from `im_room` where `cate_id` = {ticketInfoData.brandId} and `status` = 3 and `allocation_uid` = {ticketInfoData.userId} and `is_ignore` = 0 and room_type != 2' -all_ticket_num = len(test_env_conn.select_many_value(sql=all_ticket_select_sql)) -wait_ticket_num = len(test_env_conn.select_many_value(sql=wait_ticket_select_sql)) -close_ticket_num = len(test_env_conn.select_many_value(sql=close_ticket_select_sql)) -your_ticket_num = len(test_env_conn.select_many_value(sql=your_ticket_select_sql)) -your_wait_ticket_num = len(test_env_conn.select_many_value(sql=your_wait_ticket_sql)) -your_close_ticket_num = len(test_env_conn.select_many_value(sql=your_close_ticket_sql)) +all_ticket_num = len(ticketInfoData.ticket_info_db.select_many_value(sql=all_ticket_select_sql)) +wait_ticket_num = len(ticketInfoData.ticket_info_db.select_many_value(sql=wait_ticket_select_sql)) +close_ticket_num = len(ticketInfoData.ticket_info_db.select_many_value(sql=close_ticket_select_sql)) +your_ticket_num = len(ticketInfoData.ticket_info_db.select_many_value(sql=your_ticket_select_sql)) +your_wait_ticket_num = len(ticketInfoData.ticket_info_db.select_many_value(sql=your_wait_ticket_sql)) +your_close_ticket_num = len(ticketInfoData.ticket_info_db.select_many_value(sql=your_close_ticket_sql)) setattr(ticketInfoData,'all_ticket_num',all_ticket_num) setattr(ticketInfoData,'close_ticket_num',close_ticket_num) @@ -21,4 +20,5 @@ setattr(ticketInfoData,'wait_ticket_num',wait_ticket_num) setattr(ticketInfoData,'your_ticket_num',your_ticket_num) setattr(ticketInfoData,'your_wait_ticket_num',your_wait_ticket_num) setattr(ticketInfoData,'your_close_ticket_num',your_close_ticket_num) +ticketInfoData.ticket_info_db.close_db() diff --git a/Utils/webhook_handler.py b/Utils/webhook_handler.py index 4742fafb13eaa25d09a0dccba2666b84b5ef0d5c..f2fa96ba1c9175c1b89e302193e1b531d8594151 100644 --- a/Utils/webhook_handler.py +++ b/Utils/webhook_handler.py @@ -8,16 +8,16 @@ import urllib.parse timestamp = str(round(time.time() * 1000)) -secret = 'SEC7c41f8b0298b348ed538883c49068185b75c510d64dcb988fc570cb7614f07ff' #正式的webhook -# secret = 'SEC9d91939234e83369cba32c0ca4bcd9af60b5b1f69424d6fabd36f48d572a151c' #测试用的webhook +# secret = 'SEC7c41f8b0298b348ed538883c49068185b75c510d64dcb988fc570cb7614f07ff' #正式的webhook +secret = 'SEC9d91939234e83369cba32c0ca4bcd9af60b5b1f69424d6fabd36f48d572a151c' #测试用的webhook secret_enc = secret.encode('utf-8') string_to_sign = '{}\n{}'.format(timestamp, secret) string_to_sign_enc = string_to_sign.encode('utf-8') hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() sign = urllib.parse.quote_plus(base64.b64encode(hmac_code)) -# webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=22fda27990b00841c3201c20649c0a8abb6da82d8472b6f6154ef4cd9dadb33f' #测试用的webhook -webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=c7d3c3a67db4cf7b3472e62005a25ce202daac8095f32530687afdb91f1616b6' #正式的webhook +webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=22fda27990b00841c3201c20649c0a8abb6da82d8472b6f6154ef4cd9dadb33f' #测试用的webhook +# webhook_url = 'https://oapi.dingtalk.com/robot/send?access_token=c7d3c3a67db4cf7b3472e62005a25ce202daac8095f32530687afdb91f1616b6' #正式的webhook class webhookHandler: def __init__(self,webhookUrl = f"{webhook_url}×tamp={timestamp}&sign={sign}"): diff --git a/YamlCase/automation/rule.yaml b/YamlCase/automation/rule.yaml new file mode 100644 index 0000000000000000000000000000000000000000..dcf40b6cb1cdd86b2745a7538a71c50db1b2b7a9 --- /dev/null +++ b/YamlCase/automation/rule.yaml @@ -0,0 +1,124 @@ +api1: + title: 新建规则 + url: /api/v1/rule/updateRuleDefine + method: post + data: {"ruleName":"${rule_name}","ruleLogic":"${rule_data}","brandId":"${brandId}","status":1,"tplId":"${rule_parent_template_id}","eventId":"${event_id}","v":"${v}"} + before_sql: automation/rule/rule_template_select.py + set_value: {"create_rule_id": "$.data.ruleId"} + expected: + - eq: {"$.code": 0} + +api2: + title: 检查是否创建成功 + url: /api/v1/rule/ruleList + method: post + data: {"page":1,"pageSize":100,"brandId":"${brandId}","tplId":"${rule_parent_template_id}","v":"${v}"} + before_sql: automation/rule/rule_select.py + expected: + - eq: {"$.code": 0} + - eq: {"$.data.total": "${rule_num}"} + - eq: {"$.data.ruleList[?(@.ruleId == '${select_rule_id}')].ruleName": "${select_rule_name}"} + - eq: {"$.data.ruleList[?(@.ruleId == '${select_rule_id}')].sorts": "${select_rule_sort}"} + - eq: {"$.data.ruleList[?(@.ruleId == '${select_rule_id}')].status": "${select_rule_status}"} + - in_list: {"$.data.ruleList[*].ruleId": "${create_rule_id}"} + - eq: {"$.data.ruleList[?(@.ruleId == '${create_rule_id}')].ruleName": "${rule_name}"} + +api3: + title: 更新rule + url: /api/v1/rule/updateRuleDefine + method: post + data: {"tplId":"${rule_parent_template_id}","ruleName":"${new_rule_name}","ruleDescribe":"","ruleId":"${create_rule_id}","status":"${rule_status}","brandId":"${brandId}","eventId":"${event_id}","childRule":0,"ruleType":"Triggers","ruleLogic":"${rule_data}","v":"${v}"} + expected: + - eq: {"$.code": 0} + +api4: + title: 检查是否更新成功 + url: /api/v1/rule/ruleList + method: post + data: {"page":1,"pageSize":100,"brandId":"${brandId}","tplId":"${rule_parent_template_id}","v":"${v}"} + expected: + - eq: {"$.code": 0} + - eq: {"$.data.ruleList[?(@.ruleId == '${create_rule_id}')].ruleName": "${new_rule_name}"} + +api5: + title: b端获取房间号 + url: /api/v1/chat/local/roomList + method: post + data: {"uid":"${userId}","uType":2,"platform":1,"siteIds":["${shopId}"],"status":1,"page":1,"pageSize":20,"sortName":"all","keyword":"","v":"${v}"} + set_value: {"roomId": "$.data.list[?(@.fromID == '${customerId}')].roomId"} + expected: + - eq: {"$.code" : 0} + +api6: + title: c端主动发起会话触发rule + ws: customer + action: sendmsg + data: + type: text + +api7: + title: 检查是否触发rule - close + url: /api/v1/chat/local/roomList + method: post + data: {"uid":"${userId}","uType":2,"platform":1,"siteIds":["${shopId}"],"status":3,"page":1,"pageSize":20,"sortName":"all","keyword":"","roomSearchExpArgs":{"searchDime":0,"searchId":""},"v":"${v}"} + expected: + - eq: {"$.code": 0} + - not_in_list: {"$.data.list[*].roomId": "${roomId}"} + +api8: + title: 开启rule + url: /api/v1/rule/updateRuleStatus + method: post + data: {"status": 1,"ruleId": "${create_rule_id}","v": "${v}"} + expected: + - eq: {"$.code": 0} + +api9: + title: c端主动发起会话触发rule + ws: customer + action: sendmsg + data: + type: text + +api10: + title: 检查是否触发rule - open + url: /api/v1/chat/local/roomList + method: post + data: {"uid":"${userId}","uType":2,"platform":1,"siteIds":["${shopId}"],"status":3,"page":1,"pageSize":20,"sortName":"all","keyword":"","roomSearchExpArgs":{"searchDime":0,"searchId":""},"v":"${v}"} + expected: + - eq: {"$.code": 0} + - in_list: {"$.data.list[*].roomId": "${roomId}"} + +api11: + title: 关闭rule + url: /api/v1/rule/updateRuleStatus + method: post + data: {"status":2,"ruleId":"${create_rule_id}","v":"${v}"} + expected: + - eq: {"$.code": 0} + +api12: + title: 删除rule + url: /api/v1/rule/updateRuleStatus + method: post + data: {"status":3,"ruleId":"${create_rule_id}","v": "${v}"} + expected: + - eq: {"$.code": 0} + +api13: + title: 检查是否删除成功 + url: /api/v1/rule/ruleList + method: post + data: {"page":1,"pageSize":100,"brandId":"${brandId}","tplId":"${rule_parent_template_id}","v":"${v}"} + expected: + - eq: {"$.code": 0} + - eq: {"$.data.total": "${rule_num_less}"} + - not_in_list: {"$.data.ruleList[*].ruleId": "${create_rule_id}"} + +api14: + title: 重新打开会话 + url: /api/v1/chatRoom/operate + method: post + data: {"uid": "${userId}","uType": 2,"platform": 1,"roomId": "${roomId}","clientId": "${willdesk_clientId}","event": "open","username": "${name}","isMark": false,"allocationUid": "${userId}","v": "${v}" } + expected: + - eq: {"$.code": 0} \ No newline at end of file diff --git a/YamlCase/automation/workflow.yaml b/YamlCase/automation/workflow.yaml index 59b16fa54ae7a7bf7b4137039ea41debf030c911..4a1e188e33fbb719e521b9cef1cc4ac728ab1171 100644 --- a/YamlCase/automation/workflow.yaml +++ b/YamlCase/automation/workflow.yaml @@ -27,7 +27,7 @@ api2: api3: - title: 更新workflow(只更新名称) + title: 更新workflow url: /api/v1/rule/updateRuleDefine method: post data: {"tplId":"${workflow_parent_template_id}","ruleName":"${workflow_name}","ruleDescribe":"${workflow_describe}","ruleId":"${create_workflow_id}","status":"${workflow_status}","brandId":"${brandId}","eventId":"${event_id}","childRule":0,"ruleType":"Triggers","ruleLogic":"${create_workflow_data2}","v":"${v}"} diff --git a/YamlCase/inbox/livechat.yaml b/YamlCase/inbox/livechat.yaml index 3dad98e96672e80e5d4c368a8c807440fbc0f40b..edb7d3e615c69c5db1a8c392d9493d8a64a5e40f 100644 --- a/YamlCase/inbox/livechat.yaml +++ b/YamlCase/inbox/livechat.yaml @@ -1,6 +1,7 @@ api1: title: c端主动发起会话 - text ws: customer + before_sql: inbox/livechat_update_automation.py action: sendmsg data: type: text