From 975245ea994e54d2abc4f41bd8688a78904b141e Mon Sep 17 00:00:00 2001 From: Rodrigo Nonose Date: Mon, 6 Nov 2017 15:03:54 -0200 Subject: [PATCH 1/2] Show only invited events for students, teachers and volunteers. --- lib/course_planner/events/events.ex | 16 ++++---- .../controllers/event_controller.ex | 4 +- test/course_planner/events/events_test.exs | 38 +++++++++++++++++-- 3 files changed, 45 insertions(+), 13 deletions(-) diff --git a/lib/course_planner/events/events.ex b/lib/course_planner/events/events.ex index 3c46ec5c..31ffe86e 100644 --- a/lib/course_planner/events/events.ex +++ b/lib/course_planner/events/events.ex @@ -13,17 +13,19 @@ defmodule CoursePlanner.Events do } alias Ecto.Changeset + @query from e in Event, order_by: [asc: e.date, asc: e.starting_time, asc: e.finishing_time] @notifier Application.get_env(:course_planner, :notifier, CoursePlanner.Notifications.Notifier) - def all do - query = from e in Event, - order_by: [asc: e.date, asc: e.starting_time, asc: e.finishing_time] - - Repo.all(query) + def all(%{role: role}) when role in ["Coordinator", "Supervisor"], do: Repo.all(@query) + def all(user) do + user + |> Repo.preload(events: @query) + |> Map.get(:events) end - def all_splitted(now) do - all() + def all_splitted(now, current_user) do + current_user + |> all() |> Enum.split_with(&(compare_event_date_time(&1, now))) |> reverse_past_events() end diff --git a/lib/course_planner_web/controllers/event_controller.ex b/lib/course_planner_web/controllers/event_controller.ex index a7794e19..6aa728bd 100644 --- a/lib/course_planner_web/controllers/event_controller.ex +++ b/lib/course_planner_web/controllers/event_controller.ex @@ -13,8 +13,8 @@ defmodule CoursePlannerWeb.EventController do import Canary.Plugs plug :authorize_controller - def index(conn, _params) do - {past_events, upcoming_events} = Events.all_splitted(Timex.now()) + def index(%{assigns: %{current_user: current_user}} = conn, _params) do + {past_events, upcoming_events} = Events.all_splitted(Timex.now(), current_user) render(conn, "index.html", past_events: past_events, diff --git a/test/course_planner/events/events_test.exs b/test/course_planner/events/events_test.exs index 7103cf50..18383677 100644 --- a/test/course_planner/events/events_test.exs +++ b/test/course_planner/events/events_test.exs @@ -13,9 +13,38 @@ defmodule CoursePlanner.EventsTest do @update_attrs %{date: @today, description: "some updated description", finishing_time: ~T[15:01:01.000000], location: "some updated location", name: "some updated name", starting_time: ~T[14:01:01.000000]} @invalid_attrs %{date: nil, description: nil, finishing_time: nil, location: nil, name: nil, starting_time: nil} - test "all/0 returns all events" do - event = insert(:event) - assert Events.all() == [event] + test "all/1 returns all events ordered" do + %{id: id3} = insert(:event, %{date: @today, starting_time: ~T[13:00:00.000000], + finishing_time: ~T[14:00:00.000000]}) + %{id: id2} = insert(:event, %{date: @today, starting_time: ~T[13:00:00.000000], + finishing_time: ~T[13:00:00.000000]}) + %{id: id1} = insert(:event, %{date: @today, starting_time: ~T[10:00:00.000000]}) + + assert [%{id: ^id1}, %{id: ^id2}, %{id: ^id3}] = Events.all(%{role: "Coordinator"}) + end + + for role <- [:student, :teacher, :volunteer] do + @role role + test "all/1 return only invited events for #{@role}" do + user = insert(@role) + other_users = [insert(:student), insert(:teacher)] + %{id: id} = insert(:event, users: [user | other_users]) + _not_invited_event = insert(:event, users: other_users) + + assert [%{id: ^id}] = Events.all(user) + end + end + + for role <- [:supervisor, :coordinator] do + @role role + test "all/1 return all events for #{@role}" do + user = insert(@role) + other_users = [insert(:student), insert(:teacher)] + %{id: id1} = insert(:event, starting_time: ~T[10:00:00.000000], users: [user | other_users]) + %{id: id2} = insert(:event, starting_time: ~T[12:00:00.000000], users: other_users) + + assert [%{id: ^id1}, %{id: ^id2}] = Events.all(user) + end end test "all_with_users/0 returns all events with preloaded users" do @@ -24,6 +53,7 @@ defmodule CoursePlanner.EventsTest do end test "all_splitted/1 returns events splited by time" do + user = insert(:coordinator) day_before = Timex.shift(@today, days: -1) day_after = Timex.shift(@today, days: 1) %{id: id1} = insert(:event, %{date: day_before, starting_time: ~T[10:00:00.000000]}) @@ -38,7 +68,7 @@ defmodule CoursePlanner.EventsTest do {past_events, upcoming_events} = @now |> Timex.set([hour: 14, minute: 0, second: 0]) - |> Events.all_splitted() + |> Events.all_splitted(user) assert [%{id: ^id3}, %{id: ^id2}, %{id: ^id1}] = past_events assert [%{id: ^id4}, %{id: ^id5}, %{id: ^id6}] = upcoming_events From 3f9b2880093be85679cd92c09ef2b760e3b61dfa Mon Sep 17 00:00:00 2001 From: Rodrigo Nonose Date: Mon, 6 Nov 2017 15:20:55 -0200 Subject: [PATCH 2/2] Remove unused code and test. --- lib/course_planner/events/events.ex | 8 -------- test/course_planner/events/events_test.exs | 5 ----- 2 files changed, 13 deletions(-) diff --git a/lib/course_planner/events/events.ex b/lib/course_planner/events/events.ex index 31ffe86e..6e127e4e 100644 --- a/lib/course_planner/events/events.ex +++ b/lib/course_planner/events/events.ex @@ -39,14 +39,6 @@ defmodule CoursePlanner.Events do {Enum.reverse(past_events), upcoming_events} end - def all_with_users do - query = from e in Event, - preload: [:users], - order_by: [asc: e.date, asc: e.starting_time, asc: e.finishing_time] - - Repo.all(query) - end - def get(id) do case Repo.get(Event, id) do nil -> {:error, :not_found} diff --git a/test/course_planner/events/events_test.exs b/test/course_planner/events/events_test.exs index 18383677..5c0b1c5b 100644 --- a/test/course_planner/events/events_test.exs +++ b/test/course_planner/events/events_test.exs @@ -47,11 +47,6 @@ defmodule CoursePlanner.EventsTest do end end - test "all_with_users/0 returns all events with preloaded users" do - event = insert(:event) - assert Events.all_with_users() == [event |> Repo.preload(:users)] - end - test "all_splitted/1 returns events splited by time" do user = insert(:coordinator) day_before = Timex.shift(@today, days: -1)