From 0e0df204c1a0d859ccbbe1be83a5e09a53381f17 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 10 May 2023 12:09:12 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- spec/frontend/lib/utils/tappable_promise_spec.js | 63 ++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 spec/frontend/lib/utils/tappable_promise_spec.js (limited to 'spec/frontend/lib') diff --git a/spec/frontend/lib/utils/tappable_promise_spec.js b/spec/frontend/lib/utils/tappable_promise_spec.js new file mode 100644 index 00000000000..654cd20a9de --- /dev/null +++ b/spec/frontend/lib/utils/tappable_promise_spec.js @@ -0,0 +1,63 @@ +import TappablePromise from '~/lib/utils/tappable_promise'; + +describe('TappablePromise', () => { + it('allows a promise to have a progress indicator', () => { + const pseudoProgress = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]; + const progressCallback = jest.fn(); + const promise = new TappablePromise((tap, resolve) => { + pseudoProgress.forEach(tap); + resolve('done'); + + return 'returned value'; + }); + + return promise + .tap(progressCallback) + .then((val) => { + expect(val).toBe('done'); + expect(val).not.toBe('returned value'); + + expect(progressCallback).toHaveBeenCalledTimes(pseudoProgress.length); + + pseudoProgress.forEach((progress, index) => { + expect(progressCallback).toHaveBeenNthCalledWith(index + 1, progress); + }); + }) + .catch(() => {}); + }); + + it('resolves with the value returned by the callback', () => { + const promise = new TappablePromise((tap) => { + tap(0.5); + return 'test'; + }); + + return promise + .tap((progress) => { + expect(progress).toBe(0.5); + }) + .then((value) => { + expect(value).toBe('test'); + }); + }); + + it('allows a promise to be rejected', () => { + const promise = new TappablePromise((tap, resolve, reject) => { + reject(new Error('test error')); + }); + + return promise.catch((e) => { + expect(e.message).toBe('test error'); + }); + }); + + it('rejects the promise if the callback throws an error', () => { + const promise = new TappablePromise(() => { + throw new Error('test error'); + }); + + return promise.catch((e) => { + expect(e.message).toBe('test error'); + }); + }); +}); -- cgit v1.2.3