Amazon-DynamoDB

 view release on metacpan or  search on metacpan

t/03-simple-get-put.t  view on Meta::CPAN

                                 },
                                 ReturnValues => 'ALL_OLD');
        ok($put->is_done, "put_item with custom definition completed successfully");
        eq_or_diff($put->get()->{Attributes}, 
                   {
                       %$custom,
                       name => 'Rusty Conover~2'
                   }, "Found old values in expected result from put_item");
    }
}

{
    my $delete = $ddb->delete_item(
        TableName => $table_name,
        Key => {
            user_id => 2,
        });
    ok($delete->is_done, "delete_item completed ok");
    is_deeply($delete->get, {}, "Delete result is empty with no requested attributes");
}

{
    my $found_item;
    my $get = $ddb->get_item(
        sub {
            $found_item = shift;
        },
        TableName => $table_name,
        Key => {
            user_id => 2,
        });
    ok($get->is_done, "get_item completed ok");
    ok(!defined($found_item), "an item was not retrieved with id: 2");
}


{
    my $put = $ddb->put_item(TableName => $table_name,
                             Item => {
                                 user_id => 2,
                                 name => 'Rusty Conover-2',
                                 test_numbers => [500, 600, 800],
                                 added_number => 1000,
                                 favorite_color => 'blue',
                                 subtracted_number => 1000,
                             });
    ok($put->is_done, "Put item completed successfully");
    is_deeply($put->get(), {}, "Results of put_item with no attributes returned correctly");
}



{
    my $update = $ddb->update_item(
        TableName => $table_name,
        Key => {
            user_id => 2
        },
        AttributeUpdates => {
            name => {
                Action => 'PUT',
                Value => "Rusty Conover-3",
            },
            favorite_color => {
                Action => 'DELETE'
            },
            test_numbers => {
                Action => 'DELETE',
                Value => [500]
            },
            added_number => {
                Action => 'ADD',
                Value => 5,
            },
            subtracted_number => {
                Action => 'ADD',
                Value => -5,
            },
            new_string_set => {
                Action => 'ADD',
                Value => ['Hello', 'Rusty']
            },
            
            new_number_set => {
                Action => 'ADD',
                Value => [1]
            },
            
            new_binary_set => {
                Action => 'ADD',
                Value => [\'hello', \'world']
            },
        });
    ok($update->is_done, "update_item was successful");
    is_deeply($update->get(), {}, "update_item returned not attributes when not requested");
}


{
    my $found_item;
    ok($ddb->get_item(sub {
                          $found_item = shift;
                      },
                      TableName => $table_name,
                      Key => {
                          user_id => 2
                      }
                  )->is_done, "Updated item retrieved");
    
    ok(defined($found_item), "Updated item was successfully retrieved");
    is($found_item->{user_id}, 2, "user_id is 2");
    is($found_item->{name}, "Rusty Conover-3", "updated name is found");
    is($found_item->{added_number}, 1005, "updated added_number is mathematically added");
    is($found_item->{subtracted_number}, 995, "updated subtracted_number is mathematically added");
    ok(!defined($found_item->{favorite_color}), "updated favorite_color is undefined, since it was deleted");
    eq_or_diff([600, 800],
               [sort @{$found_item->{test_numbers}}], "Deleted Number array matches");
    
    
    eq_or_diff([1],
               [sort @{$found_item->{new_number_set}}], "New number set matches");
    
    eq_or_diff(['Hello', 'Rusty'],
               [sort @{$found_item->{new_string_set}}], "New string set matches");
    
    eq_or_diff(['hello', 'world'],
               [sort map { $$_ } @{$found_item->{new_binary_set}}], "New binary set matches");
}



ok($ddb->delete_item(TableName => $table_name,
                     Key => {
                         user_id => 2,
                     })->is_done, "Deleted custom item");


# Create an item then lets play with the exists rules and check for updates.

{
    my $put = $ddb->put_item(TableName => $table_name,
                             Item => {
                                 user_id => 3,
                                 name => 'Rusty',
                             });
    ok($put->is_done, "Put item completed successfully");
}



# only update if the name of user_id 3 is Fred.
{
    my $update = $ddb->update_item(
        TableName => $table_name,
        Key => {
            user_id => 3,
        },
        AttributeUpdates => {
            name => {
                Action => 'PUT',
                Value => "R2D2",
            },
        },
        Expected => {
            name => {
                Value => "Fred",
            },
        }
    );
    ok(!$update->is_done, "update_item was failed");

    is($update->failure()->{type}, "ConditionalCheckFailedException", "update_item failed with ConditionalCheckFailedException exception as expected");
}


{
    my $update = $ddb->update_item(
        TableName => $table_name,
        Key => {
            user_id => 3,
        },
        AttributeUpdates => {
            name => {
                Action => 'PUT',
                Value => "R2D2",
            },
        },
        Expected => {
            name => {
                ComparisonOperator => 'EQ',
                AttributeValueList => 'Fred',
            },
        }
    );
    ok(!$update->is_done, "update_item was failed");

    is($update->failure()->{type}, "ConditionalCheckFailedException", "update_item failed with ConditionalCheckFailedException exception as expected when using comparison operator EQ");
}


{
    my $update = $ddb->update_item(
        TableName => $table_name,
        Key => {
            user_id => 3,
        },
        AttributeUpdates => {
            name => {
                Action => 'PUT',
                Value => "R2D2",
            },
        },
        Expected => {
            name => {
                ComparisonOperator => 'IN',
                AttributeValueList => ['Fred'],
            },
        }
    );
    ok(!$update->is_done, "update_item was failed");

    is($update->failure()->{type}, "ConditionalCheckFailedException", "update_item failed with ConditionalCheckFailedException exception as expected when using comparison operator IN");
}



{
    my $found_item;
    ok($ddb->get_item(sub {
                          $found_item = shift;
                      },
                      TableName => $table_name,
                      Key => {
                          user_id => 3,
                      }
                  )->is_done, "Updated item retrieved");
    
    ok(defined($found_item), "Updated item was successfully retrieved");
    is($found_item->{user_id}, 3, "user_id is 3");
    is($found_item->{name}, "Rusty", "non updated name is found");
}


{
    my $update = $ddb->update_item(
        TableName => $table_name,
        Key => {
            user_id => 3,
        },
        AttributeUpdates => {
            name => {
                Action => 'PUT',
                Value => "R2D2",
            },
        },
        Expected => {
            name => {
                Value => "Rusty",
                Exists => 'true',
            },
            email => {
                Exists => 'false'
            }
        }
    );
    ok($update->is_done, "update_item was successful");
}

{
    my $found_item;
    ok($ddb->get_item(sub {
                          $found_item = shift;
                      },
                      TableName => $table_name,
                      Key => {
                          user_id => 3,
                      }
                  )->is_done, "Updated item retrieved");
    
    ok(defined($found_item), "Updated item was successfully retrieved");
    is($found_item->{user_id}, 3, "user_id is 3");
    is($found_item->{name}, "R2D2", "updated name is found");
}


ok($ddb->delete_table(TableName => $table_name)->is_done, "Successfully deleted table named $table_name");



( run in 2.595 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )