rebase from live enviornment
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* Internal dependencies
|
||||
*/
|
||||
import { normalizeQueryParams } from '../filters';
|
||||
|
||||
describe( 'normalizeQueryParams', () => {
|
||||
test( 'does not change url if there is no query params', () => {
|
||||
const input = 'https://example.com';
|
||||
const expected = 'https://example.com';
|
||||
|
||||
expect( normalizeQueryParams( input ) ).toBe( expected );
|
||||
} );
|
||||
|
||||
test( 'does not change search term if there is no special character', () => {
|
||||
const input = 'https://example.com?foo=bar&s=asdf1234&baz=qux';
|
||||
const expected = 'https://example.com?foo=bar&s=asdf1234&baz=qux';
|
||||
|
||||
expect( normalizeQueryParams( input ) ).toBe( expected );
|
||||
} );
|
||||
|
||||
test( 'decodes single quote characters', () => {
|
||||
const input = 'https://example.com?foo=bar%27&s=asd%27f1234&baz=qux%27';
|
||||
const expected = "https://example.com?foo=bar'&s=asd'f1234&baz=qux'";
|
||||
|
||||
expect( normalizeQueryParams( input ) ).toBe( expected );
|
||||
} );
|
||||
} );
|
||||
@@ -0,0 +1,122 @@
|
||||
/**
|
||||
* External dependencies
|
||||
*/
|
||||
import { select, dispatch } from '@wordpress/data';
|
||||
|
||||
/**
|
||||
* Internal dependencies
|
||||
*/
|
||||
import { hasNoticesOfType, removeNoticesByStatus } from '../notices';
|
||||
|
||||
jest.mock( '@wordpress/data' );
|
||||
|
||||
describe( 'Notice utils', () => {
|
||||
beforeEach( () => {
|
||||
jest.resetAllMocks();
|
||||
} );
|
||||
describe( 'hasNoticesOfType', () => {
|
||||
it( 'Correctly returns if there are notices of a given type in the core data store', () => {
|
||||
select.mockReturnValue( {
|
||||
getNotices: jest.fn().mockReturnValue( [
|
||||
{
|
||||
id: 'coupon-form',
|
||||
status: 'error',
|
||||
content:
|
||||
'Coupon cannot be removed because it is not already applied to the cart.',
|
||||
spokenMessage:
|
||||
'Coupon cannot be removed because it is not already applied to the cart.',
|
||||
isDismissible: true,
|
||||
actions: [],
|
||||
type: 'default',
|
||||
icon: null,
|
||||
explicitDismiss: false,
|
||||
},
|
||||
] ),
|
||||
} );
|
||||
const hasSnackbarNotices = hasNoticesOfType(
|
||||
'snackbar',
|
||||
'wc/cart'
|
||||
);
|
||||
const hasDefaultNotices = hasNoticesOfType( 'default', 'wc/cart' );
|
||||
expect( hasDefaultNotices ).toBe( true );
|
||||
expect( hasSnackbarNotices ).toBe( false );
|
||||
} );
|
||||
|
||||
it( 'Handles notices being empty', () => {
|
||||
select.mockReturnValue( {
|
||||
getNotices: jest.fn().mockReturnValue( [] ),
|
||||
} );
|
||||
const hasDefaultNotices = hasNoticesOfType( 'default', 'wc/cart' );
|
||||
expect( hasDefaultNotices ).toBe( false );
|
||||
} );
|
||||
} );
|
||||
describe( 'removeNoticesByStatus', () => {
|
||||
it( 'Correctly removes notices of a given status', () => {
|
||||
select.mockReturnValue( {
|
||||
getNotices: jest.fn().mockReturnValue( [
|
||||
{
|
||||
id: 'coupon-form',
|
||||
status: 'error',
|
||||
content:
|
||||
'Coupon cannot be removed because it is not already applied to the cart.',
|
||||
spokenMessage:
|
||||
'Coupon cannot be removed because it is not already applied to the cart.',
|
||||
isDismissible: true,
|
||||
actions: [],
|
||||
type: 'default',
|
||||
icon: null,
|
||||
explicitDismiss: false,
|
||||
},
|
||||
{
|
||||
id: 'address-form',
|
||||
status: 'error',
|
||||
content: 'Address invalid',
|
||||
spokenMessage: 'Address invalid',
|
||||
isDismissible: true,
|
||||
actions: [],
|
||||
type: 'default',
|
||||
icon: null,
|
||||
explicitDismiss: false,
|
||||
},
|
||||
{
|
||||
id: 'some-warning',
|
||||
status: 'warning',
|
||||
content: 'Warning notice.',
|
||||
spokenMessage: 'Warning notice.',
|
||||
isDismissible: true,
|
||||
actions: [],
|
||||
type: 'default',
|
||||
icon: null,
|
||||
explicitDismiss: false,
|
||||
},
|
||||
] ),
|
||||
} );
|
||||
dispatch.mockReturnValue( {
|
||||
removeNotice: jest.fn(),
|
||||
} );
|
||||
removeNoticesByStatus( 'error' );
|
||||
expect( dispatch().removeNotice ).toHaveBeenNthCalledWith(
|
||||
1,
|
||||
'coupon-form',
|
||||
undefined
|
||||
);
|
||||
expect( dispatch().removeNotice ).toHaveBeenNthCalledWith(
|
||||
2,
|
||||
'address-form',
|
||||
undefined
|
||||
);
|
||||
} );
|
||||
|
||||
it( 'Handles notices being empty', () => {
|
||||
select.mockReturnValue( {
|
||||
getNotices: jest.fn().mockReturnValue( [] ),
|
||||
} );
|
||||
|
||||
dispatch.mockReturnValue( {
|
||||
removeNotice: jest.fn(),
|
||||
} );
|
||||
removeNoticesByStatus( 'empty' );
|
||||
expect( dispatch().removeNotice ).not.toBeCalled();
|
||||
} );
|
||||
} );
|
||||
} );
|
||||
@@ -0,0 +1,84 @@
|
||||
/**
|
||||
* Internal dependencies
|
||||
*/
|
||||
import { getImageSrcFromProduct, getImageIdFromProduct } from '../products';
|
||||
|
||||
describe( 'getImageSrcFromProduct', () => {
|
||||
test( 'returns first image src', () => {
|
||||
const imageSrc = getImageSrcFromProduct( {
|
||||
images: [ { src: 'foo.jpg' } ],
|
||||
} );
|
||||
|
||||
expect( imageSrc ).toBe( 'foo.jpg' );
|
||||
} );
|
||||
|
||||
test( 'returns empty string if no product was provided', () => {
|
||||
const imageSrc = getImageSrcFromProduct();
|
||||
|
||||
expect( imageSrc ).toBe( '' );
|
||||
} );
|
||||
|
||||
test( 'returns empty string if product is empty', () => {
|
||||
const imageSrc = getImageSrcFromProduct( {} );
|
||||
|
||||
expect( imageSrc ).toBe( '' );
|
||||
} );
|
||||
|
||||
test( 'returns empty string if product has no images', () => {
|
||||
const imageSrc = getImageSrcFromProduct( { images: null } );
|
||||
|
||||
expect( imageSrc ).toBe( '' );
|
||||
} );
|
||||
|
||||
test( 'returns empty string if product has 0 images', () => {
|
||||
const imageSrc = getImageSrcFromProduct( { images: [] } );
|
||||
|
||||
expect( imageSrc ).toBe( '' );
|
||||
} );
|
||||
|
||||
test( 'returns empty string if product image has no src attribute', () => {
|
||||
const imageSrc = getImageSrcFromProduct( { images: [ {} ] } );
|
||||
|
||||
expect( imageSrc ).toBe( '' );
|
||||
} );
|
||||
} );
|
||||
|
||||
describe( 'getImageIdFromProduct', () => {
|
||||
test( 'returns first image id', () => {
|
||||
const imageUrl = getImageIdFromProduct( {
|
||||
images: [ { id: 123 } ],
|
||||
} );
|
||||
|
||||
expect( imageUrl ).toBe( 123 );
|
||||
} );
|
||||
|
||||
test( 'returns 0 if no product was provided', () => {
|
||||
const imageUrl = getImageIdFromProduct();
|
||||
|
||||
expect( imageUrl ).toBe( 0 );
|
||||
} );
|
||||
|
||||
test( 'returns 0 if product is empty', () => {
|
||||
const imageUrl = getImageIdFromProduct( {} );
|
||||
|
||||
expect( imageUrl ).toBe( 0 );
|
||||
} );
|
||||
|
||||
test( 'returns 0 if product has no images', () => {
|
||||
const imageUrl = getImageIdFromProduct( { images: null } );
|
||||
|
||||
expect( imageUrl ).toBe( 0 );
|
||||
} );
|
||||
|
||||
test( 'returns 0 if product has 0 images', () => {
|
||||
const imageUrl = getImageIdFromProduct( { images: [] } );
|
||||
|
||||
expect( imageUrl ).toBe( 0 );
|
||||
} );
|
||||
|
||||
test( 'returns 0 if product image has no src attribute', () => {
|
||||
const imageUrl = getImageIdFromProduct( { images: [ {} ] } );
|
||||
|
||||
expect( imageUrl ).toBe( 0 );
|
||||
} );
|
||||
} );
|
||||
@@ -0,0 +1,91 @@
|
||||
/**
|
||||
* External dependencies
|
||||
*/
|
||||
import {
|
||||
appendMoreText,
|
||||
removeTags,
|
||||
trimCharacters,
|
||||
trimWords,
|
||||
} from '@woocommerce/utils';
|
||||
|
||||
describe( 'trim-words', () => {
|
||||
describe( 'removeTags', () => {
|
||||
it( 'Removes HTML tags from a string', () => {
|
||||
const string = '<div><a href="/index.php">trim-words.ts</a></div>';
|
||||
const trimmedString = removeTags( string );
|
||||
expect( trimmedString ).toEqual( 'trim-words.ts' );
|
||||
} );
|
||||
} );
|
||||
describe( 'appendMoreText', () => {
|
||||
it( 'Removes trailing punctuation and appends some characters to a string', () => {
|
||||
const string = 'trim-words.ts,';
|
||||
const appendedString = appendMoreText( string, '...' );
|
||||
expect( appendedString ).toEqual( 'trim-words.ts...' );
|
||||
} );
|
||||
} );
|
||||
describe( 'trimWords', () => {
|
||||
const testContent =
|
||||
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.';
|
||||
it( 'Limits words in string and returns trimmed version', () => {
|
||||
const trimmedString = trimWords( testContent, 3 );
|
||||
expect( trimmedString ).toBe(
|
||||
'<p>Lorem ipsum dolor…</p>\n'
|
||||
);
|
||||
} );
|
||||
it( 'Limits words in string and returns trimmed version with custom moreText', () => {
|
||||
const trimmedString = trimWords( testContent, 4, '... read more.' );
|
||||
expect( trimmedString ).toEqual(
|
||||
'<p>Lorem ipsum dolor sit... read more.</p>\n'
|
||||
);
|
||||
} );
|
||||
it( 'Limits words in string and returns trimmed version without autop', () => {
|
||||
const trimmedString = trimWords(
|
||||
testContent,
|
||||
3,
|
||||
'…',
|
||||
false
|
||||
);
|
||||
expect( trimmedString ).toEqual( 'Lorem ipsum dolor…' );
|
||||
} );
|
||||
it( 'does not append anything if the text is shorter than the trim limit', () => {
|
||||
const trimmedString = trimWords( testContent, 100 );
|
||||
expect( trimmedString ).toEqual( '<p>' + testContent + '</p>\n' );
|
||||
} );
|
||||
} );
|
||||
describe( 'trimCharacters', () => {
|
||||
const testContent = 'Lorem ipsum dolor sit amet.';
|
||||
|
||||
it( 'Limits characters in string and returns trimmed version including spaces', () => {
|
||||
const result = trimCharacters( testContent, 10 );
|
||||
expect( result ).toEqual( '<p>Lorem ipsu…</p>\n' );
|
||||
} );
|
||||
it( 'Limits characters in string and returns trimmed version excluding spaces', () => {
|
||||
const result = trimCharacters( testContent, 10, false );
|
||||
expect( result ).toEqual( '<p>Lorem ipsum…</p>\n' );
|
||||
} );
|
||||
it( 'Limits characters in string and returns trimmed version with custom moreText', () => {
|
||||
const result = trimCharacters(
|
||||
testContent,
|
||||
10,
|
||||
false,
|
||||
'... read more.'
|
||||
);
|
||||
expect( result ).toEqual( '<p>Lorem ipsum... read more.</p>\n' );
|
||||
} );
|
||||
it( 'Limits characters in string and returns trimmed version without autop', () => {
|
||||
const result = trimCharacters(
|
||||
testContent,
|
||||
10,
|
||||
false,
|
||||
'... read more.',
|
||||
false
|
||||
);
|
||||
expect( result ).toEqual( 'Lorem ipsum... read more.' );
|
||||
} );
|
||||
|
||||
it( 'does not append anything if the text is shorter than the trim limit', () => {
|
||||
const trimmedString = trimCharacters( testContent, 1000 );
|
||||
expect( trimmedString ).toEqual( '<p>' + testContent + '</p>\n' );
|
||||
} );
|
||||
} );
|
||||
} );
|
||||
Reference in New Issue
Block a user