mk9-prebid
Version:
Header Bidding Management Library
213 lines (204 loc) • 7.67 kB
JavaScript
import { expect } from 'chai'
import { spec } from 'modules/astraoneBidAdapter.js'
function getSlotConfigs(mediaTypes, params) {
return {
params: params,
sizes: [],
bidId: '2df8c0733f284e',
bidder: 'astraone',
mediaTypes: mediaTypes,
transactionId: '31a58515-3634-4e90-9c96-f86196db1459'
}
}
describe('AstraOne Adapter', function() {
describe('isBidRequestValid method', function() {
const PLACE_ID = '5f477bf94d506ebe2c4240f3';
const IMAGE_URL = 'https://creative.astraone.io/files/default_image-1-600x400.jpg';
describe('returns true', function() {
describe('when banner slot config has all mandatory params', () => {
describe('and placement has the correct value', function() {
const createBannerSlotConfig = placement => {
return getSlotConfigs(
{ banner: {} },
{
placeId: PLACE_ID,
imageUrl: IMAGE_URL,
placement
}
)
}
const placements = ['inImage'];
placements.forEach(placement => {
it('should be ' + placement, function() {
const isBidRequestValid = spec.isBidRequestValid(
createBannerSlotConfig(placement)
)
expect(isBidRequestValid).to.equal(true)
})
})
})
})
})
describe('returns false', function() {
describe('when params are not correct', function() {
function createSlotconfig(params) {
return getSlotConfigs({ banner: {} }, params)
}
it('does not have the placeId.', function() {
const isBidRequestValid = spec.isBidRequestValid(
createSlotconfig({
imageUrl: IMAGE_URL,
placement: 'inImage'
})
)
expect(isBidRequestValid).to.equal(false)
})
it('does not have the imageUrl.', function() {
const isBidRequestValid = spec.isBidRequestValid(
createSlotconfig({
placeId: PLACE_ID,
placement: 'inImage'
})
)
expect(isBidRequestValid).to.equal(false)
})
it('does not have the placement.', function() {
const isBidRequestValid = spec.isBidRequestValid(
createSlotconfig({
placeId: PLACE_ID,
imageUrl: IMAGE_URL,
})
)
expect(isBidRequestValid).to.equal(false)
})
it('does not have a the correct placement.', function() {
const isBidRequestValid = spec.isBidRequestValid(
createSlotconfig({
placeId: PLACE_ID,
imageUrl: IMAGE_URL,
placement: 'something'
})
)
expect(isBidRequestValid).to.equal(false)
})
})
})
})
describe('buildRequests method', function() {
const bidderRequest = {
refererInfo: { referer: 'referer' }
}
const mandatoryParams = {
placeId: '5af45ad34d506ee7acad0c26',
imageUrl: 'https://creative.astraone.io/files/default_image-1-600x400.jpg',
placement: 'inImage'
}
const validBidRequests = [
getSlotConfigs({ banner: {} }, mandatoryParams)
]
it('Url params should be correct ', function() {
const request = spec.buildRequests(validBidRequests, bidderRequest)
expect(request.method).to.equal('POST')
expect(request.url).to.equal('https://ssp.astraone.io/auction/prebid')
})
it('Common data request should be correct', function() {
const request = spec.buildRequests(validBidRequests, bidderRequest)
const data = JSON.parse(request.data)
expect(Array.isArray(data.bidRequests)).to.equal(true)
data.bidRequests.forEach(bid => {
expect(bid.placeId).to.equal('5af45ad34d506ee7acad0c26')
expect(typeof bid.imageUrl).to.equal('string')
})
})
describe('GDPR params', function() {
describe('when there are not consent management platform', function() {
it('cmp should be false', function() {
const request = spec.buildRequests(validBidRequests, bidderRequest)
const data = JSON.parse(request.data)
expect(data.cmp).to.equal(false)
})
})
describe('when there are consent management platform', function() {
it('cmps should be true and ga should not sended, when gdprApplies is undefined', function() {
bidderRequest['gdprConsent'] = {
gdprApplies: undefined,
consentString: 'consentString'
}
const request = spec.buildRequests(validBidRequests, bidderRequest)
const data = JSON.parse(request.data)
expect(data.cmp).to.equal(true)
expect(Object.keys(data).indexOf('data')).to.equal(-1)
expect(data.cs).to.equal('consentString')
})
it('cmps should be true and all gdpr parameters should be sended, when there are gdprApplies', function() {
bidderRequest['gdprConsent'] = {
gdprApplies: true,
consentString: 'consentString'
}
const request = spec.buildRequests(validBidRequests, bidderRequest)
const data = JSON.parse(request.data)
expect(data.cmp).to.equal(true)
expect(data.ga).to.equal(true)
expect(data.cs).to.equal('consentString')
})
})
})
describe('BidRequests params', function() {
const request = spec.buildRequests(validBidRequests, bidderRequest)
const data = JSON.parse(request.data)
const bidRequests = data.bidRequests
it('should request a Banner', function() {
const bannerBid = bidRequests[0]
expect(bannerBid.bidId).to.equal('2df8c0733f284e')
expect(bannerBid.transactionId).to.equal('31a58515-3634-4e90-9c96-f86196db1459')
expect(bannerBid.placeId).to.equal('5af45ad34d506ee7acad0c26')
})
})
})
describe('interpret response method', function() {
it('should return a void array, when the server response have not got bids.', function() {
const serverResponse = {
body: []
}
const bids = spec.interpretResponse(serverResponse)
expect(Array.isArray(bids)).to.equal(true)
expect(bids.length).to.equal(0)
})
describe('when the server response return a bid', function() {
describe('the bid is a banner', function() {
it('should return a banner bid', function() {
const serverResponse = {
body: {
bids: [
{
bidId: '2df8c0733f284e',
price: 0.5,
currency: 'USD',
content: {
content: 'html',
actionUrls: {},
seanceId: '123123'
},
width: 100,
height: 100,
ttl: 360
}
]
}
}
const bids = spec.interpretResponse(serverResponse)
expect(bids.length).to.equal(1)
expect(bids[0].requestId).to.equal('2df8c0733f284e')
expect(bids[0].creativeId).to.equal('123123')
expect(bids[0].cpm).to.equal(0.5)
expect(bids[0].width).to.equal(100)
expect(bids[0].height).to.equal(100)
expect(bids[0].currency).to.equal('USD')
expect(bids[0].netRevenue).to.equal(true)
expect(typeof bids[0].ad).to.equal('string')
expect(typeof bids[0].content).to.equal('object')
})
})
})
})
})