#!/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::Message LJ::SMS::MessageHandler ); use Carp qw (croak); # make time() be overridable in the future at runtime, rather than be an opcode: BEGIN { *CORE::GLOBAL::time = sub { time() }; } my $lastmsg = ''; # trap message sending $LJ::_T_SMS_SEND = sub { my $msg = shift; $lastmsg = $msg->body_text; }; sub run_tests { # try registering normally { my $u = temp_user(); my $sms_num = '+1'; $sms_num .= int(rand(10)) foreach (1..10); # pretend user just entered their sms number and carrier $u->set_prop("sms_carrier", "alltel"); my $POST = { msisdn => $sms_num, }; my (@errors, @warnings, $redir); $u->set_sms_number($sms_num, verified => 'N'); LJ::run_hook('sms_post_register', u => $u, redir => \$redir, errors => \@errors); LJ::run_hook('sms_bml_post', u => $u, POST => $POST, errors => \@errors, warnings => \@warnings, redir => \$redir); ok(! $u->sms_active, "SMS not active"); # should now receive message asking to confirm my $name = $u->display_username; like($lastmsg, qr/to validate this phone for $name/i, "Got confirmation SMS"); # check props that should now be set is($u->prop('sms_yes_means'), "msisdn_confirm", "sms_yes_means prop set"); # have user send a "yes" message $u->t_receive_sms("yes"); like($lastmsg, qr/This number is now validated/i, "Got confirmed SMS"); # props should now be set correctly is($u->prop('sms_yes_means'), '', "yes_means got cleared"); # should now be registered ok($u->sms_active, "SMS now active"); } # test registration time constraint { my $u = temp_user(); my $sms_num = '+1'; $sms_num .= int(rand(10)) foreach (1..10); # pretend user just entered their sms number and carrier $u->set_prop("sms_carrier", "alltel"); my $POST = { msisdn => $sms_num, }; my (@errors, @warnings, $redir); $u->set_sms_number($sms_num, verified => 'N'); LJ::run_hook('sms_post_register', u => $u, redir => \$redir, errors => \@errors); LJ::run_hook('sms_bml_post', u => $u, POST => $POST, errors => \@errors, warnings => \@warnings, redir => \$redir); # should now receive message asking to confirm my $name = $u->display_username; like($lastmsg, qr/to validate this phone for $name/i, "Got confirmation SMS"); # check props that should now be set is($u->prop('sms_yes_means'), "msisdn_confirm", "sms_yes_means prop set"); # zip into the future a day local *CORE::GLOBAL::time = sub { CORE::time() + 86400 }; # have user send a "yes" message $u->t_receive_sms("yes"); # go back to normal local *CORE::GLOBAL::time = sub { CORE::time() }; # should fail and not register us ok(! $u->sms_active, "SMS not active"); is($u->prop('sms_yes_means'), '', "yes_means got cleared"); } } run_tests();