github.com/prebid/prebid-server@v0.275.0/firstpartydata/extmerger_test.go (about) 1 package firstpartydata 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/prebid/prebid-server/util/sliceutil" 8 "github.com/stretchr/testify/assert" 9 ) 10 11 func TestExtMerger(t *testing.T) { 12 t.Run("nil", func(t *testing.T) { 13 merger := extMerger{ext: nil, snapshot: json.RawMessage(`{"a":1}`)} 14 assert.NoError(t, merger.Merge()) 15 assert.Nil(t, merger.ext) 16 }) 17 18 testCases := []struct { 19 name string 20 givenOriginal json.RawMessage 21 givenFPD json.RawMessage 22 expectedExt json.RawMessage 23 expectedErr string 24 }{ 25 { 26 name: "both-populated", 27 givenOriginal: json.RawMessage(`{"a":1,"b":2}`), 28 givenFPD: json.RawMessage(`{"b":200,"c":3}`), 29 expectedExt: json.RawMessage(`{"a":1,"b":200,"c":3}`), 30 }, 31 { 32 name: "both-nil", 33 givenFPD: nil, 34 givenOriginal: nil, 35 expectedExt: nil, 36 }, 37 { 38 name: "both-empty", 39 givenOriginal: json.RawMessage(`{}`), 40 givenFPD: json.RawMessage(`{}`), 41 expectedExt: json.RawMessage(`{}`), 42 }, 43 { 44 name: "ext-nil", 45 givenOriginal: json.RawMessage(`{"b":2}`), 46 givenFPD: nil, 47 expectedExt: json.RawMessage(`{"b":2}`), 48 }, 49 { 50 name: "ext-empty", 51 givenOriginal: json.RawMessage(`{"b":2}`), 52 givenFPD: json.RawMessage(`{}`), 53 expectedExt: json.RawMessage(`{"b":2}`), 54 }, 55 { 56 name: "ext-malformed", 57 givenOriginal: json.RawMessage(`{"b":2}`), 58 givenFPD: json.RawMessage(`malformed`), 59 expectedErr: "invalid first party data ext", 60 }, 61 { 62 name: "snapshot-nil", 63 givenOriginal: nil, 64 givenFPD: json.RawMessage(`{"a":1}`), 65 expectedExt: json.RawMessage(`{"a":1}`), 66 }, 67 { 68 name: "snapshot-empty", 69 givenOriginal: json.RawMessage(`{}`), 70 givenFPD: json.RawMessage(`{"a":1}`), 71 expectedExt: json.RawMessage(`{"a":1}`), 72 }, 73 { 74 name: "snapshot-malformed", 75 givenOriginal: json.RawMessage(`malformed`), 76 givenFPD: json.RawMessage(`{"a":1}`), 77 expectedErr: "invalid request ext", 78 }, 79 } 80 81 for _, test := range testCases { 82 t.Run(test.name, func(t *testing.T) { 83 // Initialize A Ext Raw Message For Testing 84 simulatedExt := json.RawMessage(sliceutil.Clone(test.givenOriginal)) 85 86 // Begin Tracking 87 var merger extMerger 88 merger.Track(&simulatedExt) 89 90 // Unmarshal 91 simulatedExt.UnmarshalJSON(test.givenFPD) 92 93 // Merge 94 actualErr := merger.Merge() 95 96 if test.expectedErr == "" { 97 assert.NoError(t, actualErr, "error") 98 99 if test.expectedExt == nil { 100 assert.Nil(t, simulatedExt, "json") 101 } else { 102 assert.JSONEq(t, string(test.expectedExt), string(simulatedExt), "json") 103 } 104 } else { 105 assert.EqualError(t, actualErr, test.expectedErr, "error") 106 } 107 }) 108 } 109 }