defmodule PlantIdDiscordBotTest.PlantNet.Parser do alias PlantIdDiscordBot.PlantNet.Parser use ExUnit.Case doctest PlantIdDiscordBot.PlantNet.Parser test "to_map" do result = PlantNetFixtures.raw_response() |> Parser.to_map!() assert result == PlantNetFixtures.parsed_response() end test "filter by score" do result = PlantNetFixtures.parsed_response() |> Parser.filter_by_score() assert result == PlantNetFixtures.parsed_response_filtered_by_score() end test "add_external_urls" do result = PlantNetFixtures.parsed_response_filtered_by_score() |> Parser.add_external_urls() assert result == PlantNetFixtures.parsed_response_with_urls() end test "no iucn data prevents 'Conservation Status' from being shown in response message" do message = PlantNetFixtures.parsed_response_with_urls_no_iucn() |> Parser.generate_response_message() refute String.contains?(message, "Conservation status: ") end describe "message paragraph spacing" do test "iucn data plus alternatives" do message = PlantNetFixtures.parsed_response_with_urls() |> Parser.generate_response_message() assert message == "My best guess is **Prunus cerasifera** with a confidence of **88%**. Common names include **Cherry plum, myrobalan, Cherry Plum, Purple-leaf Plum**.\n\nSpecies info from plant databases:\n[GBIF]() | [PFAF]() | [POWO]()\n\nConservation status: Data Deficient\n\nAlternatives include **Prunus × cistena**." end test "no iucn data" do message = PlantNetFixtures.parsed_response_with_urls_no_iucn() |> Parser.generate_response_message() assert message == "My best guess is **Prunus cerasifera** with a confidence of **88%**. Common names include **Cherry plum, myrobalan, Cherry Plum, Purple-leaf Plum**.\n\nSpecies info from plant databases:\n[GBIF]() | [PFAF]() | [POWO]()\n\nAlternatives include **Prunus × cistena**." end test "no common names" do message = PlantNetFixtures.parsed_response_with_urls_no_alternatives() |> Parser.generate_response_message() assert message == "My best guess is **Prunus cerasifera** with a confidence of **88%**.\n\nSpecies info from plant databases:\n[GBIF]() | [PFAF]() | [POWO]()\n\nConservation status: Data Deficient\n\nAlternatives include **Prunus × cistena**." end end describe "iucn_parser/1" do test "return correct string for abbreviation" do assert Parser.iucn_parser("DD") == "Data Deficient" assert Parser.iucn_parser("LC") == "Least Concern" assert Parser.iucn_parser("NT") == "Near Threatened" assert Parser.iucn_parser("VU") == "Vulnerable" assert Parser.iucn_parser("EN") == "Endangered" assert Parser.iucn_parser("CR") == "Critically Endangered" assert Parser.iucn_parser("EW") == "Extinct in the Wild" assert Parser.iucn_parser("EX") == "Extinct" assert Parser.iucn_parser("NE") == "Not Evaluated" assert Parser.iucn_parser("ABC") == "Unknown" end end end