my
$class
;
BEGIN {
$class
=
'PawsX::DynamoDB::DocumentClient::BatchGet'
;
use_ok(
$class
);
}
is_deeply(
{
$class
->transform_arguments(
RequestItems
=> {
'foo'
=> {
ConsistentRead
=> 1,
ProjectionExpression
=>
'foo_id, foo_name'
,
Keys
=> [
{
foo_id
=>
'abcde'
},
{
foo_id
=>
'fghijk'
},
],
},
'bar'
=> {
Keys
=> [
{
bar_id
=> 12345 },
],
},
},
)
},
{
RequestItems
=> {
'foo'
=> {
ConsistentRead
=> 1,
ProjectionExpression
=>
'foo_id, foo_name'
,
Keys
=> [
{
foo_id
=> {
S
=>
'abcde'
} },
{
foo_id
=> {
S
=>
'fghijk'
} },
],
},
'bar'
=> {
Keys
=> [
{
bar_id
=> {
N
=> 12345 } },
],
},
},
},
'transform_arguments() marshalls correct args'
,
);
my
$test_output
= Paws::DynamoDB::BatchGetItemOutput->new(
Responses
=> Paws::DynamoDB::BatchGetResponseMap->new(
Map
=> {
'foo'
=> [
make_attr_map({
foo_id
=> {
S
=>
'abcde'
},
foo_name
=> {
S
=>
'Billy Joe'
},
}),
make_attr_map({
foo_id
=> {
S
=>
'fghij'
},
foo_name
=> {
S
=>
'Bobby Sue'
},
}),
],
'bar'
=> [
make_attr_map({
bar_id
=> {
N
=> 10000 },
bar_closes
=> {
S
=>
'Never'
},
}),
],
},
),
UnprocessedKeys
=> Paws::DynamoDB::BatchGetRequestMap->new(
Map
=> {
'bar'
=> Paws::DynamoDB::KeysAndAttributes->new(
ConsistentRead
=> 1,
ExpressionAttributeNames
=> make_attr_name_map({
'#P'
=>
'Percentile'
,
}),
ProjectionExpression
=>
'#P, bar_id'
,
Keys
=> [
make_key({
bar_id
=> {
N
=> 12345 }}),
make_key({
bar_id
=> {
N
=> 67890 }}),
],
),
'baz'
=> Paws::DynamoDB::KeysAndAttributes->new(
Keys
=> [
make_key({
baz_id
=> {
N
=> 0 }}),
],
),
},
),
);
is_deeply(
$class
->transform_output(
$test_output
),
{
responses
=> {
foo
=> [
{
foo_id
=>
'abcde'
,
foo_name
=>
'Billy Joe'
,
},
{
foo_id
=>
'fghij'
,
foo_name
=>
'Bobby Sue'
,
},
],
bar
=> [
{
bar_id
=> 10000,
bar_closes
=>
'Never'
,
},
],
},
unprocessed_keys
=> {
bar
=> {
ConsistentRead
=> 1,
Keys
=> [
{
bar_id
=> 12345 },
{
bar_id
=> 67890 },
],
ExpressionAttributeNames
=> {
'#P'
=>
'Percentile'
,
},
ProjectionExpression
=>
'#P, bar_id'
,
},
baz
=> {
Keys
=> [
{
baz_id
=> 0 },
],
},
}
},
'output transformed correctly'
,
);
like(
exception {
$class
->transform_arguments(
RequestItems
=>
'asds'
,
);
},
qr/\Qbatch_get(): RequestItems must be a hashref\E/
,
'error thrown on bad RequestItems'
,
);
like(
exception {
$class
->transform_arguments(
RequestItems
=> {
'foo'
=> {
},
},
);
},
qr/\Qbatch_get(): RequestItems entry must have Keys\E/
,
'error thrown on missing Keys'
,
);
like(
exception {
$class
->transform_arguments(
RequestItems
=> {
'foo'
=> {
Keys
=>
'asdf'
,
},
},
);
},
qr/\Qbatch_get(): Keys must be an arrayref\E/
,
'error thrown on bad Keys'
,
);
like(
exception {
$class
->transform_arguments(
RequestItems
=> {
'foo'
=> {
Keys
=> [
'asdf'
,
],
},
},
);
},
qr/\Qbatch_get(): Keys entry must be a hashref\E/
,
'error thrown on bad Keys entry'
,
);
done_testing;