github.com/topsteplocal/gophish@v0.6.0/models/result_test.go (about)

     1  package models
     2  
     3  import (
     4  	"fmt"
     5  	"net/mail"
     6  	"regexp"
     7  	"time"
     8  
     9  	"gopkg.in/check.v1"
    10  )
    11  
    12  func (s *ModelsSuite) TestGenerateResultId(c *check.C) {
    13  	r := Result{}
    14  	r.GenerateId()
    15  	match, err := regexp.Match("[a-zA-Z0-9]{7}", []byte(r.RId))
    16  	c.Assert(err, check.Equals, nil)
    17  	c.Assert(match, check.Equals, true)
    18  }
    19  
    20  func (s *ModelsSuite) TestFormatAddress(c *check.C) {
    21  	r := Result{
    22  		FirstName: "John",
    23  		LastName:  "Doe",
    24  		Email:     "johndoe@example.com",
    25  	}
    26  	expected := &mail.Address{
    27  		Name:    "John Doe",
    28  		Address: "johndoe@example.com",
    29  	}
    30  	c.Assert(r.FormatAddress(), check.Equals, expected.String())
    31  
    32  	r = Result{
    33  		Email: "johndoe@example.com",
    34  	}
    35  	c.Assert(r.FormatAddress(), check.Equals, r.Email)
    36  }
    37  
    38  func (s *ModelsSuite) TestResultSendingStatus(ch *check.C) {
    39  	c := s.createCampaignDependencies(ch)
    40  	ch.Assert(PostCampaign(&c, c.UserId), check.Equals, nil)
    41  	// This campaign wasn't scheduled, so we expect the status to
    42  	// be sending
    43  	fmt.Println("Campaign STATUS")
    44  	fmt.Println(c.Status)
    45  	for _, r := range c.Results {
    46  		ch.Assert(r.Status, check.Equals, STATUS_SENDING)
    47  	}
    48  }
    49  func (s *ModelsSuite) TestResultScheduledStatus(ch *check.C) {
    50  	c := s.createCampaignDependencies(ch)
    51  	c.LaunchDate = time.Now().UTC().Add(time.Hour * time.Duration(1))
    52  	ch.Assert(PostCampaign(&c, c.UserId), check.Equals, nil)
    53  	// This campaign wasn't scheduled, so we expect the status to
    54  	// be sending
    55  	for _, r := range c.Results {
    56  		ch.Assert(r.Status, check.Equals, STATUS_SCHEDULED)
    57  	}
    58  }
    59  
    60  func (s *ModelsSuite) TestDuplicateResults(ch *check.C) {
    61  	group := Group{Name: "Test Group"}
    62  	group.Targets = []Target{
    63  		Target{Email: "test1@example.com", FirstName: "First", LastName: "Example"},
    64  		Target{Email: "test1@example.com", FirstName: "Duplicate", LastName: "Duplicate"},
    65  		Target{Email: "test2@example.com", FirstName: "Second", LastName: "Example"},
    66  	}
    67  	group.UserId = 1
    68  	ch.Assert(PostGroup(&group), check.Equals, nil)
    69  
    70  	// Add a template
    71  	t := Template{Name: "Test Template"}
    72  	t.Subject = "{{.RId}} - Subject"
    73  	t.Text = "{{.RId}} - Text"
    74  	t.HTML = "{{.RId}} - HTML"
    75  	t.UserId = 1
    76  	ch.Assert(PostTemplate(&t), check.Equals, nil)
    77  
    78  	// Add a landing page
    79  	p := Page{Name: "Test Page"}
    80  	p.HTML = "<html>Test</html>"
    81  	p.UserId = 1
    82  	ch.Assert(PostPage(&p), check.Equals, nil)
    83  
    84  	// Add a sending profile
    85  	smtp := SMTP{Name: "Test Page"}
    86  	smtp.UserId = 1
    87  	smtp.Host = "example.com"
    88  	smtp.FromAddress = "test@test.com"
    89  	ch.Assert(PostSMTP(&smtp), check.Equals, nil)
    90  
    91  	c := Campaign{Name: "Test campaign"}
    92  	c.UserId = 1
    93  	c.Template = t
    94  	c.Page = p
    95  	c.SMTP = smtp
    96  	c.Groups = []Group{group}
    97  
    98  	ch.Assert(PostCampaign(&c, c.UserId), check.Equals, nil)
    99  	ch.Assert(len(c.Results), check.Equals, 2)
   100  	ch.Assert(c.Results[0].Email, check.Equals, group.Targets[0].Email)
   101  	ch.Assert(c.Results[1].Email, check.Equals, group.Targets[2].Email)
   102  }