Skip to content
Snippets Groups Projects
Commit 4995384f authored by snaqvi's avatar snaqvi
Browse files

edit TDD 2.4

parent 39b619df
No related branches found
No related tags found
1 merge request!103edit TDD 2.4
Pipeline #47086 passed
defmodule ProptrackerWeb.AdvertisementUpdateTest 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 "update advertisement" do
setup [:create_user, :create_advertisement]
test "advertisement is successfully updated", %{conn: conn, user: user, advertisement: advertisement} 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 PUT request to update the advertisement
updated_attrs = Map.put(@valid_advertisement_attrs, :title, "Updated Ad Title")
conn =
put(conn, ~p"/advertisements/#{advertisement.id}", %{
"advertisement" => updated_attrs
})
# Retrieve the updated advertisement from the database
updated_advertisement = Repo.get(Advertisement, advertisement.id)
# Check if the advertisement was successfully updated in the database
assert updated_advertisement != nil
assert updated_advertisement.title == "Updated Ad Title"
assert updated_advertisement.description == "Sample Description"
assert updated_advertisement.location == "Sample City"
assert updated_advertisement.user_id == user.id
assert updated_advertisement.state == "available"
end
test "advertisement is not updated with invalid data", %{conn: conn, user: user, advertisement: advertisement} 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 PUT request with missing title (required field)
conn =
put(conn, ~p"/advertisements/#{advertisement.id}", %{
"advertisement" => Map.put(@valid_advertisement_attrs, :user_id, user.id)
|> Map.delete(:title)
})
# Check that the advertisement is not updated
unchanged_advertisement = Repo.get(Advertisement, advertisement.id)
assert unchanged_advertisement.title == advertisement.title # original title is unchanged
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