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