#!perl

BEGIN {
    unless ($ENV{'TESCO_APP_KEY'}
        && $ENV{'TESCO_DEVELOPER_KEY'}
        && $ENV{'TESCO_EMAIL'}
        && $ENV{'TESCO_PASSWORD'})
    {
        require Test::More;
        Test::More::plan(skip_all =>
              'Set the following environment variables or these tests are skipped: '
              . "\n"
              . q/ $ENV{'TESCO_APP_KEY'} $ENV{'TESCO_DEVELOPER_KEY'} $ENV{'TESCO_EMAIL'} $ENV{'TESCO_PASSWORD'} /
        );
    }
}

use strict;
use warnings;

use Test::Most tests => 18;
use lib 'lib';

use_ok('WebService::Tesco::API');


my $tesco = WebService::Tesco::API->new(
    app_key       => $ENV{'TESCO_APP_KEY'},
    developer_key => $ENV{'TESCO_DEVELOPER_KEY'},
);

isa_ok($tesco, 'WebService::Tesco::API', 'Create a new instance');

can_ok(
    $tesco,
    qw ( new get login session_get amend_order cancel_amend_order
      change_basket choose_delivery_slot latest_app_version
      list_delivery_slots list_basket list_basket_summary
      list_favourites list_pending_orders list_product_categories
      list_product_offers list_products_by_category product_search
      ready_for_checkout server_date_time save_amend_order )
);

my $result = $tesco->login(
    {   email    => $ENV{'TESCO_EMAIL'},
        password => $ENV{'TESCO_PASSWORD'},
    }
);


is($result->{StatusCode}, 0, 'Correct status code for login');
is($tesco->list_delivery_slots()->{StatusCode},
    0, 'Correct status code for list_delivery_slots');
is($tesco->list_basket()->{StatusCode},
    0, 'Correct status code for list_basket');
is($tesco->list_basket({fast => 'Y'})->{StatusCode},
    0, 'Correct status code for list_basket with fast results');
is($tesco->list_basket_summary()->{StatusCode},
    0, 'Correct status code for list_basket_summary');
is($tesco->list_basket_summary({includeproducts => 'Y'})->{StatusCode},
    0, 'Correct status code for list_basket_summary with products included');
is($tesco->list_favourites({page => 1})->{StatusCode},
    0, 'Correct status code for list_favourites');
is($tesco->list_pending_orders()->{StatusCode},
    0, 'Correct status code for list_pending_orders');
is($tesco->list_product_categories()->{StatusCode},
    0, 'Correct status code for list_product_categories');
is($tesco->list_product_offers({page => 1})->{StatusCode},
    0, 'Correct status code for list_product_offers');
is($tesco->list_products_by_category({category => 18})->{StatusCode},
    0, 'Correct status code for list_products_by_category');
is($tesco->list_products_by_category()->{StatusCode}, 150,
    'Correct status code for list_products_by_category with no category passed'
);
is( $tesco->product_search({searchtext => 'Turnip', extendedinfo => 'Y'})
      ->{StatusCode},
    0,
    'Correct status code for product_search'
);
is($tesco->ready_for_checkout()->{StatusCode},
    100, 'Correct status code for checkout, No delivery slot reserved');
is($tesco->server_date_time()->{StatusCode},
    0, 'Correct status code for server_date_time');