diff --git a/persistence/persistence.go b/persistence/persistence.go index 7442337..8c048d8 100644 --- a/persistence/persistence.go +++ b/persistence/persistence.go @@ -24,6 +24,18 @@ type Persistor struct { // ~ CONSTRUCTOR //------------------------------------------------------------------ +func NewPersistorWithIndex(mongoURL string, collection string, index mgo.Index) (p *Persistor, err error) { + p, err = NewPersistor(mongoURL, collection) + if err != nil { + return + } + err = p.GetCollection().EnsureIndex(index) + if err != nil { + return + } + return p, nil +} + // NewPersistor constructor func NewPersistor(mongoURL string, collection string) (p *Persistor, err error) { parsedURL, err := url.Parse(mongoURL) diff --git a/persistence/persistence_test.go b/persistence/persistence_test.go new file mode 100644 index 0000000..0bade22 --- /dev/null +++ b/persistence/persistence_test.go @@ -0,0 +1,53 @@ +package persistence + +import ( + "testing" + + "gopkg.in/mgo.v2" +) + +type Foo struct { + FirstName string + LastName string +} + +func TestPersistenceIndex(t *testing.T) { + index := mgo.Index{ + Key: []string{"firstname", "lastname"}, + Unique: true, + Background: true, + } + p, err := NewPersistorWithIndex("mongodb://dockerhost/test", "testindex", index) + if err != nil { + t.Fatal(err) + } + err = p.GetCollection().EnsureIndex(index) + if err != nil { + t.Fatal(err) + } + err = p.GetCollection().Insert(&Foo{ + FirstName: "Foo", + LastName: "Bar", + }) + if err != nil { + t.Fatal(err) + } + err = p.GetCollection().Insert(&Foo{ + FirstName: "Flo", + LastName: "Bar", + }) + if err != nil { + t.Fatal(err) + } + err = p.GetCollection().Insert(&Foo{ + FirstName: "Flo", + LastName: "Bar", + }) + if err == nil { + t.Fail() + t.Log("Did not expected that one to work!") + } + if err != nil { + t.Log("Error: " + err.Error()) + } +}