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  }