github.com/topsteplocal/gophish@v0.6.0/models/models_test.go (about) 1 package models 2 3 import ( 4 "testing" 5 6 "github.com/gophish/gophish/config" 7 "gopkg.in/check.v1" 8 ) 9 10 // Hook up gocheck into the "go test" runner. 11 func Test(t *testing.T) { check.TestingT(t) } 12 13 type ModelsSuite struct{} 14 15 var _ = check.Suite(&ModelsSuite{}) 16 17 func (s *ModelsSuite) SetUpSuite(c *check.C) { 18 config.Conf.DBName = "sqlite3" 19 config.Conf.DBPath = ":memory:" 20 config.Conf.MigrationsPath = "../db/db_sqlite3/migrations/" 21 err := Setup() 22 if err != nil { 23 c.Fatalf("Failed creating database: %v", err) 24 } 25 } 26 27 func (s *ModelsSuite) TearDownTest(c *check.C) { 28 // Clear database tables between each test. If new tables are 29 // used in this test suite they will need to be cleaned up here. 30 db.Delete(Group{}) 31 db.Delete(Target{}) 32 db.Delete(GroupTarget{}) 33 db.Delete(SMTP{}) 34 db.Delete(Page{}) 35 db.Delete(Result{}) 36 db.Delete(MailLog{}) 37 db.Delete(Campaign{}) 38 39 // Reset users table to default state. 40 db.Not("id", 1).Delete(User{}) 41 db.Model(User{}).Update("username", "admin") 42 } 43 44 func (s *ModelsSuite) createCampaignDependencies(ch *check.C, optional ...string) Campaign { 45 // we use the optional parameter to pass an alternative subject 46 group := Group{Name: "Test Group"} 47 group.Targets = []Target{ 48 Target{Email: "test1@example.com", FirstName: "First", LastName: "Example"}, 49 Target{Email: "test2@example.com", FirstName: "Second", LastName: "Example"}, 50 } 51 group.UserId = 1 52 ch.Assert(PostGroup(&group), check.Equals, nil) 53 54 // Add a template 55 t := Template{Name: "Test Template"} 56 if len(optional) > 0 { 57 t.Subject = optional[0] 58 } else { 59 t.Subject = "{{.RId}} - Subject" 60 } 61 t.Text = "{{.RId}} - Text" 62 t.HTML = "{{.RId}} - HTML" 63 t.UserId = 1 64 ch.Assert(PostTemplate(&t), check.Equals, nil) 65 66 // Add a landing page 67 p := Page{Name: "Test Page"} 68 p.HTML = "<html>Test</html>" 69 p.UserId = 1 70 ch.Assert(PostPage(&p), check.Equals, nil) 71 72 // Add a sending profile 73 smtp := SMTP{Name: "Test Page"} 74 smtp.UserId = 1 75 smtp.Host = "example.com" 76 smtp.FromAddress = "test@test.com" 77 ch.Assert(PostSMTP(&smtp), check.Equals, nil) 78 79 c := Campaign{Name: "Test campaign"} 80 c.UserId = 1 81 c.Template = t 82 c.Page = p 83 c.SMTP = smtp 84 c.Groups = []Group{group} 85 return c 86 } 87 88 func (s *ModelsSuite) createCampaign(ch *check.C) Campaign { 89 c := s.createCampaignDependencies(ch) 90 // Setup and "launch" our campaign 91 ch.Assert(PostCampaign(&c, c.UserId), check.Equals, nil) 92 return c 93 }