main_test.go 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843
  1. package main
  2. import (
  3. "encoding/json"
  4. "flag"
  5. "fmt"
  6. "github.com/spf13/cast"
  7. "io"
  8. "net"
  9. "net/http"
  10. "net/http/cookiejar"
  11. "os"
  12. "pmail/db"
  13. "pmail/dto/response"
  14. "pmail/models"
  15. "pmail/services/setup"
  16. "pmail/signal"
  17. "pmail/utils/array"
  18. "strconv"
  19. "strings"
  20. "testing"
  21. "time"
  22. )
  23. var httpClient *http.Client
  24. const TestPort = 17888
  25. var TestHost string = "http://127.0.0.1:" + cast.ToString(TestPort)
  26. func TestMain(m *testing.M) {
  27. cookeieJar, err := cookiejar.New(nil)
  28. if err != nil {
  29. panic(err)
  30. }
  31. httpClient = &http.Client{Jar: cookeieJar, Timeout: 5 * time.Minute}
  32. os.Remove("config/config.json")
  33. os.Remove("config/pmail_temp.db")
  34. go func() {
  35. main()
  36. }()
  37. time.Sleep(3 * time.Second)
  38. m.Run()
  39. signal.StopChan <- true
  40. time.Sleep(3 * time.Second)
  41. }
  42. func TestMaster(t *testing.T) {
  43. t.Run("TestPort", testPort)
  44. t.Run("testDataBaseSet", testDataBaseSet)
  45. t.Run("testPwdSet", testPwdSet)
  46. t.Run("testDomainSet", testDomainSet)
  47. t.Run("testDNSSet", testDNSSet)
  48. cfg, err := setup.ReadConfig()
  49. if err != nil {
  50. t.Fatal(err)
  51. }
  52. cfg.HttpsEnabled = 2
  53. cfg.HttpPort = TestPort
  54. err = setup.WriteConfig(cfg)
  55. if err != nil {
  56. t.Fatal(err)
  57. }
  58. t.Run("testSSLSet", testSSLSet)
  59. time.Sleep(8 * time.Second)
  60. t.Run("testLogin", testLogin) // 登录管理员账号
  61. t.Run("testCreateUser", testCreateUser) // 创建3个测试用户
  62. t.Run("testEditUser", testEditUser) // 编辑user2,封禁user3
  63. t.Run("testSendEmail", testSendEmail)
  64. time.Sleep(8 * time.Second)
  65. t.Run("testEmailList", testEmailList)
  66. t.Run("testGetDetail", testGetEmailDetail)
  67. t.Run("testDelEmail", testDelEmail)
  68. t.Run("testSendEmail2User1", testSendEmail2User1)
  69. t.Run("testSendEmail2User2", testSendEmail2User2)
  70. t.Run("testSendEmail2User3", testSendEmail2User3)
  71. time.Sleep(8 * time.Second)
  72. t.Run("testLoginUser3", testLoginUser3) // 测试登录被封禁账号
  73. t.Run("testLoginUser2", testLoginUser2) // 测试登录普通账号
  74. t.Run("testUser2EmailList", testUser2EmailList)
  75. // 创建group
  76. t.Run("testCreateGroup", testCreateGroup)
  77. // 创建rule
  78. t.Run("testCreateRule", testCreateRule)
  79. // 再次发邮件
  80. t.Run("testMoverEmailSend", testSendEmail2User2ForMove)
  81. time.Sleep(3 * time.Second)
  82. // 检查规则执行
  83. t.Run("testCheckRule", testCheckRule)
  84. time.Sleep(3 * time.Second)
  85. }
  86. func testCheckRule(t *testing.T) {
  87. var ue models.UserEmail
  88. db.Instance.Where("group_id!=0").Get(&ue)
  89. if ue.GroupId == 0 {
  90. t.Error("邮件规则执行失败!")
  91. }
  92. }
  93. func testGetEmailDetail(t *testing.T) {
  94. ret, err := httpClient.Post(TestHost+"/api/email/detail", "application/json", strings.NewReader(`{
  95. "id":1
  96. }`))
  97. if err != nil {
  98. t.Error(err)
  99. }
  100. data, err := readResponse(ret.Body)
  101. if err != nil {
  102. t.Error(err)
  103. }
  104. if data.ErrorNo != 0 {
  105. t.Error("GetEmailDetail Error! ", data)
  106. }
  107. }
  108. func testCreateRule(t *testing.T) {
  109. ret, err := httpClient.Post(TestHost+"/api/rule/add", "application/json", strings.NewReader(`{
  110. "name":"Move Group",
  111. "rules":[{"field":"Subject","type":"contains","rule":"Move"}],
  112. "action":4,
  113. "params":"1",
  114. "sort":1
  115. }`))
  116. if err != nil {
  117. t.Error(err)
  118. }
  119. data, err := readResponse(ret.Body)
  120. if err != nil {
  121. t.Error(err)
  122. }
  123. if data.ErrorNo != 0 {
  124. t.Error("CreateRule Api Error!", data)
  125. }
  126. ret, err = httpClient.Post(TestHost+"/api/rule/get", "application/json", strings.NewReader(`{}`))
  127. if err != nil {
  128. t.Error(err)
  129. }
  130. data, err = readResponse(ret.Body)
  131. if err != nil {
  132. t.Error(err)
  133. }
  134. if data.ErrorNo != 0 {
  135. t.Error("CreateRule Api Error!", data)
  136. }
  137. dt := data.Data.([]any)
  138. if len(dt) != 1 {
  139. t.Error("Rule List Is Empty!")
  140. }
  141. }
  142. func testCreateGroup(t *testing.T) {
  143. ret, err := httpClient.Post(TestHost+"/api/group/add", "application/json", strings.NewReader(`{
  144. "name":"TestGroup"
  145. }`))
  146. if err != nil {
  147. t.Error(err)
  148. }
  149. data, err := readResponse(ret.Body)
  150. if err != nil {
  151. t.Error(err)
  152. }
  153. if data.ErrorNo != 0 {
  154. t.Error("CreateGroup Api Error!", data)
  155. }
  156. ret, err = httpClient.Post(TestHost+"/api/group/list", "application/json", strings.NewReader(`{}`))
  157. if err != nil {
  158. t.Error(err)
  159. }
  160. data, err = readResponse(ret.Body)
  161. if err != nil {
  162. t.Error(err)
  163. }
  164. if data.ErrorNo != 0 {
  165. t.Error("CreateGroup Api Error!", data)
  166. }
  167. dt := data.Data.([]any)
  168. if len(dt) != 1 {
  169. t.Error("Group List Is Empty!")
  170. }
  171. }
  172. func testEditUser(t *testing.T) {
  173. ret, err := httpClient.Post(TestHost+"/api/user/edit", "application/json", strings.NewReader(`{
  174. "account":"user2",
  175. "username":"user2New",
  176. "password":"user2New"
  177. }`))
  178. if err != nil {
  179. t.Error(err)
  180. }
  181. data, err := readResponse(ret.Body)
  182. if err != nil {
  183. t.Error(err)
  184. }
  185. if data.ErrorNo != 0 {
  186. t.Error("Edit User Api Error!", data)
  187. }
  188. ret, err = httpClient.Post(TestHost+"/api/user/edit", "application/json", strings.NewReader(`{
  189. "account":"user3",
  190. "disabled": 1
  191. }`))
  192. if err != nil {
  193. t.Error(err)
  194. }
  195. data, err = readResponse(ret.Body)
  196. if err != nil {
  197. t.Error(err)
  198. }
  199. if data.ErrorNo != 0 {
  200. t.Error("Edit User Api Error!", data)
  201. }
  202. }
  203. func testCreateUser(t *testing.T) {
  204. ret, err := httpClient.Post(TestHost+"/api/user/create", "application/json", strings.NewReader(`{
  205. "account":"user1",
  206. "username":"user1",
  207. "password":"user1"
  208. }`))
  209. if err != nil {
  210. t.Error(err)
  211. }
  212. data, err := readResponse(ret.Body)
  213. if err != nil {
  214. t.Error(err)
  215. }
  216. if data.ErrorNo != 0 {
  217. t.Error(data)
  218. t.Error("Create User Api Error!")
  219. }
  220. ret, err = httpClient.Post(TestHost+"/api/user/create", "application/json", strings.NewReader(`{
  221. "account":"user2",
  222. "username":"user2",
  223. "password":"user2"
  224. }`))
  225. if err != nil {
  226. t.Error(err)
  227. }
  228. data, err = readResponse(ret.Body)
  229. if err != nil {
  230. t.Error(err)
  231. }
  232. if data.ErrorNo != 0 {
  233. t.Error("Create User Api Error!")
  234. }
  235. ret, err = httpClient.Post(TestHost+"/api/user/create", "application/json", strings.NewReader(`{
  236. "account":"user3",
  237. "username":"user3",
  238. "password":"user3"
  239. }`))
  240. if err != nil {
  241. t.Error(err)
  242. }
  243. data, err = readResponse(ret.Body)
  244. if err != nil {
  245. t.Error(err)
  246. }
  247. if data.ErrorNo != 0 {
  248. t.Error("Create User Api Error!")
  249. }
  250. }
  251. func testPort(t *testing.T) {
  252. if !portCheck(TestPort) {
  253. t.Error("port check failed")
  254. }
  255. t.Log("port check passed")
  256. }
  257. func testDataBaseSet(t *testing.T) {
  258. // 获取配置
  259. ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"database\"}"))
  260. if err != nil {
  261. t.Error(err)
  262. }
  263. data, err := readResponse(ret.Body)
  264. if err != nil {
  265. t.Error(err)
  266. }
  267. if data.ErrorNo != 0 {
  268. t.Error("Get Database Config Api Error!")
  269. }
  270. argList := flag.Args()
  271. configData := `
  272. {"action":"set","step":"database","db_type":"sqlite","db_dsn":"./config/pmail_temp.db"}
  273. `
  274. if array.InArray("mysql", argList) {
  275. configData = `
  276. {"action":"set","step":"database","db_type":"mysql","db_dsn":"root:githubTest@tcp(mysql:3306)/pmail?parseTime=True"}
  277. `
  278. } else if array.InArray("postgres", argList) {
  279. configData = `
  280. {"action":"set","step":"database","db_type":"postgres","db_dsn":"postgres://postgres:githubTest@127.0.0.1:5432/pmail?sslmode=disable"}
  281. `
  282. }
  283. // 设置配置
  284. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader(configData))
  285. if err != nil {
  286. t.Error(err)
  287. }
  288. data, err = readResponse(ret.Body)
  289. if err != nil {
  290. t.Error(err)
  291. }
  292. if data.ErrorNo != 0 {
  293. t.Error("Get Database Config Api Error!")
  294. }
  295. // 获取配置
  296. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"database\"}"))
  297. if err != nil {
  298. t.Error(err)
  299. }
  300. data, err = readResponse(ret.Body)
  301. if err != nil {
  302. t.Error(err)
  303. }
  304. if data.ErrorNo != 0 {
  305. t.Error("Get Database Config Api Error!")
  306. }
  307. dt := data.Data.(map[string]interface{})
  308. if cast.ToString(dt["db_dsn"]) == "" {
  309. t.Error("Check Database Config Api Error!")
  310. }
  311. t.Log("Database Config Api Success!")
  312. }
  313. func testPwdSet(t *testing.T) {
  314. // 获取配置
  315. ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"password\"}"))
  316. if err != nil {
  317. t.Error(err)
  318. }
  319. data, err := readResponse(ret.Body)
  320. if err != nil {
  321. t.Error(err)
  322. }
  323. if data.ErrorNo != 0 {
  324. t.Error("Get Password Config Api Error!")
  325. }
  326. // 设置配置
  327. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader(`
  328. {"action":"set","step":"password","account":"testCase","password":"testCase"}
  329. `))
  330. if err != nil {
  331. t.Error(err)
  332. }
  333. data, err = readResponse(ret.Body)
  334. if err != nil {
  335. t.Error(err)
  336. }
  337. if data.ErrorNo != 0 {
  338. t.Error("Set Password Config Api Error!")
  339. t.Error(data)
  340. }
  341. // 获取配置
  342. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"password\"}"))
  343. if err != nil {
  344. t.Error(err)
  345. }
  346. data, err = readResponse(ret.Body)
  347. if err != nil {
  348. t.Error(err)
  349. }
  350. if data.ErrorNo != 0 {
  351. t.Error("Get Password Config Api Error!")
  352. }
  353. if cast.ToString(data.Data) != "testCase" {
  354. t.Error("Check Password Config Api Error!")
  355. }
  356. t.Log("Password Config Api Success!")
  357. }
  358. func testDomainSet(t *testing.T) {
  359. // 获取配置
  360. ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"domain\"}"))
  361. if err != nil {
  362. t.Error(err)
  363. }
  364. data, err := readResponse(ret.Body)
  365. if err != nil {
  366. t.Error(err)
  367. }
  368. if data.ErrorNo != 0 {
  369. t.Error("Get domain Config Api Error!")
  370. }
  371. // 设置配置
  372. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader(`
  373. {"action":"set","step":"domain","smtp_domain":"test.domain","web_domain":"mail.test.domain"}
  374. `))
  375. if err != nil {
  376. t.Error(err)
  377. }
  378. data, err = readResponse(ret.Body)
  379. if err != nil {
  380. t.Error(err)
  381. }
  382. if data.ErrorNo != 0 {
  383. t.Error("Set domain Config Api Error!")
  384. }
  385. // 获取配置
  386. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"domain\"}"))
  387. if err != nil {
  388. t.Error(err)
  389. }
  390. data, err = readResponse(ret.Body)
  391. if err != nil {
  392. t.Error(err)
  393. }
  394. if data.ErrorNo != 0 {
  395. t.Error("Get Password Config Api Error!")
  396. }
  397. dt := data.Data.(map[string]interface{})
  398. if cast.ToString(dt["smtp_domain"]) != "test.domain" {
  399. t.Error("Check domain Config Api Error!")
  400. }
  401. if cast.ToString(dt["web_domain"]) != "mail.test.domain" {
  402. t.Error("Check domain Config Api Error!")
  403. }
  404. t.Log("domain Config Api Success!")
  405. }
  406. func testDNSSet(t *testing.T) {
  407. // 获取配置
  408. ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"dns\"}"))
  409. if err != nil {
  410. t.Error(err)
  411. }
  412. data, err := readResponse(ret.Body)
  413. if err != nil {
  414. t.Error(err)
  415. }
  416. if data.ErrorNo != 0 {
  417. t.Error("Get domain Config Api Error!")
  418. }
  419. t.Log("DNS Set Success!")
  420. }
  421. func testSSLSet(t *testing.T) {
  422. // 获取配置
  423. ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"ssl\"}"))
  424. if err != nil {
  425. t.Error(err)
  426. }
  427. data, err := readResponse(ret.Body)
  428. if err != nil {
  429. t.Error(err)
  430. }
  431. if data.ErrorNo != 0 {
  432. t.Error("Get domain Config Api Error!")
  433. }
  434. // 设置配置
  435. ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader(`
  436. {"action":"set","step":"ssl","ssl_type":"1","key_path":"./config/ssl/private.key","crt_path":"./config/ssl/public.crt"}
  437. `))
  438. if err != nil {
  439. t.Error(err)
  440. }
  441. data, err = readResponse(ret.Body)
  442. if err != nil {
  443. t.Error(err)
  444. }
  445. if data.ErrorNo != 0 {
  446. t.Error("Set domain Config Api Error!")
  447. }
  448. t.Log("domain Config Api Success!")
  449. }
  450. func testLogin(t *testing.T) {
  451. ret, err := httpClient.Post(TestHost+"/api/login", "application/json", strings.NewReader("{\"account\":\"testCase\",\"password\":\"testCase\"}"))
  452. if err != nil {
  453. t.Error(err)
  454. }
  455. data, err := readResponse(ret.Body)
  456. if err != nil {
  457. t.Error(err)
  458. }
  459. if data.ErrorNo != 0 {
  460. t.Error("Login Api Error!")
  461. }
  462. t.Logf("testLogin Success! Response: %+v", data)
  463. }
  464. func testLoginUser2(t *testing.T) {
  465. ret, err := httpClient.Post(TestHost+"/api/login", "application/json", strings.NewReader("{\"account\":\"user2\",\"password\":\"user2New\"}"))
  466. if err != nil {
  467. t.Error(err)
  468. }
  469. data, err := readResponse(ret.Body)
  470. if err != nil {
  471. t.Error(err)
  472. }
  473. if data.ErrorNo != 0 {
  474. t.Error("Login User2 Api Error!", data)
  475. }
  476. t.Logf("testLoginUser2 Success! Response: %+v", data)
  477. }
  478. func testLoginUser3(t *testing.T) {
  479. ret, err := httpClient.Post(TestHost+"/api/login", "application/json", strings.NewReader("{\"account\":\"user3\",\"password\":\"user3\"}"))
  480. if err != nil {
  481. t.Error(err)
  482. }
  483. data, err := readResponse(ret.Body)
  484. if err != nil {
  485. t.Error(err)
  486. }
  487. if data.ErrorNo != 100 {
  488. t.Error("Login User3 Api Error!", data)
  489. }
  490. t.Logf("testLoginUser3 Success! Response: %+v", data)
  491. }
  492. func testSendEmail(t *testing.T) {
  493. ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
  494. {
  495. "from": {
  496. "name": "i",
  497. "email": "i@test.domain"
  498. },
  499. "to": [
  500. {
  501. "name": "y",
  502. "email": "y@test.domain"
  503. }
  504. ],
  505. "cc": [
  506. ],
  507. "subject": "Title",
  508. "text": "text",
  509. "html": "<div>text</div>"
  510. }
  511. `))
  512. if err != nil {
  513. t.Error(err)
  514. }
  515. data, err := readResponse(ret.Body)
  516. if err != nil {
  517. t.Error(err)
  518. }
  519. if data.ErrorNo != 0 {
  520. t.Error("Send Email Api Error!")
  521. }
  522. t.Logf("testSendEmail Success! Response: %+v", data)
  523. }
  524. func testSendEmail2User2ForMove(t *testing.T) {
  525. ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
  526. {
  527. "from": {
  528. "name": "user2",
  529. "email": "user2@test.domain"
  530. },
  531. "to": [
  532. {
  533. "name": "y",
  534. "email": "user2@test.domain"
  535. }
  536. ],
  537. "cc": [
  538. ],
  539. "subject": "MovePlease",
  540. "text": "NeedMove",
  541. "html": "<div>text</div>"
  542. }
  543. `))
  544. if err != nil {
  545. t.Error(err)
  546. }
  547. data, err := readResponse(ret.Body)
  548. if err != nil {
  549. t.Error(err)
  550. }
  551. if data.ErrorNo != 0 {
  552. t.Error("Send Email Api Error!")
  553. }
  554. t.Logf("testSendEmail2User2ForMove Success! Response: %+v", data)
  555. }
  556. func testSendEmail2User1(t *testing.T) {
  557. ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
  558. {
  559. "from": {
  560. "name": "i",
  561. "email": "i@test.domain"
  562. },
  563. "to": [
  564. {
  565. "name": "y",
  566. "email": "user1@test.domain"
  567. }
  568. ],
  569. "cc": [
  570. ],
  571. "subject": "HelloUser1",
  572. "text": "text",
  573. "html": "<div>text</div>"
  574. }
  575. `))
  576. if err != nil {
  577. t.Error(err)
  578. }
  579. data, err := readResponse(ret.Body)
  580. if err != nil {
  581. t.Error(err)
  582. }
  583. if data.ErrorNo != 0 {
  584. t.Error("Send Email Api Error!")
  585. }
  586. t.Logf("testSendEmail2User1 Success! Response: %+v", data)
  587. }
  588. func testSendEmail2User2(t *testing.T) {
  589. ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
  590. {
  591. "from": {
  592. "name": "i",
  593. "email": "i@test.domain"
  594. },
  595. "to": [
  596. {
  597. "name": "y",
  598. "email": "user2@test.domain"
  599. }
  600. ],
  601. "cc": [
  602. ],
  603. "subject": "HelloUser2",
  604. "text": "text",
  605. "html": "<div>text</div>"
  606. }
  607. `))
  608. if err != nil {
  609. t.Error(err)
  610. }
  611. data, err := readResponse(ret.Body)
  612. if err != nil {
  613. t.Error(err)
  614. }
  615. if data.ErrorNo != 0 {
  616. t.Error("Send Email Api Error!")
  617. }
  618. t.Logf("testSendEmail2User2 Success! Response: %+v", data)
  619. }
  620. func testSendEmail2User3(t *testing.T) {
  621. ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
  622. {
  623. "from": {
  624. "name": "i",
  625. "email": "i@test.domain"
  626. },
  627. "to": [
  628. {
  629. "name": "y",
  630. "email": "user3@test.domain"
  631. }
  632. ],
  633. "cc": [
  634. ],
  635. "subject": "HelloUser3",
  636. "text": "text",
  637. "html": "<div>text</div>"
  638. }
  639. `))
  640. if err != nil {
  641. t.Error(err)
  642. }
  643. data, err := readResponse(ret.Body)
  644. if err != nil {
  645. t.Error(err)
  646. }
  647. if data.ErrorNo != 0 {
  648. t.Error("Send Email Api Error!")
  649. }
  650. t.Logf("testSendEmail2User3 Success! Response: %+v", data)
  651. }
  652. func testEmailList(t *testing.T) {
  653. ret, err := httpClient.Post(TestHost+"/api/email/list", "application/json", strings.NewReader(`{}`))
  654. if err != nil {
  655. t.Error(err)
  656. }
  657. data, err := readResponse(ret.Body)
  658. if err != nil {
  659. t.Error(err)
  660. }
  661. if data.ErrorNo != 0 {
  662. t.Error("Get Email List Api Error!")
  663. }
  664. dt := data.Data.(map[string]interface{})
  665. if dt["list"] == nil || len(dt["list"].([]interface{})) == 0 {
  666. t.Error("Email List Is Empty!")
  667. return
  668. }
  669. lst := dt["list"].([]interface{})
  670. item := lst[0].(map[string]interface{})
  671. id := cast.ToInt(item["id"])
  672. if id == 0 {
  673. t.Error("Email List Data Error!")
  674. }
  675. t.Logf("testEmailList Success! Response: %+v", data)
  676. }
  677. func testUser2EmailList(t *testing.T) {
  678. ret, err := httpClient.Post(TestHost+"/api/email/list", "application/json", strings.NewReader(`{}`))
  679. if err != nil {
  680. t.Error(err)
  681. }
  682. data, err := readResponse(ret.Body)
  683. if err != nil {
  684. t.Error(err)
  685. }
  686. if data.ErrorNo != 0 {
  687. t.Error("Get Email List Api Error!")
  688. }
  689. dt := data.Data.(map[string]interface{})
  690. if dt["list"] == nil || len(dt["list"].([]interface{})) != 1 {
  691. t.Error("Email List Is Empty!")
  692. }
  693. t.Logf("testUser2EmailList Success! Response: %+v", data)
  694. }
  695. func testDelEmail(t *testing.T) {
  696. ret, err := httpClient.Post(TestHost+"/api/email/list", "application/json", strings.NewReader(`{}`))
  697. if err != nil {
  698. t.Error(err)
  699. }
  700. data, err := readResponse(ret.Body)
  701. if err != nil {
  702. t.Error(err)
  703. }
  704. if data.ErrorNo != 0 {
  705. t.Error("Get Email List Api Error!")
  706. }
  707. dt := data.Data.(map[string]interface{})
  708. if len(dt["list"].([]interface{})) == 0 {
  709. t.Error("Email List Is Empty!")
  710. }
  711. lst := dt["list"].([]interface{})
  712. item := lst[0].(map[string]interface{})
  713. id := cast.ToInt(item["id"])
  714. ret, err = httpClient.Post(TestHost+"/api/email/del", "application/json", strings.NewReader(fmt.Sprintf(`{
  715. "ids":[%d]
  716. }`, id)))
  717. if err != nil {
  718. t.Error(err)
  719. }
  720. data, err = readResponse(ret.Body)
  721. if err != nil {
  722. t.Error(err)
  723. }
  724. if data.ErrorNo != 0 {
  725. t.Error("Email Delete Api Error!")
  726. }
  727. var mail models.UserEmail
  728. db.Instance.Where("email_id = ?", id).Get(&mail)
  729. if mail.Status != 3 {
  730. t.Error("Email Delete Api Error!")
  731. }
  732. t.Logf("testDelEmail Success! Response: %+v", data)
  733. }
  734. // portCheck 检查端口是占用
  735. func portCheck(port int) bool {
  736. l, err := net.Listen("tcp", fmt.Sprintf(":%s", strconv.Itoa(port)))
  737. if err != nil {
  738. return true
  739. }
  740. defer l.Close()
  741. return false
  742. }
  743. func readResponse(r io.Reader) (*response.Response, error) {
  744. data, err := io.ReadAll(r)
  745. if err != nil {
  746. return nil, err
  747. }
  748. ret := &response.Response{}
  749. err = json.Unmarshal(data, ret)
  750. if err != nil {
  751. return nil, err
  752. }
  753. return ret, nil
  754. }