From 3a3e52d46ec16ffbc5bc73c1d1bcca8b8ec43a45 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Wed, 15 Jan 2020 15:53:06 -0600 Subject: [PATCH 01/10] Add `comparison` celery node. Upgrade deps --- Gemfile.lock | 18 +++++++++--------- app/models/celery_script_settings_bag.rb | 7 +++++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 51c95b965..4234fff0b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -83,7 +83,7 @@ GEM url coderay (1.1.2) concurrent-ruby (1.1.5) - crass (1.0.5) + crass (1.0.6) database_cleaner (1.7.0) declarative (0.0.10) declarative-option (0.1.0) @@ -109,8 +109,8 @@ GEM factory_bot_rails (5.1.1) factory_bot (~> 5.1.0) railties (>= 4.2.0) - faker (2.10.0) - i18n (>= 1.6, < 1.8) + faker (2.10.1) + i18n (>= 1.6, < 2) faraday (0.15.4) multipart-post (>= 1.2, < 3) faraday_middleware (0.13.1) @@ -148,7 +148,7 @@ GEM hashdiff (1.0.0) hashie (3.6.0) httpclient (2.8.3) - i18n (1.7.0) + i18n (1.8.2) concurrent-ruby (~> 1.0) json (2.3.0) jsonapi-renderer (0.2.2) @@ -165,7 +165,7 @@ GEM mimemagic (0.3.3) mini_mime (1.0.2) mini_portile2 (2.4.0) - minitest (5.13.0) + minitest (5.14.0) multi_json (1.13.1) multipart-post (2.1.1) mutations (0.9.0) @@ -178,7 +178,7 @@ GEM passenger (6.0.4) rack rake (>= 0.8.1) - pg (1.2.1) + pg (1.2.2) pry (0.12.2) coderay (~> 1.1.0) method_source (~> 0.9.0) @@ -190,7 +190,7 @@ GEM faraday_middleware (~> 0.13.0) hashie (~> 3.6) multi_json (~> 1.13.1) - rack (2.0.8) + rack (2.1.1) rack-attack (6.2.2) rack (>= 1.0, < 3) rack-cors (1.1.1) @@ -240,7 +240,7 @@ GEM actionpack (>= 5.0) railties (>= 5.0) retriable (3.1.2) - rollbar (2.23.1) + rollbar (2.23.2) rspec (3.9.0) rspec-core (~> 3.9.0) rspec-expectations (~> 3.9.0) @@ -265,7 +265,7 @@ GEM scenic (1.5.1) activerecord (>= 4.0.0) railties (>= 4.0.0) - secure_headers (6.1.1) + secure_headers (6.1.2) signet (0.12.0) addressable (~> 2.3) faraday (~> 0.9) diff --git a/app/models/celery_script_settings_bag.rb b/app/models/celery_script_settings_bag.rb index 10fc8d3d9..511aa3dca 100644 --- a/app/models/celery_script_settings_bag.rb +++ b/app/models/celery_script_settings_bag.rb @@ -231,6 +231,9 @@ module CeleryScriptSettingsBag op: { defn: [e(:ALLOWED_OPS)], }, + operands: { + defn: [n(:pair)], + }, priority: { defn: [v(:integer)] }, channel_name: { defn: [e(:ALLOWED_CHANNEL_NAMES)], @@ -530,6 +533,10 @@ module CeleryScriptSettingsBag check_resource_type(n, "PointGroup", resource_id, Device.current) end, }, + comparison: { + args: [ :op, :operands ], + tags: [ :data, :disk_user ] + } }.map { |(name, list)| Corpus.node(name, **list) } HASH = Corpus.as_json From 612042efaa36b17709890a800ece40741edc0423 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 16 Jan 2020 07:41:11 -0600 Subject: [PATCH 02/10] WIP --- app/mutations/point_groups/create.rb | 10 +++++++--- .../api/point_groups/create_spec.rb | 20 +++++++++++++++++++ .../api/point_groups/update_spec.rb | 4 ++++ 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/mutations/point_groups/create.rb b/app/mutations/point_groups/create.rb index b7610d315..220fbe9e7 100644 --- a/app/mutations/point_groups/create.rb +++ b/app/mutations/point_groups/create.rb @@ -21,13 +21,17 @@ module PointGroups PointGroup.transaction do PointGroupItem.transaction do pg = PointGroup.new(name: name, device: device) - point_ids.uniq.map do |id| - pg.point_group_items << PointGroupItem.new(point_id: id) - end + add_point_group_items(pg) pg.save! pg end end end + + def add_point_group_items(pg) + point_ids.uniq.map do |id| + pg.point_group_items << PointGroupItem.new(point_id: id) + end + end end end diff --git a/spec/controllers/api/point_groups/create_spec.rb b/spec/controllers/api/point_groups/create_spec.rb index 2dd3be287..6f44f1c9f 100644 --- a/spec/controllers/api/point_groups/create_spec.rb +++ b/spec/controllers/api/point_groups/create_spec.rb @@ -47,4 +47,24 @@ describe Api::PointGroupsController do expect(response.status).to eq(422) expect(json[:sort_type]).to include(PointGroup::BAD_SORT.split("}").last) end + + it "adds criteria to a group" do + sign_in user + comparison = { + kind: "comparison", + args: { + op: "is", + operands: { kind: "pair", args: { label: "meta.type", value: "weed" } }, + }, + } + + payload = + { name: "Criteria group", point_ids: point_ids, body: [comparison] } + + post :create, body: payload.to_json, format: :json + expect(response.status).to eq(200) + expect(json[:body]).to be_kind_of(Array) + binding.pry + raise "TODO: Make sure auto sync is called similarly to FarmEvent" + end end diff --git a/spec/controllers/api/point_groups/update_spec.rb b/spec/controllers/api/point_groups/update_spec.rb index cc5f8d15c..0471df0f2 100644 --- a/spec/controllers/api/point_groups/update_spec.rb +++ b/spec/controllers/api/point_groups/update_spec.rb @@ -44,4 +44,8 @@ describe Api::PointGroupsController do json2 = JSON.parse(call1.first, symbolize_names: true).fetch(:body) expect(json).to eq(json2) end + + it "updates criteria of a group" do + raise "TODO: Make sure auto sync is called similarly to FarmEvent" + end end From 9edba110f65fcb6dd9b733d9b83426597f1897e4 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 16 Jan 2020 14:35:05 -0600 Subject: [PATCH 03/10] WIP: Use a "criteria map" --- app/models/celery_script_settings_bag.rb | 7 ------- app/models/point_group.rb | 14 +++++++++++++- app/mutations/point_groups/create.rb | 10 ++++++++++ app/serializers/point_group_serializer.rb | 2 +- .../20200116140201_add_criteria_to_point_groups.rb | 5 +++++ db/structure.sql | 11 +++++++---- 6 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 db/migrate/20200116140201_add_criteria_to_point_groups.rb diff --git a/app/models/celery_script_settings_bag.rb b/app/models/celery_script_settings_bag.rb index 511aa3dca..3d3dba3ca 100644 --- a/app/models/celery_script_settings_bag.rb +++ b/app/models/celery_script_settings_bag.rb @@ -231,9 +231,6 @@ module CeleryScriptSettingsBag op: { defn: [e(:ALLOWED_OPS)], }, - operands: { - defn: [n(:pair)], - }, priority: { defn: [v(:integer)] }, channel_name: { defn: [e(:ALLOWED_CHANNEL_NAMES)], @@ -532,10 +529,6 @@ module CeleryScriptSettingsBag resource_id = n.args.fetch(:point_group_id).value check_resource_type(n, "PointGroup", resource_id, Device.current) end, - }, - comparison: { - args: [ :op, :operands ], - tags: [ :data, :disk_user ] } }.map { |(name, list)| Corpus.node(name, **list) } diff --git a/app/models/point_group.rb b/app/models/point_group.rb index 194023b95..87a6614ca 100644 --- a/app/models/point_group.rb +++ b/app/models/point_group.rb @@ -3,9 +3,21 @@ class PointGroup < ApplicationRecord %w(xy_ascending xy_descending yx_ascending yx_descending random).sort BAD_SORT = "%{value} is not valid. Valid options are: " + SORT_TYPES.map(&:inspect).join(", ") - + DEFAULT_CRITERIA = { + day: { op: "<", days: 0 }, + string_eq: {}, + number_eq: {}, + number_lt: {}, + number_gt: {}, + } belongs_to :device has_many :point_group_items, dependent: :destroy validates_inclusion_of :sort_type, in: SORT_TYPES, message: BAD_SORT + serialize :criteria + before_validation :set_defaults + + def set_defaults + self.criteria ||= DEFAULT_CRITERIA.deep_dup + end end diff --git a/app/mutations/point_groups/create.rb b/app/mutations/point_groups/create.rb index 220fbe9e7..613615b8d 100644 --- a/app/mutations/point_groups/create.rb +++ b/app/mutations/point_groups/create.rb @@ -10,6 +10,16 @@ module PointGroups optional do string :sort_type + hash :criteria do + hash(:day) do + integer :op, in: [">", "<"] + integer :days + end + hash(:string_eq) { array :*, class: String } + hash(:number_eq) { array :*, class: Integer } + hash(:number_lt) { integer :* } + hash(:number_gt) { integer :* } + end end def validate diff --git a/app/serializers/point_group_serializer.rb b/app/serializers/point_group_serializer.rb index 5010de0d2..66e128aa4 100644 --- a/app/serializers/point_group_serializer.rb +++ b/app/serializers/point_group_serializer.rb @@ -1,5 +1,5 @@ class PointGroupSerializer < ApplicationSerializer - attributes :name, :point_ids, :sort_type + attributes :name, :point_ids, :sort_type, :criteria def point_ids object.point_group_items.pluck(:point_id) diff --git a/db/migrate/20200116140201_add_criteria_to_point_groups.rb b/db/migrate/20200116140201_add_criteria_to_point_groups.rb new file mode 100644 index 000000000..d2c262776 --- /dev/null +++ b/db/migrate/20200116140201_add_criteria_to_point_groups.rb @@ -0,0 +1,5 @@ +class AddCriteriaToPointGroups < ActiveRecord::Migration[6.0] + def change + add_column :point_groups, :criteria, :text, limit: 1000 + end +end diff --git a/db/structure.sql b/db/structure.sql index a0b70c2fc..6592bfcd4 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -1185,7 +1185,8 @@ CREATE TABLE public.point_groups ( device_id bigint NOT NULL, created_at timestamp without time zone NOT NULL, updated_at timestamp without time zone NOT NULL, - sort_type character varying(20) DEFAULT 'xy_ascending'::character varying + sort_type character varying(20) DEFAULT 'xy_ascending'::character varying, + criteria text ); @@ -1406,7 +1407,7 @@ CREATE VIEW public.resource_update_steps AS edge_nodes.kind, edge_nodes.value FROM public.edge_nodes - WHERE (((edge_nodes.kind)::text = 'resource_type'::text) AND ((edge_nodes.value)::text = ANY ((ARRAY['"GenericPointer"'::character varying, '"ToolSlot"'::character varying, '"Plant"'::character varying])::text[]))) + WHERE (((edge_nodes.kind)::text = 'resource_type'::text) AND ((edge_nodes.value)::text = ANY (ARRAY[('"GenericPointer"'::character varying)::text, ('"ToolSlot"'::character varying)::text, ('"Plant"'::character varying)::text]))) ), resource_id AS ( SELECT edge_nodes.primary_node_id, edge_nodes.kind, @@ -1686,7 +1687,8 @@ CREATE TABLE public.users ( agreed_to_terms_at timestamp without time zone, confirmation_sent_at timestamp without time zone, unconfirmed_email character varying, - inactivity_warning_sent_at timestamp without time zone + inactivity_warning_sent_at timestamp without time zone, + inactivity_warning_count integer ); @@ -3445,6 +3447,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20191119204916'), ('20191203163621'), ('20191219212755'), -('20191220010646'); +('20191220010646'), +('20200116140201'); From f6b67052ca7bebd7675a41da32daf08e9e4d16ab Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 16 Jan 2020 15:08:07 -0600 Subject: [PATCH 04/10] Tests for PointGroup#create (with criteria) --- app/mutations/point_groups/create.rb | 2 +- .../api/point_groups/create_spec.rb | 50 +++++++++++++++---- 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/app/mutations/point_groups/create.rb b/app/mutations/point_groups/create.rb index 613615b8d..f40484a60 100644 --- a/app/mutations/point_groups/create.rb +++ b/app/mutations/point_groups/create.rb @@ -12,7 +12,7 @@ module PointGroups string :sort_type hash :criteria do hash(:day) do - integer :op, in: [">", "<"] + string :op, in: [">", "<"] integer :days end hash(:string_eq) { array :*, class: String } diff --git a/spec/controllers/api/point_groups/create_spec.rb b/spec/controllers/api/point_groups/create_spec.rb index 6f44f1c9f..b6baad1fa 100644 --- a/spec/controllers/api/point_groups/create_spec.rb +++ b/spec/controllers/api/point_groups/create_spec.rb @@ -50,21 +50,49 @@ describe Api::PointGroupsController do it "adds criteria to a group" do sign_in user - comparison = { - kind: "comparison", - args: { - op: "is", - operands: { kind: "pair", args: { label: "meta.type", value: "weed" } }, + payload = { + name: "Criteria group", + point_ids: point_ids, + criteria: { + string_eq: { + openfarm_slug: ["carrot"] + }, + number_eq: { + z: [24, 25, 26] + }, + number_lt: { + x: 4, + y: 4 + }, + number_gt: { + x: 1, + y: 1 + }, + day: { + op: "<", + days: 0 + }, }, } - payload = - { name: "Criteria group", point_ids: point_ids, body: [comparison] } - post :create, body: payload.to_json, format: :json expect(response.status).to eq(200) - expect(json[:body]).to be_kind_of(Array) - binding.pry - raise "TODO: Make sure auto sync is called similarly to FarmEvent" + hash = json[:criteria] + expect(hash).to be_kind_of(Hash) + expectations = { + [:string_eq, :openfarm_slug] => ["carrot"], + [:number_eq, :z] => [24, 25, 26], + [:number_lt, :x] => 4, + [:number_lt, :y] => 4, + [:number_gt, :x] => 1, + [:number_gt, :y] => 1, + [:day, :op] => "<", + [:day, :days] => 0, + } + expectations.map do |k, v| + q = hash.dig(*k) + binding.pry + expect(q).to eq(v) + end end end From 393f6c3eedd7edc341cbc6f6e3524d33475bdaa1 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 16 Jan 2020 15:24:04 -0600 Subject: [PATCH 05/10] Test cleanup. NEXT: Fix PointGroup#update --- app/models/point_group.rb | 9 ++--- app/mutations/point_groups/create.rb | 5 ++- .../api/point_groups/create_spec.rb | 33 ++++++++----------- 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/app/models/point_group.rb b/app/models/point_group.rb index 87a6614ca..8a26d29ee 100644 --- a/app/models/point_group.rb +++ b/app/models/point_group.rb @@ -10,14 +10,15 @@ class PointGroup < ApplicationRecord number_lt: {}, number_gt: {}, } + belongs_to :device has_many :point_group_items, dependent: :destroy validates_inclusion_of :sort_type, in: SORT_TYPES, message: BAD_SORT serialize :criteria - before_validation :set_defaults + # before_validation :set_defaults - def set_defaults - self.criteria ||= DEFAULT_CRITERIA.deep_dup - end + # def set_defaults + # self.criteria ||= + # end end diff --git a/app/mutations/point_groups/create.rb b/app/mutations/point_groups/create.rb index f40484a60..8a999a807 100644 --- a/app/mutations/point_groups/create.rb +++ b/app/mutations/point_groups/create.rb @@ -30,7 +30,10 @@ module PointGroups def execute PointGroup.transaction do PointGroupItem.transaction do - pg = PointGroup.new(name: name, device: device) + pg = PointGroup.new(name: name, + device: device, + criteria: PointGroup::DEFAULT_CRITERIA.merge(criteria || {}) + ) add_point_group_items(pg) pg.save! pg diff --git a/spec/controllers/api/point_groups/create_spec.rb b/spec/controllers/api/point_groups/create_spec.rb index b6baad1fa..2a534624f 100644 --- a/spec/controllers/api/point_groups/create_spec.rb +++ b/spec/controllers/api/point_groups/create_spec.rb @@ -55,22 +55,22 @@ describe Api::PointGroupsController do point_ids: point_ids, criteria: { string_eq: { - openfarm_slug: ["carrot"] + openfarm_slug: ["carrot"], }, number_eq: { - z: [24, 25, 26] + z: [24, 25, 26], }, number_lt: { x: 4, - y: 4 + y: 4, }, number_gt: { x: 1, - y: 1 + y: 1, }, day: { op: "<", - days: 0 + days: 0, }, }, } @@ -79,20 +79,13 @@ describe Api::PointGroupsController do expect(response.status).to eq(200) hash = json[:criteria] expect(hash).to be_kind_of(Hash) - expectations = { - [:string_eq, :openfarm_slug] => ["carrot"], - [:number_eq, :z] => [24, 25, 26], - [:number_lt, :x] => 4, - [:number_lt, :y] => 4, - [:number_gt, :x] => 1, - [:number_gt, :y] => 1, - [:day, :op] => "<", - [:day, :days] => 0, - } - expectations.map do |k, v| - q = hash.dig(*k) - binding.pry - expect(q).to eq(v) - end + expect(hash.dig(:number_eq, :z)).to eq([24, 25, 26]) + expect(hash.dig(:number_lt, :x)).to eq(4) + expect(hash.dig(:number_lt, :y)).to eq(4) + expect(hash.dig(:number_gt, :x)).to eq(1) + expect(hash.dig(:number_gt, :y)).to eq(1) + expect(hash.dig(:day, :op)).to eq("<") + expect(hash.dig(:day, :days)).to eq(0) + expect(hash.dig(:string_eq, :openfarm_slug)).to eq(["carrot"]) end end From ff596c6f1f51459710422a00692efa926414cc26 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 16 Jan 2020 15:51:36 -0600 Subject: [PATCH 06/10] DRY up the `criteria` declaration in ::Mutations --- app/mutations/point_groups/create.rb | 13 +++---------- app/mutations/point_groups/helpers.rb | 20 ++++++++++++++++++++ app/mutations/point_groups/update.rb | 6 +++++- 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/app/mutations/point_groups/create.rb b/app/mutations/point_groups/create.rb index 8a999a807..b516a5404 100644 --- a/app/mutations/point_groups/create.rb +++ b/app/mutations/point_groups/create.rb @@ -8,20 +8,13 @@ module PointGroups array :point_ids, class: Integer end + criteria + optional do string :sort_type - hash :criteria do - hash(:day) do - string :op, in: [">", "<"] - integer :days - end - hash(:string_eq) { array :*, class: String } - hash(:number_eq) { array :*, class: Integer } - hash(:number_lt) { integer :* } - hash(:number_gt) { integer :* } - end end + def validate validate_point_ids validate_sort_type diff --git a/app/mutations/point_groups/helpers.rb b/app/mutations/point_groups/helpers.rb index 379d43ad6..0f5a3d7f5 100644 --- a/app/mutations/point_groups/helpers.rb +++ b/app/mutations/point_groups/helpers.rb @@ -1,6 +1,26 @@ module PointGroups + module ClassLevelHelpers + def criteria + self.optional do + hash :criteria do + hash(:day) do + string :op, in: [">", "<"] + integer :days + end + hash(:string_eq) { array :*, class: String } + hash(:number_eq) { array :*, class: Integer } + hash(:number_lt) { integer :* } + hash(:number_gt) { integer :* } + end + end + end + end + module Helpers BAD_POINT_IDS = "The group contains invalid points." + def self.included(base) + base.extend PointGroups::ClassLevelHelpers + end def points @points ||= Point.where(id: point_ids, device: device) diff --git a/app/mutations/point_groups/update.rb b/app/mutations/point_groups/update.rb index fc676a72b..516d3590e 100644 --- a/app/mutations/point_groups/update.rb +++ b/app/mutations/point_groups/update.rb @@ -8,6 +8,8 @@ module PointGroups model :point_group, class: PointGroup end + criteria + optional do string :name array :point_ids, class: Integer @@ -34,7 +36,9 @@ module PointGroups private def update_attributes - @update_attributes ||= inputs.except(*BLACKLISTED_FIELDS) + @update_attributes ||= inputs + .except(*BLACKLISTED_FIELDS) + .merge(criteria: criteria || point_group.criteria) end def maybe_reconcile_points From b8eb47b0cc211ee69ce99647d4ac0a9c7c0d9ae2 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 16 Jan 2020 16:13:01 -0600 Subject: [PATCH 07/10] :heavy_check_mark: --- .../api/point_groups/update_spec.rb | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/spec/controllers/api/point_groups/update_spec.rb b/spec/controllers/api/point_groups/update_spec.rb index 0471df0f2..62209a039 100644 --- a/spec/controllers/api/point_groups/update_spec.rb +++ b/spec/controllers/api/point_groups/update_spec.rb @@ -46,6 +46,42 @@ describe Api::PointGroupsController do end it "updates criteria of a group" do - raise "TODO: Make sure auto sync is called similarly to FarmEvent" + sign_in user + initial_params = { + device: device, + name: "XYZ", + point_ids: [], + criteria: { + string_eq: { openfarm_slug: ["carrot"] }, + number_eq: { z: [24, 25, 26] }, + number_lt: { x: 4, y: 4 }, + number_gt: { x: 1, y: 1 }, + day: { op: "<", days: 0 }, + }, + } + pg = PointGroups::Create.run!(initial_params) + payload = { + point_ids: [], + criteria: { + string_eq: { name: ["carrot"] }, + number_eq: { x: [42, 52, 62] }, + number_lt: { y: 8 }, + number_gt: { z: 2 }, + day: { op: ">", days: 10 }, + }, + } + put :update, body: payload.to_json, format: :json, params: { id: pg.id } + expect(response.status).to eq(200) + expect(json.dig(:criteria, :day, :days)).to eq(10) + expect(json.dig(:criteria, :day, :op)).to eq(">") + expect(json.dig(:criteria, :number_eq, :x)).to eq([42, 52, 62]) + expect(json.dig(:criteria, :number_eq, :z)).to eq(nil) + expect(json.dig(:criteria, :number_gt, :x)).to eq(nil) + expect(json.dig(:criteria, :number_gt, :y)).to eq(nil) + expect(json.dig(:criteria, :number_gt, :z)).to eq(2) + expect(json.dig(:criteria, :number_lt, :x)).to eq(nil) + expect(json.dig(:criteria, :number_lt, :y)).to eq(8) + expect(json.dig(:criteria, :string_eq, :name)).to eq(["carrot"]) + expect(json.dig(:criteria, :string_eq, :openfarm_slug)).to eq(nil) end end From d829c4e3ddca394c8629de5fbad3f73489891359 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 16 Jan 2020 16:15:42 -0600 Subject: [PATCH 08/10] Commented code removal --- app/models/point_group.rb | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/models/point_group.rb b/app/models/point_group.rb index 8a26d29ee..eef492243 100644 --- a/app/models/point_group.rb +++ b/app/models/point_group.rb @@ -16,9 +16,4 @@ class PointGroup < ApplicationRecord validates_inclusion_of :sort_type, in: SORT_TYPES, message: BAD_SORT serialize :criteria - # before_validation :set_defaults - - # def set_defaults - # self.criteria ||= - # end end From 77ee927ce88b154a5ab9b36d93fe6c475ad8d5c7 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 16 Jan 2020 16:44:02 -0600 Subject: [PATCH 09/10] FBJS Update --- frontend/__test_support__/fake_state/resources.ts | 9 ++++++++- .../point_groups/__tests__/actions_test.ts | 13 ++++++++++--- .../__tests__/group_detail_active_test.tsx | 7 +++++++ .../__tests__/point_group_item_test.tsx | 13 ++++++++++++- frontend/farm_designer/point_groups/actions.ts | 14 ++++++++++++-- package.json | 2 +- 6 files changed, 50 insertions(+), 8 deletions(-) diff --git a/frontend/__test_support__/fake_state/resources.ts b/frontend/__test_support__/fake_state/resources.ts index 729a5ecb0..1c254d97f 100644 --- a/frontend/__test_support__/fake_state/resources.ts +++ b/frontend/__test_support__/fake_state/resources.ts @@ -475,6 +475,13 @@ export function fakePointGroup(): TaggedPointGroup { return fakeResource("PointGroup", { name: "Fake", sort_type: "xy_ascending", - point_ids: [] + point_ids: [], + criteria: { + day: { op: ">", days: 0 }, + number_eq: {}, + number_gt: {}, + number_lt: {}, + string_eq: {} + } }); } diff --git a/frontend/farm_designer/point_groups/__tests__/actions_test.ts b/frontend/farm_designer/point_groups/__tests__/actions_test.ts index 91414f3c5..daec97c41 100644 --- a/frontend/farm_designer/point_groups/__tests__/actions_test.ts +++ b/frontend/farm_designer/point_groups/__tests__/actions_test.ts @@ -34,11 +34,18 @@ describe("group action creators and thunks", () => { const thunk = createGroup({ points, name: "Name123" }); await thunk(dispatch, () => fakeS as Everything); - expect(init).toHaveBeenCalledWith("PointGroup", { + expect(init).toHaveBeenCalledWith("PointGroup", expect.objectContaining({ name: "Name123", point_ids: [1, 2], - sort_type: "xy_ascending" - }); + sort_type: "xy_ascending", + criteria: { + day: { days: 0, op: ">" }, + number_eq: {}, + number_gt: {}, + number_lt: {}, + string_eq: {}, + }, + })); expect(save).toHaveBeenCalledWith("???"); expect(history.push) .toHaveBeenCalledWith("/app/designer/groups/323232332"); diff --git a/frontend/farm_designer/point_groups/__tests__/group_detail_active_test.tsx b/frontend/farm_designer/point_groups/__tests__/group_detail_active_test.tsx index 132cfbfeb..63cbbf3a3 100644 --- a/frontend/farm_designer/point_groups/__tests__/group_detail_active_test.tsx +++ b/frontend/farm_designer/point_groups/__tests__/group_detail_active_test.tsx @@ -69,6 +69,13 @@ describe("", () => { name: "XYZ", point_ids: [1], sort_type: "xy_ascending", + criteria: { + day: { days: 0, op: ">" }, + number_eq: {}, + number_gt: {}, + number_lt: {}, + string_eq: {}, + } }, kind: "PointGroup", specialStatus: "DIRTY", diff --git a/frontend/farm_designer/point_groups/__tests__/point_group_item_test.tsx b/frontend/farm_designer/point_groups/__tests__/point_group_item_test.tsx index 05332c0a5..5eda31469 100644 --- a/frontend/farm_designer/point_groups/__tests__/point_group_item_test.tsx +++ b/frontend/farm_designer/point_groups/__tests__/point_group_item_test.tsx @@ -69,7 +69,18 @@ describe("", () => { i.click(); expect(i.props.dispatch).toHaveBeenCalledTimes(2); expect(overwrite).toHaveBeenCalledWith({ - body: { name: "Fake", point_ids: [], sort_type: "xy_ascending" }, + body: { + name: "Fake", + point_ids: [], + sort_type: "xy_ascending", + criteria: { + day: { days: 0, op: ">" }, + number_eq: {}, + number_gt: {}, + number_lt: {}, + string_eq: {}, + } + }, kind: "PointGroup", specialStatus: "", uuid: expect.any(String), diff --git a/frontend/farm_designer/point_groups/actions.ts b/frontend/farm_designer/point_groups/actions.ts index 6abea2f4a..d7e6c125a 100644 --- a/frontend/farm_designer/point_groups/actions.ts +++ b/frontend/farm_designer/point_groups/actions.ts @@ -22,8 +22,18 @@ export const createGroup = ({ points, name }: CreateGroupProps) => { .map(x => references[x]) .map(x => x ? x.body.id : undefined); const point_ids = betterCompact(possiblyNil); - const group: PointGroup = - ({ name: name || UNTITLED(), point_ids, sort_type: "xy_ascending" }); + const group: PointGroup = { + name: name || UNTITLED(), + point_ids, + sort_type: "xy_ascending", + criteria: { + day: { op: ">", days: 0 }, + number_eq: {}, + number_gt: {}, + number_lt: {}, + string_eq: {} + } + }; const action = init("PointGroup", group); dispatch(action); return dispatch(save(action.payload.uuid)).then(() => { diff --git a/package.json b/package.json index 896d59024..4127b1053 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "coveralls": "3.0.9", "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.2", - "farmbot": "9.0.1-rc0", + "farmbot": "9.0.1-rc1", "i18next": "19.0.3", "install": "0.13.0", "lodash": "4.17.15", From 6fbe9ec1df29954d649e7b21f3c9ef834563d211 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 16 Jan 2020 16:54:17 -0600 Subject: [PATCH 10/10] Fix broke test --- .../point_groups/__tests__/point_group_item_test.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/frontend/farm_designer/point_groups/__tests__/point_group_item_test.tsx b/frontend/farm_designer/point_groups/__tests__/point_group_item_test.tsx index 5eda31469..d50464923 100644 --- a/frontend/farm_designer/point_groups/__tests__/point_group_item_test.tsx +++ b/frontend/farm_designer/point_groups/__tests__/point_group_item_test.tsx @@ -88,6 +88,13 @@ describe("", () => { name: "Fake", point_ids: [], sort_type: "xy_ascending", + criteria: { + day: { days: 0, op: ">" }, + number_eq: {}, + number_gt: {}, + number_lt: {}, + string_eq: {}, + } }); expect(setHoveredPlant).toHaveBeenCalledWith(undefined); });