github.com/mg98/scriptup@v0.1.0/pkg/scriptup/storage/file_storage_test.go (about)

     1  package storage
     2  
     3  import (
     4  	"os"
     5  	"reflect"
     6  	"testing"
     7  )
     8  
     9  const testFilePath = ".test/filedb.txt"
    10  
    11  const testMigrationDir = ".test/migrations"
    12  
    13  func TestFileStorage_Open(t *testing.T) {
    14  	s := NewFileStorage(testFilePath)
    15  
    16  	t.Run("create file if it does not exist", func(t *testing.T) {
    17  		defer os.Remove(testFilePath)
    18  		if err := s.Open(); err != nil {
    19  			t.Fatalf("Open failed: %v", err)
    20  		}
    21  		if _, err := os.Stat(testFilePath); err != nil {
    22  			t.Fatalf("file db file not created: %v", err)
    23  		}
    24  	})
    25  
    26  	t.Run("use existing file", func(t *testing.T) {
    27  		if _, err := os.Create(testFilePath); err != nil {
    28  			panic(err)
    29  		}
    30  		defer os.Remove(testFilePath)
    31  		if err := s.Open(); err != nil {
    32  			t.Fatalf("Open failed: %v", err)
    33  		}
    34  	})
    35  
    36  }
    37  
    38  func TestFileStorage_Close(t *testing.T) {
    39  	if _, err := os.Create(testFilePath); err != nil {
    40  		panic(err)
    41  	}
    42  	defer os.Remove(testFilePath)
    43  	s := NewFileStorage(testFilePath)
    44  	if err := s.Open(); err != nil {
    45  		panic(err)
    46  	}
    47  	if err := s.Close(); err != nil {
    48  		t.Fatalf("Close failed: %v", err)
    49  	}
    50  }
    51  
    52  func TestFileStorage_Append(t *testing.T) {
    53  	if _, err := os.Create(testFilePath); err != nil {
    54  		panic(err)
    55  	}
    56  	defer os.Remove(testFilePath)
    57  
    58  	s := NewFileStorage(testFilePath)
    59  	if err := s.Open(); err != nil {
    60  		panic(err)
    61  	}
    62  	{
    63  		if err := s.Append("20200101000000_dummy"); err != nil {
    64  			t.Fatalf("Append failed: %v", err)
    65  		}
    66  		b, err := os.ReadFile(testFilePath)
    67  		if err != nil {
    68  			panic(err)
    69  		}
    70  		if string(b) != "20200101000000_dummy\n" {
    71  			t.Fatalf("file content not as expected, got: %s", string(b))
    72  		}
    73  	}
    74  	{
    75  		if err := s.Append("20200101000001_dummy"); err != nil {
    76  			t.Fatalf("Append failed: %v", err)
    77  		}
    78  		if err := s.Append("20200101000002_dummy"); err != nil {
    79  			t.Fatalf("Append failed: %v", err)
    80  		}
    81  		b, err := os.ReadFile(testFilePath)
    82  		if err != nil {
    83  			panic(err)
    84  		}
    85  		if string(b) != "20200101000000_dummy\n20200101000001_dummy\n20200101000002_dummy\n" {
    86  			t.Fatalf("file content not as expected, got: %s", string(b))
    87  		}
    88  	}
    89  }
    90  
    91  func TestFileStorage_Pop(t *testing.T) {
    92  	f, err := os.Create(testFilePath)
    93  	if err != nil {
    94  		panic(err)
    95  	}
    96  	defer os.Remove(testFilePath)
    97  	_, err = f.WriteString("20200101000000_dummy\n20200101000001_dummy\n20200101000002_dummy\n")
    98  	if err != nil {
    99  		panic(err)
   100  	}
   101  
   102  	s := NewFileStorage(testFilePath)
   103  	if err := s.Open(); err != nil {
   104  		panic(err)
   105  	}
   106  	{
   107  		if err := s.Pop(); err != nil {
   108  			t.Fatalf("Pop failed: %v", err)
   109  		}
   110  		b, err := os.ReadFile(testFilePath)
   111  		if err != nil {
   112  			panic(err)
   113  		}
   114  		if string(b) != "20200101000000_dummy\n20200101000001_dummy\n" {
   115  			t.Fatalf("file content not as expected, got: %s", string(b))
   116  		}
   117  	}
   118  	{
   119  		if err := s.Pop(); err != nil {
   120  			t.Fatalf("Pop failed: %v", err)
   121  		}
   122  		b, err := os.ReadFile(testFilePath)
   123  		if err != nil {
   124  			panic(err)
   125  		}
   126  		if string(b) != "20200101000000_dummy\n" {
   127  			t.Fatalf("file content not as expected, got: %s", string(b))
   128  		}
   129  	}
   130  	{
   131  		if err := s.Pop(); err != nil {
   132  			t.Fatalf("Pop failed: %v", err)
   133  		}
   134  		b, err := os.ReadFile(testFilePath)
   135  		if err != nil {
   136  			panic(err)
   137  		}
   138  		if string(b) != "" {
   139  			t.Fatalf("file content not as expected, got: %s", string(b))
   140  		}
   141  	}
   142  	{
   143  		if err := s.Pop(); err.Error() != "no migrations left" {
   144  			t.Fatalf("expected error \"no migrations left\", got: %v", err)
   145  		}
   146  	}
   147  
   148  }
   149  
   150  func TestFileStorage_All(t *testing.T) {
   151  	f, err := os.Create(testFilePath)
   152  	if err != nil {
   153  		panic(err)
   154  	}
   155  	defer os.Remove(testFilePath)
   156  
   157  	{
   158  		s := NewFileStorage(testFilePath)
   159  		if err := s.Open(); err != nil {
   160  			panic(err)
   161  		}
   162  		entries, err := s.All(OrderAsc)
   163  		if err != nil {
   164  			t.Fatalf("All failed: %v", err)
   165  		}
   166  
   167  		if len(entries) != 0 {
   168  			t.Fatalf("All expected to be empty, got: %v", entries)
   169  		}
   170  	}
   171  
   172  	_, err = f.WriteString("20200101000000_dummy\n20200101000001_dummy\n20200101000002_dummy")
   173  	if err != nil {
   174  		panic(err)
   175  	}
   176  
   177  	{
   178  		s := NewFileStorage(testFilePath)
   179  		if err := s.Open(); err != nil {
   180  			panic(err)
   181  		}
   182  		entries, err := s.All(OrderAsc)
   183  		if err != nil {
   184  			t.Fatalf("All failed: %v", err)
   185  		}
   186  
   187  		if !reflect.DeepEqual(entries, []string{"20200101000000_dummy", "20200101000001_dummy", "20200101000002_dummy"}) {
   188  			t.Fatalf("All does not return as expected, got: %v", entries)
   189  		}
   190  	}
   191  }
   192  
   193  func TestFileStorage_Latest(t *testing.T) {
   194  	t.Run("empty file, i.e., no records", func(t *testing.T) {
   195  		if _, err := os.Create(testFilePath); err != nil {
   196  			panic(err)
   197  		}
   198  		defer os.Remove(testFilePath)
   199  
   200  		s := NewFileStorage(testFilePath)
   201  		if err := s.Open(); err != nil {
   202  			panic(err)
   203  		}
   204  		l, err := s.Latest()
   205  		if err != nil {
   206  			t.Fatalf("Latest failed: %v", err)
   207  		}
   208  		if l != nil {
   209  			t.Fatalf("latest expected to be nil, got \"%s\"", *l)
   210  		}
   211  	})
   212  
   213  	t.Run("single record", func(t *testing.T) {
   214  		f, err := os.Create(testFilePath)
   215  		if err != nil {
   216  			panic(err)
   217  		}
   218  		defer os.Remove(testFilePath)
   219  		if _, err := f.WriteString("dummy\n"); err != nil {
   220  			panic(err)
   221  		}
   222  
   223  		s := NewFileStorage(testFilePath)
   224  		if err := s.Open(); err != nil {
   225  			panic(err)
   226  		}
   227  		l, err := s.Latest()
   228  		if err != nil {
   229  			t.Fatalf("Latest failed: %v", err)
   230  		}
   231  		if *l != "dummy" {
   232  			t.Fatalf("latest expected to be \"dummy\", got \"%s\"", *l)
   233  		}
   234  	})
   235  
   236  	t.Run("many records", func(t *testing.T) {
   237  		f, err := os.Create(testFilePath)
   238  		if err != nil {
   239  			panic(err)
   240  		}
   241  		defer os.Remove(testFilePath)
   242  		if _, err := f.WriteString("dummy\ntammy\nsammy\n"); err != nil {
   243  			panic(err)
   244  		}
   245  
   246  		s := NewFileStorage(testFilePath)
   247  		if err := s.Open(); err != nil {
   248  			panic(err)
   249  		}
   250  		l, err := s.Latest()
   251  		if err != nil {
   252  			t.Fatalf("Latest failed: %v", err)
   253  		}
   254  		if *l != "sammy" {
   255  			t.Fatalf("latest expected to be \"sammy\", got \"%s\"", *l)
   256  		}
   257  	})
   258  }