github.com/artpar/rclone@v1.67.3/backend/googlephotos/albums_test.go (about)

     1  package googlephotos
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/artpar/rclone/backend/googlephotos/api"
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func TestNewAlbums(t *testing.T) {
    11  	albums := newAlbums()
    12  	assert.NotNil(t, albums.dupes)
    13  	assert.NotNil(t, albums.byID)
    14  	assert.NotNil(t, albums.byTitle)
    15  	assert.NotNil(t, albums.path)
    16  }
    17  
    18  func TestAlbumsAdd(t *testing.T) {
    19  	albums := newAlbums()
    20  
    21  	assert.Equal(t, map[string][]*api.Album{}, albums.dupes)
    22  	assert.Equal(t, map[string]*api.Album{}, albums.byID)
    23  	assert.Equal(t, map[string]*api.Album{}, albums.byTitle)
    24  	assert.Equal(t, map[string][]string{}, albums.path)
    25  
    26  	a1 := &api.Album{
    27  		Title: "one",
    28  		ID:    "1",
    29  	}
    30  	albums.add(a1)
    31  
    32  	assert.Equal(t, map[string][]*api.Album{
    33  		"one": {a1},
    34  	}, albums.dupes)
    35  	assert.Equal(t, map[string]*api.Album{
    36  		"1": a1,
    37  	}, albums.byID)
    38  	assert.Equal(t, map[string]*api.Album{
    39  		"one": a1,
    40  	}, albums.byTitle)
    41  	assert.Equal(t, map[string][]string{
    42  		"": {"one"},
    43  	}, albums.path)
    44  
    45  	a2 := &api.Album{
    46  		Title: "two",
    47  		ID:    "2",
    48  	}
    49  	albums.add(a2)
    50  
    51  	assert.Equal(t, map[string][]*api.Album{
    52  		"one": {a1},
    53  		"two": {a2},
    54  	}, albums.dupes)
    55  	assert.Equal(t, map[string]*api.Album{
    56  		"1": a1,
    57  		"2": a2,
    58  	}, albums.byID)
    59  	assert.Equal(t, map[string]*api.Album{
    60  		"one": a1,
    61  		"two": a2,
    62  	}, albums.byTitle)
    63  	assert.Equal(t, map[string][]string{
    64  		"": {"one", "two"},
    65  	}, albums.path)
    66  
    67  	// Add a duplicate
    68  	a2a := &api.Album{
    69  		Title: "two",
    70  		ID:    "2a",
    71  	}
    72  	albums.add(a2a)
    73  
    74  	assert.Equal(t, map[string][]*api.Album{
    75  		"one": {a1},
    76  		"two": {a2, a2a},
    77  	}, albums.dupes)
    78  	assert.Equal(t, map[string]*api.Album{
    79  		"1":  a1,
    80  		"2":  a2,
    81  		"2a": a2a,
    82  	}, albums.byID)
    83  	assert.Equal(t, map[string]*api.Album{
    84  		"one":      a1,
    85  		"two {2}":  a2,
    86  		"two {2a}": a2a,
    87  	}, albums.byTitle)
    88  	assert.Equal(t, map[string][]string{
    89  		"": {"one", "two {2}", "two {2a}"},
    90  	}, albums.path)
    91  
    92  	// Add a sub directory
    93  	a1sub := &api.Album{
    94  		Title: "one/sub",
    95  		ID:    "1sub",
    96  	}
    97  	albums.add(a1sub)
    98  
    99  	assert.Equal(t, map[string][]*api.Album{
   100  		"one":     {a1},
   101  		"two":     {a2, a2a},
   102  		"one/sub": {a1sub},
   103  	}, albums.dupes)
   104  	assert.Equal(t, map[string]*api.Album{
   105  		"1":    a1,
   106  		"2":    a2,
   107  		"2a":   a2a,
   108  		"1sub": a1sub,
   109  	}, albums.byID)
   110  	assert.Equal(t, map[string]*api.Album{
   111  		"one":      a1,
   112  		"one/sub":  a1sub,
   113  		"two {2}":  a2,
   114  		"two {2a}": a2a,
   115  	}, albums.byTitle)
   116  	assert.Equal(t, map[string][]string{
   117  		"":    {"one", "two {2}", "two {2a}"},
   118  		"one": {"sub"},
   119  	}, albums.path)
   120  
   121  	// Add a weird path
   122  	a0 := &api.Album{
   123  		Title: "/../././..////.",
   124  		ID:    "0",
   125  	}
   126  	albums.add(a0)
   127  
   128  	assert.Equal(t, map[string][]*api.Album{
   129  		"{0}":     {a0},
   130  		"one":     {a1},
   131  		"two":     {a2, a2a},
   132  		"one/sub": {a1sub},
   133  	}, albums.dupes)
   134  	assert.Equal(t, map[string]*api.Album{
   135  		"0":    a0,
   136  		"1":    a1,
   137  		"2":    a2,
   138  		"2a":   a2a,
   139  		"1sub": a1sub,
   140  	}, albums.byID)
   141  	assert.Equal(t, map[string]*api.Album{
   142  		"{0}":      a0,
   143  		"one":      a1,
   144  		"one/sub":  a1sub,
   145  		"two {2}":  a2,
   146  		"two {2a}": a2a,
   147  	}, albums.byTitle)
   148  	assert.Equal(t, map[string][]string{
   149  		"":    {"one", "two {2}", "two {2a}", "{0}"},
   150  		"one": {"sub"},
   151  	}, albums.path)
   152  }
   153  
   154  func TestAlbumsDel(t *testing.T) {
   155  	albums := newAlbums()
   156  
   157  	a1 := &api.Album{
   158  		Title: "one",
   159  		ID:    "1",
   160  	}
   161  	albums.add(a1)
   162  
   163  	a2 := &api.Album{
   164  		Title: "two",
   165  		ID:    "2",
   166  	}
   167  	albums.add(a2)
   168  
   169  	// Add a duplicate
   170  	a2a := &api.Album{
   171  		Title: "two",
   172  		ID:    "2a",
   173  	}
   174  	albums.add(a2a)
   175  
   176  	// Add a sub directory
   177  	a1sub := &api.Album{
   178  		Title: "one/sub",
   179  		ID:    "1sub",
   180  	}
   181  	albums.add(a1sub)
   182  
   183  	assert.Equal(t, map[string][]*api.Album{
   184  		"one":     {a1},
   185  		"two":     {a2, a2a},
   186  		"one/sub": {a1sub},
   187  	}, albums.dupes)
   188  	assert.Equal(t, map[string]*api.Album{
   189  		"1":    a1,
   190  		"2":    a2,
   191  		"2a":   a2a,
   192  		"1sub": a1sub,
   193  	}, albums.byID)
   194  	assert.Equal(t, map[string]*api.Album{
   195  		"one":      a1,
   196  		"one/sub":  a1sub,
   197  		"two {2}":  a2,
   198  		"two {2a}": a2a,
   199  	}, albums.byTitle)
   200  	assert.Equal(t, map[string][]string{
   201  		"":    {"one", "two {2}", "two {2a}"},
   202  		"one": {"sub"},
   203  	}, albums.path)
   204  
   205  	albums.del(a1)
   206  
   207  	assert.Equal(t, map[string][]*api.Album{
   208  		"one":     {a1},
   209  		"two":     {a2, a2a},
   210  		"one/sub": {a1sub},
   211  	}, albums.dupes)
   212  	assert.Equal(t, map[string]*api.Album{
   213  		"2":    a2,
   214  		"2a":   a2a,
   215  		"1sub": a1sub,
   216  	}, albums.byID)
   217  	assert.Equal(t, map[string]*api.Album{
   218  		"one/sub":  a1sub,
   219  		"two {2}":  a2,
   220  		"two {2a}": a2a,
   221  	}, albums.byTitle)
   222  	assert.Equal(t, map[string][]string{
   223  		"":    {"one", "two {2}", "two {2a}"},
   224  		"one": {"sub"},
   225  	}, albums.path)
   226  
   227  	albums.del(a2)
   228  
   229  	assert.Equal(t, map[string][]*api.Album{
   230  		"one":     {a1},
   231  		"two":     {a2, a2a},
   232  		"one/sub": {a1sub},
   233  	}, albums.dupes)
   234  	assert.Equal(t, map[string]*api.Album{
   235  		"2a":   a2a,
   236  		"1sub": a1sub,
   237  	}, albums.byID)
   238  	assert.Equal(t, map[string]*api.Album{
   239  		"one/sub":  a1sub,
   240  		"two {2a}": a2a,
   241  	}, albums.byTitle)
   242  	assert.Equal(t, map[string][]string{
   243  		"":    {"one", "two {2a}"},
   244  		"one": {"sub"},
   245  	}, albums.path)
   246  
   247  	albums.del(a2a)
   248  
   249  	assert.Equal(t, map[string][]*api.Album{
   250  		"one":     {a1},
   251  		"two":     {a2, a2a},
   252  		"one/sub": {a1sub},
   253  	}, albums.dupes)
   254  	assert.Equal(t, map[string]*api.Album{
   255  		"1sub": a1sub,
   256  	}, albums.byID)
   257  	assert.Equal(t, map[string]*api.Album{
   258  		"one/sub": a1sub,
   259  	}, albums.byTitle)
   260  	assert.Equal(t, map[string][]string{
   261  		"":    {"one"},
   262  		"one": {"sub"},
   263  	}, albums.path)
   264  
   265  	albums.del(a1sub)
   266  
   267  	assert.Equal(t, map[string][]*api.Album{
   268  		"one":     {a1},
   269  		"two":     {a2, a2a},
   270  		"one/sub": {a1sub},
   271  	}, albums.dupes)
   272  	assert.Equal(t, map[string]*api.Album{}, albums.byID)
   273  	assert.Equal(t, map[string]*api.Album{}, albums.byTitle)
   274  	assert.Equal(t, map[string][]string{}, albums.path)
   275  }
   276  
   277  func TestAlbumsGet(t *testing.T) {
   278  	albums := newAlbums()
   279  
   280  	a1 := &api.Album{
   281  		Title: "one",
   282  		ID:    "1",
   283  	}
   284  	albums.add(a1)
   285  
   286  	album, ok := albums.get("one")
   287  	assert.Equal(t, true, ok)
   288  	assert.Equal(t, a1, album)
   289  
   290  	album, ok = albums.get("notfound")
   291  	assert.Equal(t, false, ok)
   292  	assert.Nil(t, album)
   293  }
   294  
   295  func TestAlbumsGetDirs(t *testing.T) {
   296  	albums := newAlbums()
   297  
   298  	a1 := &api.Album{
   299  		Title: "one",
   300  		ID:    "1",
   301  	}
   302  	albums.add(a1)
   303  
   304  	dirs, ok := albums.getDirs("")
   305  	assert.Equal(t, true, ok)
   306  	assert.Equal(t, []string{"one"}, dirs)
   307  
   308  	dirs, ok = albums.getDirs("notfound")
   309  	assert.Equal(t, false, ok)
   310  	assert.Nil(t, dirs)
   311  }