#!/usr/bin/perl use strict; use Test::More 'no_plan'; use lib "$ENV{LJHOME}/cgi-bin"; require 'ljlib.pl'; no warnings 'redefine'; use LJ::Test qw (temp_user memcache_stress); use Class::Autouse qw ( LJ::SMS::Promo ); local $LJ::_T_SMS_PROMO = 1; sub run_tests { my $u = temp_user(); # give user some messages $u->add_sms_quota(5, 'free'); # find out what their current quota is my $current = $u->sms_quota_remaining; # try invalid user eval { LJ::SMS::Promo->apply_all_valid }; like($@, qr/invalid user/i, "Invalid user rejected"); # apply no promos local @LJ::SMS_PROMOS = (); LJ::SMS::Promo->apply_all_valid($u); # see that their quota didn't change is($u->sms_quota_remaining, $current, "Quota didn't change with no promos applied"); # now try out test promo module push @LJ::SMS_PROMOS, "Test"; # make sure promo isn't marked as applied ok(! LJ::SMS::Promo::Test->has_applied($u), "Test not marked as applied"); # try to call has_applied on bogus class eval { LJ::SMS::Promo->has_applied($u) }; like($@, qr/has_applied called .+ base class/i, "Errored on invalid class"); # apply promo LJ::SMS::Promo->apply_all_valid($u); # see that our promo got applied is($u->sms_quota_remaining, $current + 5, "Promo got applied"); # check that promo is marked as applied ok(LJ::SMS::Promo::Test->has_applied($u), "Test marked as applied"); # check statushistory my $dbr = LJ::get_db_reader() or die "No db"; my $lastsh = $dbr->selectrow_array("SELECT notes FROM statushistory WHERE userid=? " . "AND shtype=? LIMIT 1", undef, $u->id, "sms_promo_applied"); my $newq = $current + 5; like($lastsh, qr/Promo: LJ::SMS::Promo::Test Old quota: $current New quota: $newq/, "Logged to statushistory"); # try to apply it again, make sure nothing changed LJ::SMS::Promo->apply_all_valid($u); is($u->sms_quota_remaining, $current + 5, "Promo did not get reapplied"); } memcache_stress ( sub { run_tests(); }); # our sample promo package package LJ::SMS::Promo::Test; use base 'LJ::SMS::Promo'; sub is_valid { my ($class, $u) = @_; return 1; } sub apply { my ($class, $u) = @_; # add 5 messages $u->add_sms_quota(5, 'free'); } 1;