The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strictures 1;
use Test::More;
use FindBin;

use System::Introspector::Probe::Packages::Apt;

my $probe = System::Introspector::Probe::Packages::Apt->new;
my $data  = $probe->gather;

ok(scalar(keys %$data), 'received packages');
ok(
    not(grep {
        not exists $_->{version}
    } values %{$data->{installed}{packages}}),
    'versions',
);

do {
    local $ENV{PATH} = join ':', "$FindBin::Bin/bin", $ENV{PATH};
    my $source_list = "$FindBin::Bin/data/apt/sources.list";
    my $source_list_dir = "$FindBin::Bin/data/apt/sources.list.d";
    my $probe = System::Introspector::Probe::Packages::Apt->new(
        apt_update => 1,
        apt_update_after => 0,
        apt_sources => $source_list,
        apt_sources_dir => $source_list_dir,
    );
    my $data = $probe->gather;
    is_deeply $data->{upgradable}, {
        actions => {
            inst => { foo => '(some foo info)' },
            remv => { baz => '(some baz info)' },
        },
    }, 'upgradable packages';
    ok $data->{update}{last}, 'has last update time';
    ok $data->{update}{run}, 'has apt run state';
    is_deeply $data->{sources}, {
        config => {
            sources_list => {
                file_name => $source_list,
                body => join "", map "$_\n",
                    "deb http://main.example.com foo",
                    "deb http://main.example.com bar",
            },
            sources_list_dir => {
                files => {
                    "other.list" => {
                        file_name => "$source_list_dir/other.list",
                        body => join "", map "$_\n",
                            "deb http://other.example.com foo",
                            "deb http://other.example.com bar",
                    },
                },
            }
        },
    }, 'sources';
};

done_testing;