github.com/merlinepedra/gopphish-attack@v0.9.0/models/result_test.go (about)

     1  package models
     2  
     3  import (
     4  	"net/mail"
     5  	"regexp"
     6  	"time"
     7  
     8  	"gopkg.in/check.v1"
     9  )
    10  
    11  func (s *ModelsSuite) TestGenerateResultId(c *check.C) {
    12  	r := Result{}
    13  	r.GenerateId(db)
    14  	match, err := regexp.Match("[a-zA-Z0-9]{7}", []byte(r.RId))
    15  	c.Assert(err, check.Equals, nil)
    16  	c.Assert(match, check.Equals, true)
    17  }
    18  
    19  func (s *ModelsSuite) TestFormatAddress(c *check.C) {
    20  	r := Result{
    21  		BaseRecipient: BaseRecipient{
    22  			FirstName: "John",
    23  			LastName:  "Doe",
    24  			Email:     "johndoe@example.com",
    25  		},
    26  	}
    27  	expected := &mail.Address{
    28  		Name:    "John Doe",
    29  		Address: "johndoe@example.com",
    30  	}
    31  	c.Assert(r.FormatAddress(), check.Equals, expected.String())
    32  
    33  	r = Result{
    34  		BaseRecipient: BaseRecipient{Email: "johndoe@example.com"},
    35  	}
    36  	c.Assert(r.FormatAddress(), check.Equals, r.Email)
    37  }
    38  
    39  func (s *ModelsSuite) TestResultSendingStatus(ch *check.C) {
    40  	c := s.createCampaignDependencies(ch)
    41  	ch.Assert(PostCampaign(&c, c.UserId), check.Equals, nil)
    42  	// This campaign wasn't scheduled, so we expect the status to
    43  	// be sending
    44  	for _, r := range c.Results {
    45  		ch.Assert(r.Status, check.Equals, StatusSending)
    46  		ch.Assert(r.ModifiedDate, check.Equals, c.CreatedDate)
    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, StatusScheduled)
    57  		ch.Assert(r.ModifiedDate, check.Equals, c.CreatedDate)
    58  	}
    59  }
    60  
    61  func (s *ModelsSuite) TestResultVariableStatus(ch *check.C) {
    62  	c := s.createCampaignDependencies(ch)
    63  	c.LaunchDate = time.Now().UTC()
    64  	c.SendByDate = c.LaunchDate.Add(2 * time.Minute)
    65  	ch.Assert(PostCampaign(&c, c.UserId), check.Equals, nil)
    66  
    67  	// The campaign has a window smaller than our group size, so we expect some
    68  	// emails to be sent immediately, while others will be scheduled
    69  	for _, r := range c.Results {
    70  		if r.SendDate.Before(c.CreatedDate) || r.SendDate.Equal(c.CreatedDate) {
    71  			ch.Assert(r.Status, check.Equals, StatusSending)
    72  		} else {
    73  			ch.Assert(r.Status, check.Equals, StatusScheduled)
    74  		}
    75  	}
    76  }
    77  
    78  func (s *ModelsSuite) TestDuplicateResults(ch *check.C) {
    79  	group := Group{Name: "Test Group"}
    80  	group.Targets = []Target{
    81  		Target{BaseRecipient: BaseRecipient{Email: "test1@example.com", FirstName: "First", LastName: "Example"}},
    82  		Target{BaseRecipient: BaseRecipient{Email: "test1@example.com", FirstName: "Duplicate", LastName: "Duplicate"}},
    83  		Target{BaseRecipient: BaseRecipient{Email: "test2@example.com", FirstName: "Second", LastName: "Example"}},
    84  	}
    85  	group.UserId = 1
    86  	ch.Assert(PostGroup(&group), check.Equals, nil)
    87  
    88  	// Add a template
    89  	t := Template{Name: "Test Template"}
    90  	t.Subject = "{{.RId}} - Subject"
    91  	t.Text = "{{.RId}} - Text"
    92  	t.HTML = "{{.RId}} - HTML"
    93  	t.UserId = 1
    94  	ch.Assert(PostTemplate(&t), check.Equals, nil)
    95  
    96  	// Add a landing page
    97  	p := Page{Name: "Test Page"}
    98  	p.HTML = "<html>Test</html>"
    99  	p.UserId = 1
   100  	ch.Assert(PostPage(&p), check.Equals, nil)
   101  
   102  	// Add a sending profile
   103  	smtp := SMTP{Name: "Test Page"}
   104  	smtp.UserId = 1
   105  	smtp.Host = "example.com"
   106  	smtp.FromAddress = "test@test.com"
   107  	ch.Assert(PostSMTP(&smtp), check.Equals, nil)
   108  
   109  	c := Campaign{Name: "Test campaign"}
   110  	c.UserId = 1
   111  	c.Template = t
   112  	c.Page = p
   113  	c.SMTP = smtp
   114  	c.Groups = []Group{group}
   115  
   116  	ch.Assert(PostCampaign(&c, c.UserId), check.Equals, nil)
   117  	ch.Assert(len(c.Results), check.Equals, 2)
   118  	ch.Assert(c.Results[0].Email, check.Equals, group.Targets[0].Email)
   119  	ch.Assert(c.Results[1].Email, check.Equals, group.Targets[2].Email)
   120  }