<.simple_form
for={@form}
- id="event-form"
+ id="ticket-form"
phx-target={@myself}
phx-change="validate"
phx-submit="save"
diff --git a/lib/elixir_conf_africa_web/live/ticket_type_live/form_component.ex b/lib/elixir_conf_africa_web/live/ticket_type_live/form_component.ex
index 1e4e4c8..e5e2354 100644
--- a/lib/elixir_conf_africa_web/live/ticket_type_live/form_component.ex
+++ b/lib/elixir_conf_africa_web/live/ticket_type_live/form_component.ex
@@ -33,7 +33,7 @@ defmodule ElixirConfAfricaWeb.TicketTypeLive.FormComponent do
{:noreply,
socket
|> put_flash(:info, "Ticket type updated successfully")
- |> push_patch(to: socket.assigns.patch)}
+ |> push_redirect(to: socket.assigns.patch)}
{:error, %Ecto.Changeset{} = changeset} ->
{:noreply, assign(socket, :changeset, changeset)}
@@ -46,7 +46,7 @@ defmodule ElixirConfAfricaWeb.TicketTypeLive.FormComponent do
{:noreply,
socket
|> put_flash(:info, "Ticket type created successfully")
- |> push_patch(to: socket.assigns.patch)}
+ |> push_redirect(to: socket.assigns.patch)}
{:error, %Ecto.Changeset{} = changeset} ->
{:noreply, assign(socket, changeset: changeset)}
diff --git a/lib/elixir_conf_africa_web/live/ticket_type_live/index.html.heex b/lib/elixir_conf_africa_web/live/ticket_type_live/index.html.heex
index 2b8ec1c..3d2653a 100644
--- a/lib/elixir_conf_africa_web/live/ticket_type_live/index.html.heex
+++ b/lib/elixir_conf_africa_web/live/ticket_type_live/index.html.heex
@@ -3,7 +3,7 @@
Listing Ticket types
<:actions>
<.link patch={~p"/ticket_types/new"}>
- <.button>New Ticket type
+ <.button>New Ticket Type
@@ -43,7 +43,12 @@
- <.link patch={~p"/ticket_types/#{ticket_type}/edit"}>Edit
+ <.link
+ id={"ticket_types-#{ticket_type.id}"}
+ patch={~p"/ticket_types/#{ticket_type}/edit"}
+ >
+ Edit
+
<.link
diff --git a/lib/elixir_conf_africa_web/user_auth.ex b/lib/elixir_conf_africa_web/user_auth.ex
index 2235ca7..89ec6e3 100644
--- a/lib/elixir_conf_africa_web/user_auth.ex
+++ b/lib/elixir_conf_africa_web/user_auth.ex
@@ -1,4 +1,5 @@
defmodule ElixirConfAfricaWeb.UserAuth do
+ @moduledoc false
use ElixirConfAfricaWeb, :verified_routes
import Plug.Conn
diff --git a/mix.exs b/mix.exs
index 06071da..bb2f687 100644
--- a/mix.exs
+++ b/mix.exs
@@ -69,7 +69,7 @@ defmodule ElixirConfAfrica.MixProject do
{:typed_ecto_schema, "~> 0.4.1"},
{:ex_machina, "~> 2.7.0"},
{:httpoison, "~> 2.1"},
- {:styler, "~> 0.11", only: [:dev, :test], runtime: false},
+ {:styler, "~> 0.11", only: [:dev, :test], runtime: false}
]
end
diff --git a/test/.DS_Store b/test/.DS_Store
new file mode 100644
index 0000000..dd0df7d
Binary files /dev/null and b/test/.DS_Store differ
diff --git a/test/elixir_conf_africa/accounts_test.exs b/test/elixir_conf_africa/accounts_test.exs
index 16e79f0..38c2f53 100644
--- a/test/elixir_conf_africa/accounts_test.exs
+++ b/test/elixir_conf_africa/accounts_test.exs
@@ -59,11 +59,11 @@ defmodule ElixirConfAfrica.AccountsTest do
end
test "validates email and password when given" do
- {:error, changeset} = Accounts.register_user(%{email: "not valid", password: "not valid"})
+ {:error, changeset} = Accounts.register_user(%{email: "not valid", password: "poor"})
assert %{
email: ["must have the @ sign and no spaces"],
- password: ["should be at least 12 character(s)"]
+ password: ["should be at least 6 character(s)"]
} = errors_on(changeset)
end
@@ -152,9 +152,9 @@ defmodule ElixirConfAfrica.AccountsTest do
test "validates email uniqueness", %{user: user} do
%{email: email} = user_fixture()
- password = valid_user_password()
- {:error, changeset} = Accounts.apply_user_email(user, password, %{email: email})
+ {:error, changeset} =
+ Accounts.apply_user_email(user, valid_user_password(), %{email: email})
assert "has already been taken" in errors_on(changeset).email
end
@@ -174,7 +174,7 @@ defmodule ElixirConfAfrica.AccountsTest do
end
end
- describe "deliver_user_update_email_instructions/3" do
+ describe "deliver_update_email_instructions/3" do
setup do
%{user: user_fixture()}
end
@@ -182,7 +182,7 @@ defmodule ElixirConfAfrica.AccountsTest do
test "sends token through notification", %{user: user} do
token =
extract_user_token(fn url ->
- Accounts.deliver_user_update_email_instructions(user, "current@example.com", url)
+ Accounts.deliver_update_email_instructions(user, "current@example.com", url)
end)
{:ok, token} = Base.url_decode64(token, padding: false)
@@ -200,7 +200,7 @@ defmodule ElixirConfAfrica.AccountsTest do
token =
extract_user_token(fn url ->
- Accounts.deliver_user_update_email_instructions(%{user | email: email}, user.email, url)
+ Accounts.deliver_update_email_instructions(%{user | email: email}, user.email, url)
end)
%{user: user, token: token, email: email}
@@ -262,12 +262,12 @@ defmodule ElixirConfAfrica.AccountsTest do
test "validates password", %{user: user} do
{:error, changeset} =
Accounts.update_user_password(user, valid_user_password(), %{
- password: "not valid",
+ password: "poor",
password_confirmation: "another"
})
assert %{
- password: ["should be at least 12 character(s)"],
+ password: ["should be at least 6 character(s)"],
password_confirmation: ["does not match password"]
} = errors_on(changeset)
end
@@ -353,11 +353,11 @@ defmodule ElixirConfAfrica.AccountsTest do
end
end
- describe "delete_user_session_token/1" do
+ describe "delete_session_token/1" do
test "deletes the token" do
user = user_fixture()
token = Accounts.generate_user_session_token(user)
- assert Accounts.delete_user_session_token(token) == :ok
+ assert Accounts.delete_session_token(token) == :ok
refute Accounts.get_user_by_session_token(token)
end
end
@@ -471,12 +471,12 @@ defmodule ElixirConfAfrica.AccountsTest do
test "validates password", %{user: user} do
{:error, changeset} =
Accounts.reset_user_password(user, %{
- password: "not valid",
+ password: "poor",
password_confirmation: "another"
})
assert %{
- password: ["should be at least 12 character(s)"],
+ password: ["should be at least 6 character(s)"],
password_confirmation: ["does not match password"]
} = errors_on(changeset)
end
@@ -500,7 +500,27 @@ defmodule ElixirConfAfrica.AccountsTest do
end
end
- describe "inspect/2 for the User module" do
+ describe "update a user role/2" do
+ setup do
+ %{user: user_fixture()}
+ end
+
+ test "you can update a user's role" do
+ {:ok, user} = Accounts.register_user(valid_user_attributes())
+ assert user.role == "user"
+ {:ok, user} = Accounts.update_user_role(user, "admin")
+ assert user.role == "admin"
+ end
+
+ test "you can only give the roles 'user' , 'admin' or 'scanner'" do
+ {:ok, user} = Accounts.register_user(valid_user_attributes())
+ assert user.role == "user"
+ {:error, _} = Accounts.update_user_role(user, "not a role")
+ assert user.role == "user"
+ end
+ end
+
+ describe "inspect/2" do
test "does not include password" do
refute inspect(%User{password: "123456"}) =~ "password: \"123456\""
end
diff --git a/test/elixir_conf_africa/events_test.exs b/test/elixir_conf_africa/events_test.exs
deleted file mode 100644
index db27efe..0000000
--- a/test/elixir_conf_africa/events_test.exs
+++ /dev/null
@@ -1,110 +0,0 @@
-defmodule ElixirConfAfrica.EventsTest do
- use ElixirConfAfrica.DataCase
-
- alias ElixirConfAfrica.Events
-
- describe "events" do
- import ElixirConfAfrica.Factory
- alias ElixirConfAfrica.Events.Event
-
- @invalid_attrs %{
- name: nil,
- description: nil,
- location: nil,
- event_type: nil,
- start_date: nil,
- end_date: nil
- }
- setup do
- event = insert!(:elixir_conf_event)
- [event: event]
- end
-
- test "list_events/0 returns all events", %{event: event} do
- assert Events.list_events() == [event]
- end
-
- test "get_event!/1 returns the event with given id", %{event: event} do
- assert Events.get_event!(event.id) == event
- end
-
- test "get_event_with_ticket_types_by_event_name/1 returns the elixir conf event with ticket types",
- %{event: event} do
- ticket_type =
- insert!(:elixir_conf_ticket_type, event_id: event.id)
-
- event_with_ticket_types = ElixirConfAfrica.Repo.preload(event, :ticket_types)
- assert event = Events.get_event_with_ticket_types_by_event_name(event.name)
-
- assert event_with_ticket_types.ticket_types == [ticket_type]
- assert event == event_with_ticket_types
- end
-
- test "create_event/1 with valid data creates a event" do
- valid_attrs = %{
- name: "some name",
- description: "some description",
- location: "some location",
- event_type: "some event_type",
- start_date: ~N[2023-10-05 06:18:00],
- end_date: ~N[2023-10-05 06:18:00]
- }
-
- assert {:ok, %Event{} = event} = Events.create_event(valid_attrs)
- assert event.name == "some name"
- assert event.description == "some description"
- assert event.location == "some location"
- assert event.event_type == "some event_type"
- assert event.start_date == ~N[2023-10-05 06:18:00]
- assert event.end_date == ~N[2023-10-05 06:18:00]
- end
-
- test "create_event/1 with invalid data returns error changeset" do
- assert {:error, %Ecto.Changeset{}} = Events.create_event(@invalid_attrs)
- end
-
- test "update_event/2 with valid data updates the event", %{event: event} do
- update_attrs = %{
- name: "some updated name",
- description: "some updated description",
- location: "some updated location",
- event_type: "some updated event_type",
- start_date: ~N[2023-10-06 06:18:00],
- end_date: ~N[2023-10-06 06:18:00]
- }
-
- assert {:ok, %Event{} = event} = Events.update_event(event, update_attrs)
- assert event.name == "some updated name"
- assert event.description == "some updated description"
- assert event.location == "some updated location"
- assert event.event_type == "some updated event_type"
- assert event.start_date == ~N[2023-10-06 06:18:00]
- assert event.end_date == ~N[2023-10-06 06:18:00]
- end
-
- test "update_event/2 with invalid data returns error changeset", %{event: event} do
- assert {:error, %Ecto.Changeset{}} = Events.update_event(event, @invalid_attrs)
- assert event == Events.get_event!(event.id)
- end
-
- test "delete_event/1 deletes the event", %{event: event} do
- assert {:ok, %Event{}} = Events.delete_event(event)
- assert_raise Ecto.NoResultsError, fn -> Events.get_event!(event.id) end
- end
-
- test "change_event/1 returns a event changeset", %{event: event} do
- assert %Ecto.Changeset{} = Events.change_event(event)
- end
-
- test "get_total_number_of_available_tickets/1 returns total number of tickets", %{
- event: event
- } do
- %{number: number} = insert!(:elixir_conf_ticket_type, event_id: event.id)
- %{number: number1} = insert!(:elixir_conf_ticket_type, event_id: event.id)
- total_number_of_available_tickets = number1 + number
-
- assert Events.get_total_number_of_available_tickets(event.name) ==
- total_number_of_available_tickets
- end
- end
-end
diff --git a/test/elixir_conf_africa/paystack_test.exs b/test/elixir_conf_africa/paystack_test.exs
new file mode 100644
index 0000000..992e269
--- /dev/null
+++ b/test/elixir_conf_africa/paystack_test.exs
@@ -0,0 +1,43 @@
+defmodule ElixirConfAfrica.PaystackTest do
+ use ElixirConfAfrica.DataCase
+ alias ElixirConfAfrica.Paystack
+
+ describe "Paystack initialization , transaction verification and getting all transactions" do
+ setup do
+ [email: "michaelmunavu83@gmail.com", amount: 1000]
+ end
+
+ test "initialize/2 with a valid email and amount returns a map with a authorization url , transaction reference and access code",
+ %{email: email, amount: amount} do
+ assert %{
+ "access_code" => _,
+ "authorization_url" => _,
+ "reference" => _
+ } =
+ Paystack.initialize(email, amount)
+ end
+
+ test "list_transactions/0 returns a list of transactions for that account and gets structured",
+ %{email: email, amount: amount} do
+ Paystack.initialize(email, amount)
+ assert Paystack.list_transactions() != []
+ end
+
+ test "test_verification/1 returns a map with the transaction details", %{
+ email: email,
+ amount: amount
+ } do
+ %{
+ "access_code" => _,
+ "authorization_url" => _,
+ "reference" => reference
+ } =
+ Paystack.initialize(email, amount)
+
+ assert %{
+ "amount" => _amount,
+ "reference" => _reference
+ } = Paystack.test_verification(reference)
+ end
+ end
+end
diff --git a/test/elixir_conf_africa/ticket_types_test.exs b/test/elixir_conf_africa/ticket_types_test.exs
index f62cd18..6aa866c 100644
--- a/test/elixir_conf_africa/ticket_types_test.exs
+++ b/test/elixir_conf_africa/ticket_types_test.exs
@@ -1,82 +1,91 @@
defmodule ElixirConfAfrica.TicketTypesTest do
use ElixirConfAfrica.DataCase
- alias ElixirConfAfrica.TicketTypes
+ alias ElixirConfAfrica.Factory
describe "ticket_types" do
alias ElixirConfAfrica.TicketTypes.TicketType
+ alias ElixirConfAfrica.TicketTypes
- import ElixirConfAfrica.Factory
- @invalid_attrs %{name: nil, description: nil, price: nil, number: nil}
- setup do
- event = insert!(:elixir_conf_event)
- ticket_type = insert!(:elixir_conf_ticket_type, event_id: event.id)
- %{ticket_type: ticket_type, event: event}
- end
+ @invalid_attrs %{name: nil, description: nil, price: nil}
+
+ test "list_ticket_types/0 returns all ticket_types" do
+ ticket_type = Factory.insert(:ticket_type)
- test "list_ticket_types/0 returns all ticket_types", %{ticket_type: ticket_type} do
- assert [^ticket_type] = TicketTypes.list_ticket_types()
+ assert TicketTypes.list_ticket_types() == [ticket_type]
end
- test "get_ticket_type!/1 returns the ticket_type with given id", %{ticket_type: ticket_type} do
- assert ^ticket_type = TicketTypes.get_ticket_type!(ticket_type.id)
+ test "get_ticket_type!/1 returns the ticket_type with given id" do
+ ticket_type = Factory.insert(:ticket_type)
+ assert TicketTypes.get_ticket_type!(ticket_type.id) == ticket_type
end
- test "create_ticket_type/1 with valid data creates a ticket_type", %{event: event} do
- valid_attrs = %{
- event_id: event.id,
- name: "some name",
- description: "some description",
- price: "120.5",
- number: "357"
- }
+ test "create_ticket_type/1 with valid data creates a ticket_type" do
+ valid_attrs = %{name: "some name", description: "some description", price: 42, number: 49}
assert {:ok, %TicketType{} = ticket_type} = TicketTypes.create_ticket_type(valid_attrs)
assert ticket_type.name == "some name"
assert ticket_type.description == "some description"
- assert ticket_type.price == Decimal.new("120.5")
+ assert ticket_type.price == 42
end
test "create_ticket_type/1 with invalid data returns error changeset" do
assert {:error, %Ecto.Changeset{}} = TicketTypes.create_ticket_type(@invalid_attrs)
end
- test "update_ticket_type/2 with valid data updates the ticket_type", %{
- ticket_type: ticket_type
- } do
+ test "update_ticket_type/2 with valid data updates the ticket_type" do
+ ticket_type = Factory.insert(:ticket_type)
+
update_attrs = %{
name: "some updated name",
description: "some updated description",
- price: "456.7",
- number: "579"
+ price: 43,
+ number: 49
}
- assert {:ok, %TicketType{} = update_ticket_type} =
+ assert {:ok, %TicketType{} = ticket_type} =
TicketTypes.update_ticket_type(ticket_type, update_attrs)
- refute ticket_type == update_ticket_type
- assert update_ticket_type.name == "some updated name"
- assert update_ticket_type.description == "some updated description"
- assert update_ticket_type.price == Decimal.new("456.7")
- assert update_ticket_type.number == 579
+ assert ticket_type.name == "some updated name"
+ assert ticket_type.description == "some updated description"
+ assert ticket_type.price == 43
end
- test "update_ticket_type/2 with invalid data returns error changeset", %{
- ticket_type: ticket_type
- } do
+ test "update_ticket_type/2 with invalid data returns error changeset" do
+ ticket_type = Factory.insert(:ticket_type)
+
assert {:error, %Ecto.Changeset{}} =
TicketTypes.update_ticket_type(ticket_type, @invalid_attrs)
- assert ^ticket_type = TicketTypes.get_ticket_type!(ticket_type.id)
+ assert ticket_type == TicketTypes.get_ticket_type!(ticket_type.id)
end
- test "delete_ticket_type/1 deletes the ticket_type", %{ticket_type: ticket_type} do
+ test "delete_ticket_type/1 deletes the ticket_type" do
+ ticket_type = Factory.insert(:ticket_type)
assert {:ok, %TicketType{}} = TicketTypes.delete_ticket_type(ticket_type)
assert_raise Ecto.NoResultsError, fn -> TicketTypes.get_ticket_type!(ticket_type.id) end
end
- test "change_ticket_type/1 returns a ticket_type changeset", %{ticket_type: ticket_type} do
+ test "change_ticket_type/1 returns a ticket_type changeset" do
+ ticket_type = Factory.insert(:ticket_type)
assert %Ecto.Changeset{} = TicketTypes.change_ticket_type(ticket_type)
end
+
+ test "list_ticket_types_with_remaining_tickets/0 returns all ticket_types with the remaining tickets available" do
+ ticket_type = Factory.insert(:ticket_type, number: 10)
+
+ Factory.insert(:ticket, ticket_type_id: ticket_type.id, is_paid: true)
+
+ assert TicketTypes.list_ticket_types_with_remaining_tickets() ==
+ [
+ %{
+ id: ticket_type.id,
+ name: ticket_type.name,
+ remaining_tickets: 9,
+ description: ticket_type.description,
+ price: ticket_type.price
+ }
+ ]
+ end
end
end
diff --git a/test/elixir_conf_africa/tickets_test.exs b/test/elixir_conf_africa/tickets_test.exs
new file mode 100644
index 0000000..1a56961
--- /dev/null
+++ b/test/elixir_conf_africa/tickets_test.exs
@@ -0,0 +1,149 @@
+defmodule ElixirConfAfrica.TicketsTest do
+ use ElixirConfAfrica.DataCase
+
+ alias ElixirConfAfrica.Tickets
+ alias ElixirConfAfrica.Factory
+ alias ElixirConfAfrica.Tickets.Ticket
+
+ describe "ticket" do
+ @invalid_attrs %{name: nil, email: nil, ticketid: nil, quantity: nil}
+
+ setup do
+ ticket_type = Factory.insert(:ticket_type, number: 10)
+
+ ticket =
+ Factory.insert(:ticket,
+ ticket_type_id: ticket_type.id,
+ is_paid: true,
+ is_refunded: false,
+ cost: 400
+ )
+
+ unpaid_ticket =
+ Factory.insert(:ticket,
+ ticket_type_id: ticket_type.id,
+ is_paid: false,
+ is_refunded: false,
+ cost: 400
+ )
+
+ refunded_ticket =
+ Factory.insert(:ticket,
+ ticket_type_id: ticket_type.id,
+ is_paid: true,
+ is_refunded: true,
+ cost: 400
+ )
+
+ [
+ ticket_type: ticket_type,
+ ticket: ticket,
+ unpaid_ticket: unpaid_ticket,
+ refunded_ticket: refunded_ticket
+ ]
+ end
+
+ test "list_ticket/0 returns all ticket", %{
+ ticket: ticket,
+ unpaid_ticket: unpaid_ticket,
+ refunded_ticket: refunded_ticket
+ } do
+ assert Tickets.list_ticket() == [ticket, unpaid_ticket, refunded_ticket]
+ end
+
+ test "list_paid_tickets/0 returns all paid tickets that are not refunded", %{
+ ticket: ticket,
+ ticket_type: ticket_type
+ } do
+ assert Tickets.list_paid_tickets() == [
+ ticket |> Map.put(:ticket_type, ticket_type)
+ ]
+ end
+
+ test "list_unpaid_tickets/0 returns all unpaid tickets that are not refunded", %{
+ unpaid_ticket: unpaid_ticket,
+ ticket_type: ticket_type
+ } do
+ assert Tickets.list_unpaid_tickets() == [
+ unpaid_ticket |> Map.put(:ticket_type, ticket_type)
+ ]
+ end
+
+ test "list_refunded_tickets/0 returns all refunded tickets that are paid", %{
+ refunded_ticket: refunded_ticket,
+ ticket_type: ticket_type
+ } do
+ assert Tickets.list_refunded_tickets() == [
+ refunded_ticket |> Map.put(:ticket_type, ticket_type)
+ ]
+ end
+
+ test "get_ticket!/1 returns the ticket with given id", %{ticket: ticket} do
+ assert Tickets.get_ticket!(ticket.id) == ticket
+ end
+
+ test "get_ticket_by_ticketid!/1 returns the ticket with given ticketid", %{
+ ticket: ticket,
+ ticket_type: ticket_type
+ } do
+ assert Tickets.get_ticket_by_ticketid!(ticket.ticketid) ==
+ ticket |> Map.put(:ticket_type, ticket_type)
+ end
+
+ test "create_ticket/1 with valid data creates a ticket", %{
+ ticket_type: ticket_type
+ } do
+ valid_attrs = %{
+ name: "some name",
+ email: "email@gmail.com",
+ ticketid: "some ticketid",
+ quantity: 42,
+ ticket_type_id: ticket_type.id,
+ cost: 200
+ }
+
+ assert {:ok, %Ticket{} = ticket} = Tickets.create_ticket(valid_attrs)
+ assert ticket.name == "some name"
+ assert ticket.email == "email@gmail.com"
+ assert ticket.ticketid == "some ticketid"
+ assert ticket.quantity == 42
+ end
+
+ test "create_ticket/1 with invalid data returns error changeset" do
+ assert {:error, %Ecto.Changeset{}} = Tickets.create_ticket(@invalid_attrs)
+ end
+
+ test "update_ticket/2 with valid data updates the ticket", %{
+ ticket_type: ticket_type,
+ ticket: ticket
+ } do
+ update_attrs = %{
+ name: "some updated name",
+ email: "someemail@gmail.com",
+ ticketid: "some updated ticketid",
+ quantity: 43,
+ cost: 200,
+ ticket_type_id: ticket_type.id
+ }
+
+ assert {:ok, %Ticket{} = ticket} = Tickets.update_ticket(ticket, update_attrs)
+ assert ticket.name == "some updated name"
+ assert ticket.email == "someemail@gmail.com"
+ assert ticket.ticketid == "some updated ticketid"
+ assert ticket.quantity == 43
+ end
+
+ test "update_ticket/2 with invalid data returns error changeset", %{ticket: ticket} do
+ assert {:error, %Ecto.Changeset{}} = Tickets.update_ticket(ticket, @invalid_attrs)
+ assert ticket == Tickets.get_ticket!(ticket.id)
+ end
+
+ test "delete_ticket/1 deletes the ticket", %{ticket: ticket} do
+ assert {:ok, %Ticket{}} = Tickets.delete_ticket(ticket)
+ end
+
+ test "change_ticket/1 returns a ticket changeset", %{ticket: ticket} do
+ assert %Ecto.Changeset{} = Tickets.change_ticket(ticket)
+ end
+ end
+end
diff --git a/test/elixir_conf_africa_web/.DS_Store b/test/elixir_conf_africa_web/.DS_Store
new file mode 100644
index 0000000..51293b8
Binary files /dev/null and b/test/elixir_conf_africa_web/.DS_Store differ
diff --git a/test/elixir_conf_africa_web/controllers/page_controller_test.exs b/test/elixir_conf_africa_web/controllers/page_controller_test.exs
deleted file mode 100644
index 566dd2b..0000000
--- a/test/elixir_conf_africa_web/controllers/page_controller_test.exs
+++ /dev/null
@@ -1,8 +0,0 @@
-defmodule ElixirConfAfricaWeb.PageControllerTest do
- use ElixirConfAfricaWeb.ConnCase
-
- test "GET /", %{conn: conn} do
- conn = get(conn, ~p"/")
- assert html_response(conn, 200) =~ "Peace of mind from prototype to production"
- end
-end
diff --git a/test/elixir_conf_africa_web/controllers/user_registration_controller_test.exs b/test/elixir_conf_africa_web/controllers/user_registration_controller_test.exs
index 35d689c..0c6bd7b 100644
--- a/test/elixir_conf_africa_web/controllers/user_registration_controller_test.exs
+++ b/test/elixir_conf_africa_web/controllers/user_registration_controller_test.exs
@@ -43,13 +43,13 @@ defmodule ElixirConfAfricaWeb.UserRegistrationControllerTest do
test "render errors for invalid data", %{conn: conn} do
conn =
post(conn, ~p"/users/register", %{
- "user" => %{"email" => "with spaces", "password" => "too short"}
+ "user" => %{"email" => "with spaces", "password" => "short"}
})
response = html_response(conn, 200)
assert response =~ "Register"
assert response =~ "must have the @ sign and no spaces"
- assert response =~ "should be at least 12 character"
+ assert response =~ "should be at least 6 character"
end
end
end
diff --git a/test/elixir_conf_africa_web/controllers/user_reset_password_controller_test.exs b/test/elixir_conf_africa_web/controllers/user_reset_password_controller_test.exs
index 6b30b2e..dd0b968 100644
--- a/test/elixir_conf_africa_web/controllers/user_reset_password_controller_test.exs
+++ b/test/elixir_conf_africa_web/controllers/user_reset_password_controller_test.exs
@@ -104,7 +104,7 @@ defmodule ElixirConfAfricaWeb.UserResetPasswordControllerTest do
conn =
put(conn, ~p"/users/reset_password/#{token}", %{
"user" => %{
- "password" => "too short",
+ "password" => "short",
"password_confirmation" => "does not match"
}
})
diff --git a/test/elixir_conf_africa_web/controllers/user_settings_controller_test.exs b/test/elixir_conf_africa_web/controllers/user_settings_controller_test.exs
index 28a478e..933a188 100644
--- a/test/elixir_conf_africa_web/controllers/user_settings_controller_test.exs
+++ b/test/elixir_conf_africa_web/controllers/user_settings_controller_test.exs
@@ -48,14 +48,14 @@ defmodule ElixirConfAfricaWeb.UserSettingsControllerTest do
"action" => "update_password",
"current_password" => "invalid",
"user" => %{
- "password" => "too short",
+ "password" => "short",
"password_confirmation" => "does not match"
}
})
response = html_response(old_password_conn, 200)
assert response =~ "Settings"
- assert response =~ "should be at least 12 character(s)"
+ assert response =~ "should be at least 6 character(s)"
assert response =~ "does not match password"
assert response =~ "is not valid"
@@ -102,7 +102,7 @@ defmodule ElixirConfAfricaWeb.UserSettingsControllerTest do
token =
extract_user_token(fn url ->
- Accounts.deliver_user_update_email_instructions(%{user | email: email}, user.email, url)
+ Accounts.deliver_update_email_instructions(%{user | email: email}, user.email, url)
end)
%{token: token, email: email}
diff --git a/test/elixir_conf_africa_web/live/event_live_test.exs b/test/elixir_conf_africa_web/live/event_live_test.exs
index 23da999..9983554 100644
--- a/test/elixir_conf_africa_web/live/event_live_test.exs
+++ b/test/elixir_conf_africa_web/live/event_live_test.exs
@@ -2,129 +2,118 @@ defmodule ElixirConfAfricaWeb.EventLiveTest do
use ElixirConfAfricaWeb.ConnCase
import Phoenix.LiveViewTest
- import ElixirConfAfrica.Factory
+ alias ElixirConfAfrica.Factory
- @create_attrs %{
+ @valid_attributes %{
name: "some name",
- description: "some description",
- location: "some location",
- event_type: "some event_type",
- start_date: "2023-10-05T06:18:00",
- end_date: "2023-10-05T06:18:00"
+ email: "michaelmunavu83@gmail.com",
+ quantity: 2
}
- @update_attrs %{
- name: "some updated name",
- description: "some updated description",
- location: "some updated location",
- event_type: "some updated event_type",
- start_date: "2023-10-06T06:18:00",
- end_date: "2023-10-06T06:18:00"
- }
- @invalid_attrs %{
+
+ @invalid_attributes %{
name: nil,
- description: nil,
- location: nil,
- event_type: nil,
- start_date: nil,
- end_date: nil
+ email: nil,
+ quantity: 2
}
- setup do
- event = insert!(:elixir_conf_event)
- %{event: event}
- end
-
- describe "Index" do
- test "lists all events", %{conn: conn, event: event} do
- {:ok, _index_live, html} = live(conn, ~p"/events")
-
- assert html =~ "Listing Events"
- assert html =~ event.name
+ describe "Event" do
+ setup do
+ ticket_type1 = Factory.insert(:ticket_type, number: 10, name: "Early Bird", price: 400)
+ ticket_type2 = Factory.insert(:ticket_type, number: 10, name: "Advanced", price: 500)
+
+ Factory.insert(:ticket,
+ ticket_type_id: ticket_type1.id,
+ is_paid: false,
+ is_refunded: false,
+ cost: 400
+ )
+
+ Factory.insert(:ticket,
+ ticket_type_id: ticket_type2.id,
+ is_paid: true,
+ is_refunded: false,
+ cost: 400
+ )
+
+ Factory.insert(:ticket,
+ ticket_type_id: ticket_type1.id,
+ is_paid: true,
+ is_refunded: false,
+ cost: 400
+ )
+
+ Factory.insert(:ticket,
+ ticket_type_id: ticket_type2.id,
+ is_paid: true,
+ is_refunded: true,
+ cost: 400
+ )
+
+ %{ticket_type1: ticket_type1, ticket_type2: ticket_type2}
end
- test "saves new event", %{conn: conn} do
- {:ok, index_live, _html} = live(conn, ~p"/events")
-
- assert index_live |> element("a", "New Event") |> render_click() =~
- "New Event"
-
- assert_patch(index_live, ~p"/events/new")
+ test "You can see available tickets with their remaining quantity", %{
+ conn: conn,
+ ticket_type1: ticket_type1,
+ ticket_type2: ticket_type2
+ } do
+ {:ok, _index_live, html} = live(conn, ~p"/event")
+
+ assert html =~ ticket_type1.name
+ assert html =~ ticket_type2.name
+ assert html =~ "9"
+ assert html =~ "8"
+ end
- assert index_live
- |> form("#event-form", event: @invalid_attrs)
- |> render_change() =~ "can't be blank"
+ test "once you click on get ticket for a particular ticket type , a form popups where you add your details",
+ %{
+ conn: conn,
+ ticket_type1: ticket_type1
+ } do
+ {:ok, index_live, _html} = live(conn, ~p"/event")
- assert index_live
- |> form("#event-form", event: @create_attrs)
- |> render_submit()
+ index_live
+ |> element("#buy-#{ticket_type1.id}-tickets", "Get")
+ |> render_click()
- assert_patch(index_live, ~p"/events")
+ assert_patch(index_live, ~p"/event/#{ticket_type1.id}/buy")
- html = render(index_live)
- assert html =~ "Event created successfully"
- assert html =~ "some name"
+ assert has_element?(index_live, "#ticket-form")
end
- test "updates event in listing", %{conn: conn, event: event} do
- {:ok, index_live, _html} = live(conn, ~p"/events")
+ test "adding invalid data on the form renders errors",
+ %{
+ conn: conn,
+ ticket_type1: ticket_type1
+ } do
+ {:ok, index_live, _html} = live(conn, ~p"/event")
- assert index_live |> element("#events-#{event.id} a", "Edit") |> render_click() =~
- "Edit Event"
+ index_live
+ |> element("#buy-#{ticket_type1.id}-tickets", "Get")
+ |> render_click()
- assert_patch(index_live, ~p"/events/#{event}/edit")
+ {:ok, index_live, _html} =
+ live(conn, ~p"/event/#{ticket_type1.id}/buy")
assert index_live
- |> form("#event-form", event: @invalid_attrs)
+ |> form("#ticket-form", ticket: @invalid_attributes)
|> render_change() =~ "can't be blank"
-
- assert index_live
- |> form("#event-form", event: @update_attrs)
- |> render_submit()
-
- assert_patch(index_live, ~p"/events")
-
- html = render(index_live)
- assert html =~ "Event updated successfully"
- assert html =~ "some updated name"
- end
-
- test "deletes event in listing", %{conn: conn, event: event} do
- {:ok, index_live, _html} = live(conn, ~p"/events")
-
- assert index_live |> element("#events-#{event.id} a", "Delete") |> render_click()
- refute has_element?(index_live, "#events-#{event.id}")
end
- end
-
- describe "Show" do
- test "displays event", %{conn: conn, event: event} do
- {:ok, _show_live, html} = live(conn, ~p"/events/#{event}")
-
- assert html =~ "Show Event"
- assert html =~ event.name
- end
-
- test "updates event within modal", %{conn: conn, event: event} do
- {:ok, show_live, _html} = live(conn, ~p"/events/#{event}")
-
- assert show_live |> element("a", "Edit") |> render_click() =~
- "Edit Event"
-
- assert_patch(show_live, ~p"/events/#{event}/show/edit")
-
- assert show_live
- |> form("#event-form", event: @invalid_attrs)
- |> render_change() =~ "can't be blank"
- assert show_live
- |> form("#event-form", event: @update_attrs)
- |> render_submit()
+ test "adding valid data on the form redirects to the event page",
+ %{
+ conn: conn,
+ ticket_type1: ticket_type1
+ } do
+ {:ok, index_live, _html} = live(conn, ~p"/event")
- assert_patch(show_live, ~p"/events/#{event}")
+ index_live
+ |> element("#buy-#{ticket_type1.id}-tickets", "Get")
+ |> render_click()
- html = render(show_live)
- assert html =~ "Event updated successfully"
- assert html =~ "some updated name"
+ index_live
+ |> form("#ticket-form", ticket: @valid_attributes)
+ |> render_submit()
end
end
end
diff --git a/test/elixir_conf_africa_web/live/home_live_test.exs b/test/elixir_conf_africa_web/live/home_live_test.exs
new file mode 100644
index 0000000..391500c
--- /dev/null
+++ b/test/elixir_conf_africa_web/live/home_live_test.exs
@@ -0,0 +1,21 @@
+defmodule ElixirConfAfricaWeb.HomeLiveTest do
+ use ElixirConfAfricaWeb.ConnCase
+
+ import Phoenix.LiveViewTest
+
+ describe "Home" do
+ test "There is a button to buy tickets", %{conn: conn} do
+ {:ok, _index_live, html} = live(conn, ~p"/")
+
+ assert html =~ "Buy Tickets"
+ end
+
+ test "once clicked, the button takes you to the event page", %{conn: conn} do
+ {:ok, index_live, _html} = live(conn, ~p"/")
+
+ index_live |> element("a", "Buy Tickets") |> render_click() |> follow_redirect(conn)
+
+ assert_redirect(index_live, ~p"/event")
+ end
+ end
+end
diff --git a/test/elixir_conf_africa_web/live/paid_ticket_live_test.exs b/test/elixir_conf_africa_web/live/paid_ticket_live_test.exs
new file mode 100644
index 0000000..a169038
--- /dev/null
+++ b/test/elixir_conf_africa_web/live/paid_ticket_live_test.exs
@@ -0,0 +1,67 @@
+defmodule ElixirConfAfricaWeb.PaidTicketLiveTest do
+ use ElixirConfAfricaWeb.ConnCase
+
+ import Phoenix.LiveViewTest
+ alias ElixirConfAfrica.Factory
+
+ describe "Paid Tickets Tests" do
+ setup %{conn: conn} do
+ # sign up first
+ conn =
+ post(conn, ~p"/users/register",
+ method: :create,
+ user: %{email: "admin@gmail.com", password: "123456", role: "admin"}
+ )
+
+ ticket_type = Factory.insert(:ticket_type, name: "some name", price: 400)
+
+ paid_ticket =
+ Factory.insert(:ticket,
+ is_paid: true,
+ is_refunded: false,
+ name: "some paid name",
+ ticket_type_id: ticket_type.id
+ )
+
+ unpaid_ticket =
+ Factory.insert(:ticket,
+ is_paid: false,
+ is_refunded: false,
+ name: "some unpaid name",
+ ticket_type_id: ticket_type.id
+ )
+
+ [
+ paid_ticket: paid_ticket,
+ unpaid_ticket: unpaid_ticket,
+ conn: conn
+ ]
+ end
+
+ test "you see the paid tickets on /tickets/paid", %{
+ conn: conn,
+ paid_ticket: paid_ticket,
+ unpaid_ticket: unpaid_ticket
+ } do
+ {:ok, _index_live, html} = live(conn, ~p"/tickets/paid")
+
+ assert html =~ "Listing Paid Tickets"
+ assert html =~ paid_ticket.name
+ refute html =~ unpaid_ticket.name
+ end
+
+ test "you see a button on each record that sends a ticket email", %{
+ conn: conn,
+ paid_ticket: paid_ticket
+ } do
+ {:ok, index_live, html} = live(conn, ~p"/tickets/paid")
+
+ assert html =~ "Listing Paid Tickets"
+ assert html =~ paid_ticket.name
+
+ assert index_live
+ |> element("#send-email-#{paid_ticket.id}", "Send Email")
+ |> render_click() =~ "Ticket sent successfully"
+ end
+ end
+end
diff --git a/test/elixir_conf_africa_web/live/refunded_ticket_live_test.exs b/test/elixir_conf_africa_web/live/refunded_ticket_live_test.exs
new file mode 100644
index 0000000..847cf73
--- /dev/null
+++ b/test/elixir_conf_africa_web/live/refunded_ticket_live_test.exs
@@ -0,0 +1,53 @@
+defmodule ElixirConfAfricaWeb.RefundedTicketLiveTest do
+ use ElixirConfAfricaWeb.ConnCase
+
+ import Phoenix.LiveViewTest
+ alias ElixirConfAfrica.Factory
+
+ describe "Refunded Tickets Tests" do
+ setup %{conn: conn} do
+ # sign up first
+ conn =
+ post(conn, ~p"/users/register",
+ method: :create,
+ user: %{email: "admin@gmail.com", password: "123456", role: "admin"}
+ )
+
+ ticket_type = Factory.insert(:ticket_type, name: "some name", price: 400)
+
+ paid_ticket =
+ Factory.insert(:ticket,
+ is_paid: true,
+ is_refunded: false,
+ name: "some paid name",
+ ticket_type_id: ticket_type.id
+ )
+
+ refunded_ticket =
+ Factory.insert(:ticket,
+ is_paid: true,
+ is_refunded: true,
+ name: "some refunded name",
+ ticket_type_id: ticket_type.id
+ )
+
+ [
+ paid_ticket: paid_ticket,
+ refunded_ticket: refunded_ticket,
+ conn: conn
+ ]
+ end
+
+ test "you see the refunded tickets on /tickets/refunded", %{
+ conn: conn,
+ paid_ticket: paid_ticket,
+ refunded_ticket: refunded_ticket
+ } do
+ {:ok, _index_live, html} = live(conn, ~p"/tickets/refunded")
+
+ assert html =~ "Listing Refunded Tickets"
+ assert html =~ refunded_ticket.name
+ refute html =~ paid_ticket.name
+ end
+ end
+end
diff --git a/test/elixir_conf_africa_web/live/success_live_test.exs b/test/elixir_conf_africa_web/live/success_live_test.exs
new file mode 100644
index 0000000..ba94b5e
--- /dev/null
+++ b/test/elixir_conf_africa_web/live/success_live_test.exs
@@ -0,0 +1,55 @@
+defmodule ElixirConfAfricaWeb.SuccessLiveTest do
+ use ElixirConfAfricaWeb.ConnCase
+
+ import Phoenix.LiveViewTest
+ alias ElixirConfAfrica.Factory
+ alias ElixirConfAfrica.Paystack
+
+ describe "Tests the Success Redirect URL that you are redirected to" do
+ setup do
+ ticket_type = Factory.insert(:ticket_type, name: "some name", price: 400)
+
+ %{"reference" => reference} =
+ Paystack.initialize("michaelmunavu83@gmail.com", 400)
+
+ Factory.insert(:ticket,
+ is_paid: true,
+ is_refunded: false,
+ name: "some paid name",
+ ticket_type_id: ticket_type.id,
+ ticketid: reference
+ )
+
+ [
+ reference: reference
+ ]
+ end
+
+ test "you see a button to go back to the tickets page if the payment is not successful", %{
+ reference: reference,
+ conn: conn
+ } do
+ {:ok, _index_live, html} =
+ live(conn, ~p"/success?trxref=#{reference}")
+
+ assert html =~ "Payment was unsuccessful , go back to the tickets and purchase"
+ assert html =~ "Back to Tickets Page"
+ end
+
+ test "the button for tickets page takes you back to the tickets page", %{
+ reference: reference,
+ conn: conn
+ } do
+ {:ok, index_live, _html} =
+ live(conn, ~p"/success?trxref=#{reference}")
+
+ {:ok, _index_live, html} =
+ index_live
+ |> element("a", "Back to Tickets Page")
+ |> render_click()
+ |> follow_redirect(conn)
+
+ assert html =~ "Available Tickets"
+ end
+ end
+end
diff --git a/test/elixir_conf_africa_web/live/ticket_show_live_test.exs b/test/elixir_conf_africa_web/live/ticket_show_live_test.exs
new file mode 100644
index 0000000..f316f49
--- /dev/null
+++ b/test/elixir_conf_africa_web/live/ticket_show_live_test.exs
@@ -0,0 +1,38 @@
+defmodule ElixirConfAfricaWeb.TicketShowLiveTest do
+ use ElixirConfAfricaWeb.ConnCase
+
+ import Phoenix.LiveViewTest
+ alias ElixirConfAfrica.Factory
+
+ describe "Tests The Ticket Show Page" do
+ setup do
+ ticket_type = Factory.insert(:ticket_type, name: "some name", price: 400)
+
+ ticket =
+ Factory.insert(:ticket,
+ is_paid: true,
+ is_refunded: false,
+ name: "some paid name",
+ ticket_type_id: ticket_type.id,
+ ticketid: "some-ticket-id"
+ )
+
+ [
+ ticket: ticket
+ ]
+ end
+
+ test "you see the ticket details on /tickets/:id", %{ticket: ticket, conn: conn} do
+ {:ok, _index_live, html} = live(conn, ~p"/tickets/#{ticket.ticketid}")
+
+ assert html =~ ticket.name
+ assert html =~ ticket.email
+ end
+
+ test "you see a qr code on the ticket show page", %{ticket: ticket, conn: conn} do
+ {:ok, index_live, _html} = live(conn, ~p"/tickets/#{ticket.ticketid}")
+
+ assert has_element?(index_live, "#qrcode")
+ end
+ end
+end
diff --git a/test/elixir_conf_africa_web/live/ticket_type_live_test.exs b/test/elixir_conf_africa_web/live/ticket_type_live_test.exs
index ee47ce3..e2be8ef 100644
--- a/test/elixir_conf_africa_web/live/ticket_type_live_test.exs
+++ b/test/elixir_conf_africa_web/live/ticket_type_live_test.exs
@@ -2,29 +2,34 @@ defmodule ElixirConfAfricaWeb.TicketTypeLiveTest do
use ElixirConfAfricaWeb.ConnCase
import Phoenix.LiveViewTest
- import ElixirConfAfrica.Factory
- @create_attrs %{
- name: "some name",
- description: "some description",
- price: "120.5",
- number: "357"
- }
+ alias ElixirConfAfrica.Factory
+
@update_attrs %{
name: "some updated name",
description: "some updated description",
- price: "456.7",
- number: "579"
+ price: 43,
+ number: 50
}
- @invalid_attrs %{name: nil, description: nil, price: nil, number: nil}
-
- setup do
- event = insert!(:elixir_conf_event)
- ticket_type = insert!(:elixir_conf_ticket_type, event_id: event.id)
- %{ticket_type: ticket_type, event: event}
- end
+ @invalid_attrs %{name: nil, description: nil, price: nil}
describe "Index" do
+ setup %{conn: conn} do
+ # sign up first
+ conn =
+ post(conn, ~p"/users/register",
+ method: :create,
+ user: %{email: "admin@gmail.com", password: "123456", role: "admin"}
+ )
+
+ ticket_type = Factory.insert(:ticket_type)
+
+ [
+ ticket_type: ticket_type,
+ conn: conn
+ ]
+ end
+
test "lists all ticket_types", %{conn: conn, ticket_type: ticket_type} do
{:ok, _index_live, html} = live(conn, ~p"/ticket_types")
@@ -32,11 +37,11 @@ defmodule ElixirConfAfricaWeb.TicketTypeLiveTest do
assert html =~ ticket_type.name
end
- test "saves new ticket_type", %{conn: conn, event: event} do
+ test "saves new ticket_type", %{conn: conn} do
{:ok, index_live, _html} = live(conn, ~p"/ticket_types")
- assert index_live |> element("a", "New Ticket type") |> render_click() =~
- "New Ticket type"
+ assert index_live |> element("a", "New Ticket Type") |> render_click() =~
+ "New Ticket Type"
assert_patch(index_live, ~p"/ticket_types/new")
@@ -44,24 +49,28 @@ defmodule ElixirConfAfricaWeb.TicketTypeLiveTest do
|> form("#ticket_type-form", ticket_type: @invalid_attrs)
|> render_change() =~ "can't be blank"
- assert index_live
- |> form("#ticket_type-form",
- ticket_type: Map.merge(@create_attrs, %{event_id: event.id})
- )
- |> render_submit()
-
- assert_patch(index_live, ~p"/ticket_types")
+ {:ok, _, html} =
+ index_live
+ |> form("#ticket_type-form",
+ ticket_type: %{
+ name: "early bird",
+ description: "some description",
+ price: 42,
+ number: 49
+ }
+ )
+ |> render_submit()
+ |> follow_redirect(conn, ~p"/ticket_types")
- html = render(index_live)
assert html =~ "Ticket type created successfully"
- assert html =~ "some name"
+ assert html =~ "early bird"
end
test "updates ticket_type in listing", %{conn: conn, ticket_type: ticket_type} do
{:ok, index_live, _html} = live(conn, ~p"/ticket_types")
- assert index_live |> element("#ticket_types-#{ticket_type.id} a", "Edit") |> render_click() =~
- "Edit Ticket type"
+ assert index_live |> element("#ticket_types-#{ticket_type.id}", "Edit") |> render_click() =~
+ "Edit"
assert_patch(index_live, ~p"/ticket_types/#{ticket_type}/edit")
@@ -69,13 +78,12 @@ defmodule ElixirConfAfricaWeb.TicketTypeLiveTest do
|> form("#ticket_type-form", ticket_type: @invalid_attrs)
|> render_change() =~ "can't be blank"
- assert index_live
- |> form("#ticket_type-form", ticket_type: @update_attrs)
- |> render_submit()
-
- assert_patch(index_live, ~p"/ticket_types")
+ {:ok, _, html} =
+ index_live
+ |> form("#ticket_type-form", ticket_type: @update_attrs)
+ |> render_submit()
+ |> follow_redirect(conn, ~p"/ticket_types")
- html = render(index_live)
assert html =~ "Ticket type updated successfully"
assert html =~ "some updated name"
end
@@ -83,43 +91,8 @@ defmodule ElixirConfAfricaWeb.TicketTypeLiveTest do
test "deletes ticket_type in listing", %{conn: conn, ticket_type: ticket_type} do
{:ok, index_live, _html} = live(conn, ~p"/ticket_types")
- assert index_live
- |> element("#ticket_types-#{ticket_type.id} a", "Delete")
- |> render_click()
-
- refute has_element?(index_live, "#ticket_types-#{ticket_type.id}")
- end
- end
-
- describe "Show" do
- test "displays ticket_type", %{conn: conn, ticket_type: ticket_type} do
- {:ok, _show_live, html} = live(conn, ~p"/ticket_types/#{ticket_type}")
-
- assert html =~ "Show Ticket type"
- assert html =~ ticket_type.name
- end
-
- test "updates ticket_type within modal", %{conn: conn, ticket_type: ticket_type} do
- {:ok, show_live, _html} = live(conn, ~p"/ticket_types/#{ticket_type}")
-
- assert show_live |> element("a", "Edit") |> render_click() =~
- "Edit Ticket type"
-
- assert_patch(show_live, ~p"/ticket_types/#{ticket_type}/show/edit")
-
- assert show_live
- |> form("#ticket_type-form", ticket_type: @invalid_attrs)
- |> render_change() =~ "can't be blank"
-
- assert show_live
- |> form("#ticket_type-form", ticket_type: @update_attrs)
- |> render_submit()
-
- assert_patch(show_live, ~p"/ticket_types/#{ticket_type}")
-
- html = render(show_live)
- assert html =~ "Ticket type updated successfully"
- assert html =~ "some updated name"
+ assert index_live |> element("#ticket_type-#{ticket_type.id} a", "Delete") |> render_click()
+ refute has_element?(index_live, "#ticket_type-#{ticket_type.id}")
end
end
end
diff --git a/test/elixir_conf_africa_web/live/transaction_live_test.exs b/test/elixir_conf_africa_web/live/transaction_live_test.exs
new file mode 100644
index 0000000..cc2e753
--- /dev/null
+++ b/test/elixir_conf_africa_web/live/transaction_live_test.exs
@@ -0,0 +1,42 @@
+defmodule ElixirConfAfricaWeb.TransactionLiveTest do
+ use ElixirConfAfricaWeb.ConnCase
+
+ import Phoenix.LiveViewTest
+
+ alias ElixirConfAfrica.Paystack
+
+ describe "This page lists all transactions made" do
+ setup %{conn: conn} do
+ # sign up first
+ conn =
+ post(conn, ~p"/users/register",
+ method: :create,
+ user: %{email: "admin@gmail.com", password: "123456", role: "admin"}
+ )
+
+ %{"reference" => reference1} =
+ Paystack.initialize("michaelmunavu83@gmail.com", 400)
+
+ %{"reference" => reference2} =
+ Paystack.initialize("michaelmunavu83@gmail.com", 400)
+
+ [
+ reference1: reference1,
+ reference2: reference2,
+ conn: conn
+ ]
+ end
+
+ test "on /transactions , you see all the transactions made", %{
+ conn: conn,
+ reference1: reference1,
+ reference2: reference2
+ } do
+ {:ok, _index_live, html} = live(conn, ~p"/transactions")
+
+ assert html =~ "Listing Transactions"
+ assert html =~ reference1
+ assert html =~ reference2
+ end
+ end
+end
diff --git a/test/elixir_conf_africa_web/live/unpaid_ticket_live_test.exs b/test/elixir_conf_africa_web/live/unpaid_ticket_live_test.exs
new file mode 100644
index 0000000..d15448b
--- /dev/null
+++ b/test/elixir_conf_africa_web/live/unpaid_ticket_live_test.exs
@@ -0,0 +1,62 @@
+defmodule ElixirConfAfricaWeb.UnpaidTicketLiveTest do
+ use ElixirConfAfricaWeb.ConnCase
+
+ import Phoenix.LiveViewTest
+ alias ElixirConfAfrica.Factory
+ alias ElixirConfAfrica.Paystack
+
+ describe "Unpaid Tickets Tests" do
+ setup %{conn: conn} do
+ # sign up first
+ conn =
+ post(conn, ~p"/users/register",
+ method: :create,
+ user: %{email: "admin@gmail.com", password: "123456", role: "admin"}
+ )
+
+ ticket_type = Factory.insert(:ticket_type, name: "some name", price: 400)
+
+ %{"reference" => reference} =
+ Paystack.initialize("michaelmunavu83@gmail.com", 400)
+
+ paid_ticket =
+ Factory.insert(:ticket,
+ is_paid: true,
+ is_refunded: false,
+ name: "some paid name",
+ ticketid: reference,
+ ticket_type_id: ticket_type.id
+ )
+
+ %{"reference" => reference} =
+ Paystack.initialize("michaelmunavu83@gmail.com", 400)
+
+ unpaid_ticket =
+ Factory.insert(:ticket,
+ is_paid: false,
+ is_refunded: false,
+ name: "some unpaid name",
+ ticketid: reference,
+ ticket_type_id: ticket_type.id
+ )
+
+ [
+ paid_ticket: paid_ticket,
+ unpaid_ticket: unpaid_ticket,
+ conn: conn
+ ]
+ end
+
+ test "you see the unpaid tickets on /tickets/unpaid", %{
+ conn: conn,
+ paid_ticket: paid_ticket,
+ unpaid_ticket: unpaid_ticket
+ } do
+ {:ok, _index_live, html} = live(conn, ~p"/tickets/unpaid")
+
+ assert html =~ "Listing Unpaid Tickets"
+ assert html =~ unpaid_ticket.name
+ refute html =~ paid_ticket.name
+ end
+ end
+end
diff --git a/test/elixir_conf_africa_web/live/user_live_test.exs b/test/elixir_conf_africa_web/live/user_live_test.exs
new file mode 100644
index 0000000..d13c2ad
--- /dev/null
+++ b/test/elixir_conf_africa_web/live/user_live_test.exs
@@ -0,0 +1,83 @@
+defmodule ElixirConfAfricaWeb.UserLiveTest do
+ use ElixirConfAfricaWeb.ConnCase
+
+ import Phoenix.LiveViewTest
+
+ alias ElixirConfAfrica.Factory
+
+ describe "System Users Page" do
+ setup %{conn: conn} do
+ # sign up first
+ conn =
+ post(conn, ~p"/users/register",
+ method: :create,
+ user: %{email: "admin@gmail.com", password: "123456", role: "admin"}
+ )
+
+ user_1 =
+ Factory.insert(:user, email: "test1@gmail.com", hashed_password: "123456", role: "user")
+
+ scanner_1 =
+ Factory.insert(:user,
+ email: "test2@gmail.com",
+ hashed_password: "123456",
+ role: "scanner"
+ )
+
+ admin_1 =
+ Factory.insert(:user, email: "admin2@gmail.com", hashed_password: "123456", role: "admin")
+
+ [
+ conn: conn,
+ user_1: user_1,
+ scanner_1: scanner_1,
+ admin_1: admin_1
+ ]
+ end
+
+ test "on /users you see all users apart from the current user", %{
+ conn: conn,
+ user_1: user_1,
+ scanner_1: scanner_1,
+ admin_1: admin_1
+ } do
+ {:ok, _index_live, html} = live(conn, ~p"/users")
+
+ assert html =~ "Listing Users"
+ assert html =~ user_1.email
+ assert html =~ scanner_1.email
+ assert html =~ admin_1.email
+ end
+
+ test "for admin users , you can only see a button to make the user a normal user or scanner and not to make them an admin",
+ %{
+ conn: conn,
+ admin_1: admin_1
+ } do
+ {:ok, index_live, _html} = live(conn, ~p"/users")
+
+ assert has_element?(index_live, "#make-user-#{admin_1.id}")
+ assert has_element?(index_live, "#make-scanner-#{admin_1.id}")
+ refute has_element?(index_live, "#make-admin-#{admin_1.id}")
+ end
+
+ test "you can change a users role when you click a button", %{
+ conn: conn,
+ admin_1: admin_1
+ } do
+ {:ok, index_live, _html} = live(conn, ~p"/users")
+
+ assert has_element?(index_live, "#role-#{admin_1.id}", admin_1.role)
+
+ html =
+ index_live
+ |> element("#make-user-#{admin_1.id}")
+ |> render_click()
+
+ assert html =~ "User role changed successfully"
+
+ assert has_element?(index_live, "#role-#{admin_1.id}", "user")
+ refute has_element?(index_live, "#role-#{admin_1.id}", admin_1.role)
+ end
+ end
+end
diff --git a/test/support/factory.ex b/test/support/factory.ex
index 8fc7e86..f5da8a3 100644
--- a/test/support/factory.ex
+++ b/test/support/factory.ex
@@ -1,32 +1,33 @@
defmodule ElixirConfAfrica.Factory do
@moduledoc false
- alias ElixirConfAfrica.Repo
+ use ExMachina.Ecto, repo: ElixirConfAfrica.Repo
- def build(:elixir_conf_event) do
- %ElixirConfAfrica.Events.Event{
- name: "ElixirConf Africa 2024",
- description: "description",
- location: "location",
- event_type: "event_type",
- start_date: ~N[2023-10-05 06:18:00],
- end_date: ~N[2023-10-05 06:18:00]
- }
- end
+ alias ElixirConfAfrica.Tickets.Ticket
+ alias ElixirConfAfrica.TicketTypes.TicketType
+ alias ElixirConfAfrica.Accounts.User
- def build(:elixir_conf_ticket_type) do
- %ElixirConfAfrica.TicketTypes.TicketType{
+ def ticket_type_factory do
+ %TicketType{
name: "some name",
description: "some description",
- price: Decimal.new("120.5"),
- number: 357
+ price: 42,
+ number: 49
}
end
- def build(factory_name, attributes) do
- factory_name |> build() |> struct!(attributes)
+ def ticket_factory do
+ %Ticket{
+ ticketid: Integer.to_string(System.unique_integer([:positive])),
+ email: sequence(:email, fn n -> "email-#{n}@example" end),
+ cost: 400,
+ quantity: 1
+ }
end
- def insert!(factory_name, attributes \\ []) do
- factory_name |> build(attributes) |> Repo.insert!()
+ def user_factory do
+ %User{
+ email: "some email",
+ password: "some password"
+ }
end
end
|