Skip to content

Commit 6837435

Browse files
authored
Removing unique score constraint for contest entries from backend (in preparation for frontend PR) (#938)
* Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Update assessments.ex * Update submission_votes.ex * Update submission_votes_test.exs
1 parent 9bf6a5c commit 6837435

File tree

5 files changed

+18
-67
lines changed

5 files changed

+18
-67
lines changed

lib/cadet/assessments/assessments.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -703,8 +703,8 @@ defmodule Cadet.Assessments do
703703
{:error, :race_condition} ->
704704
{:error, {:internal_server_error, "Please try again later."}}
705705

706-
{:error, :vote_not_unique} ->
707-
{:error, {:bad_request, "Invalid vote or vote is not unique! Vote is not saved."}}
706+
{:error, :invalid_vote} ->
707+
{:error, {:bad_request, "Invalid vote! Vote is not saved."}}
708708

709709
_ ->
710710
{:error, {:bad_request, "Missing or invalid parameter(s)"}}
@@ -1012,7 +1012,7 @@ defmodule Cadet.Assessments do
10121012
Computes rolling leaderboard for contest votes that are still open.
10131013
"""
10141014
def update_rolling_contest_leaderboards do
1015-
# 115 = 2 hours - 5 minutes
1015+
# 115 = 2 hours - 5 minutes is default.
10161016
if Log.log_execution("update_rolling_contest_leaderboards", Timex.Duration.from_minutes(115)) do
10171017
Logger.info("Started update_rolling_contest_leaderboards")
10181018

@@ -1630,7 +1630,7 @@ defmodule Cadet.Assessments do
16301630
|> Repo.transaction()
16311631
|> case do
16321632
{:ok, _result} -> {:ok, nil}
1633-
{:error, _name, _changset, _error} -> {:error, :vote_not_unique}
1633+
{:error, _name, _changeset, _error} -> {:error, :invalid_vote}
16341634
end
16351635
end
16361636

lib/cadet/assessments/submission_votes.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ defmodule Cadet.Assessments.SubmissionVotes do
1717
@required_fields ~w(voter_id submission_id question_id)a
1818
@optional_fields ~w(score)a
1919

20+
# There is no unique constraint for contest vote scores.
2021
def changeset(submission_vote, params) do
2122
submission_vote
2223
|> cast(params, @required_fields ++ @optional_fields)
@@ -25,6 +26,5 @@ defmodule Cadet.Assessments.SubmissionVotes do
2526
|> foreign_key_constraint(:voter_id)
2627
|> foreign_key_constraint(:submission_id)
2728
|> foreign_key_constraint(:question_id)
28-
|> unique_constraint(:vote_not_unique, name: :unique_score)
2929
end
3030
end
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
defmodule Cadet.Repo.Migrations.RemoveUniqueScoreConstraint do
2+
use Ecto.Migration
3+
4+
def up do
5+
drop(unique_index(:submission_votes, [:user_id, :question_id, :score], name: :unique_score))
6+
end
7+
8+
def down do
9+
create(unique_index(:submission_votes, [:user_id, :question_id, :score], name: :unique_score))
10+
end
11+
end

test/cadet/assessments/submission_votes_test.exs

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,21 +61,6 @@ defmodule Cadet.Assessments.SubmissionVotesTest do
6161
|> assert_changeset_db(:invalid)
6262
end
6363

64-
test "invalid changeset unique constraint", %{
65-
valid_params: params
66-
} do
67-
params = Map.put(params, :score, 2)
68-
first_entry = SubmissionVotes.changeset(%SubmissionVotes{}, params)
69-
{:ok, _} = Repo.insert(first_entry)
70-
new_submission = insert(:submission)
71-
72-
second_entry =
73-
first_entry
74-
|> Map.delete(:submission_id)
75-
|> Map.put(:submission_id, new_submission.id)
76-
77-
{:error, changeset} = Repo.insert(second_entry)
78-
refute changeset.valid?
79-
end
64+
# There is no constraint for unique vote score.
8065
end
8166
end

test/cadet_web/controllers/answer_controller_test.exs

Lines changed: 1 addition & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -259,52 +259,7 @@ defmodule CadetWeb.AnswerControllerTest do
259259
})
260260

261261
assert response(voting_conn, 400) ==
262-
"Invalid vote or vote is not unique! Vote is not saved."
263-
end
264-
265-
@tag authenticate: role
266-
test "update duplicate score in submission_votes is unsuccessful", %{
267-
conn: conn,
268-
voting_question: voting_question
269-
} do
270-
course_reg = conn.assigns.test_cr
271-
course_id = conn.assigns.course_id
272-
273-
first_contest_submission = insert(:submission)
274-
second_contest_submission = insert(:submission)
275-
276-
Repo.insert(%SubmissionVotes{
277-
voter_id: course_reg.id,
278-
question_id: voting_question.id,
279-
submission_id: first_contest_submission.id,
280-
score: 1
281-
})
282-
283-
Repo.insert(%SubmissionVotes{
284-
voter_id: course_reg.id,
285-
question_id: voting_question.id,
286-
submission_id: second_contest_submission.id,
287-
score: 2
288-
})
289-
290-
voting_conn =
291-
post(conn, build_url(course_id, voting_question.id), %{
292-
answer: [
293-
%{
294-
"answer" => "hello world",
295-
"submission_id" => first_contest_submission.id,
296-
"score" => 3
297-
},
298-
%{
299-
"answer" => "hello world",
300-
"submission_id" => second_contest_submission.id,
301-
"score" => 3
302-
}
303-
]
304-
})
305-
306-
assert response(voting_conn, 400) ==
307-
"Invalid vote or vote is not unique! Vote is not saved."
262+
"Invalid vote! Vote is not saved."
308263
end
309264
end
310265
end

0 commit comments

Comments
 (0)