The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

use strict;
use Encode;
use File::Basename qw(dirname);
if (!$ENV{'DROPBOX_APP_KEY'} or !$ENV{'DROPBOX_APP_SECRET'} or !$ENV{'DROPBOX_ACCESS_TOKEN'}) {
plan skip_all => 'missing App Key or App Secret';
}
my $dropbox = WebService::Dropbox->new({
key => $ENV{'DROPBOX_APP_KEY'},
secret => $ENV{'DROPBOX_APP_SECRET'},
access_token => $ENV{'DROPBOX_ACCESS_TOKEN'},
env_proxy => 1,
});
$dropbox->debug;
$dropbox->verbose;
$dropbox->get_current_account or die $dropbox->error;
my $exists = $dropbox->get_metadata('/make_test_folder');
unless ($exists) {
$dropbox->create_folder('/make_test_folder') or die $dropbox->error;
is $dropbox->res->code, 200, "delete make_test_folder";
}
my $file_mark = decode_utf8('\'!"#$%&(=~|@`{}[]+*;,<>_?-^ 日本語.txt');
# upload
my $fh_put = File::Temp->new;
$fh_put->print('test.test.test.');
$fh_put->flush;
$fh_put->seek(0, 0);
$dropbox->upload('/make_test_folder/' . $file_mark, $fh_put) or die $dropbox->error;
$fh_put->close;
# download
my $fh_get = File::Temp->new;
$dropbox->download('/make_test_folder/' . $file_mark, $fh_get) or die $dropbox->error;
$fh_get->flush;
$fh_get->seek(0, 0);
is $fh_get->getline, 'test.test.test.', 'download success.';
$fh_get->close;
$fh_get = File::Temp->new;
$dropbox->download('/make_test_folder/' . $file_mark, $fh_get, { headers => ['Range' => 'bytes=10-14'] }) or die $dropbox->error;
$fh_get->flush;
$fh_get->seek(0, 0);
is $fh_get->getline, 'test.', 'download range success.';
$fh_get->close;
$dropbox->use_lwp;
$fh_get = File::Temp->new;
$dropbox->download('/make_test_folder/' . $file_mark, $fh_get, { headers => ['Range' => 'bytes=10-14'] }) or die $dropbox->error;
$fh_get->flush;
$fh_get->seek(0, 0);
is $fh_get->getline, 'test.', 'download range success.';
$fh_get->close;
done_testing();