@@ -6,8 +6,10 @@ import org.prebid.server.functional.model.request.auction.BidRequest
66import org.prebid.server.functional.model.request.auction.Content
77import org.prebid.server.functional.model.request.auction.DebugCondition
88import org.prebid.server.functional.model.request.auction.Device
9+ import org.prebid.server.functional.model.request.auction.DeviceExt
910import org.prebid.server.functional.model.request.auction.DeviceType
1011import org.prebid.server.functional.model.request.auction.PublicCountryIp
12+ import org.prebid.server.functional.model.request.auction.StoredAuctionResponse
1113import org.prebid.server.functional.model.request.get.GeneralGetRequest
1214import org.prebid.server.functional.service.PrebidServerException
1315import org.prebid.server.functional.util.PBSUtils
@@ -45,7 +47,7 @@ class GeneralGetInterfaceRequestSpec extends BaseSpec {
4547 ]
4648 }
4749
48- def " PBS should process bid request from default general get request " () {
50+ def " PBS should response with error when process bid request is not specified in general get request" () {
4951 given : " General get request without stored request param"
5052 def generalGetRequest = new GeneralGetRequest ()
5153
@@ -736,6 +738,99 @@ class GeneralGetInterfaceRequestSpec extends BaseSpec {
736738 " True-Client-IP" | PBSUtils . getRandomEnum(PublicCountryIp ). v6
737739 }
738740
741+
742+ def " PBS should use original values from stored request when it's not specified in get request" () {
743+ given : " Default General get request"
744+ def storedRequestId = PBSUtils . randomString
745+ def generalGetRequest = new GeneralGetRequest (storedRequestId : storedRequestId)
746+
747+ and : " Default stored request"
748+ def bidRequestDevice = new Device (). tap {
749+ it. dnt = PBSUtils . randomNumber
750+ it. lmt = PBSUtils . randomNumber
751+ it. ip = PBSUtils . getRandomEnum(PublicCountryIp ). v4
752+ it. ipv6 = PBSUtils . getRandomEnum(PublicCountryIp ). maskedIPv6
753+ it. ua = PBSUtils . randomString
754+ it. devicetype = PBSUtils . getRandomEnum(DeviceType )
755+ it. ifa = PBSUtils . randomString
756+ it. ext = new DeviceExt (ifaType : PBSUtils . randomString)
757+ }
758+
759+ def request = BidRequest . getDefaultBidRequest(). tap {
760+ it. tmax = PBSUtils . getRandomNumber(1000 , 5000 )
761+ it. bcat = [PBSUtils . randomString]
762+ it. badv = [PBSUtils . randomString]
763+ it. device = bidRequestDevice
764+
765+ it. ext. prebid. debug = PBSUtils . getRandomEnum(DebugCondition )
766+ it. ext. prebid. outputFormat = PBSUtils . randomString
767+ it. ext. prebid. outputModule = PBSUtils . randomString
768+ it. ext. prebid. storedAuctionResponse = new StoredAuctionResponse (id : PBSUtils . randomNumber)
769+ }
770+
771+ and : " Save storedRequest into DB"
772+ def storedRequest = StoredRequest . getStoredRequest(generalGetRequest. storedAuctionResponseId, request)
773+ storedRequestDao. save(storedRequest)
774+
775+ when : " PBS processes general get request"
776+ def response = defaultPbsService. sendGeneralGetRequest(generalGetRequest)
777+
778+ then : " Response should not contain errors and warnings"
779+ assert ! response. ext?. errors
780+ assert ! response. ext?. warnings
781+
782+ and : " Bidder request should contain device ip from headers"
783+ verifyAll(bidder. getBidderRequest(request. id)) {
784+ it. bcat == request. bcat
785+ it. badv == request. badv
786+ it. device == bidRequestDevice
787+
788+ it. ext. prebid. debug == request. ext. prebid. debug
789+ it. ext. prebid. outputFormat == request. ext. prebid. outputFormat
790+ it. ext. prebid. outputModule == request. ext. prebid. outputModule
791+ it. ext. prebid. storedAuctionResponse == request. ext. prebid. storedAuctionResponse
792+ }
793+ }
794+
795+ def " PBS should use original content values from stored #channel request when it's not specified in get request" () {
796+ given : " Default General get request"
797+ def storedRequestId = PBSUtils . randomString
798+ def generalGetRequest = new GeneralGetRequest (storedRequestId : storedRequestId)
799+
800+ and : " Default stored request"
801+ def content = Content . getDefaultContent(). tap {
802+ it. genre = PBSUtils . randomString
803+ it. language = PBSUtils . randomString
804+ it. contentrating = PBSUtils . randomString
805+ it. cat = [PBSUtils . randomString]
806+ it. cattax = PBSUtils . randomNumber
807+ it. series = PBSUtils . randomString
808+ it. title = PBSUtils . randomString
809+ it. url = PBSUtils . randomString
810+ it. livestream = PBSUtils . randomNumber
811+ }
812+ def request = BidRequest . getDefaultBidRequest(channel). tap {
813+ it. getProperty(channel. value). content = content
814+ }
815+
816+ and : " Save storedRequest into DB"
817+ def storedRequest = StoredRequest . getStoredRequest(generalGetRequest. storedAuctionResponseId, request)
818+ storedRequestDao. save(storedRequest)
819+
820+ when : " PBS processes general get request"
821+ def response = defaultPbsService. sendGeneralGetRequest(generalGetRequest)
822+
823+ then : " Response should not contain errors and warnings"
824+ assert ! response. ext?. errors
825+ assert ! response. ext?. warnings
826+
827+ and : " Bidder request should contain device ip from headers"
828+ assert getRequestContent(bidder. getBidderRequest(request. id)) == content
829+
830+ where :
831+ channel << [SITE , APP , DOOH ]
832+ }
833+
739834 static String getDeviceIp (Device device ) {
740835 device. ip ?: device. ipv6
741836 }
@@ -746,11 +841,9 @@ class GeneralGetInterfaceRequestSpec extends BaseSpec {
746841 if (distributionChannels. contains(SITE )) {
747842 return bidderRequest. site. content
748843 }
749-
750844 if (distributionChannels. contains(APP )) {
751845 return bidderRequest. app. content
752846 }
753-
754847 return bidderRequest. dooh. content
755848 }
756849}
0 commit comments