Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Adapter: ResetDigital #3766

Open
wants to merge 29 commits into
base: master
Choose a base branch
from
Open

Conversation

bruno-siira
Copy link

This PR adds a new adapter for Reset Digital to the Prebid Server (Go version). The adapter enables Prebid Server to communicate with Reset Digital for real-time advertising auctions.

Changes:

Added the Reset Digital adapter in adapters/resetdigital/.
Implemented necessary methods for the adapter.
Added unit tests for the adapter in adapters/resetdigital/resetdigital_test.go.
Updated the documentation to include the configuration for the Reset Digital adapter.
Testing:

Unit tests have been written and verified to ensure the adapter works correctly.
Manual testing has been performed to verify the integration with Reset Digital.

Notes:

This system is based on single bid, so it's based on that premise.

Related Issues:

}

func getBidType(imp openrtb2.Imp) (openrtb_ext.BidType, error) {
if imp.Banner != nil {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider this as a suggestion. The current implementation follows an anti-pattern, assumes that if there is a multi-format request, the media type defaults to openrtb_ext.BidTypeBanner, nil. Prebid server expects the media type to be explicitly set in the adapter response. Therefore, we strongly recommend implementing a pattern where the adapter server sets the MType field in the response to accurately determine the media type for the impression.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implemented as suggested

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implemented as suggested

could you point out or link where MType changes are implemented?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, it was addressed on the point that we support only single format bids, so we could assume the anti pattern. Anyway, it would be more advisable to change to the normal pattern?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Anyway, it would be more advisable to change to the normal pattern?

Prebid team recommends using MType field. But if it's not doable then current change suffices single format bid. @bruno-siira should mention in Bidder docs that adapter expects only single format bids in the incoming request

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When we're talking about the Bidder Docs what is this file exacly @onkarvhanumante

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 3762676

resetdigital

Refer here for heat map coverage report

github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:57:	Builder			0.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:69:	getHeaders		100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:86:	addNonEmptyHeaders	100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:94:	getReferer		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:102:	getCurrency		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:110:	MakeRequests		72.2%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:151:	processDataFromRequest	94.4%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:186:	MakeBids		72.2%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:222:	getBidFromResponse	93.3%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:257:	getBidPrice		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:264:	getBidType		28.6%
total:										(statements)		74.2%

Implementation of suggestions
Copy link

github-actions bot commented Jul 3, 2024

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 989c565

resetdigital

Refer here for heat map coverage report

github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:57:	Builder			0.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:69:	getHeaders		100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:86:	addNonEmptyHeaders	100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:94:	getReferer		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:102:	getCurrency		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:110:	MakeRequests		72.2%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:151:	processDataFromRequest	94.4%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:186:	MakeBids		78.9%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:222:	getBidFromResponse	92.3%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:255:	getBidPrice		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:262:	getBidType		28.6%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:274:	getBidTypes		70.0%
total:										(statements)		74.5%

Copy link
Author

@bruno-siira bruno-siira left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have now a Builder

Copy link
Author

@bruno-siira bruno-siira left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a schema now

Copy link

github-actions bot commented Jul 5, 2024

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 4482bc9

resetdigital

Refer here for heat map coverage report

github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:55:	Builder			0.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:67:	getHeaders		100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:84:	addNonEmptyHeaders	100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:92:	getReferer		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:100:	getCurrency		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:108:	MakeRequests		72.2%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:149:	processDataFromRequest	94.4%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:184:	MakeBids		78.9%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:220:	getBidFromResponse	92.3%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:253:	getBidPrice		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:260:	getBidType		28.6%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:272:	getBidTypes		70.0%
total:										(statements)		74.5%

@onkarvhanumante onkarvhanumante self-assigned this Jul 9, 2024
Comment on lines 93 to 97
if request.Site == nil {
return ""
}

return request.Site.Domain
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code path is not covered. should add json tests to improve coverage

Comment on lines 101 to 103
if len(request.Cur) == 0 {
return "USD"
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code path is not covered. should add json tests to improve coverage

Comment on lines +118 to +119
errors = append(errors, err)
continue
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code path is not covered. should add json tests to improve coverage

Comment on lines +124 to +125
errors = append(errors, err)
continue
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code path is not covered. should add json tests to improve coverage

resetDigitalRequestData.Imps[0].MediaTypes.Banner.Sizes = append(resetDigitalRequestData.Imps[0].MediaTypes.Banner.Sizes, []int64{imp.Banner.Format[0].W, imp.Banner.Format[0].H})
}
if bidType == openrtb_ext.BidTypeVideo {
resetDigitalRequestData.Imps[0].MediaTypes.Video.Sizes = append(resetDigitalRequestData.Imps[0].MediaTypes.Banner.Sizes, []int64{*imp.Video.W, *imp.Video.H})
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code path is not covered. should add json tests to improve coverage

}

func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest *adapters.RequestData, response *adapters.ResponseData) (*adapters.BidderResponse, []error) {
if response.StatusCode == http.StatusNoContent || response.StatusCode == http.StatusBadRequest || response.StatusCode != http.StatusOK {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code path is not covered. should add json tests to improve coverage

bidMap := bidData.(map[string]interface{})
bid := getBidFromResponse(bidMap)
if bid == nil {
continue
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code path is not covered. should add json tests to improve coverage


bidTypes, err := getBidTypes(internalRequest.Imp[0])
if err != nil {
return nil, []error{err}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code path is not covered. should add json tests to improve coverage

}
}

if bid.Price == 0 {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code path is not covered. should add json tests to improve coverage

if value, ok := requestData["cpm"].(float64); ok {
return value
}
return 0.0 // Default value if "cpm" doesn't exist or is not a float64
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code path is not covered. should add json tests to improve coverage

Comment on lines +272 to +281
}
if imp.Video != nil {
bidTypes = append(bidTypes, openrtb_ext.BidTypeVideo)
}
if imp.Audio != nil {
bidTypes = append(bidTypes, openrtb_ext.BidTypeAudio)
}
if len(bidTypes) == 0 {
return nil, fmt.Errorf("failed to find matching imp for bid %s", imp.ID)
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code path is not covered. should add json tests to improve coverage

Comment on lines +259 to +264
return openrtb_ext.BidTypeVideo, nil
} else if imp.Audio != nil {
return openrtb_ext.BidTypeAudio, nil
}

return "", fmt.Errorf("failed to find matching imp for bid %s", imp.ID)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code path is not covered. should add json tests to improve coverage

@onkarvhanumante
Copy link
Contributor

@bruno-siira please add or link bidder docs PR for adapter.

Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 52a6794

resetdigital

Refer here for heat map coverage report

github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:55:	Builder			0.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:67:	getHeaders		100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:84:	addNonEmptyHeaders	100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:92:	getReferer		0.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:100:	getCurrency		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:108:	MakeRequests		64.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:145:	processDataFromRequest	88.2%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:180:	MakeBids		78.9%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:216:	getBidFromResponse	92.3%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:249:	getBidPrice		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:256:	getBidType		28.6%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:268:	getBidTypes		70.0%
total:										(statements)		70.2%

Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, 9626103

resetdigital

Refer here for heat map coverage report

github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:55:	Builder			0.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:67:	getHeaders		100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:84:	addNonEmptyHeaders	100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:92:	getReferer		0.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:100:	getCurrency		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:108:	MakeRequests		64.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:145:	processDataFromRequest	88.2%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:180:	MakeBids		78.9%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:216:	getBidFromResponse	92.3%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:249:	getBidPrice		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:256:	getBidType		28.6%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:268:	getBidTypes		70.0%
total:										(statements)		70.2%

@onkarvhanumante
Copy link
Contributor

onkarvhanumante commented Jul 22, 2024

Copy link
Contributor

@onkarvhanumante onkarvhanumante left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bruno-siira few open comments. PTAL

Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, dea6cf7

resetdigital

Refer here for heat map coverage report

github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:55:	Builder			0.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:67:	getHeaders		100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:84:	addNonEmptyHeaders	100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:92:	getReferer		0.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:100:	getCurrency		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:108:	MakeRequests		64.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:145:	processDataFromRequest	88.2%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:180:	MakeBids		76.2%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:220:	getBidFromResponse	92.3%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:253:	getBidPrice		66.7%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:260:	getBidType		28.6%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:272:	getBidTypes		70.0%
total:										(statements)		69.8%

Comment on lines 181 to 187
if response.StatusCode == http.StatusNoContent || response.StatusCode == http.StatusBadRequest || response.StatusCode != http.StatusOK {
if adapters.IsResponseStatusCodeNoContent(response) {
return nil, nil
}

if err := adapters.CheckResponseStatusCodeForErrors(response); err != nil {
return nil, []error{err}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should add json exemplary tests for above code path

@bsardo bsardo assigned bsardo and unassigned Sonali-More-Xandr Jul 31, 2024
Copy link

Code coverage summary

Note:

  • Prebid team doesn't anticipate tests covering code paths that might result in marshal and unmarshal errors
  • Coverage summary encompasses all commits leading up to the latest one, baa553c

resetdigital

Refer here for heat map coverage report

github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:70:	Builder			80.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:81:	getHeaders		100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:98:	addNonEmptyHeaders	100.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:106:	MakeRequests		62.5%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:143:	processDataFromRequest	73.9%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:193:	MakeBids		75.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:242:	getBidFromResponse	87.5%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:266:	getBidType		28.6%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:278:	getBidTypes		0.0%
github.com/prebid/prebid-server/v2/adapters/resetdigital/resetdigital.go:297:	GetMediaTypeForImp	66.7%
total:										(statements)		65.1%

Comment on lines +16 to +18
// MaximumBids is the maximum number of bids that can be returned by this adapter.
const maxBids = 1

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maxBids is unused. can remove this var

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants