@@ -16,7 +16,7 @@ mock.module('../i18n', () => {
1616 } ;
1717} ) ;
1818
19- import { joinUrls } from '../utils' ;
19+ import { joinUrls , promiseAny } from '../utils' ;
2020
2121describe ( 'joinUrls' , ( ) => {
2222 test ( 'returns undefined when fileName is not provided' , ( ) => {
@@ -46,3 +46,30 @@ describe('joinUrls', () => {
4646 ] ) ;
4747 } ) ;
4848} ) ;
49+
50+ describe ( 'promiseAny' , ( ) => {
51+ test ( 'resolves with the value of the first resolved promise' , async ( ) => {
52+ const p1 = new Promise ( ( resolve ) => setTimeout ( resolve , 50 , 'p1' ) ) ;
53+ const p2 = new Promise ( ( resolve ) => setTimeout ( resolve , 10 , 'p2' ) ) ;
54+ const p3 = new Promise ( ( resolve ) => setTimeout ( resolve , 30 , 'p3' ) ) ;
55+
56+ const result = await promiseAny ( [ p1 , p2 , p3 ] ) ;
57+ expect ( result ) . toBe ( 'p2' ) ;
58+ } ) ;
59+
60+ test ( 'resolves with the value of the first resolved promise even if others reject' , async ( ) => {
61+ const p1 = new Promise ( ( _ , reject ) => setTimeout ( reject , 10 , new Error ( 'error1' ) ) ) ;
62+ const p2 = new Promise ( ( resolve ) => setTimeout ( resolve , 50 , 'p2' ) ) ;
63+ const p3 = new Promise ( ( _ , reject ) => setTimeout ( reject , 20 , new Error ( 'error3' ) ) ) ;
64+
65+ const result = await promiseAny ( [ p1 , p2 , p3 ] ) ;
66+ expect ( result ) . toBe ( 'p2' ) ;
67+ } ) ;
68+
69+ test ( 'rejects with error_all_promises_rejected when all promises reject' , async ( ) => {
70+ const p1 = Promise . reject ( new Error ( 'error1' ) ) ;
71+ const p2 = new Promise ( ( _ , reject ) => setTimeout ( reject , 10 , new Error ( 'error2' ) ) ) ;
72+
73+ await expect ( promiseAny ( [ p1 , p2 ] ) ) . rejects . toThrow ( 'error_all_promises_rejected' ) ;
74+ } ) ;
75+ } ) ;
0 commit comments