/** * A method to test the compensatedPriorities() method. * * Requirements - NO PAST AD INFO * Test 1: Test with a zone of zero available impressions, and no linked ads, and * ensure the returned ads array is empty, and the initial blank impression * is one. * Test 2: Test with a zone of > zero available impressions, and no linked ads, and * ensure the returned ads array is empty, and the initial blank impression * is one. * Test 3: Test with a zone of zero available impressions, and linked ads with zero * required impressions, and ensure the returned ads array has zero for all * ad priorities, and the initial blank impression is one. * Test 4: Test with a zone of > zero available impressions, and linked ads with zero * required impressions, and ensure the returned ads array has zero for all * ad priorities, and the initial blank impression is one. * Test 5: Test with a zone of zero available impressions, and linked ads with > zero * required impressions, and ensure the returned ads array has zero for all * ad priorities, and the initial blank impression is one. * Test 6: Test with a zone of > zero available impressions, and linked ads with > zero * required impressions, and ensure the returned priorities are correctly * calculcated and scaled. * * Requirements - WITH PAST AD INFO * Test 7: Test with a zone of zero available impressions, and linked ads with zero * required impressions, and ensure the returned ads array has zero for all * ad priorities, and the initial blank impression is one. * Test 8: Test with a zone of > zero available impressions, and linked ads with zero * required impressions, and ensure the returned ads array has zero for all * ad priorities, and the initial blank impression is one. * Test 9: Test with a zone of zero available impressions, and linked ads with > zero * required impressions, and ensure the returned ads array has zero for all * ad priorities, and the initial blank impression is one. * Test 10: Test with a zone of > zero available impressions, and linked ads with > zero * required impressions, but no past zone information, and ensure the returned * priorities are correctly calculcated and scaled. * Test 11: Test with a zone of > zero available impressions, and linked ads with > zero * required impressions, with past zone information, and ensure the returned * priorities are correctly calculcated and scaled. * Test 12: Test with a factor that will be limited. * Test 13: Test with a factor that would be limited, but with deliveryLimitationChanged * set and ensure that the priority factor is reset */ function testCompensatedPriorities() { // Mock the OA_Dal_Maintenance_Priority class used in the constructor method $oDal = new $this->mockDal($this); $oServiceLocator =& OA_ServiceLocator::instance(); $oServiceLocator->register('OA_Dal_Maintenance_Priority', $oDal); // Partially mock the OA_Maintenance_Priority_AdServer_Task_PriorityCompensation class $oPriorityCompensation = new PartialMock_OA_Maintenance_Priority_AdServer_Task_PriorityCompensation($this); $oPriorityCompensation->setReturnReference('_getDal', $oDal); $oPriorityCompensation->setReturnReference('_getOperationIntUtils', $oOperationInterval); $oPriorityCompensation->__construct(); // Test 1 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 0; $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 0); $this->assertEqual($result['blank'], 1); // Test 2 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 100; $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 0); $this->assertEqual($result['blank'], 1); // Test 3 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 0; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0); $this->assertEqual($result['ads'][1]['required_impressions'], 0); $this->assertEqual($result['ads'][1]['requested_impressions'], 0); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0); $this->assertEqual($result['ads'][2]['required_impressions'], 0); $this->assertEqual($result['ads'][2]['requested_impressions'], 0); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0); $this->assertEqual($result['ads'][3]['required_impressions'], 0); $this->assertEqual($result['ads'][3]['requested_impressions'], 0); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0); $this->assertEqual($result['ads'][9]['required_impressions'], 0); $this->assertEqual($result['ads'][9]['requested_impressions'], 0); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 1); // Test 4 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 100; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0); $this->assertEqual($result['ads'][1]['required_impressions'], 0); $this->assertEqual($result['ads'][1]['requested_impressions'], 0); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0); $this->assertEqual($result['ads'][2]['required_impressions'], 0); $this->assertEqual($result['ads'][2]['requested_impressions'], 0); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0); $this->assertEqual($result['ads'][3]['required_impressions'], 0); $this->assertEqual($result['ads'][3]['requested_impressions'], 0); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0); $this->assertEqual($result['ads'][9]['required_impressions'], 0); $this->assertEqual($result['ads'][9]['requested_impressions'], 0); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 1); $this->assertEqual($result['blank'], 1); // Test 5 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 0; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 1); // Test 6 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 100; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0.1); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0.2); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0.3); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0.4); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 0); $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 200; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0.05); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0.1); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0.15); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0.2); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 0.5); // Test 7 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 0; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 0; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 0; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 0; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 0; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0); $this->assertEqual($result['ads'][1]['required_impressions'], 0); $this->assertEqual($result['ads'][1]['requested_impressions'], 0); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0); $this->assertEqual($result['ads'][2]['required_impressions'], 0); $this->assertEqual($result['ads'][2]['requested_impressions'], 0); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0); $this->assertEqual($result['ads'][3]['required_impressions'], 0); $this->assertEqual($result['ads'][3]['requested_impressions'], 0); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0); $this->assertEqual($result['ads'][9]['required_impressions'], 0); $this->assertEqual($result['ads'][9]['requested_impressions'], 0); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 1); // Test 8 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 100; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 0; $oAd->requestedImpressions = 0; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0); $this->assertEqual($result['ads'][1]['required_impressions'], 0); $this->assertEqual($result['ads'][1]['requested_impressions'], 0); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0); $this->assertEqual($result['ads'][2]['required_impressions'], 0); $this->assertEqual($result['ads'][2]['requested_impressions'], 0); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0); $this->assertEqual($result['ads'][3]['required_impressions'], 0); $this->assertEqual($result['ads'][3]['requested_impressions'], 0); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0); $this->assertEqual($result['ads'][9]['required_impressions'], 0); $this->assertEqual($result['ads'][9]['requested_impressions'], 0); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 1); // Test 9 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 0; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oAd->pastRequiredImpressions = 10; $oAd->pastActualImpressions = 0; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 1); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertNull($result['ads'][2]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 1); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertNull($result['ads'][3]['past_zone_traffic_fraction']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 1); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertNull($result['ads'][9]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 1); // Test 10 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 100; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0.1); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 2); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0.2); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 2); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0.3); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 2); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0.4); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 2); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertEqual($result['blank'], 0); $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 400; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0.025); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 2); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0.05); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 2); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0.075); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 2); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0.1); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 2); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertEqual($result['blank'], 0.75); // Test 11 $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 100; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oAd->pastRequiredImpressions = 20; $oAd->pastRequestedImpressions = 20; $oAd->pastActualImpressions = 10; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oAd->pastRequiredImpressions = 30; $oAd->pastRequestedImpressions = 30; $oAd->pastActualImpressions = 15; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oAd->pastRequiredImpressions = 40; $oAd->pastRequestedImpressions = 40; $oAd->pastActualImpressions = 20; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0.1); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 2); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertEqual($result['ads'][1]['past_zone_traffic_fraction'], 0.05); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0.2); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 2); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertEqual($result['ads'][2]['past_zone_traffic_fraction'], 0.1); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0.3); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 2); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertEqual($result['ads'][3]['past_zone_traffic_fraction'], 0.15); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0.4); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 2); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertEqual($result['ads'][9]['past_zone_traffic_fraction'], 0.2); $this->assertEqual($result['blank'], 0); $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = 400; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = 10; $oAd->requestedImpressions = 10; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 2)); $oAd->requiredImpressions = 20; $oAd->requestedImpressions = 20; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 3)); $oAd->requiredImpressions = 30; $oAd->requestedImpressions = 30; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 9)); $oAd->requiredImpressions = 40; $oAd->requestedImpressions = 40; $oAd->pastRequiredImpressions = 10; $oAd->pastRequestedImpressions = 10; $oAd->pastActualImpressions = 5; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 4); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 0.025); $this->assertEqual($result['ads'][1]['required_impressions'], 10); $this->assertEqual($result['ads'][1]['requested_impressions'], 10); $this->assertEqual($result['ads'][1]['priority_factor'], 2); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertEqual($result['ads'][2]['ad_id'], 2); $this->assertEqual($result['ads'][2]['zone_id'], 1); $this->assertEqual($result['ads'][2]['priority'], 0.05); $this->assertEqual($result['ads'][2]['required_impressions'], 20); $this->assertEqual($result['ads'][2]['requested_impressions'], 20); $this->assertEqual($result['ads'][2]['priority_factor'], 2); $this->assertFalse($result['ads'][2]['priority_factor_limited']); $this->assertEqual($result['ads'][3]['ad_id'], 3); $this->assertEqual($result['ads'][3]['zone_id'], 1); $this->assertEqual($result['ads'][3]['priority'], 0.075); $this->assertEqual($result['ads'][3]['required_impressions'], 30); $this->assertEqual($result['ads'][3]['requested_impressions'], 30); $this->assertEqual($result['ads'][3]['priority_factor'], 2); $this->assertFalse($result['ads'][3]['priority_factor_limited']); $this->assertEqual($result['ads'][9]['ad_id'], 9); $this->assertEqual($result['ads'][9]['zone_id'], 1); $this->assertEqual($result['ads'][9]['priority'], 0.1); $this->assertEqual($result['ads'][9]['required_impressions'], 40); $this->assertEqual($result['ads'][9]['requested_impressions'], 40); $this->assertEqual($result['ads'][9]['priority_factor'], 2); $this->assertFalse($result['ads'][9]['priority_factor_limited']); $this->assertEqual($result['blank'], 0.75); // Test 12 $value = 1.2 * mt_getrandmax(); $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = $value; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->requiredImpressions = $value; $oAd->requestedImpressions = $value; $oAd->pastRequiredImpressions = $value; $oAd->pastRequestedImpressions = $value; $oAd->pastActualImpressions = 1; $oAd->pastZoneTrafficFraction = 0; $oAd->pastAdZonePriorityFactor = 1; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 1); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 1); $this->assertEqual($result['ads'][1]['required_impressions'], $value); $this->assertEqual($result['ads'][1]['requested_impressions'], $value); $this->assertEqual($result['ads'][1]['priority_factor'], 1 + (mt_getrandmax() - 1) / 2); $this->assertTrue($result['ads'][1]['priority_factor_limited']); $this->assertEqual($result['ads'][1]['past_zone_traffic_fraction'], 1 / $value); $this->assertEqual($result['blank'], 0); // Test 13 $value = 1.2 * mt_getrandmax(); $oZone = new OX_Maintenance_Priority_Zone(array('zoneid' => 1)); $oZone->availableImpressions = $value; $oAd = new OA_Maintenance_Priority_Ad(array('ad_id' => 1)); $oAd->deliveryLimitationChanged = true; $oAd->requiredImpressions = $value; $oAd->requestedImpressions = $value; $oAd->pastRequiredImpressions = $value; $oAd->pastRequestedImpressions = $value; $oAd->pastActualImpressions = 1; $oAd->pastZoneTrafficFraction = 0; $oAd->pastAdZonePriorityFactor = 1; $oZone->addAdvert($oAd); $result = $oPriorityCompensation->compensatedPriorities($oZone); $this->assertEqual(count($result['ads']), 1); $this->assertEqual($result['ads'][1]['ad_id'], 1); $this->assertEqual($result['ads'][1]['zone_id'], 1); $this->assertEqual($result['ads'][1]['priority'], 1); $this->assertEqual($result['ads'][1]['required_impressions'], $value); $this->assertEqual($result['ads'][1]['requested_impressions'], $value); $this->assertEqual($result['ads'][1]['priority_factor'], 1); $this->assertFalse($result['ads'][1]['priority_factor_limited']); $this->assertNull($result['ads'][1]['past_zone_traffic_fraction']); $this->assertEqual($result['blank'], 0); }