AdSpace has 100% coverage, aside from some conditionals in the set method.

Found and fixed an off by 1 error in displayImpressions that allowed boughtImpressions+1
impressions to be displayed.
This commit is contained in:
Colin Kuskie 2007-02-23 04:59:06 +00:00
parent 47c55075f6
commit 906775d505
3 changed files with 28 additions and 7 deletions

View file

@ -1,4 +1,5 @@
7.3.11 7.3.11
- fix: Off by 1 error while displaying ad impressions (perlDreamer Consulting, LLC)
7.3.10 7.3.10
- fix: Calendar Update Feeds now handles iCalendar "DURATION" field - fix: Calendar Update Feeds now handles iCalendar "DURATION" field

View file

@ -134,7 +134,8 @@ sub displayImpression {
my ($id, $ad, $priority, $clicks, $clicksBought, $impressions, $impressionsBought) = $self->session->db->quickArray("select adId, renderedAd, priority, clicks, clicksBought, impressions, impressionsBought from advertisement where adSpaceId=? and isActive=1 order by nextInPriority asc limit 1",[$self->getId]); my ($id, $ad, $priority, $clicks, $clicksBought, $impressions, $impressionsBought) = $self->session->db->quickArray("select adId, renderedAd, priority, clicks, clicksBought, impressions, impressionsBought from advertisement where adSpaceId=? and isActive=1 order by nextInPriority asc limit 1",[$self->getId]);
unless ($dontCount) { unless ($dontCount) {
my $isActive = 1; my $isActive = 1;
if ($clicks >= $clicksBought && $impressions >= $impressionsBought) { if ($clicks >= $clicksBought && $impressions >= ($impressionsBought-1)) {
#if ($clicks >= $clicksBought && $impressions >= $impressionsBought) {
$isActive = 0; $isActive = 0;
} }
$self->session->db->write("update advertisement set impressions=impressions+1, nextInPriority=?, isActive=? where adId=?", $self->session->db->write("update advertisement set impressions=impressions+1, nextInPriority=?, isActive=? where adId=?",

View file

@ -31,7 +31,7 @@ my $newAdSpaceSettings = {
height => "300", height => "300",
}; };
my $numTests = 26; # increment this value for each test you create my $numTests = 31; # increment this value for each test you create
$numTests += 2 * scalar keys %{ $newAdSpaceSettings }; $numTests += 2 * scalar keys %{ $newAdSpaceSettings };
++$numTests; ##For conditional testing on module load ++$numTests; ##For conditional testing on module load
@ -40,7 +40,7 @@ plan tests => $numTests;
my $loaded = use_ok('WebGUI::AdSpace'); my $loaded = use_ok('WebGUI::AdSpace');
my $session = WebGUI::Test->session; my $session = WebGUI::Test->session;
my ($adSpace, $alfred, $alfred2, $bruce, $catWoman, $twoFaceClone, $defaultAdSpace ); my ($adSpace, $alfred, $alfred2, $bruce, $catWoman, $villianClone, $defaultAdSpace );
my ($jokerAd, $penguinAd, $twoFaceAd); my ($jokerAd, $penguinAd, $twoFaceAd);
SKIP: { SKIP: {
@ -118,6 +118,8 @@ SKIP: {
richMedia => 'Joker', richMedia => 'Joker',
priority => 2, priority => 2,
isActive => 1, isActive => 1,
clicksBought => 0,
impressionsBought => 2,
} }
); );
$penguinAd = WebGUI::AdSpace::Ad->create($session, $bruce->getId, $penguinAd = WebGUI::AdSpace::Ad->create($session, $bruce->getId,
@ -126,8 +128,10 @@ SKIP: {
url => '/fishy', url => '/fishy',
type => 'rich', type => 'rich',
richMedia => 'Penguin', richMedia => 'Penguin',
priority => 3, priority => 1,
isActive => 1, isActive => 1,
clicksBought => 4,
impressionsBought => 0,
} }
); );
$twoFaceAd = WebGUI::AdSpace::Ad->create($session, $catWoman->getId, $twoFaceAd = WebGUI::AdSpace::Ad->create($session, $catWoman->getId,
@ -196,9 +200,24 @@ SKIP: {
'displayImpression set the nextInPriority correctly' 'displayImpression set the nextInPriority correctly'
); );
$twoFaceClone = WebGUI::AdSpace::Ad->new($session, $twoFaceAd->getId); my ($twoFaceIsActive) = $session->db->quickArray('select isActive from advertisement where adId=?',[$twoFaceAd->getId]);
is($twoFaceClone->get('isActive'), 0, 'displayImpression deactivates an ad if enough impressions and clicks are bought'); is($twoFaceIsActive, 0, 'displayImpression deactivates an ad if enough impressions and clicks are bought');
$session->db->write('update advertisement set nextInPriority=UNIX_TIMESTAMP()+100000 where adId=?',[$jokerAd->getId]);
is($bruce->displayImpression(), $penguinAd->get('renderedAd'), 'displayImpression returns earliest by nextInPriority, penguin has 3 clicks');
WebGUI::AdSpace->countClick($session, $penguinAd->getId); ##4 clicks
is($bruce->displayImpression(), $penguinAd->get('renderedAd'), 'displayImpression returns still returns penguinAd, but deactivates it after 4 clicks');
my ($penguinActive) = $session->db->quickArray('select isActive from advertisement where adId=?',[$penguinAd->getId]);
is($penguinActive, 0, 'displayImpression deactiveated penguinAd');
is($bruce->displayImpression(), $jokerAd->get('renderedAd'), 'displayImpression now returns jokerAd');
my ($jokerActive) = $session->db->quickArray('select isActive from advertisement where adId=?',[$jokerAd->getId]);
is($jokerActive, 1, 'displayImpression did not deactiveate jokerAd after one impression');
$bruce->displayImpression();
($jokerActive) = $session->db->quickArray('select isActive from advertisement where adId=?',[$jokerAd->getId]);
is($jokerActive, 0, 'displayImpression deactivated jokerAd after two impressions');
} }
END { END {
@ -208,7 +227,7 @@ END {
} }
} }
foreach my $advert ($jokerAd, $penguinAd, $twoFaceClone, $twoFaceAd) { foreach my $advert ($jokerAd, $penguinAd, $villianClone, $twoFaceAd) {
if (defined $advert and ref $advert eq 'WebGUI::AdSpace::Ad') { if (defined $advert and ref $advert eq 'WebGUI::AdSpace::Ad') {
$advert->delete; $advert->delete;
} }