@@ -420,7 +420,7 @@ describe( 'Channel', function() {
420420 beforeEach ( ( done ) => {
421421 var data = { title : 'hola mundo' } ;
422422
423- channel . on ( 'acknowledge' , function ( ) {
423+ channel . once ( 'acknowledge' , function ( ) {
424424 done ( ) ;
425425 } ) ;
426426
@@ -437,6 +437,37 @@ describe( 'Channel', function() {
437437 done ( )
438438 } ) ;
439439 } ) ;
440+
441+ it ( 'should handle a 409' , ( done ) => {
442+ const expectedChange = { fake : 'change' , ccid : 'dup-ccid' , id : 'mock-id' } ;
443+ channel . localQueue . sent [ 'mock-id' ] = { fake : 'change' , ccid : 'dup-ccid' , id : 'mock-id' } ;
444+
445+ /**
446+ * If the 409 is not handled the bucket will error
447+ */
448+ bucket . once ( 'error' , ( e ) => {
449+ done ( e ) ;
450+ } ) ;
451+
452+ /**
453+ * After successfully handling the 409 we should have an acknowledged
454+ * local change matching the duplicated ccid error.
455+ */
456+ channel . once ( 'acknowledge' , ( id , change ) => {
457+ try {
458+ equal ( id , 'mock-id' ) ;
459+ deepEqual ( expectedChange , change )
460+ done ( ) ;
461+ } catch ( error ) {
462+ done ( error ) ;
463+ }
464+ } ) ;
465+
466+ /**
467+ * Simulate receiving a 409
468+ */
469+ channel . handleMessage ( 'c:[{"error": 409, "ccids":["dup-ccid"], "id": "mock-id"}]' ) ;
470+ } ) ;
440471 } ) ;
441472 } ) ;
442473
0 commit comments