| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933 |
- package main
- import (
- "encoding/json"
- "flag"
- "fmt"
- "github.com/Jinnrry/pmail/config"
- "github.com/Jinnrry/pmail/db"
- "github.com/Jinnrry/pmail/dto/response"
- "github.com/Jinnrry/pmail/models"
- "github.com/Jinnrry/pmail/signal"
- "github.com/Jinnrry/pmail/utils/array"
- "github.com/spf13/cast"
- "io"
- "net"
- "net/http"
- "net/http/cookiejar"
- "os"
- "strconv"
- "strings"
- "testing"
- "time"
- )
- var httpClient *http.Client
- const TestPort = 17888
- var TestHost string = "http://127.0.0.1:" + cast.ToString(TestPort)
- func TestMain(m *testing.M) {
- cookeieJar, err := cookiejar.New(nil)
- if err != nil {
- panic(err)
- }
- httpClient = &http.Client{Jar: cookeieJar, Timeout: 5 * time.Minute}
- os.Remove("config/config.json")
- os.Remove("config/pmail_temp.db")
- go func() {
- main()
- }()
- time.Sleep(3 * time.Second)
- m.Run()
- signal.StopChan <- true
- time.Sleep(3 * time.Second)
- }
- func TestMaster(t *testing.T) {
- t.Run("TestPort", testPort)
- t.Run("testDataBaseSet", testDataBaseSet)
- t.Run("testPwdSet", testPwdSet)
- t.Run("testDomainSet", testDomainSet)
- t.Run("testDNSSet", testDNSSet)
- cfg, err := config.ReadConfig()
- if err != nil {
- t.Fatal(err)
- }
- cfg.HttpsEnabled = 2
- cfg.HttpPort = TestPort
- cfg.LogLevel = "debug"
- err = config.WriteConfig(cfg)
- if err != nil {
- t.Fatal(err)
- }
- t.Run("testSSLSet", testSSLSet)
- t.Logf("Stop 8 Second for wating restart")
- time.Sleep(8 * time.Second)
- t.Run("testLogin", testLogin) // 登录管理员账号
- t.Run("testCreateUser", testCreateUser) // 创建3个测试用户
- t.Run("testEditUser", testEditUser) // 编辑user2,封禁user3
- t.Run("testSendEmail", testSendEmail)
- t.Logf("Stop 8 Second for wating sending")
- time.Sleep(8 * time.Second)
- t.Run("testEmailList", testEmailList)
- t.Run("testGetDetail", testGetEmailDetail)
- t.Run("testDelEmail", testDelEmail)
- t.Run("testSendEmail2User1", testSendEmail2User1)
- t.Run("testSendEmail2User2", testSendEmail2User2)
- t.Run("testSendEmail2User3", testSendEmail2User3)
- time.Sleep(8 * time.Second)
- t.Run("testLoginUser3", testLoginUser3) // 测试登录被封禁账号
- t.Run("testLoginUser2", testLoginUser2) // 测试登录普通账号
- t.Run("testUser2EmailList", testUser2EmailList)
- // 创建group
- t.Run("testCreateGroup", testCreateGroup)
- // 创建rule
- t.Run("testCreateRule", testCreateRule)
- // 再次发邮件
- t.Run("testMoverEmailSend", testSendEmail2User2ForMove)
- time.Sleep(4 * time.Second)
- t.Run("testMoverEmailSend", testSendEmail2User2ForSpam)
- time.Sleep(3 * time.Second)
- // 生成10封测试邮件
- t.Run("genTestEmailData", genTestEmailData)
- time.Sleep(3 * time.Second)
- // 检查规则执行
- t.Run("testCheckRule", testCheckRule)
- time.Sleep(3 * time.Second)
- }
- func testCheckRule(t *testing.T) {
- var ue models.UserEmail
- db.Instance.Where("group_id!=0").Get(&ue)
- if ue.GroupId == 0 {
- t.Error("邮件规则执行失败!")
- }
- }
- func testGetEmailDetail(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/email/detail", "application/json", strings.NewReader(`{
- "id":1
- }`))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("GetEmailDetail Error! ", data)
- }
- }
- func testCreateRule(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/rule/add", "application/json", strings.NewReader(`{
- "name":"Move Group",
- "rules":[{"field":"Subject","type":"contains","rule":"Move"}],
- "action":4,
- "params":"1",
- "sort":1
- }`))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("CreateRule Api Error!", data)
- }
- ret, err = httpClient.Post(TestHost+"/api/rule/get", "application/json", strings.NewReader(`{}`))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("CreateRule Api Error!", data)
- }
- dt := data.Data.([]any)
- if len(dt) != 1 {
- t.Error("Rule List Is Empty!")
- }
- }
- func testCreateGroup(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/group/add", "application/json", strings.NewReader(`{
- "name":"TestGroup"
- }`))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("CreateGroup Api Error!", data)
- }
- ret, err = httpClient.Post(TestHost+"/api/group/list", "application/json", strings.NewReader(`{}`))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("CreateGroup Api Error!", data)
- }
- dt := data.Data.([]any)
- if len(dt) != 1 {
- t.Error("Group List Is Empty!")
- }
- }
- func testEditUser(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/user/edit", "application/json", strings.NewReader(`{
- "account":"user2",
- "username":"user2New",
- "password":"user2New"
- }`))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Edit User Api Error!", data)
- }
- ret, err = httpClient.Post(TestHost+"/api/user/edit", "application/json", strings.NewReader(`{
- "account":"user3",
- "disabled": 1
- }`))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Edit User Api Error!", data)
- }
- }
- func testCreateUser(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/user/create", "application/json", strings.NewReader(`{
- "account":"user1",
- "username":"user1",
- "password":"user1"
- }`))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error(data)
- t.Error("Create User Api Error!")
- }
- ret, err = httpClient.Post(TestHost+"/api/user/create", "application/json", strings.NewReader(`{
- "account":"user2",
- "username":"user2",
- "password":"user2"
- }`))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Create User Api Error!")
- }
- ret, err = httpClient.Post(TestHost+"/api/user/create", "application/json", strings.NewReader(`{
- "account":"user3",
- "username":"user3",
- "password":"user3"
- }`))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Create User Api Error!")
- }
- }
- func testPort(t *testing.T) {
- if !portCheck(TestPort) {
- t.Error("port check failed")
- } else {
- t.Log("port check passed")
- }
- }
- func testDataBaseSet(t *testing.T) {
- // 获取配置
- ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"database\"}"))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Errorf("Response %+v", data)
- t.Error("Get Database Config Api Error!")
- return
- }
- argList := flag.Args()
- configData := `
- {"action":"set","step":"database","db_type":"sqlite","db_dsn":"./config/pmail_temp.db"}
- `
- if array.InArray("mysql", argList) {
- configData = `
- {"action":"set","step":"database","db_type":"mysql","db_dsn":"root:githubTest@tcp(mysql:3306)/pmail?parseTime=True"}
- `
- } else if array.InArray("postgres", argList) {
- configData = `
- {"action":"set","step":"database","db_type":"postgres","db_dsn":"postgres://postgres:githubTest@postgres:5432/pmail?sslmode=disable"}
- `
- }
- // 设置配置
- ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader(configData))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Get Database Config Api Error!")
- }
- // 获取配置
- ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"database\"}"))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Get Database Config Api Error!")
- }
- dt := data.Data.(map[string]interface{})
- if cast.ToString(dt["db_dsn"]) == "" {
- t.Error("Check Database Config Api Error!")
- }
- t.Log("Database Config Api Success!")
- }
- func testPwdSet(t *testing.T) {
- // 获取配置
- ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"password\"}"))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Get Password Config Api Error!")
- }
- // 设置配置
- ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader(`
- {"action":"set","step":"password","account":"testCase","password":"testCase"}
- `))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Set Password Config Api Error!")
- t.Error(data)
- }
- // 获取配置
- ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"password\"}"))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Get Password Config Api Error!")
- }
- if cast.ToString(data.Data) != "testCase" {
- t.Error("Check Password Config Api Error!")
- }
- t.Log("Password Config Api Success!")
- }
- func testDomainSet(t *testing.T) {
- // 获取配置
- ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"domain\"}"))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Get domain Config Api Error!")
- }
- // 设置配置
- ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader(`
- {"action":"set","step":"domain","smtp_domain":"test.domain","web_domain":"mail.test.domain"}
- `))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Set domain Config Api Error!")
- }
- // 获取配置
- ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"domain\"}"))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Get Password Config Api Error!")
- }
- dt := data.Data.(map[string]interface{})
- if cast.ToString(dt["smtp_domain"]) != "test.domain" {
- t.Error("Check domain Config Api Error!")
- }
- if cast.ToString(dt["web_domain"]) != "mail.test.domain" {
- t.Error("Check domain Config Api Error!")
- }
- t.Log("domain Config Api Success!")
- }
- func testDNSSet(t *testing.T) {
- // 获取配置
- ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"dns\"}"))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Get domain Config Api Error!")
- }
- t.Log("DNS Set Success!")
- }
- func testSSLSet(t *testing.T) {
- // 获取配置
- ret, err := http.Post(TestHost+"/api/setup", "application/json", strings.NewReader("{\"action\":\"get\",\"step\":\"ssl\"}"))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Get domain Config Api Error!")
- }
- // 设置配置
- ret, err = http.Post(TestHost+"/api/setup", "application/json", strings.NewReader(`
- {"action":"set","step":"ssl","ssl_type":"1","key_path":"./config/ssl/private.key","crt_path":"./config/ssl/public.crt"}
- `))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Set domain Config Api Error!")
- }
- t.Log("domain Config Api Success!")
- }
- func testLogin(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/login", "application/json", strings.NewReader("{\"account\":\"testCase\",\"password\":\"testCase\"}"))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Login Api Error!")
- }
- t.Logf("testLogin Success! Response: %+v", data)
- }
- func testLoginUser2(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/login", "application/json", strings.NewReader("{\"account\":\"user2\",\"password\":\"user2New\"}"))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Login User2 Api Error!", data)
- }
- t.Logf("testLoginUser2 Success! Response: %+v", data)
- }
- func testLoginUser3(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/login", "application/json", strings.NewReader("{\"account\":\"user3\",\"password\":\"user3\"}"))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 100 {
- t.Error("Login User3 Api Error!", data)
- }
- t.Logf("testLoginUser3 Success! Response: %+v", data)
- }
- func testSendEmail(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
- {
- "from": {
- "name": "i",
- "email": "i@test.domain"
- },
- "to": [
- {
- "name": "y",
- "email": "y@test.domain"
- }
- ],
- "cc": [
-
- ],
- "subject": "Title",
- "text": "text",
- "html": "<div>text</div>"
- }
- `))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Send Email Api Error!")
- }
- t.Logf("testSendEmail Success! Response: %+v", data)
- }
- func testSendEmail2User2ForSpam(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
- {
- "from": {
- "name": "user2",
- "email": "user2@test.domain"
- },
- "to": [
- {
- "name": "y",
- "email": "admin@test.domain"
- }
- ],
- "cc": [
-
- ],
- "subject": "spam",
- "text": "NeedMove",
- "html": "<div>text</div>"
- }
- `))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Send Email Api Error!")
- }
- t.Logf("testSendEmail2User2ForMove Success! Response: %+v", data)
- }
- func testSendEmail2User2ForMove(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
- {
- "from": {
- "name": "user2",
- "email": "user2@test.domain"
- },
- "to": [
- {
- "name": "y",
- "email": "user2@test.domain"
- }
- ],
- "cc": [
-
- ],
- "subject": "MovePlease",
- "text": "NeedMove",
- "html": "<div>text</div>"
- }
- `))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Send Email Api Error!")
- }
- t.Logf("testSendEmail2User2ForMove Success! Response: %+v", data)
- }
- func genTestEmailData(t *testing.T) {
- for i := 0; i < 10; i++ {
- ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(fmt.Sprintf(
- `
- {
- "from": {
- "name": "user2",
- "email": "user2@test.domain"
- },
- "to": [
- {
- "name": "admin",
- "email": "admin@test.domain"
- }
- ],
- "cc": [
-
- ],
- "subject": "测试邮件%d",
- "text": "测试邮件%d",
- "html": "<div>测试邮件%d</div>"
- }
- `, i, i, i)))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Send Email Api Error!")
- }
- time.Sleep(3 * time.Second)
- }
- }
- func testSendEmail2User1(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
- {
- "from": {
- "name": "i",
- "email": "i@test.domain"
- },
- "to": [
- {
- "name": "y",
- "email": "user1@test.domain"
- }
- ],
- "cc": [
-
- ],
- "subject": "HelloUser1",
- "text": "text",
- "html": "<div>text</div>"
- }
- `))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Send Email Api Error!")
- }
- t.Logf("testSendEmail2User1 Success! Response: %+v", data)
- }
- func testSendEmail2User2(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
- {
- "from": {
- "name": "i",
- "email": "i@test.domain"
- },
- "to": [
- {
- "name": "y",
- "email": "user2@test.domain"
- }
- ],
- "cc": [
-
- ],
- "subject": "HelloUser2",
- "text": "text",
- "html": "<div>text</div>"
- }
- `))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Send Email Api Error!")
- }
- t.Logf("testSendEmail2User2 Success! Response: %+v", data)
- }
- func testSendEmail2User3(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/email/send", "application/json", strings.NewReader(`
- {
- "from": {
- "name": "i",
- "email": "i@test.domain"
- },
- "to": [
- {
- "name": "y",
- "email": "user3@test.domain"
- }
- ],
- "cc": [
-
- ],
- "subject": "HelloUser3",
- "text": "text",
- "html": "<div>text</div>"
- }
- `))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Send Email Api Error!")
- }
- t.Logf("testSendEmail2User3 Success! Response: %+v", data)
- }
- func testEmailList(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/email/list", "application/json", strings.NewReader(`{}`))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Get Email List Api Error!")
- }
- dt := data.Data.(map[string]interface{})
- if dt["list"] == nil || len(dt["list"].([]interface{})) == 0 {
- t.Error("Email List Is Empty!")
- return
- }
- lst := dt["list"].([]interface{})
- item := lst[0].(map[string]interface{})
- id := cast.ToInt(item["id"])
- if id == 0 {
- t.Error("Email List Data Error!")
- }
- t.Logf("testEmailList Success! Response: %+v", data)
- }
- func testUser2EmailList(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/email/list", "application/json", strings.NewReader(`{}`))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Get Email List Api Error!")
- }
- dt := data.Data.(map[string]interface{})
- if dt["list"] == nil || len(dt["list"].([]interface{})) != 1 {
- t.Error("Email List Is Empty!")
- }
- t.Logf("testUser2EmailList Success! Response: %+v", data)
- }
- func testDelEmail(t *testing.T) {
- ret, err := httpClient.Post(TestHost+"/api/email/list", "application/json", strings.NewReader(`{}`))
- if err != nil {
- t.Error(err)
- }
- data, err := readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Get Email List Api Error!")
- }
- dt := data.Data.(map[string]interface{})
- if len(dt["list"].([]interface{})) == 0 {
- t.Error("Email List Is Empty!")
- }
- lst := dt["list"].([]interface{})
- item := lst[0].(map[string]interface{})
- id := cast.ToInt(item["id"])
- ret, err = httpClient.Post(TestHost+"/api/email/del", "application/json", strings.NewReader(fmt.Sprintf(`{
- "ids":[%d]
- }`, id)))
- if err != nil {
- t.Error(err)
- }
- data, err = readResponse(ret.Body)
- if err != nil {
- t.Error(err)
- }
- if data.ErrorNo != 0 {
- t.Error("Email Delete Api Error!")
- }
- var mail models.UserEmail
- db.Instance.Where("email_id = ?", id).Get(&mail)
- if mail.Status != 3 {
- t.Error("Email Delete Api Error!")
- }
- t.Logf("testDelEmail Success! Response: %+v", data)
- }
- // portCheck 检查端口是占用
- func portCheck(port int) bool {
- l, err := net.Listen("tcp", fmt.Sprintf(":%s", strconv.Itoa(port)))
- if err != nil {
- return true
- }
- defer l.Close()
- return false
- }
- func readResponse(r io.Reader) (*response.Response, error) {
- data, err := io.ReadAll(r)
- if err != nil {
- return nil, err
- }
- ret := &response.Response{}
- err = json.Unmarshal(data, ret)
- if err != nil {
- return nil, err
- }
- return ret, nil
- }
|