TODO: Implement PointGroupRetriever.flatten/1

pull/1164/head
Rick Carlino 2020-02-21 17:49:23 -06:00
parent d0f09a1ee9
commit 5fef363475
4 changed files with 107 additions and 3 deletions

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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()