ash/test/query/function/string_join_test.exs

67 lines
2.5 KiB
Elixir

defmodule Ash.Query.Function.StringJoinTest do
use ExUnit.Case, async: true
alias Ash.Query.Function.StringJoin
import Ash.CiString, only: [sigil_i: 2]
alias Ash.CiString
describe "when only strings are present" do
test "join with separator" do
assert {:known, "one, two"} = StringJoin.evaluate(%{arguments: [["one", "two"], ", "]})
assert {:known, "one"} = StringJoin.evaluate(%{arguments: [["one", nil], ", "]})
assert {:known, ""} = StringJoin.evaluate(%{arguments: [[nil, nil], ", "]})
end
test "join without separator" do
assert {:known, "onetwo"} = StringJoin.evaluate(%{arguments: [["one", "two"]]})
assert {:known, "one"} = StringJoin.evaluate(%{arguments: [["one", nil]]})
assert {:known, ""} = StringJoin.evaluate(%{arguments: [[nil, nil]]})
end
end
describe "when only ci_strings are present" do
test "join with separator" do
assert {:known, %CiString{string: "one, two"}} =
StringJoin.evaluate(%{arguments: [[~i"one", ~i"two"], ~i", "]})
assert {:known, %CiString{string: "one"}} =
StringJoin.evaluate(%{arguments: [[~i"one", nil], ~i", "]})
assert {:known, %CiString{string: ""}} =
StringJoin.evaluate(%{arguments: [[nil, nil], ~i", "]})
end
test "join without separator" do
assert {:known, %CiString{string: "onetwo"}} =
StringJoin.evaluate(%{arguments: [[~i"one", ~i"two"]]})
assert {:known, %CiString{string: "one"}} =
StringJoin.evaluate(%{arguments: [[~i"one", nil]]})
assert {:known, ""} = StringJoin.evaluate(%{arguments: [[nil, nil]]})
end
end
describe "when both strings and ci_strings coexist" do
test "join with separator" do
assert {:known, %CiString{string: "one, two"}} =
StringJoin.evaluate(%{arguments: [[~i"one", "two"], ", "]})
assert {:known, %CiString{string: "one, two"}} =
StringJoin.evaluate(%{arguments: [["one", ~i"two"], ", "]})
assert {:known, %CiString{string: "one, two"}} =
StringJoin.evaluate(%{arguments: [["one", "two"], ~i", "]})
end
test "join without separator" do
assert {:known, %CiString{string: "onetwo"}} =
StringJoin.evaluate(%{arguments: [[~i"one", "two"]]})
assert {:known, %CiString{string: "one"}} =
StringJoin.evaluate(%{arguments: [[~i"one", nil]]})
assert {:known, ""} = StringJoin.evaluate(%{arguments: [[nil, nil]]})
end
end
end