github.com/hoffie/larasync@v0.0.0-20151025221940-0384d2bddcef/repository/transactionManager_test.go (about) 1 package repository 2 3 import ( 4 "github.com/hoffie/larasync/repository/content" 5 6 . "gopkg.in/check.v1" 7 ) 8 9 type TransactionManagerTest struct { 10 dir string 11 tm *TransactionManager 12 } 13 14 var _ = Suite(&TransactionManagerTest{}) 15 16 func (t *TransactionManagerTest) SetUpTest(c *C) { 17 t.dir = c.MkDir() 18 storage := content.NewFileStorage(t.dir) 19 20 t.tm = newTransactionManager(storage, t.dir) 21 } 22 23 func (t *TransactionManagerTest) transactions(count int) []*Transaction { 24 nibIDs := []string{"a", "b"} 25 transactions := make([]*Transaction, count) 26 for i := 1; i <= count; i++ { 27 transaction := &Transaction{ 28 ID: int64(i), 29 NIBIDs: nibIDs} 30 transactions[i-1] = transaction 31 } 32 return transactions 33 } 34 35 func (t *TransactionManagerTest) addTransactions() { 36 transactions := t.transactions(transactionsInContainer * 2) 37 for _, transaction := range transactions { 38 t.tm.Add(transaction) 39 } 40 } 41 42 func (t *TransactionManagerTest) TestAddTransaction(c *C) { 43 transaction := &Transaction{ 44 ID: 1, 45 NIBIDs: []string{"a", "b", "c"}} 46 err := t.tm.Add(transaction) 47 c.Assert(err, IsNil) 48 } 49 50 func (t *TransactionManagerTest) TestAddTransactionFirst(c *C) { 51 transaction := &Transaction{ 52 ID: 1, 53 NIBIDs: []string{"a", "b", "c"}} 54 err := t.tm.Add(transaction) 55 c.Assert(err, IsNil) 56 c.Assert(transaction.PreviousID, Equals, int64(0)) 57 } 58 59 func (t *TransactionManagerTest) TestAddTransactionPreviousSet(c *C) { 60 transaction := &Transaction{ 61 ID: 1, 62 NIBIDs: []string{"a", "b"}} 63 err := t.tm.Add(transaction) 64 c.Assert(err, IsNil) 65 66 transaction = &Transaction{ 67 ID: 2, 68 NIBIDs: []string{"c", "d"}} 69 err = t.tm.Add(transaction) 70 c.Assert(err, IsNil) 71 72 c.Assert(transaction.PreviousID, Equals, int64(1)) 73 } 74 75 func (t *TransactionManagerTest) TestGetInFirstSet(c *C) { 76 t.addTransactions() 77 transaction, err := t.tm.Get(150) 78 c.Assert(err, IsNil) 79 c.Assert(transaction.ID, Equals, int64(150)) 80 c.Assert(transaction.PreviousID, Equals, int64(149)) 81 } 82 83 func (t *TransactionManagerTest) TestGetInSecondSet(c *C) { 84 t.addTransactions() 85 transaction, err := t.tm.Get(1) 86 c.Assert(err, IsNil) 87 c.Assert(transaction.ID, Equals, int64(1)) 88 c.Assert(transaction.PreviousID, Equals, int64(0)) 89 _, err = t.tm.Get(0) 90 c.Assert(err, NotNil) 91 } 92 93 func (t *TransactionManagerTest) TestFromFirstSetOnly(c *C) { 94 t.addTransactions() 95 transactions, err := t.tm.From(151) 96 c.Assert(err, IsNil) 97 c.Assert(len(transactions), Equals, 49) 98 } 99 100 func (t *TransactionManagerTest) TestFromSets(c *C) { 101 t.addTransactions() 102 transactions, err := t.tm.From(1) 103 c.Assert(err, IsNil) 104 c.Assert(transactions[0].ID, Equals, int64(2)) 105 c.Assert(len(transactions), Equals, 199) 106 c.Assert(transactions[198].ID, Equals, int64(200)) 107 } 108 109 func (t *TransactionManagerTest) TestFromNotIncludeGivenUUID(c *C) { 110 t.addTransactions() 111 transactions, err := t.tm.From(150) 112 c.Assert(err, IsNil) 113 for _, transaction := range transactions { 114 c.Assert(transaction.ID, Not(Equals), int64(150)) 115 } 116 } 117 118 func (t *TransactionManagerTest) TestExistsPositive(c *C) { 119 t.addTransactions() 120 c.Assert(t.tm.Exists(2), Equals, true) 121 } 122 123 func (t *TransactionManagerTest) TestExistsNegative(c *C) { 124 t.addTransactions() 125 queryID := int64(transactionsInContainer*2 + 1) 126 c.Assert(t.tm.Exists(queryID), Equals, false) 127 }