Skip to content
Snippets Groups Projects

Implement tests for FR-19 and FR-20

Merged kerdo requested to merge 29-fr-19-save-last-5-searches into main
3 files
+ 99
54
Compare changes
  • Side-by-side
  • Inline
Files
3
@@ -12,7 +12,6 @@ defmodule PropTrackrWeb.SearchController do
def index(conn, _params) do
current_user = conn.assigns.current_user
if current_user do
min_price = from(p in Property, select: min(p.price)) |> Repo.one
max_price = from(p in Property, select: max(p.price)) |> Repo.one
@@ -60,59 +59,65 @@ defmodule PropTrackrWeb.SearchController do
def create(conn, %{ "search" => search }) do
current_user = conn.assigns.current_user
changeset = Search.changeset(%Search{}, search)
query = Search.create_query(changeset.changes, current_user)
if current_user do
changeset = Search.changeset(%Search{}, search)
query = Search.create_query(changeset.changes, current_user)
saved = if current_user do
searches = Repo.all(
from s in Search,
where: s.user_id == ^current_user.id,
order_by: [asc: s.inserted_at]
)
saved = if current_user do
searches = Repo.all(
from s in Search,
where: s.user_id == ^current_user.id,
order_by: [asc: s.inserted_at]
)
if length(searches) >= 5 do
case Repo.delete(Enum.at(searches, 0)) do
{:ok, _search} -> :ok
{:error, _changeset} -> :error
end
end
search_assoc = Ecto.build_assoc(current_user, :searches, changeset.changes)
search_changeset = Search.changeset(search_assoc, changeset.changes)
if length(searches) >= 5 do
case Repo.delete(Enum.at(searches, 0)) do
case Repo.insert(search_changeset) do
{:ok, _search} -> :ok
{:error, _changeset} -> :error
end
else
:ok
end
search_assoc = Ecto.build_assoc(current_user, :searches, changeset.changes)
search_changeset = Search.changeset(search_assoc, changeset.changes)
case Repo.insert(search_changeset) do
{:ok, _search} -> :ok
{:error, _changeset} -> :error
conn = case saved do
:ok -> conn
:error -> conn
|> put_flash(:error, "Unknown error saving search")
end
else
:ok
end
conn = case saved do
:ok -> conn
:error -> conn
|> put_flash(:error, "Unknown error saving search")
end
properties = query |> Repo.all()
properties = query |> Repo.all()
favorites = case conn.assigns.current_user do
nil -> []
current_user ->
Repo.all(
from f in Favorite,
where: f.user_id == ^current_user.id,
select: f.property_id
)
end
favorites = case conn.assigns.current_user do
nil -> []
current_user ->
Repo.all(
from f in Favorite,
where: f.user_id == ^current_user.id,
select: f.property_id
)
render(
conn, "index.html",
properties: properties,
header_text: "Search results",
is_search: true,
favorites: favorites
)
else
conn
|> put_flash(:error, "You are not logged in")
|> redirect(to: "/login")
end
render(
conn, "index.html",
properties: properties,
header_text: "Search results",
is_search: true,
favorites: favorites
)
end
def show(conn, %{ "id" => id }) do
Loading