Skip to content

Commit 9d5837a

Browse files
committed
Extend the test worker UI with auto-scheduling
1 parent 844313d commit 9d5837a

File tree

2 files changed

+70
-5
lines changed

2 files changed

+70
-5
lines changed

test_integrations/phoenix_app/lib/phoenix_app_web/live/test_worker_live.ex

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ defmodule PhoenixAppWeb.TestWorkerLive do
88
socket =
99
assign(socket,
1010
form: to_form(%{"sleep_time" => 1000, "should_fail" => false, "queue" => "default"}),
11+
auto_form: to_form(%{"job_count" => 5}),
1112
jobs: list_jobs()
1213
)
1314

@@ -25,11 +26,7 @@ defmodule PhoenixAppWeb.TestWorkerLive do
2526
should_fail = params["should_fail"] == "true"
2627
queue = params["queue"]
2728

28-
case TestWorker.new(
29-
%{"sleep_time" => sleep_time, "should_fail" => should_fail},
30-
queue: queue
31-
)
32-
|> Oban.insert() do
29+
case schedule_job(sleep_time, should_fail, queue) do
3330
{:ok, _job} ->
3431
{:noreply,
3532
socket
@@ -43,11 +40,48 @@ defmodule PhoenixAppWeb.TestWorkerLive do
4340
end
4441
end
4542

43+
@impl true
44+
def handle_event("auto_schedule", %{"auto" => %{"job_count" => count}}, socket) do
45+
job_count = String.to_integer(count)
46+
47+
results =
48+
Enum.map(1..job_count, fn _ ->
49+
sleep_time = Enum.random(500..5000)
50+
should_fail = Enum.random([true, false])
51+
queue = Enum.random(["default", "background"])
52+
53+
schedule_job(sleep_time, should_fail, queue)
54+
end)
55+
56+
failed_count = Enum.count(results, &match?({:error, _}, &1))
57+
success_count = job_count - failed_count
58+
59+
socket =
60+
socket
61+
|> put_flash(:info, "Scheduled #{success_count} jobs successfully!")
62+
|> assign(jobs: list_jobs())
63+
64+
if failed_count > 0 do
65+
socket = put_flash(socket, :error, "Failed to schedule #{failed_count} jobs")
66+
{:noreply, socket}
67+
else
68+
{:noreply, socket}
69+
end
70+
end
71+
4672
@impl true
4773
def handle_info(:update_jobs, socket) do
4874
{:noreply, assign(socket, jobs: list_jobs())}
4975
end
5076

77+
defp schedule_job(sleep_time, should_fail, queue) do
78+
TestWorker.new(
79+
%{"sleep_time" => sleep_time, "should_fail" => should_fail},
80+
queue: queue
81+
)
82+
|> Oban.insert()
83+
end
84+
5185
defp list_jobs do
5286
import Ecto.Query
5387

test_integrations/phoenix_app/lib/phoenix_app_web/live/test_worker_live.html.heex

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,37 @@
4141
</div>
4242
</div>
4343

44+
<div class="mt-8 bg-white shadow sm:rounded-lg">
45+
<div class="px-4 py-5 sm:p-6">
46+
<h3 class="text-base font-semibold leading-6 text-gray-900">Auto Schedule Multiple Jobs</h3>
47+
48+
<div class="mt-5">
49+
<.form for={@auto_form} phx-submit="auto_schedule" class="space-y-6">
50+
<div>
51+
<label class="block text-sm font-medium text-gray-700">Number of Jobs</label>
52+
<div class="mt-1">
53+
<input type="number"
54+
name="auto[job_count]"
55+
value="5"
56+
min="1"
57+
max="100"
58+
class="block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm" />
59+
</div>
60+
<p class="mt-2 text-sm text-gray-500">
61+
Jobs will be created with random sleep times (500-5000ms), random queues, and random failure states.
62+
</p>
63+
</div>
64+
65+
<div>
66+
<button type="submit" class="inline-flex justify-center rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600">
67+
Auto Schedule Jobs
68+
</button>
69+
</div>
70+
</.form>
71+
</div>
72+
</div>
73+
</div>
74+
4475
<div class="mt-8">
4576
<h3 class="text-base font-semibold leading-6 text-gray-900 mb-4">Recent Jobs</h3>
4677

0 commit comments

Comments
 (0)