platform-create.spec.ts 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. import { TIMEOUTS } from '../../utils/timeouts';
  2. import { test, expect } from '../../utils/test-setup';
  3. import { readFileSync } from 'fs';
  4. import { join, dirname } from 'path';
  5. import { fileURLToPath } from 'url';
  6. const __filename = fileURLToPath(import.meta.url);
  7. const __dirname = dirname(__filename);
  8. const testUsers = JSON.parse(readFileSync(join(__dirname, '../../fixtures/test-users.json'), 'utf-8'));
  9. test.describe('平台创建功能', () => {
  10. test.beforeEach(async ({ adminLoginPage, platformManagementPage }) => {
  11. // 以管理员身份登录后台
  12. await adminLoginPage.goto();
  13. await adminLoginPage.login(testUsers.admin.username, testUsers.admin.password);
  14. await adminLoginPage.expectLoginSuccess();
  15. await platformManagementPage.goto();
  16. });
  17. test.describe('基本创建流程测试', () => {
  18. test('应该成功创建平台(填写所有字段)', async ({ platformManagementPage }) => {
  19. // 生成唯一平台名称
  20. const timestamp = Date.now();
  21. const platformName = `测试平台_${timestamp}`;
  22. const contactPerson = `测试联系人_${timestamp}`;
  23. const contactPhone = '13800138000';
  24. const contactEmail = `test_${timestamp}@example.com`;
  25. // 创建平台(填写所有字段)
  26. const result = await platformManagementPage.createPlatform({
  27. platformName,
  28. contactPerson,
  29. contactPhone,
  30. contactEmail,
  31. });
  32. // 验证创建成功(通过 API 响应判断)
  33. expect(result.responses).toBeDefined();
  34. expect(result.responses?.length).toBeGreaterThan(0);
  35. const createResponse = result.responses?.find(r => r.url.includes('createPlatform'));
  36. expect(createResponse?.ok).toBe(true);
  37. // 验证平台出现在列表中(这是最可靠的验证方式)
  38. await expect(async () => {
  39. const exists = await platformManagementPage.platformExists(platformName);
  40. expect(exists).toBe(true);
  41. }).toPass({ timeout: TIMEOUTS.DIALOG });
  42. // 清理测试数据
  43. const deleteResult = await platformManagementPage.deletePlatform(platformName);
  44. expect(deleteResult).toBe(true);
  45. // 验证平台已被删除
  46. const existsAfterDelete = await platformManagementPage.platformExists(platformName);
  47. expect(existsAfterDelete).toBe(false);
  48. });
  49. test('创建后平台应该出现在列表中', async ({ platformManagementPage }) => {
  50. const timestamp = Date.now();
  51. const platformName = `测试平台_消息_${timestamp}`;
  52. const contactPerson = `联系人_${timestamp}`;
  53. const contactPhone = '13900139000';
  54. const contactEmail = `contact_${timestamp}@test.com`;
  55. // 创建平台
  56. await platformManagementPage.createPlatform({
  57. platformName,
  58. contactPerson,
  59. contactPhone,
  60. contactEmail,
  61. });
  62. // 验证平台出现在列表中
  63. const exists = await platformManagementPage.platformExists(platformName);
  64. expect(exists).toBe(true);
  65. // 清理
  66. await platformManagementPage.deletePlatform(platformName);
  67. });
  68. });
  69. test.describe('完整表单字段测试', () => {
  70. test('应该保存所有填写的字段数据', async ({ platformManagementPage }) => {
  71. // 生成唯一数据
  72. const timestamp = Date.now();
  73. const platformName = `完整测试平台_${timestamp}`;
  74. const contactPerson = `测试联系人_${timestamp}`;
  75. const contactPhone = '13800138000';
  76. const contactEmail = `test_${timestamp}@example.com`;
  77. // 创建平台(填写所有字段)
  78. const result = await platformManagementPage.createPlatform({
  79. platformName,
  80. contactPerson,
  81. contactPhone,
  82. contactEmail,
  83. });
  84. // 验证创建成功(通过 API 响应判断)
  85. const createResponse = result.responses?.find(r => r.url.includes('createPlatform'));
  86. expect(createResponse?.ok).toBe(true);
  87. // 验证平台出现在列表中
  88. await expect(async () => {
  89. const exists = await platformManagementPage.platformExists(platformName);
  90. expect(exists).toBe(true);
  91. }).toPass({ timeout: TIMEOUTS.DIALOG });
  92. // 清理测试数据
  93. await platformManagementPage.deletePlatform(platformName);
  94. });
  95. test('应该支持不同的联系人信息', async ({ platformManagementPage }) => {
  96. const timestamp = Date.now();
  97. const platformName = `联系人测试平台_${timestamp}`;
  98. const contactPerson = `张三_${timestamp}`;
  99. const contactPhone = '15011112222';
  100. const contactEmail = `zhangsan_${timestamp}@company.com`;
  101. // 创建平台
  102. const result = await platformManagementPage.createPlatform({
  103. platformName,
  104. contactPerson,
  105. contactPhone,
  106. contactEmail,
  107. });
  108. // 验证 API 响应成功
  109. const createResponse = result.responses?.find(r => r.url.includes('createPlatform'));
  110. expect(createResponse?.ok).toBe(true);
  111. // 验证平台存在于列表中
  112. const exists = await platformManagementPage.platformExists(platformName);
  113. expect(exists).toBe(true);
  114. // 清理
  115. await platformManagementPage.deletePlatform(platformName);
  116. });
  117. });
  118. test.describe('表单验证测试', () => {
  119. test('未填写平台名称时应显示内联验证错误', async ({ platformManagementPage }) => {
  120. // 打开创建对话框
  121. await platformManagementPage.openCreateDialog();
  122. // 不填写任何字段,直接尝试提交
  123. const submitButton = platformManagementPage.page.locator('[data-testid="create-submit-button"]');
  124. await submitButton.click();
  125. // 验证对话框仍然打开(表单验证阻止了提交)
  126. const dialog = platformManagementPage.page.locator('[role="dialog"]');
  127. await expect(dialog).toBeVisible();
  128. // 关闭对话框
  129. await platformManagementPage.cancelDialog();
  130. });
  131. test('应该能取消创建平台操作', async ({ platformManagementPage }) => {
  132. const timestamp = Date.now();
  133. const platformName = `取消测试平台_${timestamp}`;
  134. // 打开创建对话框
  135. await platformManagementPage.openCreateDialog();
  136. // 填写平台名称
  137. await platformManagementPage.fillPlatformForm({
  138. platformName,
  139. });
  140. // 取消对话框
  141. await platformManagementPage.cancelDialog();
  142. // 验证平台没有出现在列表中
  143. const exists = await platformManagementPage.platformExists(platformName);
  144. expect(exists).toBe(false);
  145. });
  146. test('应该能通过关闭对话框取消创建', async ({ platformManagementPage }) => {
  147. const timestamp = Date.now();
  148. const platformName = `关闭测试平台_${timestamp}`;
  149. // 打开创建对话框
  150. await platformManagementPage.openCreateDialog();
  151. // 填写平台名称
  152. await platformManagementPage.fillPlatformForm({
  153. platformName,
  154. });
  155. // 按 ESC 键关闭对话框
  156. await platformManagementPage.page.keyboard.press('Escape');
  157. // 等待对话框关闭
  158. await platformManagementPage.waitForDialogClosed();
  159. // 验证平台没有出现在列表中
  160. const exists = await platformManagementPage.platformExists(platformName);
  161. expect(exists).toBe(false);
  162. });
  163. });
  164. test.describe('对话框元素验证', () => {
  165. test('应该显示创建平台对话框的所有字段', async ({ platformManagementPage }) => {
  166. // 打开创建对话框
  167. await platformManagementPage.openCreateDialog();
  168. // 验证对话框存在
  169. const dialog = platformManagementPage.page.locator('[role="dialog"]');
  170. await expect(dialog).toBeVisible();
  171. // 验证平台名称输入框存在(必填字段)
  172. await expect(platformManagementPage.platformNameInput).toBeVisible();
  173. // 验证可选字段输入框存在
  174. await expect(platformManagementPage.contactPersonInput).toBeVisible();
  175. await expect(platformManagementPage.contactPhoneInput).toBeVisible();
  176. await expect(platformManagementPage.contactEmailInput).toBeVisible();
  177. // 验证按钮存在
  178. await expect(platformManagementPage.page.getByRole('button', { name: '创建' })).toBeVisible();
  179. await expect(platformManagementPage.cancelButton).toBeVisible();
  180. // 关闭对话框
  181. await platformManagementPage.cancelDialog();
  182. });
  183. });
  184. test.describe('数据唯一性测试', () => {
  185. test('不同测试应该使用不同的平台名称', async ({ platformManagementPage }) => {
  186. // 生成两个不同的平台名称
  187. const timestamp = Date.now();
  188. const platformName1 = `唯一性测试平台_A_${timestamp}`;
  189. const platformName2 = `唯一性测试平台_B_${timestamp}`;
  190. // 创建第一个平台
  191. await platformManagementPage.createPlatform({
  192. platformName: platformName1,
  193. contactPerson: `联系人A_${timestamp}`,
  194. contactPhone: '13800001111',
  195. contactEmail: `test_a_${timestamp}@example.com`,
  196. });
  197. expect(await platformManagementPage.platformExists(platformName1)).toBe(true);
  198. // 创建第二个平台
  199. await platformManagementPage.createPlatform({
  200. platformName: platformName2,
  201. contactPerson: `联系人B_${timestamp}`,
  202. contactPhone: '13800002222',
  203. contactEmail: `test_b_${timestamp}@example.com`,
  204. });
  205. expect(await platformManagementPage.platformExists(platformName2)).toBe(true);
  206. // 清理两个平台
  207. await platformManagementPage.deletePlatform(platformName1);
  208. await platformManagementPage.deletePlatform(platformName2);
  209. // 验证清理成功
  210. expect(await platformManagementPage.platformExists(platformName1)).toBe(false);
  211. expect(await platformManagementPage.platformExists(platformName2)).toBe(false);
  212. });
  213. });
  214. test.describe('测试后清理验证', () => {
  215. test('应该能成功删除测试创建的平台', async ({ platformManagementPage }) => {
  216. const timestamp = Date.now();
  217. const platformName = `清理测试平台_${timestamp}`;
  218. // 创建平台
  219. await platformManagementPage.createPlatform({
  220. platformName,
  221. contactPerson: `清理联系人_${timestamp}`,
  222. contactPhone: '13800003333',
  223. contactEmail: `cleanup_${timestamp}@test.com`,
  224. });
  225. // 验证平台存在
  226. expect(await platformManagementPage.platformExists(platformName)).toBe(true);
  227. // 删除平台
  228. const deleteResult = await platformManagementPage.deletePlatform(platformName);
  229. expect(deleteResult).toBe(true);
  230. // 验证平台已被删除
  231. await expect(async () => {
  232. const exists = await platformManagementPage.platformExists(platformName);
  233. expect(exists).toBe(false);
  234. }).toPass({ timeout: TIMEOUTS.DIALOG });
  235. });
  236. });
  237. });