TODO: Implement PointGroupRetriever.flatten/1
parent
d0f09a1ee9
commit
5fef363475
|
@ -14,6 +14,60 @@ defmodule FarmbotCore.Asset.CriteriaRetriever do
|
|||
10.
|
||||
"""
|
||||
|
||||
def run(%PointGroup{} = _pg) do
|
||||
end
|
||||
# @number_eq_fields [:radius, :x, :y, :z, :z]
|
||||
# @number_gt_fields [:radius, :x, :y, :z, :z]
|
||||
# @number_lt_fields [:radius, :x, :y, :z, :z]
|
||||
# @string_eq_fields [:name, :openfarm_slug, :plant_stage, :pointer_type]
|
||||
|
||||
def run(%PointGroup{} = _pg) do
|
||||
end
|
||||
|
||||
def flatten(%PointGroup{} = pg) do
|
||||
{_, results} = ({pg, []}
|
||||
# |> handle_meta_fields()
|
||||
# |> handle_point_ids()
|
||||
|> handle_number_eq_fields()
|
||||
|> handle_number_gt_fields()
|
||||
|> handle_number_lt_fields()
|
||||
|> handle_string_eq_fields()
|
||||
|> handle_day_field())
|
||||
results
|
||||
end
|
||||
|
||||
# # == THIS IS SPECIAL!
|
||||
# defp handle_meta_fields({%PointGroup{} = pg, [] = results}) do
|
||||
# raise "Not Implemented"
|
||||
# {pg, results}
|
||||
# end
|
||||
|
||||
# # == THIS IS SPEICAL!
|
||||
# defp handle_point_ids({%PointGroup{} = pg, [] = results}) do
|
||||
# raise "Not Implemented"
|
||||
# {pg, results}
|
||||
# end
|
||||
|
||||
defp handle_number_eq_fields({%PointGroup{} = pg, [] = results}) do
|
||||
raise "Not Implemented"
|
||||
{pg, results}
|
||||
end
|
||||
|
||||
defp handle_number_gt_fields({%PointGroup{} = pg, [] = results}) do
|
||||
raise "Not Implemented"
|
||||
{pg, results}
|
||||
end
|
||||
|
||||
defp handle_number_lt_fields({%PointGroup{} = pg, [] = results}) do
|
||||
raise "Not Implemented"
|
||||
{pg, results}
|
||||
end
|
||||
|
||||
defp handle_string_eq_fields({%PointGroup{} = pg, [] = results}) do
|
||||
raise "Not Implemented"
|
||||
{pg, results}
|
||||
end
|
||||
|
||||
defp handle_day_field({%PointGroup{} = pg, [] = results}) do
|
||||
raise "Not Implemented"
|
||||
{pg, results}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
defmodule FarmbotCore.Asset.CriteriaRetrieverTest do
|
||||
use ExUnit.Case, async: true
|
||||
use Mimic
|
||||
|
||||
alias FarmbotCore.Asset.{
|
||||
CriteriaRetriever,
|
||||
Repo,
|
||||
PointGroup
|
||||
}
|
||||
|
||||
setup :verify_on_exit!
|
||||
|
||||
test "CriteriaRetriever.flatten/1" do
|
||||
expect(Timex, :now, 1, fn -> ~U[2020-02-21 12:34:56.789012Z] end)
|
||||
|
||||
expected = [
|
||||
{:and, ["created_at < ?", ~U[2020-02-18 12:34:56.789012Z]]},
|
||||
{:and, ["openfarm_slug = ?", "five"]},
|
||||
{:and, ["radius = ?", 6]},
|
||||
{:and, ["x < ?", 7]},
|
||||
{:and, ["z > ?", 8]}
|
||||
]
|
||||
|
||||
results =
|
||||
CriteriaRetriever.flatten(%PointGroup{
|
||||
point_ids: [1, 2, 3],
|
||||
criteria: %{
|
||||
"day" => %{"op" => "<", "days" => 4},
|
||||
"string_eq" => %{"openfarm_slug" => "five"},
|
||||
"number_eq" => %{"radius" => 6},
|
||||
"number_lt" => %{"x" => 7},
|
||||
"number_gt" => %{"z" => 8}
|
||||
}
|
||||
})
|
||||
|
||||
assert Enum.count(expected) == Enum.count(results)
|
||||
|
||||
Enum.map(expected, fn query ->
|
||||
assert Enum.member?(results, query)
|
||||
end)
|
||||
end
|
||||
end
|
|
@ -23,7 +23,14 @@ defmodule FarmbotCore.Asset.PointGroupTest do
|
|||
id: 23,
|
||||
name: "wow",
|
||||
point_ids: [1, 2],
|
||||
sort_type: "random"
|
||||
sort_type: "random",
|
||||
criteria: %{
|
||||
"day" => %{"days" => 0, "op" => ">"},
|
||||
"number_eq" => %{},
|
||||
"number_gt" => %{},
|
||||
"number_lt" => %{},
|
||||
"string_eq" => %{}
|
||||
}
|
||||
}
|
||||
|
||||
actual = PointGroup.render(pg)
|
||||
|
|
|
@ -5,4 +5,5 @@ FarmbotCore.Asset.Device.changeset(FarmbotCore.Asset.device(), %{timezone: tz})
|
|||
|> FarmbotCore.Asset.Repo.insert_or_update!()
|
||||
|
||||
Mimic.copy(FarmbotCeleryScript.SysCalls.Stubs)
|
||||
Mimic.copy(Timex)
|
||||
ExUnit.start()
|
||||
|
|
Loading…
Reference in New Issue