From a0b06693bef2fd12be6fce685f77d77bee0bfea8 Mon Sep 17 00:00:00 2001 From: kjw142857 <122250318+kjw142857@users.noreply.github.com> Date: Wed, 5 Apr 2023 14:32:48 +0800 Subject: [PATCH 01/12] Add files via upload --- lib/cadet/assessments/assessments.ex | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index a51062de0..e2730ff19 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -703,8 +703,9 @@ defmodule Cadet.Assessments do {:error, :race_condition} -> {:error, {:internal_server_error, "Please try again later."}} - {:error, :vote_not_unique} -> - {:error, {:bad_request, "Invalid vote or vote is not unique! Vote is not saved."}} + # Description changed from :vote_not_unique and corresponding message changed. + {:error, :invalid_vote} -> + {:error, {:bad_request, "Invalid vote! Vote is not saved."}} _ -> {:error, {:bad_request, "Missing or invalid parameter(s)"}} @@ -1012,7 +1013,7 @@ defmodule Cadet.Assessments do Computes rolling leaderboard for contest votes that are still open. """ def update_rolling_contest_leaderboards do - # 115 = 2 hours - 5 minutes + # 115 = 2 hours - 5 minutes is default. if Log.log_execution("update_rolling_contest_leaderboards", Timex.Duration.from_minutes(115)) do Logger.info("Started update_rolling_contest_leaderboards") @@ -1630,7 +1631,8 @@ defmodule Cadet.Assessments do |> Repo.transaction() |> case do {:ok, _result} -> {:ok, nil} - {:error, _name, _changset, _error} -> {:error, :vote_not_unique} + # error type has been changed to :invalid_vote as a non-unique score will no longer cause an error. + {:error, _name, _changeset, _error} -> {:error, :invalid_vote} end end From a3da0e89cce8fd329e63ebb7a5c34102684e9b12 Mon Sep 17 00:00:00 2001 From: kjw142857 <122250318+kjw142857@users.noreply.github.com> Date: Wed, 5 Apr 2023 14:34:07 +0800 Subject: [PATCH 02/12] Add files via upload --- lib/cadet/assessments/submission_votes.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cadet/assessments/submission_votes.ex b/lib/cadet/assessments/submission_votes.ex index addd8b824..78e4ed73b 100644 --- a/lib/cadet/assessments/submission_votes.ex +++ b/lib/cadet/assessments/submission_votes.ex @@ -25,6 +25,6 @@ defmodule Cadet.Assessments.SubmissionVotes do |> foreign_key_constraint(:voter_id) |> foreign_key_constraint(:submission_id) |> foreign_key_constraint(:question_id) - |> unique_constraint(:vote_not_unique, name: :unique_score) + # |> unique_constraint(:unique, name: :unique_score) (Unique constraint removed) end end From 9417cd3d9c8973769bc5020205f2df9df1f2e740 Mon Sep 17 00:00:00 2001 From: kjw142857 <122250318+kjw142857@users.noreply.github.com> Date: Wed, 5 Apr 2023 14:35:28 +0800 Subject: [PATCH 03/12] Add files via upload --- .../cadet/assessments/submission_votes_test.exs | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/test/cadet/assessments/submission_votes_test.exs b/test/cadet/assessments/submission_votes_test.exs index c91465dfb..2fb2ead85 100644 --- a/test/cadet/assessments/submission_votes_test.exs +++ b/test/cadet/assessments/submission_votes_test.exs @@ -61,21 +61,6 @@ defmodule Cadet.Assessments.SubmissionVotesTest do |> assert_changeset_db(:invalid) end - test "invalid changeset unique constraint", %{ - valid_params: params - } do - params = Map.put(params, :score, 2) - first_entry = SubmissionVotes.changeset(%SubmissionVotes{}, params) - {:ok, _} = Repo.insert(first_entry) - new_submission = insert(:submission) - - second_entry = - first_entry - |> Map.delete(:submission_id) - |> Map.put(:submission_id, new_submission.id) - - {:error, changeset} = Repo.insert(second_entry) - refute changeset.valid? - end + # Removed test for unique submission vote end end From 77d0580cd8a35a5342297ba2591735e96835eb82 Mon Sep 17 00:00:00 2001 From: kjw142857 <122250318+kjw142857@users.noreply.github.com> Date: Wed, 5 Apr 2023 14:36:25 +0800 Subject: [PATCH 04/12] Add files via upload --- .../20230331010500_remove_unique_score_constraint.exs | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 priv/repo/migrations/20230331010500_remove_unique_score_constraint.exs diff --git a/priv/repo/migrations/20230331010500_remove_unique_score_constraint.exs b/priv/repo/migrations/20230331010500_remove_unique_score_constraint.exs new file mode 100644 index 000000000..6ddfe1b62 --- /dev/null +++ b/priv/repo/migrations/20230331010500_remove_unique_score_constraint.exs @@ -0,0 +1,11 @@ +defmodule Cadet.Repo.Migrations.RemoveUniqueScoreConstraint do + use Ecto.Migration + + def up do + drop(unique_index(:submission_votes, [:user_id, :question_id, :score], name: :unique_score)) + end + + def down do + create(unique_index(:submission_votes, [:user_id, :question_id, :score], name: :unique_score)) + end +end From b73054bd4147f54e451e37653a7b1120f5b423a9 Mon Sep 17 00:00:00 2001 From: kjw142857 <122250318+kjw142857@users.noreply.github.com> Date: Wed, 5 Apr 2023 15:02:24 +0800 Subject: [PATCH 05/12] Add files via upload --- lib/cadet/assessments/submission_votes.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cadet/assessments/submission_votes.ex b/lib/cadet/assessments/submission_votes.ex index 78e4ed73b..fdef13d77 100644 --- a/lib/cadet/assessments/submission_votes.ex +++ b/lib/cadet/assessments/submission_votes.ex @@ -25,6 +25,6 @@ defmodule Cadet.Assessments.SubmissionVotes do |> foreign_key_constraint(:voter_id) |> foreign_key_constraint(:submission_id) |> foreign_key_constraint(:question_id) - # |> unique_constraint(:unique, name: :unique_score) (Unique constraint removed) + # |> unique_constraint(:unique, name: :unique_score) (Unique constraint removed) end end From 25b549d5adfe4524a2bb055cceca6995ff8883da Mon Sep 17 00:00:00 2001 From: kjw142857 <122250318+kjw142857@users.noreply.github.com> Date: Wed, 5 Apr 2023 15:05:10 +0800 Subject: [PATCH 06/12] Add files via upload --- lib/cadet/assessments/submission_votes.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cadet/assessments/submission_votes.ex b/lib/cadet/assessments/submission_votes.ex index fdef13d77..10635b80e 100644 --- a/lib/cadet/assessments/submission_votes.ex +++ b/lib/cadet/assessments/submission_votes.ex @@ -17,6 +17,7 @@ defmodule Cadet.Assessments.SubmissionVotes do @required_fields ~w(voter_id submission_id question_id)a @optional_fields ~w(score)a + # |> unique_constraint(:unique, name: :unique_score) (Unique constraint removed) def changeset(submission_vote, params) do submission_vote |> cast(params, @required_fields ++ @optional_fields) @@ -25,6 +26,5 @@ defmodule Cadet.Assessments.SubmissionVotes do |> foreign_key_constraint(:voter_id) |> foreign_key_constraint(:submission_id) |> foreign_key_constraint(:question_id) - # |> unique_constraint(:unique, name: :unique_score) (Unique constraint removed) end end From 7ac87ba83084e067565c3bee595d3aa1229c9afc Mon Sep 17 00:00:00 2001 From: kjw142857 <122250318+kjw142857@users.noreply.github.com> Date: Wed, 5 Apr 2023 15:10:59 +0800 Subject: [PATCH 07/12] Add files via upload --- lib/cadet/assessments/assessments.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index e2730ff19..c956060e5 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -1631,7 +1631,7 @@ defmodule Cadet.Assessments do |> Repo.transaction() |> case do {:ok, _result} -> {:ok, nil} - # error type has been changed to :invalid_vote as a non-unique score will no longer cause an error. + # error type has been changed to :invalid_vote {:error, _name, _changeset, _error} -> {:error, :invalid_vote} end end From e95ef64e5de079408759f99d8301ca8062562418 Mon Sep 17 00:00:00 2001 From: kjw142857 <122250318+kjw142857@users.noreply.github.com> Date: Wed, 5 Apr 2023 15:56:40 +0800 Subject: [PATCH 08/12] Add files via upload --- .../controllers/answer_controller_test.exs | 49 +------------------ 1 file changed, 1 insertion(+), 48 deletions(-) diff --git a/test/cadet_web/controllers/answer_controller_test.exs b/test/cadet_web/controllers/answer_controller_test.exs index 9a9f199d9..ecd86e491 100644 --- a/test/cadet_web/controllers/answer_controller_test.exs +++ b/test/cadet_web/controllers/answer_controller_test.exs @@ -259,56 +259,9 @@ defmodule CadetWeb.AnswerControllerTest do }) assert response(voting_conn, 400) == - "Invalid vote or vote is not unique! Vote is not saved." + "Invalid vote! Vote is not saved." end - @tag authenticate: role - test "update duplicate score in submission_votes is unsuccessful", %{ - conn: conn, - voting_question: voting_question - } do - course_reg = conn.assigns.test_cr - course_id = conn.assigns.course_id - - first_contest_submission = insert(:submission) - second_contest_submission = insert(:submission) - - Repo.insert(%SubmissionVotes{ - voter_id: course_reg.id, - question_id: voting_question.id, - submission_id: first_contest_submission.id, - score: 1 - }) - - Repo.insert(%SubmissionVotes{ - voter_id: course_reg.id, - question_id: voting_question.id, - submission_id: second_contest_submission.id, - score: 2 - }) - - voting_conn = - post(conn, build_url(course_id, voting_question.id), %{ - answer: [ - %{ - "answer" => "hello world", - "submission_id" => first_contest_submission.id, - "score" => 3 - }, - %{ - "answer" => "hello world", - "submission_id" => second_contest_submission.id, - "score" => 3 - } - ] - }) - - assert response(voting_conn, 400) == - "Invalid vote or vote is not unique! Vote is not saved." - end - end - end - @tag authenticate: :student test "invalid params missing question is unsuccessful", %{ conn: conn, From 3164bbd1b5f2aa88ecbc2b07d314708015a28950 Mon Sep 17 00:00:00 2001 From: kjw142857 <122250318+kjw142857@users.noreply.github.com> Date: Wed, 5 Apr 2023 17:14:06 +0800 Subject: [PATCH 09/12] Add files via upload --- test/cadet_web/controllers/answer_controller_test.exs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/cadet_web/controllers/answer_controller_test.exs b/test/cadet_web/controllers/answer_controller_test.exs index ecd86e491..bb1f4654a 100644 --- a/test/cadet_web/controllers/answer_controller_test.exs +++ b/test/cadet_web/controllers/answer_controller_test.exs @@ -261,6 +261,8 @@ defmodule CadetWeb.AnswerControllerTest do assert response(voting_conn, 400) == "Invalid vote! Vote is not saved." end + end + end @tag authenticate: :student test "invalid params missing question is unsuccessful", %{ From a5814ea59c07b537e1fe69a3f74c2b3e4b57ae2e Mon Sep 17 00:00:00 2001 From: kjw142857 <122250318+kjw142857@users.noreply.github.com> Date: Sun, 9 Apr 2023 21:22:46 +0800 Subject: [PATCH 10/12] Update assessments.ex --- lib/cadet/assessments/assessments.ex | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/cadet/assessments/assessments.ex b/lib/cadet/assessments/assessments.ex index c956060e5..dec65663d 100644 --- a/lib/cadet/assessments/assessments.ex +++ b/lib/cadet/assessments/assessments.ex @@ -703,7 +703,6 @@ defmodule Cadet.Assessments do {:error, :race_condition} -> {:error, {:internal_server_error, "Please try again later."}} - # Description changed from :vote_not_unique and corresponding message changed. {:error, :invalid_vote} -> {:error, {:bad_request, "Invalid vote! Vote is not saved."}} @@ -1631,7 +1630,6 @@ defmodule Cadet.Assessments do |> Repo.transaction() |> case do {:ok, _result} -> {:ok, nil} - # error type has been changed to :invalid_vote {:error, _name, _changeset, _error} -> {:error, :invalid_vote} end end From 59dfe92a7b646488eb7185b4946be796cb519d04 Mon Sep 17 00:00:00 2001 From: kjw142857 <122250318+kjw142857@users.noreply.github.com> Date: Sun, 9 Apr 2023 21:23:31 +0800 Subject: [PATCH 11/12] Update submission_votes.ex --- lib/cadet/assessments/submission_votes.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cadet/assessments/submission_votes.ex b/lib/cadet/assessments/submission_votes.ex index 10635b80e..61867ea6c 100644 --- a/lib/cadet/assessments/submission_votes.ex +++ b/lib/cadet/assessments/submission_votes.ex @@ -17,7 +17,7 @@ defmodule Cadet.Assessments.SubmissionVotes do @required_fields ~w(voter_id submission_id question_id)a @optional_fields ~w(score)a - # |> unique_constraint(:unique, name: :unique_score) (Unique constraint removed) + # There is no unique constraint for contest vote scores. def changeset(submission_vote, params) do submission_vote |> cast(params, @required_fields ++ @optional_fields) From f993440cc552ee26849294bfb5aeee3d24941a50 Mon Sep 17 00:00:00 2001 From: kjw142857 <122250318+kjw142857@users.noreply.github.com> Date: Sun, 9 Apr 2023 21:24:20 +0800 Subject: [PATCH 12/12] Update submission_votes_test.exs --- test/cadet/assessments/submission_votes_test.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/cadet/assessments/submission_votes_test.exs b/test/cadet/assessments/submission_votes_test.exs index 2fb2ead85..02717f611 100644 --- a/test/cadet/assessments/submission_votes_test.exs +++ b/test/cadet/assessments/submission_votes_test.exs @@ -61,6 +61,6 @@ defmodule Cadet.Assessments.SubmissionVotesTest do |> assert_changeset_db(:invalid) end - # Removed test for unique submission vote + # There is no constraint for unique vote score. end end