github.com/edermi/gophish_mods@v0.7.0/models/campaign_test.go (about)

     1  package models
     2  
     3  import (
     4  	"time"
     5  
     6  	check "gopkg.in/check.v1"
     7  )
     8  
     9  func (s *ModelsSuite) TestGenerateSendDate(c *check.C) {
    10  	campaign := s.createCampaignDependencies(c)
    11  	// Test that if no launch date is provided, the campaign's creation date
    12  	// is used.
    13  	err := PostCampaign(&campaign, campaign.UserId)
    14  	c.Assert(err, check.Equals, nil)
    15  	c.Assert(campaign.LaunchDate, check.Equals, campaign.CreatedDate)
    16  
    17  	ms, err := GetMailLogsByCampaign(campaign.Id)
    18  	c.Assert(err, check.Equals, nil)
    19  	for _, m := range ms {
    20  		c.Assert(m.SendDate, check.Equals, campaign.CreatedDate)
    21  	}
    22  
    23  	// Test that if no send date is provided, all the emails are sent at the
    24  	// campaign's launch date
    25  	campaign = s.createCampaignDependencies(c)
    26  	campaign.LaunchDate = time.Now().UTC()
    27  	err = PostCampaign(&campaign, campaign.UserId)
    28  	c.Assert(err, check.Equals, nil)
    29  
    30  	ms, err = GetMailLogsByCampaign(campaign.Id)
    31  	c.Assert(err, check.Equals, nil)
    32  	for _, m := range ms {
    33  		c.Assert(m.SendDate, check.Equals, campaign.LaunchDate)
    34  	}
    35  
    36  	// Finally, test that if a send date is provided, the emails are staggered
    37  	// correctly.
    38  	campaign = s.createCampaignDependencies(c)
    39  	campaign.LaunchDate = time.Now().UTC()
    40  	campaign.SendByDate = campaign.LaunchDate.Add(2 * time.Minute)
    41  	err = PostCampaign(&campaign, campaign.UserId)
    42  	c.Assert(err, check.Equals, nil)
    43  
    44  	ms, err = GetMailLogsByCampaign(campaign.Id)
    45  	c.Assert(err, check.Equals, nil)
    46  	sendingOffset := 2 / float64(len(ms))
    47  	for i, m := range ms {
    48  		expectedOffset := int(sendingOffset * float64(i))
    49  		expectedDate := campaign.LaunchDate.Add(time.Duration(expectedOffset) * time.Minute)
    50  		c.Assert(m.SendDate, check.Equals, expectedDate)
    51  	}
    52  }
    53  
    54  func (s *ModelsSuite) TestCampaignDateValidation(c *check.C) {
    55  	campaign := s.createCampaignDependencies(c)
    56  	// If both are zero, then the campaign should start immediately with no
    57  	// send by date
    58  	err := campaign.Validate()
    59  	c.Assert(err, check.Equals, nil)
    60  
    61  	// If the launch date is specified, then the send date is optional
    62  	campaign = s.createCampaignDependencies(c)
    63  	campaign.LaunchDate = time.Now().UTC()
    64  	err = campaign.Validate()
    65  	c.Assert(err, check.Equals, nil)
    66  
    67  	// If the send date is greater than the launch date, then there's no
    68  	//problem
    69  	campaign = s.createCampaignDependencies(c)
    70  	campaign.LaunchDate = time.Now().UTC()
    71  	campaign.SendByDate = campaign.LaunchDate.Add(1 * time.Minute)
    72  	err = campaign.Validate()
    73  	c.Assert(err, check.Equals, nil)
    74  
    75  	// If the send date is less than the launch date, then there's an issue
    76  	campaign = s.createCampaignDependencies(c)
    77  	campaign.LaunchDate = time.Now().UTC()
    78  	campaign.SendByDate = campaign.LaunchDate.Add(-1 * time.Minute)
    79  	err = campaign.Validate()
    80  	c.Assert(err, check.Equals, ErrInvalidSendByDate)
    81  }