diff --git a/lib/real_estate/properties.ex b/lib/real_estate/properties.ex index bca299a..5116d08 100644 --- a/lib/real_estate/properties.ex +++ b/lib/real_estate/properties.ex @@ -51,7 +51,7 @@ defmodule RealEstate.Properties do """ def create_property(attrs \\ %{}) do %Property{} - |> Property.changeset(attrs) + |> Property.create_changeset(attrs) |> Repo.insert() end diff --git a/lib/real_estate/properties/property.ex b/lib/real_estate/properties/property.ex index 2786b1f..9be0984 100644 --- a/lib/real_estate/properties/property.ex +++ b/lib/real_estate/properties/property.ex @@ -11,6 +11,12 @@ defmodule RealEstate.Properties.Property do timestamps() end + def create_changeset(property, attrs) do + property + |> cast(attrs, [:name, :price, :description, :user_id]) + |> validate_required([:name, :price, :description, :user_id]) + end + @doc false def changeset(property, attrs) do property diff --git a/lib/real_estate_web/live/property_live/form_component.ex b/lib/real_estate_web/live/property_live/form_component.ex index 7097e6e..0d8d314 100644 --- a/lib/real_estate_web/live/property_live/form_component.ex +++ b/lib/real_estate_web/live/property_live/form_component.ex @@ -41,6 +41,9 @@ defmodule RealEstateWeb.PropertyLive.FormComponent do end defp save_property(socket, :new, property_params) do + current_user = socket.assigns.current_user + property_params = Map.put(property_params, "user_id", current_user.id) + case Properties.create_property(property_params) do {:ok, _property} -> {:noreply, diff --git a/lib/real_estate_web/live/property_live/index.ex b/lib/real_estate_web/live/property_live/index.ex index edd658a..2fddfa7 100644 --- a/lib/real_estate_web/live/property_live/index.ex +++ b/lib/real_estate_web/live/property_live/index.ex @@ -5,7 +5,8 @@ defmodule RealEstateWeb.PropertyLive.Index do alias RealEstate.Properties.Property @impl true - def mount(_params, _session, socket) do + def mount(_params, session, socket) do + socket = assign_defaults(session, socket) {:ok, assign(socket, :properties, list_properties())} end diff --git a/lib/real_estate_web/live/property_live/index.html.leex b/lib/real_estate_web/live/property_live/index.html.leex index 3d99ff2..9f5c80c 100644 --- a/lib/real_estate_web/live/property_live/index.html.leex +++ b/lib/real_estate_web/live/property_live/index.html.leex @@ -6,6 +6,7 @@ title: @page_title, action: @live_action, property: @property, + current_user: @current_user, return_to: Routes.property_index_path(@socket, :index) %> <% end %> diff --git a/test/real_estate/properties_test.exs b/test/real_estate/properties_test.exs index ae063e5..faa853d 100644 --- a/test/real_estate/properties_test.exs +++ b/test/real_estate/properties_test.exs @@ -2,18 +2,26 @@ defmodule RealEstate.PropertiesTest do use RealEstate.DataCase alias RealEstate.Properties + import RealEstate.AccountsFixtures describe "properties" do alias RealEstate.Properties.Property @valid_attrs %{description: "some description", name: "some name", price: "120.5"} - @update_attrs %{description: "some updated description", name: "some updated name", price: "456.7"} + @update_attrs %{ + description: "some updated description", + name: "some updated name", + price: "456.7" + } @invalid_attrs %{description: nil, name: nil, price: nil} def property_fixture(attrs \\ %{}) do + user = user_fixture() + {:ok, property} = attrs |> Enum.into(@valid_attrs) + |> Enum.into(%{user_id: user.id}) |> Properties.create_property() property @@ -30,14 +38,20 @@ defmodule RealEstate.PropertiesTest do end test "create_property/1 with valid data creates a property" do - assert {:ok, %Property{} = property} = Properties.create_property(@valid_attrs) + user = user_fixture() + create_attributes = Enum.into(%{user_id: user.id}, @valid_attrs) + + assert {:ok, %Property{} = property} = Properties.create_property(create_attributes) assert property.description == "some description" assert property.name == "some name" assert property.price == Decimal.new("120.5") + assert property.user_id == user.id end test "create_property/1 with invalid data returns error changeset" do - assert {:error, %Ecto.Changeset{}} = Properties.create_property(@invalid_attrs) + user = user_fixture() + create_attributes = Enum.into(%{user_id: user.id}, @invalid_attrs) + assert {:error, %Ecto.Changeset{}} = Properties.create_property(create_attributes) end test "update_property/2 with valid data updates the property" do diff --git a/test/real_estate_web/live/property_live_test.exs b/test/real_estate_web/live/property_live_test.exs index 4ed2679..f337634 100644 --- a/test/real_estate_web/live/property_live_test.exs +++ b/test/real_estate_web/live/property_live_test.exs @@ -15,7 +15,9 @@ defmodule RealEstateWeb.PropertyLiveTest do @invalid_attrs %{description: nil, name: nil, price: nil} defp fixture(:property) do - {:ok, property} = Properties.create_property(@create_attrs) + user = user_fixture() + create_attributes = Enum.into(%{user_id: user.id}, @create_attrs) + {:ok, property} = Properties.create_property(create_attributes) property end