diff --git a/lib/bike_brigade_web/live/campaign_signup_live/show.ex b/lib/bike_brigade_web/live/campaign_signup_live/show.ex index 11546358..215e6a5b 100644 --- a/lib/bike_brigade_web/live/campaign_signup_live/show.ex +++ b/lib/bike_brigade_web/live/campaign_signup_live/show.ex @@ -254,6 +254,17 @@ defmodule BikeBrigadeWeb.CampaignSignupLive.Show do Sign up <% end %> + + <%= if campaign_in_past(@campaign) do %> + <.button + color={:secondary} + id={"#{@id}-task-over-#{@task.id}"} + size={:xsmall} + class="w-full md:w-28 cursor-not-allowed bg-neutral-100 text-neutral-800" + > + Campaign over + + <% end %> """ end diff --git a/lib/bike_brigade_web/live/campaign_signup_live/show.html.heex b/lib/bike_brigade_web/live/campaign_signup_live/show.html.heex index 06280c90..70dc5196 100644 --- a/lib/bike_brigade_web/live/campaign_signup_live/show.html.heex +++ b/lib/bike_brigade_web/live/campaign_signup_live/show.html.heex @@ -50,7 +50,7 @@ -
+
Dropoff Neighbourhood: <%= Locations.neighborhood(t.dropoff_location) %>
diff --git a/test/bike_brigade_web/live/campaign_signup_live_test.exs b/test/bike_brigade_web/live/campaign_signup_live_test.exs index 5d61a2ac..982836f2 100644 --- a/test/bike_brigade_web/live/campaign_signup_live_test.exs +++ b/test/bike_brigade_web/live/campaign_signup_live_test.exs @@ -43,13 +43,7 @@ defmodule BikeBrigadeWeb.CampaignSignupLiveTest do end test "It displays a campaign in a previous week; button says 'Completed'", ctx do - campaign = - fixture(:campaign, %{ - program_id: ctx.program.id, - delivery_start: LocalizedDateTime.now() |> DateTime.add(-7, :day), - delivery_end: - LocalizedDateTime.now() |> DateTime.add(-7, :day) |> DateTime.add(60, :second) - }) + campaign = make_campaign_in_past(ctx.program.id) fixture(:task, %{campaign: campaign, rider: nil}) @@ -63,7 +57,7 @@ defmodule BikeBrigadeWeb.CampaignSignupLiveTest do end test "Campaigns with no tasks display correct copy", ctx do - fixture(:campaign, %{program_id: ctx.program.id,}) + fixture(:campaign, %{program_id: ctx.program.id}) {:ok, _live, html} = live(ctx.conn, ~p"/campaigns/signup") assert html =~ "Campaign not ready for signup" end @@ -133,6 +127,16 @@ defmodule BikeBrigadeWeb.CampaignSignupLiveTest do assert html =~ "Unassign me" end + test "Rider cannot signup for a task in the past", ctx do + campaign = make_campaign_in_past(ctx.program.id) + task = fixture(:task, %{campaign: campaign, rider: nil}) + + {:ok, live, html} = live(ctx.conn, ~p"/campaigns/signup/#{campaign.id}/") + + assert html =~ "Campaign over" + assert live |> has_element?("#signup-btn-mobile-task-over-#{task.id}") + end + test "we see pertinent task information", ctx do {:ok, _live, html} = live(ctx.conn, ~p"/campaigns/signup/#{ctx.campaign.id}/") assert html =~ ctx.task.dropoff_name @@ -159,4 +163,12 @@ defmodule BikeBrigadeWeb.CampaignSignupLiveTest do refute render(live) =~ "Unassign me" end end + + defp make_campaign_in_past(program_id) do + fixture(:campaign, %{ + program_id: program_id, + delivery_start: LocalizedDateTime.now() |> DateTime.add(-7, :day), + delivery_end: LocalizedDateTime.now() |> DateTime.add(-7, :day) |> DateTime.add(60, :second) + }) + end end