test(growth): add test for happy download paths
All checks were successful
continuous-integration/drone/pr Build is passing
All checks were successful
continuous-integration/drone/pr Build is passing
This commit is contained in:
parent
6ba171343d
commit
fb38910137
@ -1,5 +1,8 @@
|
|||||||
import Config
|
import Config
|
||||||
|
|
||||||
|
config :wabanex, Growth.Indicators.Download,
|
||||||
|
who_req_options: [plug: {Req.Test, Growth.Indicators.Download.WHO}]
|
||||||
|
|
||||||
config :wabanex, Wabanex.Repo,
|
config :wabanex, Wabanex.Repo,
|
||||||
database: "wabanex_test#{System.get_env("MIX_TEST_PARTITION")}",
|
database: "wabanex_test#{System.get_env("MIX_TEST_PARTITION")}",
|
||||||
pool: Ecto.Adapters.SQL.Sandbox
|
pool: Ecto.Adapters.SQL.Sandbox
|
||||||
|
297
test/growth/indicators/download_test.exs
Normal file
297
test/growth/indicators/download_test.exs
Normal file
@ -0,0 +1,297 @@
|
|||||||
|
defmodule Growth.Indicators.DownloadTest do
|
||||||
|
@moduledoc false
|
||||||
|
|
||||||
|
use ExUnit.Case, async: true
|
||||||
|
|
||||||
|
alias Elixlsx.Sheet
|
||||||
|
alias Elixlsx.Workbook
|
||||||
|
|
||||||
|
alias Growth.Indicators.Download
|
||||||
|
|
||||||
|
setup do
|
||||||
|
mock_who_request()
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "process/3" do
|
||||||
|
test "fetch excel from url and convert it to a list of lists" do
|
||||||
|
gender = :female
|
||||||
|
category = :age_tables
|
||||||
|
|
||||||
|
url =
|
||||||
|
"https://cdn.who.int/media/docs/default-source/child-growth/child-growth-standards/indicators/length-height-for-age/lhfa_girls_0-to-13-weeks_zscores.xlsx"
|
||||||
|
|
||||||
|
content = Download.process(gender, category, url)
|
||||||
|
|
||||||
|
expected_content =
|
||||||
|
[
|
||||||
|
~w(source category gender age_unit age l m s sd3neg sd2neg sd1neg sd0 sd1 sd2 sd3),
|
||||||
|
[
|
||||||
|
url,
|
||||||
|
category,
|
||||||
|
gender,
|
||||||
|
"week",
|
||||||
|
Decimal.new("0"),
|
||||||
|
Decimal.new("1"),
|
||||||
|
Decimal.new("49.1477"),
|
||||||
|
Decimal.new("0.0379"),
|
||||||
|
Decimal.new("43.6"),
|
||||||
|
Decimal.new("45.4"),
|
||||||
|
Decimal.new("47.3"),
|
||||||
|
Decimal.new("49.1"),
|
||||||
|
Decimal.new("51"),
|
||||||
|
Decimal.new("52.9"),
|
||||||
|
Decimal.new("54.7")
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
assert expected_content == content
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "process_gender/1" do
|
||||||
|
test "merge multiple contents into a single one" do
|
||||||
|
category = :age_tables
|
||||||
|
gender = :female
|
||||||
|
|
||||||
|
urls =
|
||||||
|
[
|
||||||
|
"https://cdn.who.int/media/docs/default-source/child-growth/child-growth-standards/indicators/length-height-for-age/lhfa_girls_0-to-13-weeks_zscores.xlsx",
|
||||||
|
"https://cdn.who.int/media/docs/default-source/child-growth/child-growth-standards/indicators/length-height-for-age/lhfa_girls_0-to-2-years_zscores.xlsx"
|
||||||
|
]
|
||||||
|
|
||||||
|
content = Download.process_gender({gender, category, urls})
|
||||||
|
|
||||||
|
expected_content =
|
||||||
|
[
|
||||||
|
~w(source category gender age_unit age l m s sd3neg sd2neg sd1neg sd0 sd1 sd2 sd3),
|
||||||
|
[
|
||||||
|
List.first(urls),
|
||||||
|
category,
|
||||||
|
gender,
|
||||||
|
"week",
|
||||||
|
Decimal.new("0"),
|
||||||
|
Decimal.new("1"),
|
||||||
|
Decimal.new("49.1477"),
|
||||||
|
Decimal.new("0.0379"),
|
||||||
|
Decimal.new("43.6"),
|
||||||
|
Decimal.new("45.4"),
|
||||||
|
Decimal.new("47.3"),
|
||||||
|
Decimal.new("49.1"),
|
||||||
|
Decimal.new("51"),
|
||||||
|
Decimal.new("52.9"),
|
||||||
|
Decimal.new("54.7")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
List.last(urls),
|
||||||
|
category,
|
||||||
|
gender,
|
||||||
|
"month",
|
||||||
|
Decimal.new("0"),
|
||||||
|
Decimal.new("1"),
|
||||||
|
Decimal.new("49.1477"),
|
||||||
|
Decimal.new("0.0379"),
|
||||||
|
Decimal.new("43.6"),
|
||||||
|
Decimal.new("45.4"),
|
||||||
|
Decimal.new("47.3"),
|
||||||
|
Decimal.new("49.1"),
|
||||||
|
Decimal.new("51"),
|
||||||
|
Decimal.new("52.9"),
|
||||||
|
Decimal.new("54.7")
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
assert expected_content == content
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe "process_genders/1" do
|
||||||
|
test "merge multiple genders and contents into a single one" do
|
||||||
|
female_urls = %{
|
||||||
|
age_tables: ~w(
|
||||||
|
https://cdn.who.int/media/docs/default-source/child-growth/child-growth-standards/indicators/length-height-for-age/lhfa_girls_0-to-13-weeks_zscores.xlsx
|
||||||
|
https://cdn.who.int/media/docs/default-source/child-growth/child-growth-standards/indicators/length-height-for-age/lhfa_girls_0-to-2-years_zscores.xlsx
|
||||||
|
),
|
||||||
|
expanded_tables: ~w(
|
||||||
|
https://cdn.who.int/media/docs/default-source/child-growth/child-growth-standards/indicators/length-height-for-age/expandable-tables/lhfa-girls-zscore-expanded-tables.xlsx
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
male_urls = %{
|
||||||
|
age_tables: ~w(
|
||||||
|
https://cdn.who.int/media/docs/default-source/child-growth/child-growth-standards/indicators/length-height-for-age/lhfa_boys_0-to-13-weeks_zscores.xlsx
|
||||||
|
https://cdn.who.int/media/docs/default-source/child-growth/child-growth-standards/indicators/length-height-for-age/lhfa_boys_0-to-2-years_zscores.xlsx
|
||||||
|
),
|
||||||
|
expanded_tables: ~w(
|
||||||
|
https://cdn.who.int/media/docs/default-source/child-growth/child-growth-standards/indicators/length-height-for-age/expandable-tables/lhfa-boys-zscore-expanded-tables.xlsx
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
content = Download.process_genders(%{female: female_urls, male: male_urls})
|
||||||
|
|
||||||
|
expected_content =
|
||||||
|
[
|
||||||
|
~w(source category gender age_unit age l m s sd3neg sd2neg sd1neg sd0 sd1 sd2 sd3),
|
||||||
|
[
|
||||||
|
female_urls |> Map.get(:age_tables) |> List.first(),
|
||||||
|
:age,
|
||||||
|
:female,
|
||||||
|
"week",
|
||||||
|
Decimal.new("0"),
|
||||||
|
Decimal.new("1"),
|
||||||
|
Decimal.new("49.1477"),
|
||||||
|
Decimal.new("0.0379"),
|
||||||
|
Decimal.new("43.6"),
|
||||||
|
Decimal.new("45.4"),
|
||||||
|
Decimal.new("47.3"),
|
||||||
|
Decimal.new("49.1"),
|
||||||
|
Decimal.new("51"),
|
||||||
|
Decimal.new("52.9"),
|
||||||
|
Decimal.new("54.7")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
female_urls |> Map.get(:age_tables) |> List.last(),
|
||||||
|
:age,
|
||||||
|
:female,
|
||||||
|
"month",
|
||||||
|
Decimal.new("0"),
|
||||||
|
Decimal.new("1"),
|
||||||
|
Decimal.new("49.1477"),
|
||||||
|
Decimal.new("0.0379"),
|
||||||
|
Decimal.new("43.6"),
|
||||||
|
Decimal.new("45.4"),
|
||||||
|
Decimal.new("47.3"),
|
||||||
|
Decimal.new("49.1"),
|
||||||
|
Decimal.new("51"),
|
||||||
|
Decimal.new("52.9"),
|
||||||
|
Decimal.new("54.7")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
male_urls |> Map.get(:age_tables) |> List.first(),
|
||||||
|
:age,
|
||||||
|
:male,
|
||||||
|
"week",
|
||||||
|
Decimal.new("0"),
|
||||||
|
Decimal.new("1"),
|
||||||
|
Decimal.new("49.8842"),
|
||||||
|
Decimal.new("0.03795"),
|
||||||
|
Decimal.new("44.2"),
|
||||||
|
Decimal.new("46.1"),
|
||||||
|
Decimal.new("48"),
|
||||||
|
Decimal.new("49.9"),
|
||||||
|
Decimal.new("51.8"),
|
||||||
|
Decimal.new("53.7"),
|
||||||
|
Decimal.new("55.6")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
male_urls |> Map.get(:age_tables) |> List.last(),
|
||||||
|
:age,
|
||||||
|
:male,
|
||||||
|
"month",
|
||||||
|
Decimal.new("0"),
|
||||||
|
Decimal.new("1"),
|
||||||
|
Decimal.new("49.8842"),
|
||||||
|
Decimal.new("0.03795"),
|
||||||
|
Decimal.new("44.2"),
|
||||||
|
Decimal.new("46.1"),
|
||||||
|
Decimal.new("48"),
|
||||||
|
Decimal.new("49.9"),
|
||||||
|
Decimal.new("51.8"),
|
||||||
|
Decimal.new("53.7"),
|
||||||
|
Decimal.new("55.6")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
female_urls |> Map.get(:expanded_tables) |> List.first(),
|
||||||
|
:expanded,
|
||||||
|
:female,
|
||||||
|
"day",
|
||||||
|
Decimal.new("0"),
|
||||||
|
Decimal.new("1"),
|
||||||
|
Decimal.new("49.1477"),
|
||||||
|
Decimal.new("0.0379"),
|
||||||
|
Decimal.new("43.56"),
|
||||||
|
Decimal.new("45.422"),
|
||||||
|
Decimal.new("47.285"),
|
||||||
|
Decimal.new("49.148"),
|
||||||
|
Decimal.new("51.01"),
|
||||||
|
Decimal.new("52.873"),
|
||||||
|
Decimal.new("54.736")
|
||||||
|
],
|
||||||
|
[
|
||||||
|
male_urls |> Map.get(:expanded_tables) |> List.first(),
|
||||||
|
:expanded,
|
||||||
|
:male,
|
||||||
|
"day",
|
||||||
|
Decimal.new("0"),
|
||||||
|
Decimal.new("1"),
|
||||||
|
Decimal.new("49.8842"),
|
||||||
|
Decimal.new("0.03795"),
|
||||||
|
Decimal.new("44.205"),
|
||||||
|
Decimal.new("46.098"),
|
||||||
|
Decimal.new("47.991"),
|
||||||
|
Decimal.new("49.884"),
|
||||||
|
Decimal.new("51.777"),
|
||||||
|
Decimal.new("53.67"),
|
||||||
|
Decimal.new("55.564")
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
assert expected_content == content
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp mock_who_request do
|
||||||
|
Req.Test.stub(Growth.Indicators.Download.WHO, fn %Plug.Conn{path_info: path_info} = conn ->
|
||||||
|
filename = List.last(path_info)
|
||||||
|
|
||||||
|
rows =
|
||||||
|
case filename do
|
||||||
|
"lhfa_girls_0-to-13-weeks_zscores.xlsx" ->
|
||||||
|
[
|
||||||
|
~w(Week L M S SD SD3neg SD2neg SD1neg SD0 SD1 SD2 SD3),
|
||||||
|
~w(0 1 49.1477 0.0379 1.8627 43.6 45.4 47.3 49.1 51 52.9 54.7)
|
||||||
|
]
|
||||||
|
|
||||||
|
"lhfa_girls_0-to-2-years_zscores.xlsx" ->
|
||||||
|
[
|
||||||
|
~w(Month L M S SD SD3neg SD2neg SD1neg SD0 SD1 SD2 SD3),
|
||||||
|
~w(0 1 49.1477 0.0379 1.8627 43.6 45.4 47.3 49.1 51 52.9 54.7)
|
||||||
|
]
|
||||||
|
|
||||||
|
"lhfa-girls-zscore-expanded-tables.xlsx" ->
|
||||||
|
[
|
||||||
|
~w(Day L M S SD4neg SD3neg SD2neg SD1neg SD0 SD1 SD2 SD3 SD4),
|
||||||
|
~w(0 1 49.1477 0.0379 41.697 43.56 45.422 47.285 49.148 51.01 52.873 54.736 56.598)
|
||||||
|
]
|
||||||
|
|
||||||
|
"lhfa_boys_0-to-13-weeks_zscores.xlsx" ->
|
||||||
|
[
|
||||||
|
~w(Week L M S SD SD3neg SD2neg SD1neg SD0 SD1 SD2 SD3),
|
||||||
|
~w(0 1 49.8842 0.03795 1.8931 44.2 46.1 48 49.9 51.8 53.7 55.6)
|
||||||
|
]
|
||||||
|
|
||||||
|
"lhfa_boys_0-to-2-years_zscores.xlsx" ->
|
||||||
|
[
|
||||||
|
~w(Month L M S SD SD3neg SD2neg SD1neg SD0 SD1 SD2 SD3),
|
||||||
|
~w(0 1 49.8842 0.03795 1.8931 44.2 46.1 48 49.9 51.8 53.7 55.6)
|
||||||
|
]
|
||||||
|
|
||||||
|
"lhfa-boys-zscore-expanded-tables.xlsx" ->
|
||||||
|
[
|
||||||
|
~w(Day L M S SD4neg SD3neg SD2neg SD1neg SD0 SD1 SD2 SD3 SD4),
|
||||||
|
~w(0 1 49.8842 0.03795 42.312 44.205 46.098 47.991 49.884 51.777 53.67 55.564 57.457)
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
{:ok, {_charlist_content, content}} =
|
||||||
|
%Sheet{name: "zscore", rows: rows}
|
||||||
|
|> then(&%Workbook{sheets: [&1]})
|
||||||
|
|> Elixlsx.write_to_memory(filename)
|
||||||
|
|
||||||
|
conn
|
||||||
|
|> Plug.Conn.put_resp_content_type(
|
||||||
|
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
|
||||||
|
)
|
||||||
|
|> Plug.Conn.send_resp(200, content)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
end
|
Loading…
x
Reference in New Issue
Block a user