github.com/prebid/prebid-server@v0.275.0/openrtb_ext/deal_tier_test.go (about)

     1  package openrtb_ext
     2  
     3  import (
     4  	"encoding/json"
     5  	"testing"
     6  
     7  	"github.com/prebid/openrtb/v19/openrtb2"
     8  	"github.com/stretchr/testify/assert"
     9  )
    10  
    11  func TestReadDealTiersFromImp(t *testing.T) {
    12  	testCases := []struct {
    13  		description    string
    14  		impExt         json.RawMessage
    15  		expectedResult DealTierBidderMap
    16  		expectedError  string
    17  	}{
    18  		{
    19  			description:    "Nil",
    20  			impExt:         nil,
    21  			expectedResult: DealTierBidderMap{},
    22  		},
    23  		{
    24  			description:    "None",
    25  			impExt:         json.RawMessage(``),
    26  			expectedResult: DealTierBidderMap{},
    27  		},
    28  		{
    29  			description:    "Empty Object",
    30  			impExt:         json.RawMessage(`{}`),
    31  			expectedResult: DealTierBidderMap{},
    32  		},
    33  		{
    34  			description:    "imp.ext - no prebid but with other params",
    35  			impExt:         json.RawMessage(`{"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "anyPrefix"}, "placementId": 12345}, "tid": "1234"}`),
    36  			expectedResult: DealTierBidderMap{},
    37  		},
    38  		{
    39  			description:    "imp.ext.prebid - nil",
    40  			impExt:         json.RawMessage(`{"prebid": null}`),
    41  			expectedResult: DealTierBidderMap{},
    42  		},
    43  		{
    44  			description:    "imp.ext.prebid - empty",
    45  			impExt:         json.RawMessage(`{"prebid": {}}`),
    46  			expectedResult: DealTierBidderMap{},
    47  		},
    48  		{
    49  			description:    "imp.ext.prebid - no bidder but with other params",
    50  			impExt:         json.RawMessage(`{"prebid": {"supportdeals": true}}`),
    51  			expectedResult: DealTierBidderMap{},
    52  		},
    53  		{
    54  			description:    "imp.ext.prebid.bidder - one",
    55  			impExt:         json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "anyPrefix"}, "placementId": 12345}}}}`),
    56  			expectedResult: DealTierBidderMap{BidderAppnexus: {Prefix: "anyPrefix", MinDealTier: 5}},
    57  		},
    58  		{
    59  			description:    "imp.ext.prebid.bidder - one with other params",
    60  			impExt:         json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "anyPrefix"}, "placementId": 12345}}, "supportdeals": true}, "tid": "1234"}`),
    61  			expectedResult: DealTierBidderMap{BidderAppnexus: {Prefix: "anyPrefix", MinDealTier: 5}},
    62  		},
    63  		{
    64  			description:    "imp.ext.prebid.bidder - multiple",
    65  			impExt:         json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": {"minDealTier": 5, "prefix": "appnexusPrefix"}, "placementId": 12345}, "rubicon": {"dealTier": {"minDealTier": 8, "prefix": "rubiconPrefix"}, "placementId": 12345}}}}`),
    66  			expectedResult: DealTierBidderMap{BidderAppnexus: {Prefix: "appnexusPrefix", MinDealTier: 5}, BidderRubicon: {Prefix: "rubiconPrefix", MinDealTier: 8}},
    67  		},
    68  		{
    69  			description:    "imp.ext.prebid.bidder - one without deal tier",
    70  			impExt:         json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"placementId": 12345}}}}`),
    71  			expectedResult: DealTierBidderMap{},
    72  		},
    73  		{
    74  			description:   "imp.ext.prebid.bidder - error",
    75  			impExt:        json.RawMessage(`{"prebid": {"bidder": {"appnexus": {"dealTier": "wrong type", "placementId": 12345}}}}`),
    76  			expectedError: "json: cannot unmarshal string into Go struct field .prebid.bidder.dealTier of type openrtb_ext.DealTier",
    77  		},
    78  	}
    79  
    80  	for _, test := range testCases {
    81  		imp := openrtb2.Imp{Ext: test.impExt}
    82  
    83  		result, err := ReadDealTiersFromImp(imp)
    84  
    85  		assert.Equal(t, test.expectedResult, result, test.description+":result")
    86  
    87  		if len(test.expectedError) == 0 {
    88  			assert.NoError(t, err, test.description+":error")
    89  		} else {
    90  			assert.EqualError(t, err, test.expectedError, test.description+":error")
    91  		}
    92  	}
    93  }