Skip to content
Snippets Groups Projects
Commit 39b619df authored by syedfakh's avatar syedfakh
Browse files

Merge branch 'syed_dev' into 'main'

create AD TDD

See merge request !102
parents 2da15053 1720c493
No related branches found
No related tags found
1 merge request!102create AD TDD
Pipeline #47085 passed
defmodule ProptrackerWeb.AdvertisementCreateTest do
use ProptrackerWeb.ConnCase
alias Proptracker.Accounts.{User, Advertisement}
alias Proptracker.Repo
@valid_user_attrs %{name: "John Doe", username: "john_doe", password: "secret123", date_of_birth: ~D[1990-01-01], phone_number: "123456789"}
@valid_advertisement_attrs %{
title: "Sample Ad",
pictures: ["path/to/image1.jpg", "path/to/image2.jpg"],
description: "Sample Description",
type: "rent",
price: Decimal.new("1000.00"),
square_meters: 100,
location: "Sample City",
rooms: 2,
floor: 1,
total_floors: 5,
state: "available"
}
# Create user helper function
defp create_user(_) do
{:ok, user} = Repo.insert(%User{} |> User.changeset(@valid_user_attrs))
%{user: user}
end
# Create advertisement helper function, preload user association
defp create_advertisement(%{user: user}) do
advertisement_attrs = Map.put(@valid_advertisement_attrs, :user_id, user.id)
changeset = Advertisement.changeset(%Advertisement{}, advertisement_attrs)
{:ok, advertisement} = Repo.insert(changeset)
advertisement = Repo.preload(advertisement, :user)
%{advertisement: advertisement}
end
# Login helper function
defp login_user(conn, user) do
post(conn, "/login", user: %{username: user.username, password: user.password})
end
describe "show advertisement" do
setup [:create_user, :create_advertisement]
test "advertisement is successfully saved to the database", %{conn: conn, user: user} do
# Simulate logging in the user
conn = login_user(conn, user)
# Ensure user is logged in (session contains user_id)
assert get_session(conn, :user_id) == user.id
# Simulate a POST request to create an advertisement
conn =
post(conn, ~p"/advertisements", %{
"advertisement" => Map.put(@valid_advertisement_attrs, :user_id, user.id)
})
# Retrieve the advertisement from the database
saved_advertisement = Repo.get_by(Advertisement, title: "Sample Ad")
# Check if the advertisement exists in the database
assert saved_advertisement != nil
assert saved_advertisement.title == "Sample Ad"
assert saved_advertisement.description == "Sample Description"
assert saved_advertisement.location == "Sample City"
assert saved_advertisement.user_id == user.id
assert saved_advertisement.state == "available"
end
test "advertisement is not created with invalid data", %{conn: conn, user: user} do
# Simulate logging in the user
conn = login_user(conn, user)
# Ensure user is logged in (session contains user_id)
assert get_session(conn, :user_id) == user.id
# Simulate a POST request with missing title (required field)
conn =
post(conn, ~p"/advertisements", %{
"advertisement" => Map.put(@valid_advertisement_attrs, :user_id, user.id)
|> Map.delete(:title)
})
# Check that no advertisement was created by verifying that it is not in the database
saved_advertisement = Repo.get_by(Advertisement, title: "Sample Ad")
end
end
end
......@@ -74,5 +74,29 @@ defmodule ProptrackerWeb.AdvertisementShowTest do
# Simulate a GET request to the advertisement's show page (should fail since this is not the correct owner)
conn = get(conn, ~p"/advertisements/#{advertisement.id}")
end
test "advertisement is successfully saved to the database", %{conn: conn, user: user} do
# Simulate logging in the user
conn = login_user(conn, user)
# Ensure user is logged in (session contains user_id)
assert get_session(conn, :user_id) == user.id
# Simulate a POST request to create an advertisement
conn =
post(conn, ~p"/advertisements", %{
"advertisement" => Map.put(@valid_advertisement_attrs, :user_id, user.id)
})
# Retrieve the advertisement from the database
saved_advertisement = Repo.get_by(Advertisement, title: "Sample Ad")
# Check if the advertisement exists in the database
assert saved_advertisement != nil
assert saved_advertisement.title == "Sample Ad"
assert saved_advertisement.description == "Sample Description"
assert saved_advertisement.location == "Sample City"
assert saved_advertisement.user_id == user.id
assert saved_advertisement.state == "available"
end
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