Skip to content

Commit 0be5474

Browse files
committed
fix(foxy-experimental-add-to-cart-builder): use weak encoding for urls for compatibility with the encoding api
1 parent c3cbc19 commit 0be5474

File tree

3 files changed

+435
-165
lines changed

3 files changed

+435
-165
lines changed

src/elements/public/ExperimentalAddToCartBuilder/ExperimentalAddToCartBuilder.test.ts

Lines changed: 241 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -249,17 +249,44 @@ describe('ExperimentalAddToCartBuilder', () => {
249249
expect(control).to.exist;
250250
});
251251

252-
it('renders Unavailable message when preview is not available', async () => {
252+
it('renders SKU Required message when appropriate', async () => {
253253
const router = createRouter();
254+
255+
await router.handleRequest(
256+
new Request('https://demo.api/hapi/stores/0', {
257+
method: 'PATCH',
258+
body: JSON.stringify({ use_cart_validation: true }),
259+
})
260+
)?.handlerPromise;
261+
254262
const element1 = await fixture<Builder>(
255-
html` <foxy-experimental-add-to-cart-builder> </foxy-experimental-add-to-cart-builder> `
263+
html`
264+
<foxy-experimental-add-to-cart-builder
265+
default-domain="foxycart.com"
266+
encode-helper="https://demo.api/virtual/encode"
267+
locale-codes="https://demo.api/hapi/property_helpers/7"
268+
store="https://demo.api/hapi/stores/0"
269+
@fetch=${(evt: FetchEvent) => router.handleEvent(evt)}
270+
>
271+
</foxy-experimental-add-to-cart-builder>
272+
`
256273
);
257274

258-
const spinnerSelector = 'foxy-spinner[infer="unavailable"][state="busy"]';
259-
const labelSelector = 'foxy-i18n[infer="unavailable"][key="loading_busy"]';
275+
await waitForIdle(element1);
276+
await element1.requestUpdate();
277+
278+
const spinnerSelector = 'foxy-spinner[infer="unavailable"][state="paused"]';
279+
const labelSelector = 'foxy-i18n[infer="unavailable"][key="paused_code_required"]';
260280
expect(element1.renderRoot.querySelector(spinnerSelector)).to.exist;
261281
expect(element1.renderRoot.querySelector(labelSelector)).to.exist;
262282

283+
await router.handleRequest(
284+
new Request('https://demo.api/hapi/stores/0', {
285+
method: 'PATCH',
286+
body: JSON.stringify({ use_cart_validation: false }),
287+
})
288+
)?.handlerPromise;
289+
263290
const element2 = await fixture<Builder>(
264291
html`
265292
<foxy-experimental-add-to-cart-builder
@@ -279,7 +306,7 @@ describe('ExperimentalAddToCartBuilder', () => {
279306
expect(element2.renderRoot.querySelector(labelSelector)).to.not.exist;
280307
});
281308

282-
it('renders SKU Required message when appropriate', async () => {
309+
it('renders HTML Entities Unsupported message when appropriate', async () => {
283310
const router = createRouter();
284311

285312
await router.handleRequest(
@@ -302,11 +329,12 @@ describe('ExperimentalAddToCartBuilder', () => {
302329
`
303330
);
304331

332+
element1.edit({ items: [{ name: 'Test&quot;', code: 'TEST', price: 25, custom_options: [] }] });
305333
await waitForIdle(element1);
306334
await element1.requestUpdate();
307335

308-
const spinnerSelector = 'foxy-spinner[infer="unavailable"][state="paused"]';
309-
const labelSelector = 'foxy-i18n[infer="unavailable"][key="paused_code_required"]';
336+
const spinnerSelector = 'foxy-spinner[infer="unavailable"][state="error"]';
337+
const labelSelector = 'foxy-i18n[infer="unavailable"][key="error_html_entities_present"]';
310338
expect(element1.renderRoot.querySelector(spinnerSelector)).to.exist;
311339
expect(element1.renderRoot.querySelector(labelSelector)).to.exist;
312340

@@ -336,7 +364,7 @@ describe('ExperimentalAddToCartBuilder', () => {
336364
expect(element2.renderRoot.querySelector(labelSelector)).to.not.exist;
337365
});
338366

339-
it('renders HTML Entities Unsupported message when appropriate', async () => {
367+
it('renders Double Quotes Unsupported message when appropriate', async () => {
340368
const router = createRouter();
341369

342370
await router.handleRequest(
@@ -359,12 +387,12 @@ describe('ExperimentalAddToCartBuilder', () => {
359387
`
360388
);
361389

362-
element1.edit({ items: [{ name: 'Test&quot;', code: 'TEST', price: 25, custom_options: [] }] });
390+
element1.edit({ items: [{ name: 'Test"', code: 'TEST', price: 25, custom_options: [] }] });
363391
await waitForIdle(element1);
364392
await element1.requestUpdate();
365393

366394
const spinnerSelector = 'foxy-spinner[infer="unavailable"][state="error"]';
367-
const labelSelector = 'foxy-i18n[infer="unavailable"][key="error_html_entities_present"]';
395+
const labelSelector = 'foxy-i18n[infer="unavailable"][key="error_double_quotes_present"]';
368396
expect(element1.renderRoot.querySelector(spinnerSelector)).to.exist;
369397
expect(element1.renderRoot.querySelector(labelSelector)).to.exist;
370398

@@ -394,7 +422,7 @@ describe('ExperimentalAddToCartBuilder', () => {
394422
expect(element2.renderRoot.querySelector(labelSelector)).to.not.exist;
395423
});
396424

397-
it('renders Double Quotes Unsupported message when appropriate', async () => {
425+
it('renders Special Characters Present message when appropriate', async () => {
398426
const router = createRouter();
399427

400428
await router.handleRequest(
@@ -417,13 +445,211 @@ describe('ExperimentalAddToCartBuilder', () => {
417445
`
418446
);
419447

420-
element1.edit({ items: [{ name: 'Test"', code: 'TEST', price: 25, custom_options: [] }] });
448+
element1.edit({ items: [{ name: 'Test&', code: 'TEST', price: 25, custom_options: [] }] });
421449
await waitForIdle(element1);
422450
await element1.requestUpdate();
423451

424-
const spinnerSelector = 'foxy-spinner[infer="unavailable"][state="error"]';
425-
const labelSelector = 'foxy-i18n[infer="unavailable"][key="error_double_quotes_present"]';
426-
expect(element1.renderRoot.querySelector(spinnerSelector)).to.exist;
452+
const labelSelector = 'foxy-i18n[infer="unavailable"][key="error_special_characters_present"]';
453+
expect(element1.renderRoot.querySelector(labelSelector)).to.exist;
454+
455+
await router.handleRequest(
456+
new Request('https://demo.api/hapi/stores/0', {
457+
method: 'PATCH',
458+
body: JSON.stringify({ use_cart_validation: false }),
459+
})
460+
)?.handlerPromise;
461+
462+
const element2 = await fixture<Builder>(
463+
html`
464+
<foxy-experimental-add-to-cart-builder
465+
default-domain="foxycart.com"
466+
encode-helper="https://demo.api/virtual/encode"
467+
locale-codes="https://demo.api/hapi/property_helpers/7"
468+
store="https://demo.api/hapi/stores/0"
469+
@fetch=${(evt: FetchEvent) => router.handleEvent(evt)}
470+
>
471+
</foxy-experimental-add-to-cart-builder>
472+
`
473+
);
474+
475+
await waitForIdle(element2);
476+
await element2.requestUpdate();
477+
expect(element2.renderRoot.querySelector(labelSelector)).to.not.exist;
478+
});
479+
480+
it('renders Configurable Price Unsupported message when appropriate', async () => {
481+
const router = createRouter();
482+
483+
await router.handleRequest(
484+
new Request('https://demo.api/hapi/stores/0', {
485+
method: 'PATCH',
486+
body: JSON.stringify({ use_cart_validation: true }),
487+
})
488+
)?.handlerPromise;
489+
490+
const element1 = await fixture<Builder>(
491+
html`
492+
<foxy-experimental-add-to-cart-builder
493+
default-domain="foxycart.com"
494+
encode-helper="https://demo.api/virtual/encode"
495+
locale-codes="https://demo.api/hapi/property_helpers/7"
496+
store="https://demo.api/hapi/stores/0"
497+
@fetch=${(evt: FetchEvent) => router.handleEvent(evt)}
498+
>
499+
</foxy-experimental-add-to-cart-builder>
500+
`
501+
);
502+
503+
element1.edit({
504+
items: [
505+
{
506+
name: 'Test',
507+
code: 'TEST',
508+
price: 25,
509+
price_configurable: true,
510+
custom_options: [],
511+
},
512+
],
513+
});
514+
515+
await waitForIdle(element1);
516+
await element1.requestUpdate();
517+
518+
const labelSelector = 'foxy-i18n[infer="unavailable"][key="error_price_configurable"]';
519+
expect(element1.renderRoot.querySelector(labelSelector)).to.exist;
520+
521+
await router.handleRequest(
522+
new Request('https://demo.api/hapi/stores/0', {
523+
method: 'PATCH',
524+
body: JSON.stringify({ use_cart_validation: false }),
525+
})
526+
)?.handlerPromise;
527+
528+
const element2 = await fixture<Builder>(
529+
html`
530+
<foxy-experimental-add-to-cart-builder
531+
default-domain="foxycart.com"
532+
encode-helper="https://demo.api/virtual/encode"
533+
locale-codes="https://demo.api/hapi/property_helpers/7"
534+
store="https://demo.api/hapi/stores/0"
535+
@fetch=${(evt: FetchEvent) => router.handleEvent(evt)}
536+
>
537+
</foxy-experimental-add-to-cart-builder>
538+
`
539+
);
540+
541+
await waitForIdle(element2);
542+
await element2.requestUpdate();
543+
expect(element2.renderRoot.querySelector(labelSelector)).to.not.exist;
544+
});
545+
546+
it('renders Duplicate Custom Options Unsupported message when appropriate', async () => {
547+
const router = createRouter();
548+
549+
await router.handleRequest(
550+
new Request('https://demo.api/hapi/stores/0', {
551+
method: 'PATCH',
552+
body: JSON.stringify({ use_cart_validation: true }),
553+
})
554+
)?.handlerPromise;
555+
556+
const element1 = await fixture<Builder>(
557+
html`
558+
<foxy-experimental-add-to-cart-builder
559+
default-domain="foxycart.com"
560+
encode-helper="https://demo.api/virtual/encode"
561+
locale-codes="https://demo.api/hapi/property_helpers/7"
562+
store="https://demo.api/hapi/stores/0"
563+
@fetch=${(evt: FetchEvent) => router.handleEvent(evt)}
564+
>
565+
</foxy-experimental-add-to-cart-builder>
566+
`
567+
);
568+
569+
element1.edit({
570+
items: [
571+
{
572+
name: 'Test',
573+
code: 'TEST',
574+
price: 25,
575+
custom_options: [
576+
{ name: 'foo', value: 'bar' },
577+
{ name: 'foo', value: 'baz' },
578+
],
579+
},
580+
],
581+
});
582+
583+
await waitForIdle(element1);
584+
await element1.requestUpdate();
585+
586+
const labelSelector =
587+
'foxy-i18n[infer="unavailable"][key="error_duplicate_custom_option_names"]';
588+
expect(element1.renderRoot.querySelector(labelSelector)).to.exist;
589+
590+
await router.handleRequest(
591+
new Request('https://demo.api/hapi/stores/0', {
592+
method: 'PATCH',
593+
body: JSON.stringify({ use_cart_validation: false }),
594+
})
595+
)?.handlerPromise;
596+
597+
const element2 = await fixture<Builder>(
598+
html`
599+
<foxy-experimental-add-to-cart-builder
600+
default-domain="foxycart.com"
601+
encode-helper="https://demo.api/virtual/encode"
602+
locale-codes="https://demo.api/hapi/property_helpers/7"
603+
store="https://demo.api/hapi/stores/0"
604+
@fetch=${(evt: FetchEvent) => router.handleEvent(evt)}
605+
>
606+
</foxy-experimental-add-to-cart-builder>
607+
`
608+
);
609+
610+
await waitForIdle(element2);
611+
await element2.requestUpdate();
612+
expect(element2.renderRoot.querySelector(labelSelector)).to.not.exist;
613+
});
614+
615+
it('renders Configurable Value In Custom Options Unsupported message when appropriate', async () => {
616+
const router = createRouter();
617+
618+
await router.handleRequest(
619+
new Request('https://demo.api/hapi/stores/0', {
620+
method: 'PATCH',
621+
body: JSON.stringify({ use_cart_validation: true }),
622+
})
623+
)?.handlerPromise;
624+
625+
const element1 = await fixture<Builder>(
626+
html`
627+
<foxy-experimental-add-to-cart-builder
628+
default-domain="foxycart.com"
629+
encode-helper="https://demo.api/virtual/encode"
630+
locale-codes="https://demo.api/hapi/property_helpers/7"
631+
store="https://demo.api/hapi/stores/0"
632+
@fetch=${(evt: FetchEvent) => router.handleEvent(evt)}
633+
>
634+
</foxy-experimental-add-to-cart-builder>
635+
`
636+
);
637+
638+
element1.edit({
639+
items: [
640+
{
641+
name: 'Test',
642+
code: 'TEST',
643+
price: 25,
644+
custom_options: [{ name: 'foo', value: 'bar', value_configurable: true }],
645+
},
646+
],
647+
});
648+
649+
await waitForIdle(element1);
650+
await element1.requestUpdate();
651+
652+
const labelSelector = 'foxy-i18n[infer="unavailable"][key="error_option_value_configurable"]';
427653
expect(element1.renderRoot.querySelector(labelSelector)).to.exist;
428654

429655
await router.handleRequest(
@@ -448,7 +674,6 @@ describe('ExperimentalAddToCartBuilder', () => {
448674

449675
await waitForIdle(element2);
450676
await element2.requestUpdate();
451-
expect(element2.renderRoot.querySelector(spinnerSelector)).to.not.exist;
452677
expect(element2.renderRoot.querySelector(labelSelector)).to.not.exist;
453678
});
454679

0 commit comments

Comments
 (0)