diff --git a/app/assets/javascripts/merge_requests/utils/reviewer_positions.js b/app/assets/javascripts/merge_requests/utils/reviewer_positions.js index ce07c3c6e81b918496ae53417242d0340b10d462..ec9bfa66ee9d8a923017f642b5f5464bb67e0c1b 100644 --- a/app/assets/javascripts/merge_requests/utils/reviewer_positions.js +++ b/app/assets/javascripts/merge_requests/utils/reviewer_positions.js @@ -11,8 +11,15 @@ export function setReviewersForList({ issuableId, listId, reviewers = [] } = {}) export function getReviewersForList({ issuableId, listId } = {}) { const id = cacheId({ issuableId, listId }); const list = window.sessionStorage.getItem(id); + let parsedList; - return list ? JSON.parse(list) : []; + try { + parsedList = list ? JSON.parse(list) : []; + } catch { + parsedList = []; + } + + return parsedList; } export function suggestedPosition({ username, list = [] } = {}) { diff --git a/spec/frontend/merge_requests/utils/reviewer_positions_spec.js b/spec/frontend/merge_requests/utils/reviewer_positions_spec.js index 0ab3c14c85f08f8e11b789977038e0f6f3fae3f7..ecb1c59fd86e810fa9ce0dc6190bbe09fb30642c 100644 --- a/spec/frontend/merge_requests/utils/reviewer_positions_spec.js +++ b/spec/frontend/merge_requests/utils/reviewer_positions_spec.js @@ -17,6 +17,7 @@ describe('reviewer_positions utility', () => { getItem: jest.fn().mockImplementation((key) => { const vals = { 'MergeRequest/123/test-list-id': mockReviewersString, + 'MergeRequest/123/invalid-data': '#', }; return vals[key]; @@ -64,6 +65,15 @@ describe('reviewer_positions utility', () => { expect(result).toEqual([]); }); + + it('returns an empty array when the data in storage is not a valid JSON string', () => { + const result = getReviewersForList({ + issuableId: mockIssuableId, + listId: 'invalid-data', + }); + + expect(result).toEqual([]); + }); }); describe('suggestedPosition', () => {