Skip to content

Commit 2a84c80

Browse files
committed
Fixing testing over queue
1 parent c387abd commit 2a84c80

File tree

4 files changed

+26
-16
lines changed

4 files changed

+26
-16
lines changed

lib/elixir_queue/application.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ defmodule ElixirQueue.Application do
1414
{ElixirQueue.Queue, name: ElixirQueue.Queue},
1515
{DynamicSupervisor, name: ElixirQueue.WorkerSupervisor, strategy: :one_for_one},
1616
{ElixirQueue.WorkerPool, name: ElixirQueue.WorkerPool},
17-
{ElixirQueue, []}
17+
{ElixirQueue.EventLoop, []}
1818
]
1919

2020
tuple = Supervisor.start_link(children, strategy: :one_for_one, name: ElixirQueue.Supervisor)

lib/elixir_queue.ex renamed to lib/elixir_queue/event_loop.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
defmodule ElixirQueue do
2-
use Task, restart: :permanent
1+
defmodule ElixirQueue.EventLoop do
2+
use Task, restart: :transient
33

44
alias ElixirQueue.{
55
Queue,

lib/elixir_queue/queue.ex

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ defmodule ElixirQueue.Queue do
1515
@doc ~S"""
1616
Get next job to be processed
1717
## Examples
18+
iex> ElixirQueue.Queue.clear()
1819
iex> ElixirQueue.Queue.perform_later(Enum, :reverse, [[1,2,3,4,5]])
1920
:ok
2021
"""
@@ -27,6 +28,7 @@ defmodule ElixirQueue.Queue do
2728
@doc ~S"""
2829
Get next job to be processed
2930
## Examples
31+
iex> ElixirQueue.Queue.clear()
3032
iex> ElixirQueue.Queue.fetch()
3133
{:error, :empty}
3234
iex> ElixirQueue.Queue.perform_later(Enum, :reverse, [[1,2,3,4,5]])
@@ -39,17 +41,18 @@ defmodule ElixirQueue.Queue do
3941
@spec fetch :: {:ok, any} | {:error, :empty}
4042
def fetch, do: GenServer.call(Queue, :fetch)
4143

44+
def clear, do: GenServer.call(Queue, :clear)
45+
4246
@impl true
43-
def handle_call({:perform_later, job}, _from, queue) do
44-
{:reply, :ok, Tuple.append(queue, job)}
45-
end
47+
def handle_call({:perform_later, job}, _from, queue),
48+
do: {:reply, :ok, Tuple.append(queue, job)}
4649

47-
def handle_call(:fetch, _from, {}) do
48-
{:reply, {:error, :empty}, {}}
49-
end
50+
def handle_call(:fetch, _from, {}),
51+
do: {:reply, {:error, :empty}, {}}
5052

51-
def handle_call(:fetch, _from, queue) do
52-
job = elem(queue, 0)
53-
{:reply, {:ok, job}, Tuple.delete_at(queue, 0)}
54-
end
53+
def handle_call(:fetch, _from, queue),
54+
do: {:reply, {:ok, elem(queue, 0)}, Tuple.delete_at(queue, 0)}
55+
56+
def handle_call(:clear, _from, _queue),
57+
do: {:reply, :ok, {}}
5558
end
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
1-
defmodule ElixirQueueTest do
1+
defmodule ElixirQueue.QueueTest do
22
use ExUnit.Case
33
doctest ElixirQueue.Queue
44
alias ElixirQueue.{
5+
EventLoop,
56
Queue,
67
Job
78
}
89

910
setup do
10-
Application.stop(:elixir_queue)
11-
:ok = Application.start(:elixir_queue)
11+
:ok = Queue.clear()
12+
Supervisor.terminate_child(ElixirQueue.Supervisor, EventLoop)
1213
end
1314

1415
test "Queue.fetch/0 with no job should get {:error, :empty}" do
@@ -19,4 +20,10 @@ defmodule ElixirQueueTest do
1920
assert :ok = Queue.perform_later(Enum, :reverse, [[1,2,3,4,5]])
2021
assert {:ok, %Job{mod: Enum, func: :reverse, args: [[1,2,3,4,5]]}} = Queue.fetch()
2122
end
23+
24+
test "Queue.clear/0 should work" do
25+
assert :ok = Queue.perform_later(Enum, :reverse, [[1,2,3,4,5]])
26+
assert :ok = Queue.clear()
27+
assert {:error, :empty} = Queue.fetch()
28+
end
2229
end

0 commit comments

Comments
 (0)