github.com/hoffie/larasync@v0.0.0-20151025221940-0384d2bddcef/repository/repository_test.go (about)

     1  package repository
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"os"
     7  	"path/filepath"
     8  
     9  	"github.com/hoffie/larasync/helpers"
    10  	"github.com/hoffie/larasync/repository/nib"
    11  
    12  	. "gopkg.in/check.v1"
    13  )
    14  
    15  type RepositoryTests struct {
    16  	dir string
    17  }
    18  
    19  var _ = Suite(&RepositoryTests{})
    20  
    21  func (t *RepositoryTests) SetUpTest(c *C) {
    22  	t.dir = c.MkDir()
    23  }
    24  
    25  func (t *RepositoryTests) TestGetRepoRelativePath(c *C) {
    26  	r := New(filepath.Join(t.dir, "foo"))
    27  	err := r.Create()
    28  	c.Assert(err, IsNil)
    29  	in := filepath.Join(t.dir, "foo", "test", "bar")
    30  	out, err := r.getRepoRelativePath(in)
    31  	c.Assert(err, IsNil)
    32  	c.Assert(out, Equals, filepath.Join("test", "bar"))
    33  }
    34  
    35  func (t *RepositoryTests) TestGetRepoRelativePathFail(c *C) {
    36  	r := New(filepath.Join(t.dir, "foo"))
    37  	err := r.Create()
    38  	c.Assert(err, IsNil)
    39  	in := t.dir
    40  	out, err := r.getRepoRelativePath(in)
    41  	c.Assert(err, NotNil)
    42  	c.Assert(out, Equals, "")
    43  }
    44  
    45  func (t *RepositoryTests) TestCreateManagementDir(c *C) {
    46  	r := New(t.dir)
    47  	err := r.CreateManagementDir()
    48  	c.Assert(err, IsNil)
    49  
    50  	s, err := os.Stat(filepath.Join(t.dir, ".lara"))
    51  	c.Assert(err, IsNil)
    52  	c.Assert(s.IsDir(), Equals, true)
    53  
    54  	s, err = os.Stat(filepath.Join(t.dir, ".lara", "objects"))
    55  	c.Assert(err, IsNil)
    56  	c.Assert(s.IsDir(), Equals, true)
    57  
    58  	s, err = os.Stat(filepath.Join(t.dir, ".lara", "nibs"))
    59  	c.Assert(err, IsNil)
    60  	c.Assert(s.IsDir(), Equals, true)
    61  
    62  }
    63  
    64  func (t *RepositoryTests) TestAddObject(c *C) {
    65  	r := New(t.dir)
    66  	err := r.CreateManagementDir()
    67  	c.Assert(err, IsNil)
    68  	objectID := "1234567890"
    69  	objectReader := bytes.NewReader([]byte("Test data"))
    70  
    71  	err = r.AddObject(objectID, objectReader)
    72  	c.Assert(err, IsNil)
    73  }
    74  
    75  func (t *RepositoryTests) TestGetObject(c *C) {
    76  	r := New(t.dir)
    77  	err := r.CreateManagementDir()
    78  	c.Assert(err, IsNil)
    79  	objectID := "1234567890"
    80  	objectData := []byte("Test data")
    81  	objectReader := bytes.NewReader(objectData)
    82  
    83  	r.AddObject(objectID, objectReader)
    84  
    85  	reader, err := r.GetObjectData(objectID)
    86  	defer reader.Close()
    87  	c.Assert(err, IsNil)
    88  
    89  	data, err := ioutil.ReadAll(reader)
    90  
    91  	err = reader.Close()
    92  	c.Assert(err, IsNil)
    93  
    94  	c.Assert(objectData, DeepEquals, data)
    95  }
    96  
    97  // It should throw an error if a content id references in the nib
    98  // is not existing yet.
    99  func (t *RepositoryAddItemTests) TestAddNibContentObjectIDsMissing(c *C) {
   100  	n := &nib.NIB{
   101  		ID: "asdf",
   102  		Revisions: []*nib.Revision{
   103  			&nib.Revision{
   104  				MetadataID: "not-existing",
   105  				ContentIDs: []string{},
   106  			},
   107  		},
   108  	}
   109  	r := New(t.dir)
   110  	err := r.CreateManagementDir()
   111  	c.Assert(err, IsNil)
   112  
   113  	err = r.nibStore.Add(n)
   114  	c.Assert(err, IsNil)
   115  	data, err := r.nibStore.GetBytes(n.ID)
   116  	c.Assert(err, IsNil)
   117  
   118  	buffer := bytes.NewBuffer(data)
   119  
   120  	err = r.AddNIBContent(buffer)
   121  	c.Assert(IsNIBContentMissing(err), Equals, true)
   122  }
   123  
   124  func (t *RepositoryAddItemTests) TestAddNIBContentConflict(c *C) {
   125  	n := &nib.NIB{
   126  		ID: "asdf",
   127  		Revisions: []*nib.Revision{
   128  			&nib.Revision{
   129  				MetadataID: "metadata123",
   130  				ContentIDs: []string{},
   131  			},
   132  		},
   133  	}
   134  	r := New(t.dir)
   135  	err := r.CreateManagementDir()
   136  	c.Assert(err, IsNil)
   137  
   138  	err = r.AddObject("metadata123", bytes.NewBufferString("x"))
   139  	c.Assert(err, IsNil)
   140  
   141  	err = r.AddObject("metadata456", bytes.NewBufferString("y"))
   142  	c.Assert(err, IsNil)
   143  
   144  	err = r.nibStore.Add(n)
   145  	c.Assert(err, IsNil)
   146  	data1, err := r.nibStore.GetBytes(n.ID)
   147  	c.Assert(err, IsNil)
   148  
   149  	n.AppendRevision(&nib.Revision{MetadataID: "metadata456"})
   150  
   151  	err = r.nibStore.Add(n)
   152  	c.Assert(err, IsNil)
   153  	data2, err := r.nibStore.GetBytes(n.ID)
   154  	c.Assert(err, IsNil)
   155  
   156  	buffer1 := bytes.NewBuffer(data1)
   157  	buffer2 := bytes.NewBuffer(data2)
   158  	err = r.AddNIBContent(buffer2)
   159  	c.Assert(err, IsNil)
   160  	err = r.AddNIBContent(buffer1)
   161  	c.Assert(err, Equals, ErrNIBConflict)
   162  }
   163  
   164  func (t *RepositoryAddItemTests) TestAddNIBContentObjNotExisting(c *C) {
   165  	n := &nib.NIB{
   166  		ID: "asdf",
   167  		Revisions: []*nib.Revision{
   168  			&nib.Revision{
   169  				MetadataID: "metadata1",
   170  				ContentIDs: []string{"content1", "content2", "content3"},
   171  			},
   172  		},
   173  	}
   174  	r := New(t.dir)
   175  	err := r.CreateManagementDir()
   176  	c.Assert(err, IsNil)
   177  
   178  	err = r.AddObject("content2", bytes.NewBufferString("x"))
   179  	c.Assert(err, IsNil)
   180  
   181  	err = r.nibStore.Add(n)
   182  	c.Assert(err, IsNil)
   183  
   184  	reader, err := r.nibStore.getReader(n.ID)
   185  	defer reader.Close()
   186  	c.Assert(err, IsNil)
   187  
   188  	err = r.AddNIBContent(reader)
   189  	c.Assert(err, NotNil)
   190  
   191  	c.Assert(IsNIBContentMissing(err), Equals, true)
   192  	nibContentMissing := err.(*ErrNIBContentMissing)
   193  	missingIDs := nibContentMissing.MissingContentIDs()
   194  
   195  	c.Assert(helpers.SliceContainsString(missingIDs, "metadata1"), Equals, true)
   196  	c.Assert(helpers.SliceContainsString(missingIDs, "content1"), Equals, true)
   197  	c.Assert(helpers.SliceContainsString(missingIDs, "content2"), Equals, false)
   198  	c.Assert(helpers.SliceContainsString(missingIDs, "content3"), Equals, true)
   199  }