#!/usr/bin/perl -w

use Test2::V0;
use Test2::Tools::Explain;
use Test2::Plugin::NoWarnings;

use Test::MockModule;

local %ENV = ( HOME => '' );
require Net::Google::Drive::Simple;

my $mock_oauth = Test::MockModule->new('OAuth::Cmdline::GoogleDrive')->redefine( new => sub { bless { '__FAKE__' => 'mocked from ' . $0 }, 'OAuth::Cmdline::GoogleDrive' } )->redefine( authorization_headers => 1 );

my $json = JSON->new->allow_nonref;

my $data      = join "", <DATA>;
my $json_data = $json->decode($data) or die $data;

my $counter = 1;

my $mock_gd = Test::MockModule->new('Net::Google::Drive::Simple::V2')->redefine( path_resolve => sub { ( 'root', 'root' ) } )->redefine( init => 1 )->redefine(
    http_json => sub {
        return $json_data if $counter++ == 1;
        return;
    }
);

my $mock_uri = Test::MockModule->new('URI::https')->redefine( query_form => 1 );

my $drive = Net::Google::Drive::Simple->new;

my $children = $drive->children("/");    # or any other folder /path/location

is scalar @$children, 2, "parsed two files";

my $first_file  = $children->[0];
my $second_file = $children->[1];

isa_ok $first_file,  'Net::Google::Drive::Simple::Item';
isa_ok $second_file, 'Net::Google::Drive::Simple::Item';

is $first_file->id, "0B6rF1m0B6rF1m0B6rF1m0B6rF1m0B6rF1m0B6rF1m", 'id';
is $first_file->Id, $first_file->id,                              'Id eq id';
is $first_file->Id, $first_file->id,                              'ID eq id';

is $first_file->labels => {
    'hidden'     => D(),
    'restricted' => D(),
    'starred'    => D(),
    'trashed'    => D(),
    'viewed'     => D()
  }
  or diag explain $first_file->labels;

ok $JSON::true;
is $first_file->copyable, $JSON::true, "copyable is true";

is $first_file->originalFilename, "sample.vcf",   "originalFilename";
is $first_file->mimeType,         "text/x-vcard", "mimeType";

ok !$first_file->is_folder, "not a folder";
ok $first_file->is_file,    "first file is a file";

is $second_file->title, "second file title", "title for the second_file";

done_testing;

__DATA__
{
   "incompleteSearch" : false,
   "kind" : "drive#fileList",
   "DISABLED--nextPageToken" : "~!!~TOKEN-FOR-NEXT-PAGE",
   "etag" : "\"Q_eTag-to-be-filled\"",
   "items" : [
      {
         "labels" : {
            "viewed" : false,
            "restricted" : false,
            "hidden" : false,
            "starred" : false,
            "trashed" : false
         },
         "id" : "0B6rF1m0B6rF1m0B6rF1m0B6rF1m0B6rF1m0B6rF1m",
         "ownerNames" : [
            "One Username"
         ],
         "webContentLink" : "https://drive.google.com/XXXX",
         "lastModifyingUserName" : "One Username",
         "modifiedDate" : "2019-11-23T23:46:43.405Z",
         "mimeType" : "text/x-vcard",
         "createdDate" : "2019-11-23T07:14:21.000Z",
         "alternateLink" : "https://drive.google.com/XXXX",
         "md5Checksum" : "582a7e3a3caaec413d68a6888aacf5de",
         "etag" : "\"Q_i2RfdQZXXYrzCS85Kek3pR3ww/MTU3NDU1MjgwMzQwNQ\"",
         "fileSize" : "5477",
         "owners" : [
            {
               "permissionId" : "12595973245514046331",
               "displayName" : "One Username",
               "kind" : "drive#user",
               "isAuthenticatedUser" : true,
               "picture" : {
                  "url" : "https://lh3.googleusercontent.com/one-content"
               },
               "emailAddress" : "some+one@gmail.cow"
            }
         ],
         "copyable" : true,
         "headRevisionId" : "0B6rF1mVkRgjCSFR0UkoxVWV6RlNwSW5jbUtQSUtWcENBUms4PQ",
         "shared" : false,
         "markedViewedByMeDate" : "1970-01-01T00:00:00.000Z",
         "kind" : "drive#file",
         "copyRequiresWriterPermission" : false,
         "quotaBytesUsed" : "5477",
         "userPermission" : {
            "etag" : "\"Q_i2RfdQZXXYrzCS85Kek3pR3ww/NDR3wwA6Z8PvXSVX9s5vonPGWt4\"",
            "role" : "owner",
            "selfLink" : "https://www.googleapis.com/--do-something--",
            "type" : "user",
            "kind" : "drive#permission",
            "id" : "me"
         },
         "appDataContents" : false,
         "iconLink" : "https://drive-thirdparty.googleusercontent.com/16/type/text/x-vcard",
         "version" : "2",
         "explicitlyTrashed" : false,
         "selfLink" : "https://www.googleapis.com/--do-something--",
         "capabilities" : {
            "canEdit" : true,
            "canCopy" : true
         },
         "spaces" : [
            "drive"
         ],
         "modifiedByMeDate" : "2019-11-23T23:46:43.405Z",
         "editable" : true,
         "title" : "sample.vcf",
         "embedLink" : "https://drive.google.com/XXXX",
         "fileExtension" : "vcf",
         "writersCanShare" : true,
         "downloadUrl" : "https://doc-0g-1k-docs.googleusercontent.com/docs/securesc/mi1fsmu2njdpep8ch7uemunvn8pruh4k/76q4v93e7n15gd3nhn8qlt0rv1drstam/1577224800000/12595973245514046331/12595973245514046331/0B6rF1mVkRgjCT2RXNWlKNGNJTHNwNndRenZWSkpiX1Y5MWYw?e=download&gd=true",
         "lastModifyingUser" : {
            "isAuthenticatedUser" : true,
            "picture" : {
               "url" : "https://lh3.googleusercontent.com/one-content"
            },
            "emailAddress" : "some+one@gmail.cow",
            "kind" : "drive#user",
            "permissionId" : "12595973245514046331",
            "displayName" : "One Username"
         },
         "originalFilename" : "sample.vcf",
         "parents" : [
            {
               "parentLink" : "https://www.googleapis.com/--do-something--",
               "kind" : "drive#parentReference",
               "id" : "0AKjCUk9PVAjCUk9PVAjCUk9PVAg",
               "isRoot" : true,
               "selfLink" : "https://www.googleapis.com/--do-something--"
            }
         ]
      },
      {
         "spaces" : [
            "drive"
         ],
         "selfLink" : "https://www.googleapis.com/--do-something--",
         "capabilities" : {
            "canEdit" : true,
            "canCopy" : true
         },
         "modifiedByMeDate" : "2019-10-28T15:06:29.199Z",
         "editable" : true,
         "exportLinks" : {
            "application/zip" : "https://docs.google.com//--doc-doc-doc--",
            "application/vnd.oasis.opendocument.text" : "https://docs.google.com//--doc-doc-doc--",
            "application/epub+zip" : "https://docs.google.com//--doc-doc-doc--",
            "text/html" : "https://docs.google.com//--doc-doc-doc--",
            "application/pdf" : "https://docs.google.com//--doc-doc-doc--",
            "application/rtf" : "https://docs.google.com//--doc-doc-doc--",
            "text/plain" : "https://docs.google.com//--doc-doc-doc--",
            "application/vnd.openxmlformats-officedocument.wordprocessingml.document" : "https://docs.google.com//--doc-doc-doc--"
         },
         "embedLink" : "https://docs.google.com//--doc-doc-doc--",
         "title" : "second file title",
         "lastModifyingUser" : {
            "permissionId" : "14292513505818522550",
            "kind" : "drive#user",
            "displayName" : "XYZ",
            "picture" : {
               "url" : "https://lh3.googleusercontent.com/one-content"
            },
            "emailAddress" : "someone@gmail.com",
            "isAuthenticatedUser" : false
         },
         "parents" : [
            {
               "id" : "0AKrF1mVkR1mVkR1mVkR",
               "kind" : "drive#parentReference",
               "parentLink" : "https://www.googleapis.com/--do-something--",
               "selfLink" : "https://www.googleapis.com/--do-something--",
               "isRoot" : true
            },
            {
               "selfLink" : "https://www.googleapis.com/--do-something--",
               "isRoot" : false,
               "id" : "0B2BS17zJM517zJM517zJM5",
               "parentLink" : "https://www.googleapis.com/--do-something--",
               "kind" : "drive#parentReference"
            }
         ],
         "writersCanShare" : true,
         "copyRequiresWriterPermission" : false,
         "quotaBytesUsed" : "0",
         "userPermission" : {
            "id" : "me",
            "kind" : "drive#permission",
            "selfLink" : "https://www.googleapis.com/--do-something--",
            "type" : "user",
            "role" : "owner",
            "etag" : "\"Q_i2RfdQZXXYrzCS85Kek3pR3ww/s32ORfrsqoiGnY6WHuQGippj0zs\""
         },
         "appDataContents" : false,
         "iconLink" : "https://drive-thirdparty.googleusercontent.com/16/type/application/vnd.google-apps.document",
         "version" : "143",
         "explicitlyTrashed" : false,
         "etag" : "\"Q_i2RfdQZXXYrzCS85Kek3pR3ww/MTU3NDA2MTAxOTAyMg\"",
         "owners" : [
            {
               "isAuthenticatedUser" : true,
               "emailAddress" : "some+one@gmail.cow",
               "picture" : {
                  "url" : "https://lh3.googleusercontent.com/one-content"
               },
               "permissionId" : "12595973245514046331",
               "displayName" : "One Username",
               "kind" : "drive#user"
            }
         ],
         "lastViewedByMeDate" : "2019-10-28T15:06:29.199Z",
         "copyable" : true,
         "shared" : true,
         "markedViewedByMeDate" : "1970-01-01T00:00:00.000Z",
         "kind" : "drive#file",
         "labels" : {
            "starred" : false,
            "trashed" : false,
            "hidden" : false,
            "viewed" : true,
            "restricted" : false
         },
         "modifiedDate" : "2019-11-18T07:10:19.022Z",
         "id" : "UTsIbpGb8HtlspGb8HtlspGb8HtlspGb8HtDRmZT",
         "lastModifyingUserName" : "Another User",
         "ownerNames" : [
            "One Username"
         ],
         "thumbnailLink" : "https://docs.google.com//--doc-doc-doc--",
         "mimeType" : "application/vnd.google-apps.document",
         "createdDate" : "2019-10-25T21:13:58.283Z",
         "alternateLink" : "https://docs.google.com//--doc-doc-doc--"
      }
   ],
   "selfLink" : "https://www.googleapis.com/--do-something--",
   "nextLink" : "https://www.googleapis.com/--do-something--"
}