#!perl
############
# This test performs checks of how product pictures are handled
############
use Test::More;
unless ( $ENV{XTATIK_TESTING} ) {
diag 'Set XTATIK_TESTING env var to true, to run the tests';
ok 1; done_testing; exit;
}
diag join "\n", '', '', '######################',
'NOTE: To pass, this test requires your silos to contain these files:',
( map "\tproduct-pics/$_",
qw/001-TEST1.jpg 001-TEST1___2.jpg 001-TEST1___blah42.jpg
001-TEST2.jpg 001-TEST2___blah42.jpg
001-TEST3.jpg 001-TEST4.jpg/
),
'And NOT contain these files:',
( map "\tproduct-pics/$_",
qw/001-TEST5.jpg 001-TEST6.jpg 001-TEST6___42.jpg/
),
'######################', '', '';
use Test::Mojo::WithRoles 'ElementCounter';
my $t = Test::Mojo::WithRoles->new('XTaTIK');
use lib 't';
eval 'use Test::XTaTIK';
Test::XTaTIK->load_test_products( _get_test_products() );
{ # Check pic display on shop page
$t->dive_reset->get_ok('/products')->status_is(200)
->element_count_is('.prod img', 6)
->element_count_is('[src="/product-pics/001-TEST1.jpg?'
. '001-TEST1___2.jpg?001-TEST1___blah42.jpg"]', 1)
->element_count_is('[src="/product-pics/001-TEST2.jpg?'
. '001-TEST2___blah42.jpg"]', 1)
->element_count_is('[src="/product-pics/001-TEST3.jpg"]', 1)
->element_count_is('[src="/product-pics/001-TEST4.jpg"]', 1)
->element_count_is('[src="/product-pics/nopic.png"]', 2)
}
{ # Check pic display on individual product pages
$t->dive_reset->get_ok('/product/Test-Product-1-001-TEST1')->status_is(200)
->element_exists('[src="/product-pics/001-TEST1.jpg"]')
->element_exists('[src="/product-pics/001-TEST1___2.jpg"]')
->element_exists('[src="/product-pics/001-TEST1___blah42.jpg"]')
->element_exists_not('[src="/product-pics/nopic.png"]')
->element_count_is('.prod_pic', 3)
->get_ok('/product/Test-Product-2-001-TEST2')->status_is(200)
->element_exists('[src="/product-pics/001-TEST2.jpg"]')
->element_exists('[src="/product-pics/001-TEST2___blah42.jpg"]')
->element_exists_not('[src="/product-pics/nopic.png"]')
->element_count_is('.prod_pic', 2)
->get_ok('/product/Test-Product-3-001-TEST3')->status_is(200)
->element_exists('[src="/product-pics/001-TEST3.jpg"]')
->element_exists_not('[src="/product-pics/nopic.png"]')
->element_count_is('.prod_pic', 1)
->get_ok('/product/Test-Product-4-001-TEST4')->status_is(200)
->element_exists('[src="/product-pics/001-TEST4.jpg"]')
->element_exists_not('[src="/product-pics/nopic.png"]')
->element_count_is('.prod_pic', 1)
->get_ok('/product/Test-Product-5-001-TEST5')->status_is(200)
->element_exists_not('[src="/product-pics/001-TEST5.jpg"]')
->element_exists('[src="/product-pics/nopic.png"]')
->element_count_is('.prod_pic', 1)
->get_ok('/product/Test-Product-6-001-TEST6')->status_is(200)
->element_exists_not('[src="/product-pics/001-TEST6.jpg"]')
->element_exists_not('[src="/product-pics/001-TEST6___42.jpg"]')
->element_exists('[src="/product-pics/nopic.png"]')
->element_count_is('.prod_pic', 1)
}
{ # Check hot products image display
# Set hot products
$t->post_ok('/login', form => { login => 'admin', pass => 'test'} )
->get_ok('/user/hot-products')
->post_ok('/user/hot-products', form => {
hot_products => join ' ', map "001-TEST$_", 1..6
})
# Validate images
->get_ok('/')->status_is(200)
->element_count_is('#hot_products img', 6)
->element_count_is('[src="/product-pics/001-TEST1.jpg?'
. '001-TEST1___2.jpg?001-TEST1___blah42.jpg"]', 1)
->element_count_is('[src="/product-pics/001-TEST2.jpg?'
. '001-TEST2___blah42.jpg"]', 1)
->element_count_is('[src="/product-pics/001-TEST3.jpg"]', 1)
->element_count_is('[src="/product-pics/001-TEST4.jpg"]', 1)
->element_count_is('[src="/product-pics/nopic.png"]', 2)
}
{ # Add products to cart and check correct display on checkout page
for ( 1..6 ) {
$t->get_ok("/product/Test-Product-$_-001-TEST$_");
my $csrf = $t->tx->res->dom->at('[name=csrf_token]')->attr('value');
$t->post_ok('/cart/add' => form => {
csrf_token => $csrf,
number => "001-TEST$_",
quantity => 1,
})->status_is(200);
}
$t->dive_reset->get_ok('/cart/')->status_is(200)
->element_count_is('.cart img', 6)
->element_count_is('[src="/product-pics/001-TEST1.jpg?'
. '001-TEST1___2.jpg?001-TEST1___blah42.jpg"]', 1)
->element_count_is('[src="/product-pics/001-TEST2.jpg?'
. '001-TEST2___blah42.jpg"]', 1)
->element_count_is('[src="/product-pics/001-TEST3.jpg"]', 1)
->element_count_is('[src="/product-pics/001-TEST4.jpg"]', 1)
->element_count_is('[src="/product-pics/nopic.png"]', 2)
}
Test::XTaTIK->restore_db;
done_testing();
sub _get_test_products {
return [
{ }, # 001-TEST1.jpg 001-TEST1___2.jpg 001-TEST1___blah42.jpg
{ image => '001-TEST2.jpg?001-TEST2___blah42.jpg' },
{ }, # 001-TEST3.jpg
{ image => '001-TEST4.jpg' },
{ }, # Missing 001-TEST5.jpg
{ image => '001-TEST6.jpg?001-TEST6___42.jpg' }, # both missing
];
}