mirror of https://github.com/gophish/gophish
82 lines
2.7 KiB
Go
82 lines
2.7 KiB
Go
|
package models
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
|
||
|
check "gopkg.in/check.v1"
|
||
|
)
|
||
|
|
||
|
func (s *ModelsSuite) TestGenerateSendDate(c *check.C) {
|
||
|
campaign := s.createCampaignDependencies(c)
|
||
|
// Test that if no launch date is provided, the campaign's creation date
|
||
|
// is used.
|
||
|
err := PostCampaign(&campaign, campaign.UserId)
|
||
|
c.Assert(err, check.Equals, nil)
|
||
|
c.Assert(campaign.LaunchDate, check.Equals, campaign.CreatedDate)
|
||
|
|
||
|
ms, err := GetMailLogsByCampaign(campaign.Id)
|
||
|
c.Assert(err, check.Equals, nil)
|
||
|
for _, m := range ms {
|
||
|
c.Assert(m.SendDate, check.Equals, campaign.CreatedDate)
|
||
|
}
|
||
|
|
||
|
// Test that if no send date is provided, all the emails are sent at the
|
||
|
// campaign's launch date
|
||
|
campaign = s.createCampaignDependencies(c)
|
||
|
campaign.LaunchDate = time.Now().UTC()
|
||
|
err = PostCampaign(&campaign, campaign.UserId)
|
||
|
c.Assert(err, check.Equals, nil)
|
||
|
|
||
|
ms, err = GetMailLogsByCampaign(campaign.Id)
|
||
|
c.Assert(err, check.Equals, nil)
|
||
|
for _, m := range ms {
|
||
|
c.Assert(m.SendDate, check.Equals, campaign.LaunchDate)
|
||
|
}
|
||
|
|
||
|
// Finally, test that if a send date is provided, the emails are staggered
|
||
|
// correctly.
|
||
|
campaign = s.createCampaignDependencies(c)
|
||
|
campaign.LaunchDate = time.Now().UTC()
|
||
|
campaign.SendByDate = campaign.LaunchDate.Add(2 * time.Minute)
|
||
|
err = PostCampaign(&campaign, campaign.UserId)
|
||
|
c.Assert(err, check.Equals, nil)
|
||
|
|
||
|
ms, err = GetMailLogsByCampaign(campaign.Id)
|
||
|
c.Assert(err, check.Equals, nil)
|
||
|
sendingOffset := 2 / float64(len(ms))
|
||
|
for i, m := range ms {
|
||
|
expectedOffset := int(sendingOffset * float64(i))
|
||
|
expectedDate := campaign.LaunchDate.Add(time.Duration(expectedOffset) * time.Minute)
|
||
|
c.Assert(m.SendDate, check.Equals, expectedDate)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *ModelsSuite) TestCampaignDateValidation(c *check.C) {
|
||
|
campaign := s.createCampaignDependencies(c)
|
||
|
// If both are zero, then the campaign should start immediately with no
|
||
|
// send by date
|
||
|
err := campaign.Validate()
|
||
|
c.Assert(err, check.Equals, nil)
|
||
|
|
||
|
// If the launch date is specified, then the send date is optional
|
||
|
campaign = s.createCampaignDependencies(c)
|
||
|
campaign.LaunchDate = time.Now().UTC()
|
||
|
err = campaign.Validate()
|
||
|
c.Assert(err, check.Equals, nil)
|
||
|
|
||
|
// If the send date is greater than the launch date, then there's no
|
||
|
//problem
|
||
|
campaign = s.createCampaignDependencies(c)
|
||
|
campaign.LaunchDate = time.Now().UTC()
|
||
|
campaign.SendByDate = campaign.LaunchDate.Add(1 * time.Minute)
|
||
|
err = campaign.Validate()
|
||
|
c.Assert(err, check.Equals, nil)
|
||
|
|
||
|
// If the send date is less than the launch date, then there's an issue
|
||
|
campaign = s.createCampaignDependencies(c)
|
||
|
campaign.LaunchDate = time.Now().UTC()
|
||
|
campaign.SendByDate = campaign.LaunchDate.Add(-1 * time.Minute)
|
||
|
err = campaign.Validate()
|
||
|
c.Assert(err, check.Equals, ErrInvalidSendByDate)
|
||
|
}
|