Merge pull request #271 from elixirkoans/iamvery/fix-tests

Fix tests
This commit is contained in:
Jay Hayes
2022-02-10 08:00:25 -06:00
committed by GitHub
6 changed files with 59 additions and 16 deletions

35
.github/workflows/elixir.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
name: Elixir CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
name: Build and test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: System dependencies
run: |
sudo apt update
sudo apt install -y inotify-tools
- name: Set up Elixir
uses: erlef/setup-beam@988e02bfe678367a02564f65ca2e37726dc0268f
with:
elixir-version: '1.12.3' # Define the elixir version [required]
otp-version: '24.1' # Define the OTP version [required]
- name: Restore dependencies cache
uses: actions/cache@v2
with:
path: deps
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
restore-keys: ${{ runner.os }}-mix-
- name: Install dependencies
run: mix deps.get
- name: Run tests
run: mix test

View File

@@ -14,31 +14,31 @@ defmodule Agents do
end end
koan "Update to update the state" do koan "Update to update the state" do
Agent.start_link(fn -> "Hi there" end, name: __MODULE__) Agent.start_link(fn -> "Hi there" end, name: :greeter)
Agent.update(__MODULE__, fn old -> Agent.update(:greeter, fn old ->
String.upcase(old) String.upcase(old)
end) end)
assert Agent.get(__MODULE__, & &1) == ___ assert Agent.get(:greeter, & &1) == ___
end end
koan "Use get_and_update when you need to read and change a value in one go" do koan "Use get_and_update when you need to read and change a value in one go" do
Agent.start_link(fn -> ["Milk"] end, name: __MODULE__) Agent.start_link(fn -> ["Milk"] end, name: :groceries)
old_list = old_list =
Agent.get_and_update(__MODULE__, fn old -> Agent.get_and_update(:groceries, fn old ->
{old, ["Bread" | old]} {old, ["Bread" | old]}
end) end)
assert old_list == ___ assert old_list == ___
assert Agent.get(__MODULE__, & &1) == ___ assert Agent.get(:groceries, & &1) == ___
end end
koan "Somebody has to switch off the light at the end of the day" do koan "Somebody has to switch off the light at the end of the day" do
{:ok, pid} = Agent.start_link(fn -> ["Milk"] end, name: __MODULE__) {:ok, pid} = Agent.start_link(fn -> "Fin." end, name: :stoppable)
Agent.stop(__MODULE__) Agent.stop(:stoppable)
assert Process.alive?(pid) == ___ assert Process.alive?(pid) == ___
end end

View File

@@ -12,9 +12,13 @@ defmodule GenServers do
{:ok, args} {:ok, args}
end end
def start_link(init_password) do def start(init_password) do
# The __MODULE__ macro returns the current module name as an atom # The __MODULE__ macro returns the current module name as an atom
GenServer.start_link(__MODULE__, init_password, name: __MODULE__) GenServer.start(__MODULE__, init_password, name: __MODULE__)
end
def stop do
GenServer.stop(__MODULE__)
end end
def unlock(password) do def unlock(password) do
@@ -134,20 +138,24 @@ defmodule GenServers do
end end
koan "Our server works but it's pretty ugly to use; so lets use a cleaner interface" do koan "Our server works but it's pretty ugly to use; so lets use a cleaner interface" do
Laptop.start_link("EL!73") Laptop.start("EL!73")
assert Laptop.unlock("EL!73") == ___ assert Laptop.unlock("EL!73") == ___
end end
koan "Let's use the remaining functions in the external API" do koan "Let's use the remaining functions in the external API" do
Laptop.start_link("EL!73") Laptop.start("EL!73")
{_, response} = Laptop.unlock("EL!73") {_, response} = Laptop.unlock("EL!73")
assert response == ___ assert response == ___
Laptop.change_password("EL!73", "Elixir") Laptop.change_password("EL!73", "Elixir")
{_, response} = Laptop.unlock("EL!73") {_, response} = Laptop.unlock("EL!73")
assert response == ___ assert response == ___
{_, response} = Laptop.owner_name() {_, response} = Laptop.owner_name()
assert response == ___ assert response == ___
:ok = Laptop.stop()
end end
end end

View File

@@ -4,7 +4,6 @@ defmodule MapSetsTest do
test "MapSets" do test "MapSets" do
answers = [ answers = [
1,
3, 3,
{:multiple, [false, true]}, {:multiple, [false, true]},
true, true,

View File

@@ -4,8 +4,8 @@ defmodule ProtocolsTests do
test "Protocols" do test "Protocols" do
answers = [ answers = [
{:multiple, ["Andre signed up for violin", "Darcy enrolled for ballet"]}, {:multiple, ["Andre played violin", "Darcy performed ballet"]},
"Pupil enrolled at school", "Artist showed performance",
Protocol.UndefinedError Protocol.UndefinedError
] ]

View File

@@ -1,4 +1,5 @@
ExUnit.start() timeout = 1000 # ms
ExUnit.start(timeout: timeout)
defmodule TestHarness do defmodule TestHarness do
import ExUnit.Assertions import ExUnit.Assertions