The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use strict;
use warnings;

use Test::More ;
use Test::Fatal;

{
	package BankAccount;
	use Moose;
	with 'Mongoose::Document' => { -pk => [qw/ drivers_license /] };
	has 'name' => is=>'rw', isa=>'Str';
	has 'drivers_license' => (is=>'rw', isa=>'Int' );
}

package main;
use lib 't/lib';
use MongooseT;

BankAccount->collection->ensure_index( { "drivers_license" => 1 }, { unique => 1 } );

{
	my $ba1 = BankAccount->new( name=>'Jordi', drivers_license => 112233 );
	my $ba2 = BankAccount->new( name=>'Gala',  drivers_license => 556677 );
	ok( $ba1->save, 'Insert first' );
	ok( $ba2->save, 'Insert second' );
	is( BankAccount->find->count, 2, 'inserted ok' );
}
{
	my $ba1 = BankAccount->new( name => 'Donna', drivers_license => 112233 );
	like(
	    exception { $ba1->save },
	    qr/duplicate key/,
	    "saving a duplicate PK fails"
	);

	ok( my $doc = BankAccount->find_one({drivers_license => 112233}), 'Retrieve original');
	is( $doc->name, 'Jordi', 'original record still correct' );
	is( BankAccount->find->count, 2, 'count ok' );
}

done_testing;