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  }