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