App-wsgetmail
view release on metacpan or search on metacpan
{
my $gov_config = get_test_config();
$gov_config->{resource_url} = 'https://graph.microsoft.us/';
$gov_config->{login_base_url} = 'https://login.microsoftonline.us';
my $gov_useragent = Test::LWP::UserAgent->new;
$gov_useragent->map_response( qr{login\.microsoftonline\.us/} => get_mocked_token_response() );
$gov_useragent->map_response(
qr{graph\.microsoft\.us/v1\.0/me/mailFolders[^/]} => get_mocked_folders_list_response() );
$gov_useragent->map_response( qr{graph\.microsoft\.us/v1\.0/me/mailFolders/} => get_mocked_messages_response() );
local *App::wsgetmail::MS365::Client::_new_useragent = sub { return $gov_useragent };
my $gov_getmail = App::wsgetmail->new( { config => $gov_config } );
my $gov_client = $gov_getmail->client->_client;
is( $gov_client->resource_url, 'https://graph.microsoft.us/', 'government resource_url set correctly' );
is( $gov_client->login_base_url, 'https://login.microsoftonline.us', 'government login_base_url set correctly' );
my $gov_message = $gov_getmail->get_next_message();
isa_ok( $gov_message, 'App::wsgetmail::MS365::Message', 'fetched message from government cloud' );
my $gov_req = $gov_useragent->last_http_request_sent();
like(
$gov_req->uri,
qr{graph\.microsoft\.us/v1\.0/me/mailFolders/},
'government Graph API URL used for message fetch'
);
}
done_testing();
#####
sub get_mocked_folders_list_response {
return HTTP::Response->new('200', 'OK', ['Content-Type' => 'application/json'], '{ "value": [ {
"displayName":"another_folder",
"totalItemCount":2,
"parentFolderId":"AABBBBBAAAAA=",
"childFolderCount":0,
"unreadItemCount":2,
"id":"AAAABBBBCCCCCDDDDDXXXXX="
} ]}');
}
sub get_mocked_token_response {
return HTTP::Response->new('200', 'OK', ['Content-Type' => 'application/json'],
'{"token_type":"Bearer","scope":"email Mail.Read Mail.Read.Shared Mail.ReadWrite Mail.ReadWrite.Shared openid User.Read","expires_in":"3599","ext_expires_in":"3599","expires_on":"1591286563","not_before":"1591282663","r...
);
}
sub get_mocked_messages_response {
my $json = read_file('t/mock_responses/messages.json');
return HTTP::Response->new('200', 'OK', ['Content-Type' => 'application/json'], $json);
}
sub get_test_config {
return {
"command" => 'rt-mailgate',
"command_args" => '--url http://test.local/ --queue "general" --action correspond --debug --no-verify-ssl',
"action_on_fetched" => "mark_as_read",
"username" => 'rt@example.tld',
"user_password" => "password",
"tenant_id" => "abcd1234-xxxx-xxxx-xxxx-123abcde1234",
"client_id" => "abcd1234-xxxx-xxxx-xxxx-1234abcdef99",
"action_on_fetched" => "mark_as_read",
"folder" => "Inbox"
};
}
( run in 0.710 second using v1.01-cache-2.11-cpan-39bf76dae61 )