Add more steps from the book but with additoinal tests

This commit is contained in:
Nathan Mattes 2022-02-16 18:13:29 +01:00
parent ae41d2799d
commit 8a76966062
2 changed files with 37 additions and 1 deletions

View File

@ -51,6 +51,8 @@ defmodule Issues.CLI do
def process({user, project, count}) do
Issues.GithubIssues.fetch(user, project)
|> decode_response()
|> sort_into_descending_order
|> last(count)
end
def decode_response({:ok, body}), do: body
@ -58,4 +60,15 @@ defmodule Issues.CLI do
IO.puts "Error fetching from Github: #{error["message"]}"
System.halt(2)
end
def sort_into_descending_order(list_of_issues) do
list_of_issues
|> Enum.sort(fn lhs, rhs -> Map.get(lhs, "created_at") >= Map.get(rhs, "created_at") end)
end
def last(list, count) do
list
|> Enum.take(count)
|> Enum.reverse
end
end

View File

@ -2,7 +2,12 @@ defmodule CliTest do
use ExUnit.Case
doctest Issues
import Issues.CLI, only: [parse_args: 1]
import Issues.CLI,
only: [
parse_args: 1,
sort_into_descending_order: 1,
last: 2
]
test ":help returned by option parsing the -h and --help options" do
assert parse_args(["-h", "anything"]) == :help
@ -16,4 +21,22 @@ defmodule CliTest do
test "two values and default count returned if two values given" do
assert parse_args(["user", "project"]) == {"user", "project", 4}
end
test "sort descending orders the correct way" do
result = sort_into_descending_order(fake_created_at_list(["c", "a", "b"]))
issues = for issue <- result, do: Map.get(issue, "created_at")
assert issues == ~w{ c b a }
end
defp fake_created_at_list(values) do
for value <- values, do: %{"created_at" => value, "other_data" => "xxx"}
end
test "fetch the last two elements of a list" do
list = [1,2,3,4,5]
count = 2
expected = [2, 1]
result = last(list, count)
assert expected == result
end
end