From 1d210e184b17b0093729d6342270852aa9b6bbd1 Mon Sep 17 00:00:00 2001 From: Darren Ethier Date: Mon, 23 Mar 2020 11:32:52 -0400 Subject: [PATCH] Fix event-emitters not accounting for observers as Object type. (https://github.com/woocommerce/woocommerce-blocks/pull/2010) * Fix assumption of eventemitters stored in state as an arry. * update tests to mock expected emitter state --- .../js/base/context/cart-checkout/event-emit/emitters.js | 8 ++++++-- .../context/cart-checkout/event-emit/test/emitters.js | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/plugins/woocommerce-blocks/assets/js/base/context/cart-checkout/event-emit/emitters.js b/plugins/woocommerce-blocks/assets/js/base/context/cart-checkout/event-emit/emitters.js index 9c74023cf47..2cfd587ce7e 100644 --- a/plugins/woocommerce-blocks/assets/js/base/context/cart-checkout/event-emit/emitters.js +++ b/plugins/woocommerce-blocks/assets/js/base/context/cart-checkout/event-emit/emitters.js @@ -15,7 +15,9 @@ * executed. */ export const emitEvent = async ( observers, eventType, data ) => { - const observersByType = observers[ eventType ] || []; + const observersByType = observers[ eventType ] + ? Object.values( observers[ eventType ] ) + : []; for ( let i = 0; i < observersByType.length; i++ ) { try { await Promise.resolve( observersByType[ i ]( data ) ); @@ -43,7 +45,9 @@ export const emitEvent = async ( observers, eventType, data ) => { * return value of the aborted observer. */ export const emitEventWithAbort = async ( observers, eventType, data ) => { - const observersByType = observers[ eventType ] || []; + const observersByType = observers[ eventType ] + ? Object.values( observers[ eventType ] ) + : []; for ( let i = 0; i < observersByType.length; i++ ) { try { const response = await Promise.resolve( diff --git a/plugins/woocommerce-blocks/assets/js/base/context/cart-checkout/event-emit/test/emitters.js b/plugins/woocommerce-blocks/assets/js/base/context/cart-checkout/event-emit/test/emitters.js index 66c1f19c131..662e29117c7 100644 --- a/plugins/woocommerce-blocks/assets/js/base/context/cart-checkout/event-emit/test/emitters.js +++ b/plugins/woocommerce-blocks/assets/js/base/context/cart-checkout/event-emit/test/emitters.js @@ -18,7 +18,7 @@ describe( 'Testing emitters', () => { } ); describe( 'Testing emitEvent()', () => { it( 'invokes all observers', async () => { - const observers = { test: Object.values( observerMocks ) }; + const observers = { test: observerMocks }; const response = await emitEvent( observers, 'test', 'foo' ); expect( console ).toHaveErroredWith( 'an error' ); expect( observerMocks.observerA ).toHaveBeenCalledTimes( 1 ); @@ -31,7 +31,7 @@ describe( 'Testing emitters', () => { 'aborts on non truthy value and does not invoke remaining ' + 'observers', async () => { - const observers = { test: Object.values( observerMocks ) }; + const observers = { test: observerMocks }; const response = await emitEventWithAbort( observers, 'test',