From d37fa9fc5fcec4ee68bc53768a020a1346e05e11 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 24 Jan 2023 11:41:06 +1100 Subject: [PATCH 1/4] Simplify spec structure without defining modules Specs should test classes and modules independently and they should not be in the same module. It also avoids indentation and accidental namespace polution. --- .../api/admin/order_cycle_serializer_spec.rb | 40 +++++++++---------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/spec/serializers/api/admin/order_cycle_serializer_spec.rb b/spec/serializers/api/admin/order_cycle_serializer_spec.rb index 2418decbe8..2e0b3b1f79 100644 --- a/spec/serializers/api/admin/order_cycle_serializer_spec.rb +++ b/spec/serializers/api/admin/order_cycle_serializer_spec.rb @@ -2,31 +2,27 @@ require "spec_helper" -module Api - module Admin - describe OrderCycleSerializer do - let(:order_cycle) { create(:order_cycle) } - let(:serializer) { - Api::Admin::OrderCycleSerializer.new order_cycle, - current_user: order_cycle.coordinator.owner - } +describe Api::Admin::OrderCycleSerializer do + let(:order_cycle) { create(:order_cycle) } + let(:serializer) { + Api::Admin::OrderCycleSerializer.new order_cycle, + current_user: order_cycle.coordinator.owner + } - it "serializes an order cycle" do - expect(serializer.to_json).to include order_cycle.name - end + it "serializes an order cycle" do + expect(serializer.to_json).to include order_cycle.name + end - it "serializes the order cycle with exchanges" do - expect(serializer.exchanges.to_json).to include "\"#{order_cycle.variants.first.id}\":true" - end + it "serializes the order cycle with exchanges" do + expect(serializer.exchanges.to_json).to include "\"#{order_cycle.variants.first.id}\":true" + end - it "serializes the order cycle with editable_variants_for_incoming_exchanges" do - expect(serializer.editable_variants_for_incoming_exchanges.to_json).to include order_cycle.variants.first.id.to_s - expect(serializer.editable_variants_for_incoming_exchanges.to_json).to_not include order_cycle.distributors.first.id.to_s - end + it "serializes the order cycle with editable_variants_for_incoming_exchanges" do + expect(serializer.editable_variants_for_incoming_exchanges.to_json).to include order_cycle.variants.first.id.to_s + expect(serializer.editable_variants_for_incoming_exchanges.to_json).to_not include order_cycle.distributors.first.id.to_s + end - it "serializes the order cycle with editable_variants_for_outgoing_exchanges" do - expect(serializer.editable_variants_for_outgoing_exchanges.to_json).to include order_cycle.variants.first.id.to_s - end - end + it "serializes the order cycle with editable_variants_for_outgoing_exchanges" do + expect(serializer.editable_variants_for_outgoing_exchanges.to_json).to include order_cycle.variants.first.id.to_s end end From d18d0ef6b16ce78c43f31bb508a23a447c3ff012 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 24 Jan 2023 11:51:44 +1100 Subject: [PATCH 2/4] Parse JSON to test variant and distributor ids We looked at the whole JSON string before and sometimes a distributor id would match a variant id which made the test flaky. --- spec/serializers/api/admin/order_cycle_serializer_spec.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/spec/serializers/api/admin/order_cycle_serializer_spec.rb b/spec/serializers/api/admin/order_cycle_serializer_spec.rb index 2e0b3b1f79..f65cbc273b 100644 --- a/spec/serializers/api/admin/order_cycle_serializer_spec.rb +++ b/spec/serializers/api/admin/order_cycle_serializer_spec.rb @@ -18,11 +18,15 @@ describe Api::Admin::OrderCycleSerializer do end it "serializes the order cycle with editable_variants_for_incoming_exchanges" do - expect(serializer.editable_variants_for_incoming_exchanges.to_json).to include order_cycle.variants.first.id.to_s - expect(serializer.editable_variants_for_incoming_exchanges.to_json).to_not include order_cycle.distributors.first.id.to_s + expect(from_json(serializer.editable_variants_for_incoming_exchanges).values.sum).to include order_cycle.variants.first.id + expect(from_json(serializer.editable_variants_for_incoming_exchanges).keys).to_not include order_cycle.distributors.first.id.to_s end it "serializes the order cycle with editable_variants_for_outgoing_exchanges" do expect(serializer.editable_variants_for_outgoing_exchanges.to_json).to include order_cycle.variants.first.id.to_s end + + def from_json(serializer_result) + JSON.parse(serializer_result.to_json) + end end From 5b6a855dfee9c2ef7da0767f95a78ed4eeb3fd0a Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 24 Jan 2023 13:39:48 +1100 Subject: [PATCH 3/4] Clarify test result structure --- spec/serializers/api/admin/order_cycle_serializer_spec.rb | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spec/serializers/api/admin/order_cycle_serializer_spec.rb b/spec/serializers/api/admin/order_cycle_serializer_spec.rb index f65cbc273b..05a50647c8 100644 --- a/spec/serializers/api/admin/order_cycle_serializer_spec.rb +++ b/spec/serializers/api/admin/order_cycle_serializer_spec.rb @@ -18,8 +18,11 @@ describe Api::Admin::OrderCycleSerializer do end it "serializes the order cycle with editable_variants_for_incoming_exchanges" do - expect(from_json(serializer.editable_variants_for_incoming_exchanges).values.sum).to include order_cycle.variants.first.id - expect(from_json(serializer.editable_variants_for_incoming_exchanges).keys).to_not include order_cycle.distributors.first.id.to_s + distributor_ids = from_json(serializer.editable_variants_for_incoming_exchanges).keys + variant_ids = from_json(serializer.editable_variants_for_incoming_exchanges).values.sum + + expect(variant_ids).to include order_cycle.variants.first.id + expect(distributor_ids).to_not include order_cycle.distributors.first.id.to_s end it "serializes the order cycle with editable_variants_for_outgoing_exchanges" do From 79887c0b44a136e0257b8fea849e0ede0b462ed5 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Tue, 24 Jan 2023 14:17:46 +1100 Subject: [PATCH 4/4] Clarify array intend of array operation in spec --- spec/serializers/api/admin/order_cycle_serializer_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/serializers/api/admin/order_cycle_serializer_spec.rb b/spec/serializers/api/admin/order_cycle_serializer_spec.rb index 05a50647c8..80719d0097 100644 --- a/spec/serializers/api/admin/order_cycle_serializer_spec.rb +++ b/spec/serializers/api/admin/order_cycle_serializer_spec.rb @@ -19,7 +19,7 @@ describe Api::Admin::OrderCycleSerializer do it "serializes the order cycle with editable_variants_for_incoming_exchanges" do distributor_ids = from_json(serializer.editable_variants_for_incoming_exchanges).keys - variant_ids = from_json(serializer.editable_variants_for_incoming_exchanges).values.sum + variant_ids = from_json(serializer.editable_variants_for_incoming_exchanges).values.flatten expect(variant_ids).to include order_cycle.variants.first.id expect(distributor_ids).to_not include order_cycle.distributors.first.id.to_s