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

use strict;
if (!$ENV{'DROPBOX_APP_KEY'} or !$ENV{'DROPBOX_APP_SECRET'} or !$ENV{'DROPBOX_REFRESH_TOKEN'}) {
plan skip_all => 'missing App Key, App Secret, and/or Refresh Token';
}
my $dropbox = WebService::Dropbox->new({
key => $ENV{'DROPBOX_APP_KEY'},
secret => $ENV{'DROPBOX_APP_SECRET'},
env_proxy => 1,
});
$dropbox->debug;
$dropbox->verbose;
### initial authorization to get a refresh token
#my $url = $dropbox->authorize({ token_access_type => 'offline' });
#print "Go To $url\n";
#print "Enter code : ";
#chomp( my $code = <STDIN> );
#my $result = $dropbox->token($code) or die $dropbox->error;
#printf("Refresh Token: %s\nAccess Token: %s\n", $result->{'refresh_token'}, $result->{'access_token'});
#$VAR1 = {
# 'account_id' => '...',
# 'uid' => '...',
# 'refresh_token' => '...',
# 'scope' => 'account_info.read files.content.read files.metadata.read sharing.read ...',
# 'expires_in' => 14399,
# 'token_type' => 'bearer',
# 'access_token' => '...',
# };
## Test getting an access token when you only have the refresh token
my $result = $dropbox->refresh_access_token($ENV{'DROPBOX_REFRESH_TOKEN'}) or die $dropbox->error;
is $dropbox->res->code, 200;
is $result->{'token_type'}, 'bearer';
my $token = $result->{'access_token'};
like $token, qr/\S+/;
done_testing();