github.com/jdolitsky/cnab-go@v0.7.1-beta1/utils/crud/store_test.go (about)

     1  package crud
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  // The main point of these tests is to catch any case where the interface
    10  // changes. But we also provide a mock for testing.
    11  var _ Store = &MockStore{}
    12  
    13  func TestMockStore(t *testing.T) {
    14  	s := NewMockStore()
    15  	is := assert.New(t)
    16  	is.NoError(s.Store("test", []byte("data")))
    17  	list, err := s.List()
    18  	is.NoError(err)
    19  	is.Len(list, 1)
    20  	data, err := s.Read("test")
    21  	is.NoError(err)
    22  	is.Equal(data, []byte("data"))
    23  
    24  }
    25  
    26  type MockStore struct {
    27  	data map[string][]byte
    28  }
    29  
    30  func NewMockStore() *MockStore {
    31  	return &MockStore{data: map[string][]byte{}}
    32  }
    33  
    34  func (s *MockStore) List() ([]string, error) {
    35  	buf := make([]string, len(s.data))
    36  	i := 0
    37  	for k := range s.data {
    38  		buf[i] = k
    39  		i++
    40  	}
    41  	return buf, nil
    42  }
    43  func (s *MockStore) Store(name string, data []byte) error { s.data[name] = data; return nil }
    44  func (s *MockStore) Read(name string) ([]byte, error)     { return s.data[name], nil }
    45  func (s *MockStore) Delete(name string) error             { delete(s.data, name); return nil }