#!perl
use Cassandane::Tiny;

sub test_rename_paths
    :MetaPartition :NoAltNameSpace
    ($self)
{
    my $imaptalk = $self->{store}->get_client();

    $imaptalk->create("INBOX.rename-src.sub") || die;

    $self->{store}->set_folder("INBOX.rename-src.sub");
    $self->{store}->write_begin();
    my $msg1 = $self->{gen}->generate(subject => "subject 1");
    $self->{store}->write_message($msg1, flags => ["\\Seen", "\$NotJunk"]);
    $self->{store}->write_end();

    # check source files exist
    my $srcdata = $self->{instance}->run_mbpath('user.cassandane.rename-src.sub');
    -d "$srcdata->{data}" || die;
    -d "$srcdata->{meta}" || die;
    -f "$srcdata->{meta}/cyrus.header" || die;
    -f "$srcdata->{meta}/cyrus.index" || die;
    -f "$srcdata->{data}/cyrus.cache" || die;
    -f "$srcdata->{data}/1." || die;

    # and target don't
    my $dstdata = eval { $self->{instance}->run_mbpath('user.cassandane.rename-dst.sub') };
    $self->assert(not $dstdata or (not -d $dstdata->{data} and not -d $dstdata->{meta}));

    $imaptalk->rename("INBOX.rename-src.sub", "INBOX.rename-dst.sub");

    # check dest files exist
    $dstdata = $self->{instance}->run_mbpath('user.cassandane.rename-dst.sub');
    -d "$dstdata->{data}" || die;
    -d "$dstdata->{meta}" || die;
    -f "$dstdata->{meta}/cyrus.header" || die;
    -f "$dstdata->{meta}/cyrus.index" || die;
    -f "$dstdata->{data}/cyrus.cache" || die;
    -f "$dstdata->{data}/1." || die;

    # and src don't any more (unless UUID when the paths are the same!)
    $srcdata->{data} ne $dstdata->{data} && -d "$srcdata->{data}" && die;
    $srcdata->{meta} ne $dstdata->{meta} && -d "$srcdata->{meta}" && die;
}
