From 72804ccd84f7e96cc921074dd5ea55fe64a2d361 Mon Sep 17 00:00:00 2001
From: Kerdo Kurs <kerdokurs@gmail.com>
Date: Tue, 3 Dec 2024 15:28:57 +0200
Subject: [PATCH] add TDD #29

---
 .../controllers/search_controller_test.exs    | 77 +++++++++++++++++++
 1 file changed, 77 insertions(+)

diff --git a/test/proptrackr_web/controllers/search_controller_test.exs b/test/proptrackr_web/controllers/search_controller_test.exs
index e936228..3823265 100644
--- a/test/proptrackr_web/controllers/search_controller_test.exs
+++ b/test/proptrackr_web/controllers/search_controller_test.exs
@@ -3,6 +3,8 @@ defmodule PropTrackrWeb.SearchControllerTest do
   alias PropTrackr.Accounts.User
   alias PropTrackr.Properties.Property
   alias PropTrackr.Repo
+  alias PropTrackr.Search
+  import Ecto.Query, only: [from: 2]
 
   setup do
     user = %User{
@@ -377,6 +379,81 @@ defmodule PropTrackrWeb.SearchControllerTest do
     assert get_flash(conn, :error) =~ ~r/You are not logged in/
   end
 
+  test "4.4 The last 5 searches of authenticated user should be saved", %{ conn: conn, user: user, properties: properties } do
+    conn = conn |> setup_session(user)
+
+    searches = Repo.all(from s in Search, where: s.user_id == ^user.id, order_by: [asc: s.inserted_at])
+    assert length(searches) == 0
+
+    conn = post(conn, ~p"/search", %{search: %{
+      type: :any,
+      location: "Estonia",
+      areas: ["Tartu", "Tallinn"],
+      min_price: 100.0,
+      max_price: 10000000.0,
+      min_rooms: 1,
+      max_rooms: 100,
+    }})
+
+    conn = post(conn, ~p"/search", %{search: %{
+      type: :any,
+      location: "Estonia",
+      areas: ["Tartu"],
+      min_price: 100.0,
+      max_price: 10000000.0,
+      min_rooms: 1,
+      max_rooms: 100,
+    }})
+
+    conn = post(conn, ~p"/search", %{search: %{
+      type: :any,
+      location: "Estonia",
+      areas: ["Tallinn"],
+      min_price: 100.0,
+      max_price: 10000000.0,
+      min_rooms: 1,
+      max_rooms: 100,
+    }})
+
+    conn = post(conn, ~p"/search", %{search: %{
+      type: :any,
+      location: "Estonia",
+      areas: ["Tartu", "Tallinn"],
+      min_price: 100.0,
+      max_price: 10000000.0,
+      min_rooms: 1,
+      max_rooms: 100,
+    }})
+
+    conn = post(conn, ~p"/search", %{search: %{
+      type: :any,
+      location: "Estonia",
+      areas: ["Tartu"],
+      min_price: 100.0,
+      max_price: 10000000.0,
+      min_rooms: 1,
+      max_rooms: 100,
+    }})
+
+    conn = post(conn, ~p"/search", %{search: %{
+      type: :any,
+      location: "Estonia",
+      areas: ["Jأµgeva"],
+      min_price: 100.0,
+      max_price: 10000000.0,
+      min_rooms: 1,
+      max_rooms: 100,
+    }})
+
+    conn = get conn, "/search"
+
+    result = html_response(conn, 200)
+    assert result =~ ~r/Previous searches/
+
+    searches = Repo.all(from s in Search, where: s.user_id == ^user.id, order_by: [asc: s.inserted_at])
+    assert length(searches) == 5
+  end
+
   defp setup_session(conn, user) do
     conn = conn |> post("/login", email: user.email, password: user.password)
     conn = get conn, redirected_to(conn)
-- 
GitLab