2017-01-31 15:15:46 +00:00
use Test::More ;
use Test::Mojo ;
use Mojo::JSON ;
use FindBin ;
2017-03-08 18:52:04 +00:00
BEGIN {
$ ENV { MOJO_MODE } = 'testing' ;
$ ENV { MOJO_LOG_LEVEL } = 'debug' ;
}
2017-01-31 15:15:46 +00:00
2017-02-24 19:27:43 +00:00
my $ t = Test::Mojo - > new ( "Pear::LocalLoop" ) ;
2017-01-31 15:15:46 +00:00
my $ dbh = $ t - > app - > db ;
#Dump all pf the test tables and start again.
my $ sqlDeployment = Mojo::File - > new ( "$FindBin::Bin/../dropschema.sql" ) - > slurp ;
for ( split ';' , $ sqlDeployment ) {
$ dbh - > do ( $ _ ) or die $ dbh - > errstr ;
}
my $ sqlDeployment = Mojo::File - > new ( "$FindBin::Bin/../schema.sql" ) - > slurp ;
for ( split ';' , $ sqlDeployment ) {
$ dbh - > do ( $ _ ) or die $ dbh - > errstr ;
}
#Variables to be used for uniqueness when testing.
2017-02-01 12:07:51 +00:00
my @ names = ( 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' ) ;
my @ emails = ( 'a@a.com' , 'b@a.com' , 'c@a.com' , 'd@a.com' , 'e@a.com' , 'f@a.com' , 'g@a.com' , 'h@a.com' , 'i@a.com' , 'j@a.com' , 'k@a.com' , 'l@a.com' , 'm@a.com' , 'n@a.com' , 'o@a.com' , 'p@a.com' , 'q@a.com' , 'r@a.com' , 's@a.com' , 't@a.com' , 'u@a.com' , 'v@a.com' , 'w@a.com' , 'x@a.com' , 'y@a.com' , 'z@a.com' ) ;
my @ tokens = ( 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' ) ;
2017-02-13 16:54:35 +00:00
my $ tokenStatement = $ dbh - > prepare ( 'INSERT INTO AccountTokens (AccountTokenName) VALUES (?)' ) ;
2017-01-31 15:15:46 +00:00
foreach ( @ tokens ) {
my $ rowsAdded = $ tokenStatement - > execute ( $ _ ) ;
}
2017-02-01 12:07:51 +00:00
#No JSON sent
print "test1\n\n" ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' )
2017-02-01 12:07:51 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/no json sent/ i ) ;
#Empty JSON
print "test2\n\n" ;
my $ testJson = { } ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-02-01 12:07:51 +00:00
- > json_is ( '/success' , Mojo::JSON - > false ) ;
#token missing JSON
print "test3\n\n" ;
my $ testJson = {
'usertype' = > 'customer' ,
'username' = > shift ( @ names ) ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '50+'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-02-01 12:07:51 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/no token sent/ i ) ;
2017-01-31 15:15:46 +00:00
#Not valid token.
2017-02-01 12:07:51 +00:00
print "test4\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > ' ' ,
'username' = > shift ( @ names ) ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '50+'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-02-01 12:07:51 +00:00
- > status_is ( 401 )
2017-01-31 15:15:46 +00:00
- > json_is ( '/success' , Mojo::JSON - > false )
2017-02-01 12:07:51 +00:00
- > content_like ( qr/token/ i )
- > content_like ( qr/invalid/ i ) ;
#username missing JSON
print "test5\n\n" ;
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '50+'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-02-01 12:07:51 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/no username sent/ i ) ;
2017-01-31 15:15:46 +00:00
#Blank username
2017-02-01 12:07:51 +00:00
print "test6\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > '' ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '50+'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-01-31 15:15:46 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/blank/ i )
- > content_like ( qr/username/ i ) ;
#Not alpha numeric chars e.g. !
2017-02-01 12:07:51 +00:00
print "test7\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > 'asa!' ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '50+'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-01-31 15:15:46 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/username/ i ) ;
my $ usernameToReuse = shift ( @ names ) ;
my $ emailToReuse = shift ( @ emails ) ;
#Valid customer
2017-02-01 12:07:51 +00:00
print "test8\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > $ usernameToReuse ,
'email' = > $ emailToReuse ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '50+'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-01-31 15:15:46 +00:00
- > status_is ( 200 )
- > json_is ( '/success' , Mojo::JSON - > true ) ;
#Valid customer2
2017-02-01 12:07:51 +00:00
print "test9\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '35-50'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-01-31 15:15:46 +00:00
- > status_is ( 200 )
- > json_is ( '/success' , Mojo::JSON - > true ) ;
#Valid customer3
2017-02-01 12:07:51 +00:00
print "test10\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '20-35'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-01-31 15:15:46 +00:00
- > status_is ( 200 )
- > json_is ( '/success' , Mojo::JSON - > true ) ;
#Username exists
2017-02-01 12:07:51 +00:00
print "test11\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > $ usernameToReuse ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '50+'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-01-31 15:15:46 +00:00
- > status_is ( 403 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/exists/ i ) ;
2017-02-01 12:07:51 +00:00
#email missing JSON
print "test12\n\n" ;
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '50+'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-02-01 12:07:51 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/no email sent/ i ) ;
2017-01-31 15:15:46 +00:00
#invalid email 1
2017-02-01 12:07:51 +00:00
print "test13\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > 'dfsd@.com' ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '35-50'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-01-31 15:15:46 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/email/ i )
- > content_like ( qr/invalid/ i ) ;
#invalid email 2
2017-02-01 12:07:51 +00:00
print "test14\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > 'dfsd@com' ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '35-50'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-01-31 15:15:46 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/email/ i )
- > content_like ( qr/invalid/ i ) ;
#Email exists
2017-02-01 12:07:51 +00:00
print "test15\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > $ emailToReuse ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '35-50'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-01-31 15:15:46 +00:00
- > status_is ( 403 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/email/ i )
- > content_like ( qr/exists/ i ) ;
2017-02-01 12:07:51 +00:00
#postcode missing JSON
print "test16\n\n" ;
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > shift ( @ emails ) ,
'password' = > 'Meh' ,
'age' = > '50+'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-02-01 12:07:51 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/no postcode sent/ i ) ;
#TODO validate postcode
#password missing JSON
print "test17\n\n" ;
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'age' = > '50+'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-02-01 12:07:51 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/no password sent/ i ) ;
#TODO enforce password complexity requirements.
#usertype missing JSON
print "test18\n\n" ;
my $ testJson = {
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > '50+'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-02-01 12:07:51 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/no usertype sent/ i ) ;
#Invalid user type
print "test19\n\n" ;
my $ testJson = {
'usertype' = > 'organisation1' ,
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'fulladdress' = > 'mary lane testing....'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-02-01 12:07:51 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/usertype/ i )
- > content_like ( qr/invalid/ i ) ;
#age missing JSON
print "test20\n\n" ;
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-02-01 12:07:51 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/no age sent/ i ) ;
2017-01-31 15:15:46 +00:00
#Age is invalid
2017-02-01 12:07:51 +00:00
print "test21\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
'usertype' = > 'customer' ,
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'age' = > 'invalid'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-01-31 15:15:46 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/age/ i )
- > content_like ( qr/invalid/ i ) ;
2017-02-01 12:07:51 +00:00
#full address missing JSON
print "test22\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
'usertype' = > 'organisation' ,
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-02-01 12:07:51 +00:00
- > status_is ( 400 )
- > json_is ( '/success' , Mojo::JSON - > false )
- > content_like ( qr/no fulladdress sent/ i ) ;
2017-01-31 15:15:46 +00:00
2017-02-01 12:07:51 +00:00
#TODO Validation of full address
#Organisation valid
print "test23\n\n" ;
2017-01-31 15:15:46 +00:00
my $ testJson = {
2017-02-01 12:07:51 +00:00
'usertype' = > 'organisation' ,
2017-01-31 15:15:46 +00:00
'token' = > shift ( @ tokens ) ,
'username' = > shift ( @ names ) ,
'email' = > shift ( @ emails ) ,
'postcode' = > 'LA1 1AA' ,
'password' = > 'Meh' ,
'fulladdress' = > 'mary lane testing....'
} ;
2017-04-06 22:43:27 +01:00
$ t - > post_ok ( '/api/register' = > json = > $ testJson )
2017-02-01 12:07:51 +00:00
- > status_is ( 200 )
- > json_is ( '/success' , Mojo::JSON - > true ) ;
#No JSON sent
#print "test14\n\n";
#my $testJson = {
# 'usertype' => 'customer',
# 'token' => shift(@tokens),
# 'username' => shift(@names),
# 'email' => shift(@emails),
# 'postcode' => 'LA1 1AA',
# 'password' => 'Meh',
# 'age' => '50+'
#};
2017-04-06 22:43:27 +01:00
#$t->post_ok('/api/register' => json => $testJson)
2017-02-01 12:07:51 +00:00
# ->status_is(401)->or(sub{ diag $t->tx->res->body})
# ->json_is('/success', Mojo::JSON->false)
# ->content_like(qr/token/i);
2017-01-31 15:15:46 +00:00
done_testing ( ) ;