1use strict; 2use warnings; 3 4use Test::More ; 5use Test::Fatal; 6 7{ 8 package BankAccount; 9 use Moose; 10 with 'Mongoose::Document' => { -pk => [qw/ drivers_license /] }; 11 has 'name' => is=>'rw', isa=>'Str'; 12 has 'drivers_license' => (is=>'rw', isa=>'Int' ); 13} 14 15package main; 16use lib 't/lib'; 17use MongooseT; 18 19BankAccount->collection->indexes->create_one( [ drivers_license => 1 ], { unique => 1 } ); 20 21{ 22 my $ba1 = BankAccount->new( name=>'Jordi', drivers_license => 112233 ); 23 my $ba2 = BankAccount->new( name=>'Gala', drivers_license => 556677 ); 24 ok( $ba1->save, 'Insert first' ); 25 ok( $ba2->save, 'Insert second' ); 26 is( BankAccount->find->count, 2, 'inserted ok' ); 27} 28{ 29 my $ba1 = BankAccount->new( name => 'Donna', drivers_license => 112233 ); 30 like( 31 exception { $ba1->save }, 32 qr/duplicate key/, 33 "saving a duplicate PK fails" 34 ); 35 36 ok( my $doc = BankAccount->find_one({drivers_license => 112233}), 'Retrieve original'); 37 is( $doc->name, 'Jordi', 'original record still correct' ); 38 is( BankAccount->find->count, 2, 'count ok' ); 39} 40 41done_testing; 42 43