github.com/web-platform-tests/wpt.fyi@v0.0.0-20240530210107-70cf978996f1/api/query/cache/poll/poll_test.go (about)

     1  //go:build small
     2  // +build small
     3  
     4  // Copyright 2024 The WPT Dashboard Project. All rights reserved.
     5  // Use of this source code is governed by a BSD-style license that can be
     6  // found in the LICENSE file.
     7  
     8  package poll
     9  
    10  import (
    11  	"context"
    12  	"errors"
    13  	"testing"
    14  
    15  	"github.com/stretchr/testify/assert"
    16  	"github.com/stretchr/testify/require"
    17  	"github.com/web-platform-tests/wpt.fyi/api/query"
    18  	"github.com/web-platform-tests/wpt.fyi/shared"
    19  )
    20  
    21  type testWebFeaturesGetter struct {
    22  	data shared.WebFeaturesData
    23  	err  error
    24  }
    25  
    26  func (g testWebFeaturesGetter) Get(_ context.Context) (shared.WebFeaturesData, error) {
    27  	return g.data, g.err
    28  }
    29  
    30  func TestKeepWebFeaturesManifestUpdated(t *testing.T) {
    31  	testCases := []struct {
    32  		name         string
    33  		initialCache shared.WebFeaturesData
    34  		dataToReturn shared.WebFeaturesData
    35  		errToReturn  error
    36  		expectedData shared.WebFeaturesData
    37  	}{
    38  		{
    39  			name:         "initial successful update",
    40  			initialCache: nil,
    41  			dataToReturn: shared.WebFeaturesData{
    42  				"foo": {"/foo.js": nil},
    43  			},
    44  			errToReturn: nil,
    45  			expectedData: shared.WebFeaturesData{
    46  				"foo": {"/foo.js": nil},
    47  			},
    48  		},
    49  		{
    50  			name:         "initial failed update",
    51  			initialCache: nil,
    52  			dataToReturn: nil,
    53  			errToReturn:  errors.New("whoops"),
    54  			expectedData: nil,
    55  		},
    56  		{
    57  			name: "successful update to existing cache",
    58  			initialCache: shared.WebFeaturesData{
    59  				"foo": {"/foo.js": nil},
    60  			},
    61  			dataToReturn: shared.WebFeaturesData{
    62  				"bar": {"/bar.js": nil},
    63  			},
    64  			errToReturn: nil,
    65  			expectedData: shared.WebFeaturesData{
    66  				"bar": {"/bar.js": nil},
    67  			},
    68  		},
    69  		{
    70  			name: "unsuccessful update to existing cache. return existing",
    71  			initialCache: shared.WebFeaturesData{
    72  				"foo": {"/foo.js": nil},
    73  			},
    74  			dataToReturn: nil,
    75  			errToReturn:  errors.New("whoops"),
    76  			expectedData: shared.WebFeaturesData{
    77  				"foo": {"/foo.js": nil},
    78  			},
    79  		},
    80  	}
    81  	for _, tc := range testCases {
    82  		t.Run(tc.name, func(t *testing.T) {
    83  			// Reset the cache.
    84  			query.SetWebFeaturesDataCache(tc.initialCache)
    85  			require.Equal(t, tc.initialCache, query.GetWebFeaturesDataCache())
    86  
    87  			getter := testWebFeaturesGetter{tc.dataToReturn, tc.errToReturn}
    88  			ctx := context.Background()
    89  			logger := shared.GetLogger(ctx)
    90  			keepWebFeaturesManifestUpdated(ctx, logger, getter)
    91  
    92  			assert.Equal(t, tc.expectedData, query.GetWebFeaturesDataCache())
    93  		})
    94  	}
    95  }