Skip to content
Snippets Groups Projects
Commit b63b26f0 authored by Kerdo Kurs's avatar Kerdo Kurs
Browse files

implement TDD #28

parent 3cb09772
No related branches found
No related tags found
1 merge request!19Resolve "FR-18: Display Similar Properties on Listing View"
Pipeline #45506 passed
......@@ -111,7 +111,11 @@
<p class="text-sm text-gray-600">No similar properties found</p>
<% else %>
<%= for property <- @similar_properties do %>
<div class="flex items-center justify-between mt-4 similar-property">
<div
class="flex items-center justify-between mt-4 similar-property"
data-what="similar-property"
data-price={property.price}>
<div>
<p class="text-sm text-gray-600"><%= property.title %></p>
<p class="text-sm text-gray-600"><%= :erlang.float_to_binary(property.price, decimals: 2) %></p>
......
......@@ -293,4 +293,5 @@ defmodule PropTrackrWeb.PropertiesControllerTest do
conn = get conn, redirected_to(conn)
conn
end
end
defmodule PropTrackrWeb.SimilarPropertiesControllerTest do
use PropTrackrWeb.ConnCase
alias PropTrackr.Accounts.User
alias PropTrackr.Properties.Property
alias PropTrackr.Repo
setup do
user = %User{
name: "Test",
surname: "User",
birth_date: "2000-01-01",
phone_number: "000",
bio: "Yo",
email: "test.user@gmail.com",
password: "testing",
confirm_password: "testing",
}
user = Repo.insert!(user)
properties = Enum.map(1..7, fn i ->
%Property{
title: "Really cool property #{(7 - i)}",
description: "Selling this really really house",
type: :sell,
property_type: :house,
state: :available,
location: "London",
room_count: 3,
area: 100.0,
floor: 2,
floor_count: 5,
price: 100.0 * i,
reference: Ecto.UUID.generate(),
user_id: user.id,
}
end)
{:ok, %{user: user, properties: properties}}
end
test "no similar properties found", %{conn: conn, user: user, properties: properties} do
property = List.first(properties)
Repo.insert!(property)
conn = conn |> get "/properties/#{property.reference}"
assert html_response(conn, 200) =~ "No similar properties found"
end
test "only 5 similar properties are shown", %{conn: conn, user: user, properties: properties} do
property = List.first(properties)
properties |> Enum.each(fn property -> Repo.insert!(property) end)
conn = conn |> get "/properties/#{property.reference}"
assert html_response(conn, 200)
content = html_response(conn, 200)
similar_properties = Regex.scan(~r/data-what="similar-property"/m, content)
assert length(similar_properties) == 5
end
test "similar properties are ordered in terms of the price", %{conn: conn, user: user, properties: properties} do
property = List.first(properties)
properties |> Enum.each(fn property -> Repo.insert!(property) end)
conn = conn |> get "/properties/#{property.reference}"
assert html_response(conn, 200)
content = html_response(conn, 200)
similar_properties = Regex.scan(~r/data-price="(.+?)"/m, content)
similar_properties = Enum.map(similar_properties, fn [_, price] -> String.to_float(price) end)
# 1st is the current property
# only 5 shown
# => show 2..6
prices = Enum.map(Enum.slice(Enum.sort(properties), 2, 6), fn property -> property.price end)
assert Enum.sort(prices) == Enum.sort(similar_properties)
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment