diff --git a/config/test.exs b/config/test.exs index 30a8f8cc0..73c0e3451 100644 --- a/config/test.exs +++ b/config/test.exs @@ -9,7 +9,7 @@ config :cadet, CadetWeb.Endpoint, config :cadet, environment: :test # Print only warnings and errors during test -config :logger, level: :warning, compile_time_purge_matching: [[level_lower_than: :warning]] +config :logger, level: :warn, compile_time_purge_matching: [[level_lower_than: :warn]] config :ex_aws, access_key_id: "hello", diff --git a/lib/cadet/accounts/teams.ex b/lib/cadet/accounts/teams.ex index 12f1e0e7e..131b9ca24 100644 --- a/lib/cadet/accounts/teams.ex +++ b/lib/cadet/accounts/teams.ex @@ -12,26 +12,6 @@ defmodule Cadet.Accounts.Teams do alias Cadet.Accounts.{Team, TeamMember, Notification} alias Cadet.Assessments.{Answer, Submission} - @doc """ - Returns all teams for a given course. - - ## Parameters - - * `course_id` - The ID of the course. - - ## Returns - - Returns a list of teams. - - """ - def all_teams_for_course(course_id) do - Team - |> join(:inner, [t], a in assoc(t, :assessment)) - |> where([t, a], a.course_id == ^course_id) - |> Repo.all() - |> Repo.preload(assessment: [:config], team_members: [student: [:user]]) - end - @doc """ Creates a new team and assigns an assessment and team members to it. @@ -64,6 +44,8 @@ defmodule Cadet.Accounts.Teams do true -> Enum.reduce_while(attrs["student_ids"], {:ok, nil}, fn team_attrs, {:ok, _} -> + student_ids = Enum.map(team_attrs, &Map.get(&1, "userId")) + {:ok, team} = %Team{} |> Team.changeset(attrs) @@ -103,6 +85,7 @@ defmodule Cadet.Accounts.Teams do ids = Enum.map(team, &Map.get(&1, "userId")) unique_ids_count = ids |> Enum.uniq() |> Enum.count() + all_ids_distinct = unique_ids_count == Enum.count(ids) student_already_in_team?(-1, ids, assessment_id) end) @@ -226,6 +209,7 @@ defmodule Cadet.Accounts.Teams do """ def update_team(team = %Team{}, new_assessment_id, student_ids) do + old_assessment_id = team.assessment_id team_id = team.id new_student_ids = Enum.map(hd(student_ids), fn student -> Map.get(student, "userId") end) diff --git a/lib/cadet/devices/devices.ex b/lib/cadet/devices/devices.ex index bde47eb09..daaf117be 100644 --- a/lib/cadet/devices/devices.ex +++ b/lib/cadet/devices/devices.ex @@ -212,7 +212,7 @@ defmodule Cadet.Devices do }, 300, [], - "" + '' ) # ExAws includes the session token in the signed payload and doesn't allow diff --git a/lib/cadet/jobs/autograder/lambda_worker.ex b/lib/cadet/jobs/autograder/lambda_worker.ex index 00a6b266c..a2a6d3f7a 100644 --- a/lib/cadet/jobs/autograder/lambda_worker.ex +++ b/lib/cadet/jobs/autograder/lambda_worker.ex @@ -21,7 +21,7 @@ defmodule Cadet.Autograder.LambdaWorker do lambda_params = build_request_params(params) if Enum.empty?(lambda_params.testcases) do - Logger.warning("No testcases found. Skipping autograding for answer_id: #{answer.id}") + Logger.warn("No testcases found. Skipping autograding for answer_id: #{answer.id}") # Fix for https://github.com/source-academy/backend/issues/472 Process.sleep(1000) else diff --git a/lib/cadet/jobs/xml_parser.ex b/lib/cadet/jobs/xml_parser.ex index bbdb651f3..b49128506 100644 --- a/lib/cadet/jobs/xml_parser.ex +++ b/lib/cadet/jobs/xml_parser.ex @@ -34,7 +34,7 @@ defmodule Cadet.Updater.XMLParser do :ok else {:error, stage, %{errors: [assessment: {"has submissions", []}]}, _} when is_atom(stage) -> - Logger.warning("Assessment has submissions, ignoring...") + Logger.warn("Assessment has submissions, ignoring...") {:ok, "Assessment has submissions, ignoring..."} {:error, error_message} -> diff --git a/lib/cadet/notifications.ex b/lib/cadet/notifications.ex index 57aaedd85..cc65d529a 100644 --- a/lib/cadet/notifications.ex +++ b/lib/cadet/notifications.ex @@ -276,15 +276,15 @@ defmodule Cadet.Notifications do |> Repo.insert() end - # @doc """ - # Returns the list of sent_notifications. + @doc """ + Returns the list of sent_notifications. - # ## Examples + ## Examples - # iex> list_sent_notifications() - # [%SentNotification{}, ...] + iex> list_sent_notifications() + [%SentNotification{}, ...] - # """ + """ # def list_sent_notifications do # Repo.all(SentNotification) diff --git a/lib/cadet_web/admin_controllers/admin_stories_controller.ex b/lib/cadet_web/admin_controllers/admin_stories_controller.ex index dd077a983..a6cdd46c0 100644 --- a/lib/cadet_web/admin_controllers/admin_stories_controller.ex +++ b/lib/cadet_web/admin_controllers/admin_stories_controller.ex @@ -12,7 +12,7 @@ defmodule CadetWeb.AdminStoriesController do case result do {:ok, _story} -> - conn |> put_status(200) |> text("") + conn |> put_status(200) |> text('') {:error, {status, message}} -> conn @@ -29,7 +29,7 @@ defmodule CadetWeb.AdminStoriesController do case result do {:ok, _story} -> - conn |> put_status(200) |> text("") + conn |> put_status(200) |> text('') {:error, {status, message}} -> conn @@ -43,7 +43,7 @@ defmodule CadetWeb.AdminStoriesController do case result do {:ok, _nil} -> - conn |> put_status(204) |> text("") + conn |> put_status(204) |> text('') {:error, {status, message}} -> conn diff --git a/lib/cadet_web/admin_controllers/admin_teams_controller.ex b/lib/cadet_web/admin_controllers/admin_teams_controller.ex index 30349e772..c91974404 100644 --- a/lib/cadet_web/admin_controllers/admin_teams_controller.ex +++ b/lib/cadet_web/admin_controllers/admin_teams_controller.ex @@ -5,8 +5,11 @@ defmodule CadetWeb.AdminTeamsController do alias Cadet.Accounts.{Teams, Team} - def index(conn, %{"course_id" => course_id}) do - teams = Teams.all_teams_for_course(course_id) + def index(conn, _params) do + teams = + Team + |> Repo.all() + |> Repo.preload(assessment: [:config], team_members: [student: [:user]]) team_formation_overviews = teams diff --git a/lib/cadet_web/controllers/answer_controller.ex b/lib/cadet_web/controllers/answer_controller.ex index c4c99f03f..7e87ab22e 100644 --- a/lib/cadet_web/controllers/answer_controller.ex +++ b/lib/cadet_web/controllers/answer_controller.ex @@ -38,10 +38,6 @@ defmodule CadetWeb.AnswerController do end end - def submit(conn, _params) do - send_resp(conn, :bad_request, "Missing or invalid parameter(s)") - end - def check_last_modified(conn, %{ "questionid" => question_id, "lastModifiedAt" => last_modified_at @@ -83,6 +79,10 @@ defmodule CadetWeb.AnswerController do end end + def submit(conn, _params) do + send_resp(conn, :bad_request, "Missing or invalid parameter(s)") + end + swagger_path :submit do post("/assessments/question/{questionId}/answer") diff --git a/mix.lock b/mix.lock index 52f91e254..b9b3f8d61 100644 --- a/mix.lock +++ b/mix.lock @@ -20,7 +20,7 @@ "credo": {:hex, :credo, "1.7.12", "9e3c20463de4b5f3f23721527fcaf16722ec815e70ff6c60b86412c695d426c1", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "8493d45c656c5427d9c729235b99d498bd133421f3e0a683e5c1b561471291e5"}, "crontab": {:hex, :crontab, "1.1.13", "3bad04f050b9f7f1c237809e42223999c150656a6b2afbbfef597d56df2144c5", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "d67441bec989640e3afb94e123f45a2bc42d76e02988c9613885dc3d01cf7085"}, "csv": {:hex, :csv, "3.2.2", "452f96414b39a176b7c390af6d8b78f15130dc6167fe3b836729131f515d843e", [:mix], [], "hexpm", "cbf256ff74a3fa01d9ec420d07b19c90d410ed9fe5b6d6e1bc7662edf35bc574"}, - "db_connection": {:hex, :db_connection, "2.8.0", "64fd82cfa6d8e25ec6660cea73e92a4cbc6a18b31343910427b702838c4b33b2", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "008399dae5eee1bf5caa6e86d204dcb44242c82b1ed5e22c881f2c34da201b15"}, + "db_connection": {:hex, :db_connection, "2.7.0", "b99faa9291bb09892c7da373bb82cba59aefa9b36300f6145c5f201c7adf48ec", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dcf08f31b2701f857dfc787fbad78223d61a32204f217f15e881dd93e4bdd3ff"}, "decimal": {:hex, :decimal, "2.3.0", "3ad6255aa77b4a3c4f818171b12d237500e63525c2fd056699967a3e7ea20f62", [:mix], [], "hexpm", "a4d66355cb29cb47c3cf30e71329e58361cfcb37c34235ef3bf1d7bf3773aeac"}, "dialyxir": {:hex, :dialyxir, "1.4.5", "ca1571ac18e0f88d4ab245f0b60fa31ff1b12cbae2b11bd25d207f865e8ae78a", [:mix], [{:erlex, ">= 0.2.7", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "b0fb08bb8107c750db5c0b324fa2df5ceaa0f9307690ee3c1f6ba5b9eb5d35c3"}, "distillery": {:hex, :distillery, "2.1.1", "f9332afc2eec8a1a2b86f22429e068ef35f84a93ea1718265e740d90dd367814", [:mix], [{:artificery, "~> 0.2", [hex: :artificery, repo: "hexpm", optional: false]}], "hexpm", "bbc7008b0161a6f130d8d903b5b3232351fccc9c31a991f8fcbf2a12ace22995"}, @@ -75,7 +75,7 @@ "parallel_stream": {:hex, :parallel_stream, "1.1.0", "f52f73eb344bc22de335992377413138405796e0d0ad99d995d9977ac29f1ca9", [:mix], [], "hexpm", "684fd19191aedfaf387bbabbeb8ff3c752f0220c8112eb907d797f4592d6e871"}, "parse_trans": {:hex, :parse_trans, "3.4.1", "6e6aa8167cb44cc8f39441d05193be6e6f4e7c2946cb2759f015f8c56b76e5ff", [:rebar3], [], "hexpm", "620a406ce75dada827b82e453c19cf06776be266f5a67cff34e1ef2cbb60e49a"}, "phoenix": {:hex, :phoenix, "1.7.21", "14ca4f1071a5f65121217d6b57ac5712d1857e40a0833aff7a691b7870fc9a3b", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "336dce4f86cba56fed312a7d280bf2282c720abb6074bdb1b61ec8095bdd0bc9"}, - "phoenix_ecto": {:hex, :phoenix_ecto, "4.6.5", "c4ef322acd15a574a8b1a08eff0ee0a85e73096b53ce1403b6563709f15e1cea", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "26ec3208eef407f31b748cadd044045c6fd485fbff168e35963d2f9dfff28d4b"}, + "phoenix_ecto": {:hex, :phoenix_ecto, "4.6.4", "dcf3483ab45bab4c15e3a47c34451392f64e433846b08469f5d16c2a4cd70052", [:mix], [{:ecto, "~> 3.5", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.1", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "f5b8584c36ccc9b903948a696fc9b8b81102c79c7c0c751a9f00cdec55d5f2d7"}, "phoenix_html": {:hex, :phoenix_html, "4.2.1", "35279e2a39140068fc03f8874408d58eef734e488fc142153f055c5454fd1c08", [:mix], [], "hexpm", "cff108100ae2715dd959ae8f2a8cef8e20b593f8dfd031c9cba92702cf23e053"}, "phoenix_live_view": {:hex, :phoenix_live_view, "0.19.3", "3918c1b34df8ac71a9a636806ba5b7f053349a0392b312e16f35b0bf4d070aab", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "545626887948495fd8ea23d83b75bd7aaf9dc4221563e158d2c4b52ea1dd7e00"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"}, @@ -83,7 +83,7 @@ "phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"}, "phoenix_view": {:hex, :phoenix_view, "2.0.4", "b45c9d9cf15b3a1af5fb555c674b525391b6a1fe975f040fb4d913397b31abf4", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}], "hexpm", "4e992022ce14f31fe57335db27a28154afcc94e9983266835bb3040243eb620b"}, "plug": {:hex, :plug, "1.18.0", "d78df36c41f7e798f2edf1f33e1727eae438e9dd5d809a9997c463a108244042", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "819f9e176d51e44dc38132e132fe0accaf6767eab7f0303431e404da8476cfa2"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.7.4", "729c752d17cf364e2b8da5bdb34fb5804f56251e88bb602aff48ae0bd8673d11", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "9b85632bd7012615bae0a5d70084deb1b25d2bcbb32cab82d1e9a1e023168aa3"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.7.3", "1304d36752e8bdde213cea59ef424ca932910a91a07ef9f3874be709c4ddb94b", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "77c95524b2aa5364b247fa17089029e73b951ebc1adeef429361eab0bb55819d"}, "plug_crypto": {:hex, :plug_crypto, "2.1.1", "19bda8184399cb24afa10be734f84a16ea0a2bc65054e23a62bb10f06bc89491", [:mix], [], "hexpm", "6470bce6ffe41c8bd497612ffde1a7e4af67f36a15eea5f921af71cf3e11247c"}, "postgrex": {:hex, :postgrex, "0.20.0", "363ed03ab4757f6bc47942eff7720640795eb557e1935951c1626f0d303a3aed", [:mix], [{:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "d36ef8b36f323d29505314f704e21a1a038e2dc387c6409ee0cd24144e187c0f"}, "quantum": {:hex, :quantum, "3.5.3", "ee38838a07761663468145f489ad93e16a79440bebd7c0f90dc1ec9850776d99", [:mix], [{:crontab, "~> 1.1", [hex: :crontab, repo: "hexpm", optional: false]}, {:gen_stage, "~> 0.14 or ~> 1.0", [hex: :gen_stage, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_registry, "~> 0.2", [hex: :telemetry_registry, repo: "hexpm", optional: false]}], "hexpm", "500fd3fa77dcd723ed9f766d4a175b684919ff7b6b8cfd9d7d0564d58eba8734"}, @@ -91,7 +91,7 @@ "ranch": {:hex, :ranch, "1.8.1", "208169e65292ac5d333d6cdbad49388c1ae198136e4697ae2f474697140f201c", [:make, :rebar3], [], "hexpm", "aed58910f4e21deea992a67bf51632b6d60114895eb03bb392bb733064594dd0"}, "recase": {:hex, :recase, "0.8.1", "ab98cd35857a86fa5ca99036f575241d71d77d9c2ab0c39aacf1c9b61f6f7d1d", [:mix], [], "hexpm", "9fd8d63e7e43bd9ea385b12364e305778b2bbd92537e95c4b2e26fc507d5e4c2"}, "samly": {:hex, :samly, "1.4.0", "58397eb6ca96bf768655723d378e6468f95f752b547aac1504f126bbd7c9fde8", [:mix], [{:esaml, "~> 4.3", [hex: :esaml, repo: "hexpm", optional: false]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: false]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: false]}], "hexpm", "9cc53e043cb4508c3df2f9a4e13bc101a6835aded5cd49ee1c931158f7ce1dd6"}, - "sentry": {:hex, :sentry, "11.0.1", "e4e0ae12a74c59639808442a79d7ddd224fd5987fb9a14b35a1d01d9606117a3", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: true]}, {:igniter, "~> 0.5", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_ownership, "~> 0.3.0 or ~> 1.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}, {:opentelemetry, "~> 1.5", [hex: :opentelemetry, repo: "hexpm", optional: true]}, {:opentelemetry_api, "~> 1.4", [hex: :opentelemetry_api, repo: "hexpm", optional: true]}, {:opentelemetry_exporter, "~> 1.0", [hex: :opentelemetry_exporter, repo: "hexpm", optional: true]}, {:opentelemetry_semantic_conventions, "~> 1.27", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "ef12b6ee61c24bee3807eee92563567c89f5eec954d6bb913eb797e04625a613"}, + "sentry": {:hex, :sentry, "11.0.0", "f67e45e838c34a915c4d8e9eebc2943cd3cb5907d988d29156e180656c6b2f48", [:mix], [{:hackney, "~> 1.8", [hex: :hackney, repo: "hexpm", optional: true]}, {:igniter, "~> 0.5", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_ownership, "~> 0.3.0 or ~> 1.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}, {:opentelemetry, "~> 1.5", [hex: :opentelemetry, repo: "hexpm", optional: true]}, {:opentelemetry_api, "~> 1.4", [hex: :opentelemetry_api, repo: "hexpm", optional: true]}, {:opentelemetry_exporter, "~> 1.0", [hex: :opentelemetry_exporter, repo: "hexpm", optional: true]}, {:opentelemetry_semantic_conventions, "~> 1.27", [hex: :opentelemetry_semantic_conventions, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6", [hex: :phoenix, repo: "hexpm", optional: true]}, {:phoenix_live_view, "~> 0.20 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.6", [hex: :plug, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "62eb9f5fa3c4d72ce5d9740430e2118f1d44b7dde0e17eafe0259072b2e17163"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.7", "354c321cf377240c7b8716899e182ce4890c5938111a1296add3ec74cf1715df", [:make, :mix, :rebar3], [], "hexpm", "fe4c190e8f37401d30167c8c405eda19469f34577987c76dde613e838bbc67f8"}, "sweet_xml": {:hex, :sweet_xml, "0.7.5", "803a563113981aaac202a1dbd39771562d0ad31004ddbfc9b5090bdcd5605277", [:mix], [], "hexpm", "193b28a9b12891cae351d81a0cead165ffe67df1b73fe5866d10629f4faefb12"}, "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, diff --git a/test/cadet/assessments/assessments_test.exs b/test/cadet/assessments/assessments_test.exs index 41814efe3..6953144c3 100644 --- a/test/cadet/assessments/assessments_test.exs +++ b/test/cadet/assessments/assessments_test.exs @@ -2223,7 +2223,7 @@ defmodule Cadet.AssessmentsTest do test "limit submisssions 2", %{ course_regs: %{avenger1_cr: avenger}, - assessments: _assessments + assessments: assessments } do {_, res} = Assessments.submissions_by_grader_for_index(avenger, %{ @@ -3142,7 +3142,7 @@ defmodule Cadet.AssessmentsTest do defp expected_top_relative_scores(top_x, token_divider) do # "return 0;" in the factory has 3 token - 10..0//-1 + 10..0 |> Enum.to_list() |> Enum.map(fn score -> 10 * score - :math.pow(2, 3 / token_divider) end) |> Enum.take(top_x) diff --git a/test/cadet_web/admin_controllers/admin_assessments_controller_test.exs b/test/cadet_web/admin_controllers/admin_assessments_controller_test.exs index 3f095dfcc..cfd590925 100644 --- a/test/cadet_web/admin_controllers/admin_assessments_controller_test.exs +++ b/test/cadet_web/admin_controllers/admin_assessments_controller_test.exs @@ -5,7 +5,7 @@ defmodule CadetWeb.AdminAssessmentsControllerTest do import Ecto.Query import ExUnit.CaptureLog - alias Cadet.Repo + alias Cadet.{Assessments, Repo} alias Cadet.Accounts.CourseRegistration alias Cadet.Assessments.{Assessment, Submission} alias Cadet.Test.XMLGenerator diff --git a/test/cadet_web/admin_controllers/admin_teams_controller_test.exs b/test/cadet_web/admin_controllers/admin_teams_controller_test.exs index 55f68a8af..32d2a517e 100644 --- a/test/cadet_web/admin_controllers/admin_teams_controller_test.exs +++ b/test/cadet_web/admin_controllers/admin_teams_controller_test.exs @@ -28,39 +28,17 @@ defmodule CadetWeb.AdminTeamsControllerTest do end @tag authenticate: :staff - test "returns a list of teams for the specified course only", %{conn: conn} do + test "returns a list of teams", %{conn: conn} do course_id = conn.assigns.course_id - course = Repo.get(Course, course_id) - assessment = insert(:assessment, %{course: course, max_team_size: 2}) - team1 = insert(:team, %{assessment: assessment}) - insert(:team_member, %{team: team1}) - insert(:team_member, %{team: team1}) - team2 = insert(:team, %{assessment: assessment}) - insert(:team_member, %{team: team2}) - insert(:team_member, %{team: team2}) + team = insert(:team) + insert(:team_member, %{team: team}) + insert(:team_member, %{team: team}) conn = get(conn, build_url(course_id)) assert response(conn, 200) - # Insert other random teams to test filtering - other_course = insert(:course) - other_assessment = insert(:assessment, %{course: other_course, max_team_size: 2}) - team3 = insert(:team, %{assessment: other_assessment}) - insert(:team_member, %{team: team3}) - insert(:team_member, %{team: team3}) - - response_body = - conn.resp_body - |> Jason.decode!() - # Sort the teams by teamId for consistent testing - |> Enum.sort_by(& &1["teamId"]) - - assert is_list(response_body) - assert length(response_body) == 2 - assert response_body |> hd() |> Map.get("teamId") == team1.id - assert response_body |> hd() |> Map.get("assessmentId") == assessment.id - assert response_body |> tl() |> hd() |> Map.get("teamId") == team2.id - assert response_body |> tl() |> hd() |> Map.get("assessmentId") == assessment.id + response_body = conn.resp_body |> Jason.decode!() + assert Enum.any?(response_body, fn team_map -> team_map["teamId"] == team.id end) end end diff --git a/test/cadet_web/plug/rate_limiter_test.exs b/test/cadet_web/plug/rate_limiter_test.exs index d5337f711..0820295b2 100644 --- a/test/cadet_web/plug/rate_limiter_test.exs +++ b/test/cadet_web/plug/rate_limiter_test.exs @@ -22,6 +22,8 @@ defmodule CadetWeb.Plugs.RateLimiterTest do end test "rate limit exceeded", %{conn: conn} do + key = "user:1" + # Simulate exceeding the rate limit for _ <- 1..RateLimiter.rate_limit() do conn = RateLimiter.call(conn, %{})