defmodule BerrypodWeb.Plugs.CountryDetectTest do use BerrypodWeb.ConnCase, async: true alias BerrypodWeb.Plugs.CountryDetect defp with_cookies(conn) do Plug.Conn.fetch_cookies(conn) end describe "call/2" do test "detects GB from en-GB header", %{conn: conn} do conn = conn |> init_test_session(%{}) |> with_cookies() |> put_req_header("accept-language", "en-GB,en;q=0.9") |> CountryDetect.call([]) assert get_session(conn, "country_code") == "GB" end test "detects DE from de-DE header", %{conn: conn} do conn = conn |> init_test_session(%{}) |> with_cookies() |> put_req_header("accept-language", "de-DE,de;q=0.9,en;q=0.8") |> CountryDetect.call([]) assert get_session(conn, "country_code") == "DE" end test "detects FR from fr-FR header", %{conn: conn} do conn = conn |> init_test_session(%{}) |> with_cookies() |> put_req_header("accept-language", "fr-FR,fr;q=0.9") |> CountryDetect.call([]) assert get_session(conn, "country_code") == "FR" end test "defaults to GB when no country in header", %{conn: conn} do conn = conn |> init_test_session(%{}) |> with_cookies() |> put_req_header("accept-language", "en;q=0.9") |> CountryDetect.call([]) assert get_session(conn, "country_code") == "GB" end test "defaults to GB when no Accept-Language header", %{conn: conn} do conn = conn |> init_test_session(%{}) |> with_cookies() |> CountryDetect.call([]) assert get_session(conn, "country_code") == "GB" end test "does not overwrite existing country_code in session", %{conn: conn} do conn = conn |> init_test_session(%{"country_code" => "US"}) |> with_cookies() |> put_req_header("accept-language", "en-GB,en;q=0.9") |> CountryDetect.call([]) assert get_session(conn, "country_code") == "US" end test "cookie overrides session country", %{conn: conn} do conn = conn |> init_test_session(%{"country_code" => "GB"}) |> put_req_cookie("shipping_country", "DE") |> with_cookies() |> CountryDetect.call([]) assert get_session(conn, "country_code") == "DE" end test "cookie overrides Accept-Language detection", %{conn: conn} do conn = conn |> init_test_session(%{}) |> put_req_cookie("shipping_country", "US") |> with_cookies() |> put_req_header("accept-language", "en-GB,en;q=0.9") |> CountryDetect.call([]) assert get_session(conn, "country_code") == "US" end end end