App-wsgetmail

 view release on metacpan or  search on metacpan

t/basic.t  view on Meta::CPAN

{
    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 )