mirror of
https://github.com/gophish/gophish
synced 2024-11-15 00:37:14 +00:00
103 lines
2.8 KiB
Go
103 lines
2.8 KiB
Go
|
package models
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/mail"
|
||
|
"regexp"
|
||
|
"time"
|
||
|
|
||
|
"gopkg.in/check.v1"
|
||
|
)
|
||
|
|
||
|
func (s *ModelsSuite) TestGenerateResultId(c *check.C) {
|
||
|
r := Result{}
|
||
|
r.GenerateId()
|
||
|
match, err := regexp.Match("[a-zA-Z0-9]{7}", []byte(r.RId))
|
||
|
c.Assert(err, check.Equals, nil)
|
||
|
c.Assert(match, check.Equals, true)
|
||
|
}
|
||
|
|
||
|
func (s *ModelsSuite) TestFormatAddress(c *check.C) {
|
||
|
r := Result{
|
||
|
FirstName: "John",
|
||
|
LastName: "Doe",
|
||
|
Email: "johndoe@example.com",
|
||
|
}
|
||
|
expected := &mail.Address{
|
||
|
Name: "John Doe",
|
||
|
Address: "johndoe@example.com",
|
||
|
}
|
||
|
c.Assert(r.FormatAddress(), check.Equals, expected.String())
|
||
|
|
||
|
r = Result{
|
||
|
Email: "johndoe@example.com",
|
||
|
}
|
||
|
c.Assert(r.FormatAddress(), check.Equals, r.Email)
|
||
|
}
|
||
|
|
||
|
func (s *ModelsSuite) TestResultSendingStatus(ch *check.C) {
|
||
|
c := s.createCampaignDependencies(ch)
|
||
|
ch.Assert(PostCampaign(&c, c.UserId), check.Equals, nil)
|
||
|
// This campaign wasn't scheduled, so we expect the status to
|
||
|
// be sending
|
||
|
fmt.Println("Campaign STATUS")
|
||
|
fmt.Println(c.Status)
|
||
|
for _, r := range c.Results {
|
||
|
ch.Assert(r.Status, check.Equals, STATUS_SENDING)
|
||
|
}
|
||
|
}
|
||
|
func (s *ModelsSuite) TestResultScheduledStatus(ch *check.C) {
|
||
|
c := s.createCampaignDependencies(ch)
|
||
|
c.LaunchDate = time.Now().UTC().Add(time.Hour * time.Duration(1))
|
||
|
ch.Assert(PostCampaign(&c, c.UserId), check.Equals, nil)
|
||
|
// This campaign wasn't scheduled, so we expect the status to
|
||
|
// be sending
|
||
|
for _, r := range c.Results {
|
||
|
ch.Assert(r.Status, check.Equals, STATUS_SCHEDULED)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *ModelsSuite) TestDuplicateResults(ch *check.C) {
|
||
|
group := Group{Name: "Test Group"}
|
||
|
group.Targets = []Target{
|
||
|
Target{Email: "test1@example.com", FirstName: "First", LastName: "Example"},
|
||
|
Target{Email: "test1@example.com", FirstName: "Duplicate", LastName: "Duplicate"},
|
||
|
Target{Email: "test2@example.com", FirstName: "Second", LastName: "Example"},
|
||
|
}
|
||
|
group.UserId = 1
|
||
|
ch.Assert(PostGroup(&group), check.Equals, nil)
|
||
|
|
||
|
// Add a template
|
||
|
t := Template{Name: "Test Template"}
|
||
|
t.Subject = "{{.RId}} - Subject"
|
||
|
t.Text = "{{.RId}} - Text"
|
||
|
t.HTML = "{{.RId}} - HTML"
|
||
|
t.UserId = 1
|
||
|
ch.Assert(PostTemplate(&t), check.Equals, nil)
|
||
|
|
||
|
// Add a landing page
|
||
|
p := Page{Name: "Test Page"}
|
||
|
p.HTML = "<html>Test</html>"
|
||
|
p.UserId = 1
|
||
|
ch.Assert(PostPage(&p), check.Equals, nil)
|
||
|
|
||
|
// Add a sending profile
|
||
|
smtp := SMTP{Name: "Test Page"}
|
||
|
smtp.UserId = 1
|
||
|
smtp.Host = "example.com"
|
||
|
smtp.FromAddress = "test@test.com"
|
||
|
ch.Assert(PostSMTP(&smtp), check.Equals, nil)
|
||
|
|
||
|
c := Campaign{Name: "Test campaign"}
|
||
|
c.UserId = 1
|
||
|
c.Template = t
|
||
|
c.Page = p
|
||
|
c.SMTP = smtp
|
||
|
c.Groups = []Group{group}
|
||
|
|
||
|
ch.Assert(PostCampaign(&c, c.UserId), check.Equals, nil)
|
||
|
ch.Assert(len(c.Results), check.Equals, 2)
|
||
|
ch.Assert(c.Results[0].Email, check.Equals, group.Targets[0].Email)
|
||
|
ch.Assert(c.Results[1].Email, check.Equals, group.Targets[2].Email)
|
||
|
}
|