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  }