From fd58cffd2d398580dce07a4dd88a63bac1224ab4 Mon Sep 17 00:00:00 2001 From: Oliver Eyton-Williams Date: Mon, 14 Aug 2023 14:18:35 +0200 Subject: [PATCH] fix: allow submissions to complete if signed out (#51260) --- .../Challenges/redux/completion-epic.js | 4 ++- .../Challenges/redux/completion-epic.test.js | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 client/src/templates/Challenges/redux/completion-epic.test.js diff --git a/client/src/templates/Challenges/redux/completion-epic.js b/client/src/templates/Challenges/redux/completion-epic.js index 097e80fbeab..e93873c8bf0 100644 --- a/client/src/templates/Challenges/redux/completion-epic.js +++ b/client/src/templates/Challenges/redux/completion-epic.js @@ -211,7 +211,9 @@ export default function completionEpic(action$, state$) { block, blockHashSlug } = challengeMetaSelector(state); - let submitter = () => of({ type: 'no-user-signed-in' }); + // Default to submitChallengeComplete since we do not want the user to + // be stuck in the 'isSubmitting' state. + let submitter = () => of(submitChallengeComplete()); if ( !(challengeType in submitTypes) || !(submitTypes[challengeType] in submitters) diff --git a/client/src/templates/Challenges/redux/completion-epic.test.js b/client/src/templates/Challenges/redux/completion-epic.test.js new file mode 100644 index 00000000000..141d759e0c3 --- /dev/null +++ b/client/src/templates/Challenges/redux/completion-epic.test.js @@ -0,0 +1,31 @@ +import { TestScheduler } from 'rxjs/testing'; +import completionEpic from './completion-epic'; +import { submitChallenge, submitChallengeComplete } from './actions'; + +describe('completionEpic', () => { + describe('signed out user', () => { + const testScheduler = new TestScheduler((actual, expected) => { + it('should dispatch submitChallengeComplete', () => { + expect(actual).toEqual(expect.arrayContaining(expected)); + }); + }); + + testScheduler.run(({ hot, expectObservable }) => { + const action$ = hot('a', { + a: submitChallenge() + }); + const state$ = { + value: { + challenge: { challengeMeta: { challengeType: 0 } }, + app: { user: { username: 'test' } } + } + }; + + const output$ = completionEpic(action$, state$); + + expectObservable(output$).toBe('a', { + a: submitChallengeComplete() + }); + }); + }); +});