205 lines
4.6 KiB
Elixir
205 lines
4.6 KiB
Elixir
defmodule BoutiqueSuggestionsTest do
|
|
use ExUnit.Case
|
|
|
|
@tag task_id: 1
|
|
test "the third argument, options, is optional" do
|
|
assert BoutiqueSuggestions.get_combinations([], [])
|
|
end
|
|
|
|
@tag task_id: 1
|
|
test "generates one pair from one top and one bottom" do
|
|
top = %{
|
|
item_name: "Long Sleeve T-shirt",
|
|
price: 19.95,
|
|
color: "Deep Red",
|
|
base_color: "red"
|
|
}
|
|
|
|
bottom = %{
|
|
item_name: "Wonderwall Pants",
|
|
price: 48.97,
|
|
color: "French Navy",
|
|
base_color: "blue"
|
|
}
|
|
|
|
assert BoutiqueSuggestions.get_combinations([top], [bottom]) == [{top, bottom}]
|
|
end
|
|
|
|
@tag task_id: 1
|
|
test "generates all pairs from two top and two bottom" do
|
|
top1 = %{
|
|
item_name: "Long Sleeve T-shirt",
|
|
price: 19.95,
|
|
color: "Deep Red",
|
|
base_color: "red"
|
|
}
|
|
|
|
top2 = %{
|
|
item_name: "Brushwood Shirt",
|
|
price: 19.10,
|
|
color: "Camel-Sandstone Woodland Plaid",
|
|
base_color: "brown"
|
|
}
|
|
|
|
bottom1 = %{
|
|
item_name: "Wonderwall Pants",
|
|
price: 48.97,
|
|
color: "French Navy",
|
|
base_color: "blue"
|
|
}
|
|
|
|
bottom2 = %{
|
|
item_name: "Terrena Stretch Pants",
|
|
price: 79.95,
|
|
color: "Cast Iron",
|
|
base_color: "grey"
|
|
}
|
|
|
|
tops = [top1, top2]
|
|
bottoms = [bottom1, bottom2]
|
|
expected = [{top1, bottom1}, {top1, bottom2}, {top2, bottom1}, {top2, bottom2}]
|
|
assert BoutiqueSuggestions.get_combinations(tops, bottoms) == expected
|
|
end
|
|
|
|
@tag task_id: 2
|
|
test "does not create suggestions that 'clash'" do
|
|
top = %{
|
|
item_name: "Long Sleeve T-shirt",
|
|
price: 19.95,
|
|
color: "Deep Red",
|
|
base_color: "red"
|
|
}
|
|
|
|
bottom = %{
|
|
item_name: "Happy Hike Studio Pants",
|
|
price: 19.00,
|
|
color: "Ochre Red",
|
|
base_color: "red"
|
|
}
|
|
|
|
assert BoutiqueSuggestions.get_combinations([top], [bottom]) == []
|
|
end
|
|
|
|
@tag task_id: 3
|
|
test "accepts keyword list for third argument for options" do
|
|
assert BoutiqueSuggestions.get_combinations([], [], maximum_price: 200.00)
|
|
end
|
|
|
|
@tag task_id: 3
|
|
test "filter rejects combinations based on combined maximum price" do
|
|
top = %{
|
|
item_name: "Sano Long Sleeve Shirt",
|
|
price: 45.47,
|
|
color: "Linen Chambray",
|
|
base_color: "yellow"
|
|
}
|
|
|
|
bottom = %{
|
|
item_name: "Happy Hike Studio Pants",
|
|
price: 99.00,
|
|
color: "Ochre Red",
|
|
base_color: "red"
|
|
}
|
|
|
|
assert BoutiqueSuggestions.get_combinations([top], [bottom], maximum_price: 100.00) == []
|
|
end
|
|
|
|
@tag task_id: 3
|
|
test "filter accepts combinations based on combined maximum price" do
|
|
top = %{
|
|
item_name: "Sano Long Sleeve Shirt",
|
|
price: 45.47,
|
|
color: "Linen Chambray",
|
|
base_color: "yellow"
|
|
}
|
|
|
|
bottom = %{
|
|
item_name: "Happy Hike Studio Pants",
|
|
price: 99.00,
|
|
color: "Ochre Red",
|
|
base_color: "red"
|
|
}
|
|
|
|
assert BoutiqueSuggestions.get_combinations([top], [bottom], maximum_price: 200.00) == [
|
|
{top, bottom}
|
|
]
|
|
end
|
|
|
|
@tag task_id: 3
|
|
test "provides default when maximum_price option not specified" do
|
|
top = %{
|
|
item_name: "Sano Long Sleeve Shirt",
|
|
price: 45.47,
|
|
color: "Linen Chambray",
|
|
base_color: "yellow"
|
|
}
|
|
|
|
bottom = %{
|
|
item_name: "Happy Hike Studio Pants",
|
|
price: 99.00,
|
|
color: "Ochre Red",
|
|
base_color: "red"
|
|
}
|
|
|
|
assert BoutiqueSuggestions.get_combinations([top], [bottom], other_option: "test") == []
|
|
end
|
|
|
|
@tag task_id: 3
|
|
test "putting it all together" do
|
|
top1 = %{
|
|
item_name: "Long Sleeve T-shirt",
|
|
price: 19.95,
|
|
color: "Deep Red",
|
|
base_color: "red"
|
|
}
|
|
|
|
top2 = %{
|
|
item_name: "Brushwood Shirt",
|
|
price: 19.10,
|
|
color: "Camel-Sandstone Woodland Plaid",
|
|
base_color: "brown"
|
|
}
|
|
|
|
top3 = %{
|
|
item_name: "Sano Long Sleeve Shirt",
|
|
price: 45.47,
|
|
color: "Linen Chambray",
|
|
base_color: "yellow"
|
|
}
|
|
|
|
bottom1 = %{
|
|
item_name: "Wonderwall Pants",
|
|
price: 48.97,
|
|
color: "French Navy",
|
|
base_color: "blue"
|
|
}
|
|
|
|
bottom2 = %{
|
|
item_name: "Terrena Stretch Pants",
|
|
price: 79.95,
|
|
color: "Cast Iron",
|
|
base_color: "grey"
|
|
}
|
|
|
|
bottom3 = %{
|
|
item_name: "Happy Hike Studio Pants",
|
|
price: 99.00,
|
|
color: "Ochre Red",
|
|
base_color: "red"
|
|
}
|
|
|
|
tops = [top1, top2, top3]
|
|
bottoms = [bottom1, bottom2, bottom3]
|
|
|
|
expected = [
|
|
{top1, bottom1},
|
|
{top1, bottom2},
|
|
{top2, bottom1},
|
|
{top2, bottom2},
|
|
{top3, bottom1}
|
|
]
|
|
|
|
assert BoutiqueSuggestions.get_combinations(tops, bottoms) == expected
|
|
end
|
|
end
|