github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/store/storetest/product_notices_store.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package storetest 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 11 "github.com/mattermost/mattermost-server/v5/model" 12 "github.com/mattermost/mattermost-server/v5/store" 13 ) 14 15 func TestProductNoticesStore(t *testing.T, ss store.Store) { 16 t.Run("TestAddViewed", func(t *testing.T) { testAddViewed(t, ss) }) 17 t.Run("TestUpdateViewed", func(t *testing.T) { testUpdateViewed(t, ss) }) 18 t.Run("TestClearOld", func(t *testing.T) { testClearOld(t, ss) }) 19 } 20 21 func testAddViewed(t *testing.T, ss store.Store) { 22 notices := []string{"noticeA", "noticeB"} 23 defer ss.ProductNotices().Clear(notices) 24 25 err := ss.ProductNotices().View("testuser", notices) 26 require.NoError(t, err) 27 err = ss.ProductNotices().View("testuser2", notices) 28 require.NoError(t, err) 29 30 res, err := ss.ProductNotices().GetViews("testuser") 31 require.NoError(t, err) 32 require.Len(t, res, 2) 33 } 34 35 func testUpdateViewed(t *testing.T, ss store.Store) { 36 noticesA := []string{"noticeA", "noticeB"} 37 noticesB := []string{"noticeB", "noticeC"} 38 defer ss.ProductNotices().Clear(noticesA) 39 defer ss.ProductNotices().Clear(noticesB) 40 // mark two notices 41 err := ss.ProductNotices().View("testuser", noticesA) 42 require.NoError(t, err) 43 // mark one old and one new 44 err = ss.ProductNotices().View("testuser", noticesB) 45 require.NoError(t, err) 46 47 res, err := ss.ProductNotices().GetViews("testuser") 48 require.NoError(t, err) 49 require.Len(t, res, 3) 50 51 // make sure that one B has two views 52 require.Equal(t, res[0].Viewed, int32(1)) 53 require.Equal(t, res[1].Viewed, int32(2)) 54 require.Equal(t, res[2].Viewed, int32(1)) 55 56 // make sure that B's timestamp was updated 57 require.GreaterOrEqual(t, res[1].Timestamp, res[0].Timestamp) 58 } 59 60 func testClearOld(t *testing.T, ss store.Store) { 61 noticesA := []string{"noticeA", "noticeB"} 62 defer ss.ProductNotices().Clear(noticesA) 63 // mark two notices 64 err := ss.ProductNotices().View("testuser", noticesA) 65 require.NoError(t, err) 66 67 err = ss.ProductNotices().ClearOldNotices(&model.ProductNotices{ 68 { 69 ID: "noticeA", 70 }, 71 { 72 ID: "noticeC", 73 }, 74 }) 75 require.NoError(t, err) 76 res, err := ss.ProductNotices().GetViews("testuser") 77 require.NoError(t, err) 78 require.Len(t, res, 1) 79 80 }