Fancazzista-Scrap

 view release on metacpan or  search on metacpan

t/RedditScrapper.t  view on Meta::CPAN

use strict;
use warnings;
use Mock::Quick;
use Test::More;
use Data::Dumper;

BEGIN { use_ok('Fancazzista::Scrap::RedditScrapper'); }

use Fancazzista::Scrap::RedditScrapper;

subtest 'test_parsing_reddit_api' => sub {
    my $control = qtakeover(
        'LWP::UserAgent' => (
            request => sub {
                my $response = qobj(
                    is_success      => 1,
                    decoded_content => '{ "data": { "children": [ { "data" : { "title": "Example JS", "url": "http://example.com/js" } } ] } }'
                );
                return $response;
            }
        )
    );
    my %subreddit = ( name => 'js', limit => 10 );
    my $scrapper  = new Fancazzista::Scrap::RedditScrapper();
    my @posts     = $scrapper->getPosts( \%subreddit );
    my %post      = %{ $posts[0] };

    is( scalar @posts, 1, 'Post loaded' );

    is( $post{text}, 'Example JS',            '' );
    is( $post{link}, 'http://example.com/js', '' );
};

subtest 'test_scrap' => sub {
    my $mock = qtakeover(
        'Fancazzista::Scrap::RedditScrapper' => (
            getPosts => sub {
                return ( { link => 'https://redit.com', 'text' => 'aritcle_1' }, { link => 'https://redit.com', 'text' => 'aritcle_2' }, );
            }
        )
    );

    my %config     = ( subreddits => [ { name => "js", } ] );
    my @subreddits = $mock->new()->scrap( \%config );
    my $js         = $subreddits[0];
    my @articles   = @{ $js->{articles} };

    is( $js->{url}, 'https://www.reddit.com/r/js', '' );

    is( scalar @subreddits, 1, 'Subreddit loaded' );
    is( scalar @articles,   2, 'Articles loaded from reddit' );
};

done_testing();



( run in 4.310 seconds using v1.01-cache-2.11-cpan-98e64b0badf )