Skip to content

Commit

Permalink
kyc/quiz: stop when we already have MaxWrongAnswersPerSession
Browse files Browse the repository at this point in the history
  • Loading branch information
ice-dionysos committed Jan 14, 2024
1 parent efc7d3b commit bc12bc6
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 39 deletions.
16 changes: 8 additions & 8 deletions kyc/quiz/quiz.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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
Expand Down
38 changes: 7 additions & 31 deletions kyc/quiz/quiz_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -373,41 +375,15 @@ 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)
require.Equal(t, FailureResult, session.Result)
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) {
Expand Down

0 comments on commit bc12bc6

Please sign in to comment.