webgui/t/Asset/Wobject/Thingy/www_editThingDataSaveViaAjax.t
Peter Christiansen bcfe1740dd RFE 12207 : www_editThingDataSaveViaAjax should return more info if thingdata fails to be saved.
As it is it returns json with an array of error messages: [{error_message=>"some error"},..]
     But to be able to do anything useful with this. eg. highlighting of form fields whose
     input is erroneous we should also return the fieldName.

     This patch takes care of this.
2011-07-28 22:50:42 +02:00

166 lines
4.7 KiB
Perl

#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2009 Plain Black Corporation.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
use FindBin;
use strict;
use lib "$FindBin::Bin/../../../lib";
##The goal of this test is to test www_editThingDataSaveViaAjax, particularly those things not tested in Thingy.t
use WebGUI::Test;
use WebGUI::Session;
use Test::More tests => 4; # increment this value for each test you create
use Test::Deep;
use JSON;
use WebGUI::Asset::Wobject::Thingy;
use Data::Dumper;
my $session = WebGUI::Test->session;
# Do our work in the import node
my $node = WebGUI::Asset->getImportNode($session);
my $versionTag = WebGUI::VersionTag->getWorking($session);
$versionTag->set({name=>"Thingy Test"});
WebGUI::Test->addToCleanup($versionTag);
my $thingy = $node->addChild({className=>'WebGUI::Asset::Wobject::Thingy'});
# Test adding a new Thing
my $i18n = WebGUI::International->new($session, "Asset_Thingy");
my $groupIdEdit = $thingy->get("groupIdEdit");
my %thingProperties = (
thingId => "new",
label => $i18n->get('assetName'),
editScreenTitle => $i18n->get('edit screen title label'),
editInstructions => '',
groupIdAdd => $groupIdEdit,
groupIdEdit => $groupIdEdit,
saveButtonLabel => $i18n->get('default save button label'),
afterSave => 'searchThisThing',
editTemplateId => "ThingyTmpl000000000003",
groupIdView => $groupIdEdit,
viewTemplateId => "ThingyTmpl000000000002",
defaultView => 'searchThing',
searchScreenTitle => $i18n->get('search screen title label'),
searchDescription => '',
groupIdSearch => $groupIdEdit,
groupIdExport => $groupIdEdit,
groupIdImport => $groupIdEdit,
searchTemplateId => "ThingyTmpl000000000004",
thingsPerPage => 25,
);
my $thingId = $thingy->addThing(\%thingProperties,0);
# Test adding a field
my %fieldProperties = (
thingId => $thingId,
fieldId => "new",
label => "Optional",
dateCreated => time(),
fieldType => "text",
status => "editable",
display => 1,
);
my $field1Id = $thingy->addField(\%fieldProperties, 0);
$fieldProperties{status} = 'required';
$fieldProperties{label} = 'Required';
my $field2Id = $thingy->addField(\%fieldProperties, 0);
#################################################################
#
# www_editThingDataSaveViaAjax
#
#################################################################
$session->request->setup_body({
thingId => $thingId,
thingDataId => 'new',
"field_".$field1Id => 'test value',
"field_".$field2Id => 'required', # required
});
$session->user({userId => '3'});
$session->http->setStatus(200);
my $json = $thingy->www_editThingDataSaveViaAjax();
is $json, '{}', 'www_editThingDataSaveViaAjax: Empty JSON hash';
is $session->http->getStatus, 200, '... http status=200';
$session->request->setup_body({
thingId => $thingId,
thingDataId => 'new',
"field_".$field1Id => 'test value',
"field_".$field2Id => '',
});
my $json = from_json( $thingy->www_editThingDataSaveViaAjax());
cmp_bag ($json,
[
superhashof ({
field_name => "field_".$field2Id,
}),
],
'checking for field_name in error json'
) or diag Dumper($json);
$fieldProperties{status} = 'required';
$fieldProperties{label} = 'Required2';
my $field3Id = $thingy->addField(\%fieldProperties, 0);
$fieldProperties{status} = 'required';
$fieldProperties{label} = 'Required3';
my $field4Id = $thingy->addField(\%fieldProperties, 0);
$session->request->setup_body({
thingId => $thingId,
thingDataId => 'new',
"field_".$field1Id => 'test value',
"field_".$field2Id => '',
"field_".$field3Id => '',
"field_".$field4Id => '',
});
$json = from_json( $thingy->www_editThingDataSaveViaAjax());
cmp_bag ($json,
[
superhashof ({
field_name => "field_".$field2Id,
}),
superhashof ({
field_name => "field_".$field3Id,
}),
superhashof ({
field_name => "field_".$field4Id,
}),
],
'checking for field_name in error json (3 required fields)'
) or diag Dumper($json);