Não conheço muito de Elixir. Como você escreveu os testes unitários da biblioteca?
Perfeito. Eu escrevi utilizando o framework de testes unitários do Elixir ExUnit.
Exemplo do teste da função all/1:
describe "all/1" do
test "returns all aggregates grouped by research" do
Req.Test.stub(ExIbge.Api, fn conn ->
assert conn.request_path == "/api/v3/agregados"
Req.Test.json(conn, [@research_fixture])
end)
assert {:ok, [research]} = Aggregate.all()
assert research.id == "P1"
assert research.name == "Pesquisa 1"
assert length(research.aggregates) == 1
assert hd(research.aggregates).id == "1705"
end
end
Aqui nesse teste antes de fazer a requisição eu intercepto e coloco dados esperados da resposta da API, segui esse modelo para os testes continuarem funcionando offline.
Essa parte de pattern matching, como funciona no Elixir? Já tenho uma experiência básica com Gleam, e o pattern matching deles achei mais simples de entender kkkkk.
Realmente é um pouco confuso pattern matching para desenvolvedores acostumados com linguagens imperativas.
Eu escrevi aqui um exemplo seguindo a mesma lógica em Elixir e Gleam pra ver se ficar mais claro:
Elixir:
defmodule Exemplo do
def saudacao(:admin), do: "Bem-vindo, Chefe!"
def saudacao(nome), do: "Olá, #{nome}"
end
pub fn saudacao(usuario) {
case usuario {
"admin" -> "Bem-vindo, Chefe!"
nome -> "Olá, " <> nome
}
}
Recomendo a leitura desse cheatsheet do site oficial do gleam:
Gleam For Elixir Users