1#!/usr/bin/perl 2use strict; 3use warnings; 4use Test::More; 5BEGIN { push(@INC, "lib", "t"); } 6use TestHelper; 7 8my $mturk = TestHelper->new; 9 10if (!$ENV{MTURK_TEST_WRITABLE}) { 11 plan skip_all => "Set environment variable MTURK_TEST_WRITABLE=1 to enable tests which have side-effects."; 12} 13else { 14 plan tests => 14; 15} 16 17my $hit = $mturk->newHIT(); 18 19ok($hit, "CreateHIT"); 20$mturk->destroyHIT($hit); 21ok(1, "Destroyed HIT"); 22 23$hit = $mturk->CreateHIT( Question=>$mturk->sampleQuestion(), HITTypeId=>$hit->getFirst("HITTypeId")); 24ok($hit, "CreateHIT with HitTypeId"); 25$mturk->destroyHIT($hit); 26ok(1, "Destroyed HIT (from template)"); 27 28$hit = $mturk->CreateHIT( {Question=>$mturk->sampleQuestion(), HITTypeId=>$hit->getFirst("HITTypeId")}); 29ok($hit, "CreateHIT with HitTypeId"); 30$mturk->destroyHIT($hit); 31ok(1, "Destroyed HIT (from template)"); 32 33# test invalid parameters 34my $error; 35$error = $mturk->expectError( "AWS.ParameterOutOfRange", sub { $mturk->newHIT( MaxAssignments=>-1 ); } ); 36ok($error, "CreateHIT with negative MaxAssignments"); 37 38$error = $mturk->expectError( "AWS.MechanicalTurk.InvalidParameterValue", sub { $mturk->newHIT( MaxAssignments=>"green" ); } ); 39ok($error, "CreateHIT with invalid MaxAssignments"); 40 41# missing parameters 42$error = $mturk->expectError( "AWS.MissingParameters", sub { $mturk->CreateHIT(); } ); 43ok($error, "CreateHIT with no parameters"); 44 45$error = $mturk->expectError( "AWS.MechanicalTurk.InvalidParameterValue", sub {$mturk->CreateHIT( Question=>$mturk->sampleQuestion(), HITTypeId=>"asfd"); } ); 46ok($error, "CreateHIT with invalid HITTypeId"); 47$error = $mturk->expectError( "AWS.MechanicalTurk.InvalidParameterValue", sub {$mturk->CreateHIT( HITTypeId=>$hit->getFirst("HITTypeId")); } ); 48ok($error, "CreateHIT with no Question"); 49$error = $mturk->expectError( "AWS.MechanicalTurk.XMLParseError", sub {$mturk->CreateHIT( Question=>"who what?", HITTypeId=>$hit->getFirst("HITTypeId")); } ); 50ok($error, "CreateHIT with invalid Question"); 51 52# Test with invalid SecretKey 53my $broken_mturk = TestHelper->new( secretKey=>"bogus" ); 54$error = $broken_mturk->expectError( "AWS.NotAuthorized", sub { $broken_mturk->newHIT(); } ); 55ok($error, "CreateHIT with invalid SecretKey"); 56 57# Test with invalid endpoint 58my $imaginary_mturk = TestHelper->new( serviceUrl => "http://localhost:1234" ); 59$error = $imaginary_mturk->expectError( "Client.TransportError", sub { $imaginary_mturk->newHIT(); } ); 60ok($error, "CreateHIT with invalid ServiceUrl"); 61