github.com/edermi/gophish_mods@v0.7.0/util/util_test.go (about) 1 package util 2 3 import ( 4 "bytes" 5 "fmt" 6 "mime/multipart" 7 "net/http" 8 "reflect" 9 "testing" 10 11 "github.com/gophish/gophish/config" 12 "github.com/gophish/gophish/models" 13 "github.com/stretchr/testify/suite" 14 ) 15 16 type UtilSuite struct { 17 suite.Suite 18 } 19 20 func (s *UtilSuite) SetupSuite() { 21 config.Conf.DBName = "sqlite3" 22 config.Conf.DBPath = ":memory:" 23 config.Conf.MigrationsPath = "../db/db_sqlite3/migrations/" 24 err := models.Setup() 25 if err != nil { 26 s.T().Fatalf("Failed creating database: %v", err) 27 } 28 s.Nil(err) 29 } 30 31 func buildCSVRequest(csvPayload string) (*http.Request, error) { 32 csvHeader := "First Name,Last Name,Email\n" 33 body := new(bytes.Buffer) 34 writer := multipart.NewWriter(body) 35 part, err := writer.CreateFormFile("files[]", "example.csv") 36 if err != nil { 37 return nil, err 38 } 39 part.Write([]byte(csvHeader)) 40 part.Write([]byte(csvPayload)) 41 err = writer.Close() 42 if err != nil { 43 return nil, err 44 } 45 r, err := http.NewRequest("POST", "http://127.0.0.1", body) 46 if err != nil { 47 return nil, err 48 } 49 r.Header.Set("Content-Type", writer.FormDataContentType()) 50 return r, nil 51 } 52 53 func (s *UtilSuite) TestParseCSVEmail() { 54 expected := models.Target{ 55 BaseRecipient: models.BaseRecipient{ 56 FirstName: "John", 57 LastName: "Doe", 58 Email: "johndoe@example.com", 59 }, 60 } 61 62 csvPayload := fmt.Sprintf("%s,%s,<%s>", expected.FirstName, expected.LastName, expected.Email) 63 r, err := buildCSVRequest(csvPayload) 64 s.Nil(err) 65 66 got, err := ParseCSV(r) 67 s.Nil(err) 68 s.Equal(len(got), 1) 69 if !reflect.DeepEqual(expected, got[0]) { 70 s.T().Fatalf("Incorrect targets received. Expected: %#v\nGot: %#v", expected, got) 71 } 72 } 73 74 func TestUtilSuite(t *testing.T) { 75 suite.Run(t, new(UtilSuite)) 76 }