diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-05-10 15:09:12 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-05-10 15:09:12 +0300 |
commit | 0e0df204c1a0d859ccbbe1be83a5e09a53381f17 (patch) | |
tree | e7bf6fed5fa2b74caf31957c468b0cbc303f4c45 /spec/frontend/lib | |
parent | a2344dbf1942dc3919c55b0684d2566368e03852 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend/lib')
-rw-r--r-- | spec/frontend/lib/utils/tappable_promise_spec.js | 63 |
1 files changed, 63 insertions, 0 deletions
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'); + }); + }); +}); |