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 }