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  }