From bc12bc6d832b41760c13cac3723a51f469636064 Mon Sep 17 00:00:00 2001 From: Dionysos <75300347+ice-dionysos@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:48:57 +0100 Subject: [PATCH] kyc/quiz: stop when we already have MaxWrongAnswersPerSession --- kyc/quiz/quiz.go | 16 ++++++++-------- kyc/quiz/quiz_test.go | 38 +++++++------------------------------- 2 files changed, 15 insertions(+), 39 deletions(-) diff --git a/kyc/quiz/quiz.go b/kyc/quiz/quiz.go index 7858fed0..cd281101 100644 --- a/kyc/quiz/quiz.go +++ b/kyc/quiz/quiz.go @@ -585,6 +585,12 @@ func (r *repositoryImpl) ContinueQuizSession( //nolint:funlen,revive //. }, } + if int(incorrectNum) >= r.config.MaxWrongAnswersPerSession { + quiz.Result = FailureResult + + return wrapErrorInTx(r.UserMarkSessionAsFinished(ctx, userID, now, tx, false, false)) + } + if len(newAnswers) != len(progress.CorrectAnswers) { nextQuestion, nErr := r.LoadQuestionByID(ctx, tx, progress.Lang, progress.Questions[question]) if nErr != nil { @@ -597,15 +603,9 @@ func (r *repositoryImpl) ContinueQuizSession( //nolint:funlen,revive //. return nil } - if int(incorrectNum) > r.config.MaxWrongAnswersPerSession { - quiz.Result = FailureResult - err = r.UserMarkSessionAsFinished(ctx, userID, now, tx, false, false) - } else { - quiz.Result = SuccessResult - err = r.UserMarkSessionAsFinished(ctx, userID, now, tx, true, false) - } + quiz.Result = SuccessResult - return wrapErrorInTx(err) + return wrapErrorInTx(r.UserMarkSessionAsFinished(ctx, userID, now, tx, true, false)) }) return quiz, err diff --git a/kyc/quiz/quiz_test.go b/kyc/quiz/quiz_test.go index a9e5f7fe..522c1ae2 100644 --- a/kyc/quiz/quiz_test.go +++ b/kyc/quiz/quiz_test.go @@ -177,7 +177,7 @@ func testManagerSessionStart(ctx context.Context, t *testing.T, r *repositoryImp session, err := r.StartQuizSession(ctx, "bogus", "en") require.NoError(t, err) - for i := uint8(0); i < uint8(session.Progress.MaxQuestions); i++ { + for i := uint8(0); i < uint8(r.config.MaxWrongAnswersPerSession); i++ { session, err = r.ContinueQuizSession(ctx, "bogus", i+uint8(1), 0) require.NoError(t, err) require.NotNil(t, session) @@ -296,9 +296,9 @@ func testManagerSessionContinueErrors(ctx context.Context, t *testing.T, r *repo t.Run("AnswersOrder", func(t *testing.T) { helperSessionReset(t, r, "bogus", true) - _, err := r.StartQuizSession(ctx, "bogus", "en") + data, err := r.StartQuizSession(ctx, "bogus", "en") require.NoError(t, err) - _, err = r.ContinueQuizSession(ctx, "bogus", 1, 1) + _, err = r.ContinueQuizSession(ctx, "bogus", 1, helperSolveQuestion(t, data.Progress.NextQuestion.Text)) require.NoError(t, err) // Skip 2nd question. _, err = r.ContinueQuizSession(ctx, "bogus", 3, 1) @@ -363,6 +363,8 @@ func testManagerSessionContinueWithCorrectAnswers(ctx context.Context, t *testin func testManagerSessionContinueWithIncorrectAnswers(ctx context.Context, t *testing.T, r *repositoryImpl) { helperSessionReset(t, r, "bogus", true) + t.Logf("max incorrect answers: %d", r.config.MaxWrongAnswersPerSession) + session, err := r.StartQuizSession(ctx, "bogus", "en") require.NoError(t, err) require.NotNil(t, session) @@ -373,32 +375,6 @@ func testManagerSessionContinueWithIncorrectAnswers(ctx context.Context, t *test require.NotEmpty(t, session.Progress.NextQuestion.Text) require.Equal(t, uint8(1), session.Progress.NextQuestion.Number) - session, err = r.ContinueQuizSession(ctx, "bogus", session.Progress.NextQuestion.Number, 0) - require.NoError(t, err) - require.NotNil(t, session) - require.Empty(t, session.Result) - require.NotNil(t, session.Progress) - require.NotNil(t, session.Progress.ExpiresAt) - require.Equal(t, uint8(3), session.Progress.MaxQuestions) - require.NotEmpty(t, session.Progress.NextQuestion.Text) - require.Equal(t, uint8(0), session.Progress.CorrectAnswers) - require.Equal(t, uint8(1), session.Progress.IncorrectAnswers) - require.Equal(t, uint8(2), session.Progress.NextQuestion.Number) - - ans := helperSolveQuestion(t, session.Progress.NextQuestion.Text) - t.Logf("q: %v, ans: %d", session.Progress.NextQuestion.Text, ans) - session, err = r.ContinueQuizSession(ctx, "bogus", session.Progress.NextQuestion.Number, ans) - require.NoError(t, err) - require.NotNil(t, session) - require.Empty(t, session.Result) - require.NotNil(t, session.Progress) - require.NotNil(t, session.Progress.ExpiresAt) - require.Equal(t, uint8(3), session.Progress.MaxQuestions) - require.NotEmpty(t, session.Progress.NextQuestion.Text) - require.Equal(t, uint8(1), session.Progress.CorrectAnswers) - require.Equal(t, uint8(1), session.Progress.IncorrectAnswers) - require.Equal(t, uint8(3), session.Progress.NextQuestion.Number) - session, err = r.ContinueQuizSession(ctx, "bogus", session.Progress.NextQuestion.Number, 0) require.NoError(t, err) require.NotNil(t, session) @@ -406,8 +382,8 @@ func testManagerSessionContinueWithIncorrectAnswers(ctx context.Context, t *test require.NotNil(t, session.Progress) require.Nil(t, session.Progress.NextQuestion) require.Equal(t, uint8(3), session.Progress.MaxQuestions) - require.Equal(t, uint8(1), session.Progress.CorrectAnswers) - require.Equal(t, uint8(2), session.Progress.IncorrectAnswers) + require.Equal(t, uint8(0), session.Progress.CorrectAnswers) + require.Equal(t, uint8(1), session.Progress.IncorrectAnswers) } func TestSessionManager(t *testing.T) {