Skip to content
Snippets Groups Projects
Commit 0972414f authored by syedfakh's avatar syedfakh
Browse files

Merge branch 'syed_dev' into 'main'

social media ef02 BDD TDD

See merge request !110
parents 7139e48a 9d239371
No related branches found
No related tags found
1 merge request!110social media ef02 BDD TDD
Pipeline #47126 passed
......@@ -86,6 +86,8 @@ suite name: "2.2_own_adv_show",
context: ProptrackerWeb.OwnAdvertisementShow,
feature_paths: ["features/2.2_own_adv_show.feature"]
suite name: "ef02_Social_Suite",
context: ProptrackerWeb.SocialMediaContext,
feature_paths: ["features/ef02_social.feature"]
end
defmodule ProptrackerWeb.SocialMediaContext do
use WhiteBread.Context
alias Proptracker.Repo
alias Proptracker.Accounts.Advertisement
alias Proptracker.Accounts.User
alias ProptrackerWeb.AdvertisementController
import Phoenix.ConnTest, only: [html_response: 2]
@moduledoc """
Context for testing social media sharing functionality (Facebook) on the advertisement show page.
"""
# Given a valid advertisement exists
given_ ~r/^a valid advertisement exists$/ do
fn state ->
advertisement = %Advertisement{
title: "Modern Apartment",
price: Decimal.new(250_000),
location: "Downtown",
square_meters: 100,
type: "Apartment",
rooms: 3,
pictures: ["/adverts/image1.jpg"],
description: "A beautiful apartment in the city center.",
state: "available",
latitude: 40.7128,
longitude: -74.0060
}
{:ok, advertisement} = Repo.insert(advertisement)
{:ok, Map.put(state, :advertisement, advertisement)}
end
end
# Given a user is logged in
given_ ~r/^the user is logged in$/ do
fn state ->
user_data = %{username: "testuser", password: "password123", password_confirmation: "password123"}
changeset = User.registration_changeset(%User{}, user_data)
{:ok, user} = Repo.insert(changeset)
conn = %Plug.Conn{} |> Plug.Test.init_test_session(user_id: user.id)
{:ok, Map.put(state, :user, user) |> Map.put(state, :conn, conn)}
end
end
# When the user navigates to the advertisement show page
when_ ~r/^the user navigates to the advertisement show page$/ do
fn state ->
advertisement = state[:advertisement]
conn = state[:conn]
response = AdvertisementController.show(conn, %{"id" => advertisement.id})
{:ok, Map.put(state, :response, response)}
end
end
# Then the page should display a "Share on Facebook" button
then_ ~r/^the page should display a "Share on Facebook" button$/ do
fn state ->
response = state[:response]
# Check if the page contains the "Share on Facebook" button
assert html_response(response, 200) =~ "Share on Facebook"
{:ok, state}
end
end
end
Feature: Social Media sharing functionality
Scenario: User sees the "Share on Facebook" button on the advertisement show page
Given the user is logged in
When the user navigates to the advertisement show page
Then the page should display a "Share on Facebook" button
defmodule ProptrackerWeb.AdvertisementSocialMediaTest do
use ProptrackerWeb.ConnCase
alias Proptracker.Accounts.{User, Advertisement}
alias Proptracker.Repo
# Define valid attributes for creating a user and an advertisement
@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: "Beautiful House",
description: "A beautiful house for sale",
price: 200000,
location: "Downtown",
square_meters: 150,
rooms: 4,
floor: 2,
total_floors: 3,
state: "available",
reference: "REF123",
pictures: ["/path/to/image1.jpg"],
type: "sell"
}
# Helper function to create a user
defp create_user(_) do
{:ok, user} = Repo.insert(%User{} |> User.changeset(@valid_user_attrs))
%{user: user}
end
# Helper function to create an advertisement
defp create_advertisement(%{user: user}) do
valid_attrs = Map.put(@valid_advertisement_attrs, :user_id, user.id)
{:ok, valid_advertisement} = Repo.insert(Advertisement.changeset(%Advertisement{}, valid_attrs))
%{valid_advertisement: Repo.preload(valid_advertisement, :user)}
end
# Helper function to simulate user login
defp login_user(conn, user) do
post(conn, "/login", user: %{username: user.username, password: user.password})
end
describe "Social Media functionality" do
setup [:create_user, :create_advertisement]
test "displays social media sharing buttons on the advertisement page", %{conn: conn, valid_advertisement: advertisement} do
# Simulate logging in the user
conn = login_user(conn, advertisement.user)
# Ensure the user is logged in
assert get_session(conn, :user_id) == advertisement.user.id
# Access the advertisement's show page
conn = get(conn, ~p"/advertisements/#{advertisement.id}")
# Check for social media sharing buttons
assert html_response(conn, 200) =~ "Share on Facebook"
end
test "includes correct sharing URLs for the advertisement", %{conn: conn, valid_advertisement: advertisement} do
# Simulate logging in the user
conn = login_user(conn, advertisement.user)
# Ensure the user is logged in
assert get_session(conn, :user_id) == advertisement.user.id
# Access the advertisement's show page
conn = get(conn, ~p"/advertisements/#{advertisement.id}")
# Construct expected sharing URLs
expected_url = ~s(#{ProptrackerWeb.Endpoint.url()}/advertisements/#{advertisement.id})
# Check if the correct sharing URL is included in the page
assert html_response(conn, 200) =~ expected_url
end
test "does not display social media sharing buttons on the advertisement page", %{conn: conn, valid_advertisement: advertisement} do
# Simulate logging in the user
conn = login_user(conn, advertisement.user)
# Ensure the user is logged in
assert get_session(conn, :user_id) == advertisement.user.id
# Access the advertisement's show page
conn = get(conn, ~p"/advertisements/#{advertisement.id}")
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