From 8e90488117d9c9b5ce912918e69b09d1d92ca868 Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 13 Jul 2018 16:21:28 +1000 Subject: [PATCH 1/2] Use progress formatter on Travis to avoid timeout We had a few Travis builds lately that timed out, because no output was received. Even though our standard formatter Fuubar should detect Travis and print the right output, nothing was visible in our builds. https://github.com/travis-ci/travis-ci/issues/1337 In this patch, I tell Travis to use Rspec's default formatter to print dots for every passed test. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7039fe0c1a..952e999999 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,7 +42,7 @@ before_script: script: - 'if [ "$KARMA" = "true" ]; then bundle exec rake karma:run; else echo "Skipping karma run"; fi' - - "bundle exec rake 'knapsack:rspec[--tag ~performance]'" + - "bundle exec rake 'knapsack:rspec[--format progress --tag ~performance]'" after_success: - > From 622517501c63445cc45f33677d0eb3667c26821b Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Fri, 13 Jul 2018 19:06:09 +1000 Subject: [PATCH 2/2] Make spec robust on slow computers This spec just failed in an unrelated pull request. https://travis-ci.org/openfoodfoundation/openfoodnetwork/jobs/403435522 This change should fix it even on very slow computers. --- spec/models/proxy_order_spec.rb | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/spec/models/proxy_order_spec.rb b/spec/models/proxy_order_spec.rb index 67d4af87f2..b84089c015 100644 --- a/spec/models/proxy_order_spec.rb +++ b/spec/models/proxy_order_spec.rb @@ -5,6 +5,11 @@ describe ProxyOrder, type: :model do let(:order_cycle) { create(:simple_order_cycle) } let(:subscription) { create(:subscription) } + around do |example| + # We are testing if database columns have been set to "now". + Timecop.freeze(Time.zone.now) { example.run } + end + context "when the order cycle is not yet closed" do let(:proxy_order) { create(:proxy_order, subscription: subscription, order: order, order_cycle: order_cycle) } before { order_cycle.update_attributes(orders_open_at: 1.day.ago, orders_close_at: 3.days.from_now) } @@ -14,7 +19,7 @@ describe ProxyOrder, type: :model do it "returns true and sets canceled_at to the current time" do expect(proxy_order.cancel).to be true - expect(proxy_order.reload.canceled_at).to be_within(5.seconds).of Time.zone.now + expect_cancelled_now proxy_order expect(proxy_order.state).to eq 'canceled' end end @@ -25,7 +30,7 @@ describe ProxyOrder, type: :model do it "returns true and sets canceled_at to the current time, and cancels the order" do expect(Spree::OrderMailer).to receive(:cancel_email) { double(:email, deliver: true) } expect(proxy_order.cancel).to be true - expect(proxy_order.reload.canceled_at).to be_within(5.seconds).of Time.zone.now + expect_cancelled_now proxy_order expect(order.reload.state).to eq 'canceled' expect(proxy_order.state).to eq 'canceled' end @@ -36,7 +41,7 @@ describe ProxyOrder, type: :model do it "returns true and sets canceled_at to the current time" do expect(proxy_order.cancel).to be true - expect(proxy_order.reload.canceled_at).to be_within(5.seconds).of Time.zone.now + expect_cancelled_now proxy_order expect(order.reload.state).to eq 'cart' expect(proxy_order.state).to eq 'canceled' end @@ -124,7 +129,7 @@ describe ProxyOrder, type: :model do it "returns false and does nothing" do expect(proxy_order.resume).to eq false - expect(proxy_order.reload.canceled_at).to be_within(5.seconds).of Time.zone.now + expect_cancelled_now proxy_order expect(proxy_order.state).to eq 'canceled' end end @@ -138,7 +143,7 @@ describe ProxyOrder, type: :model do it "returns false and does nothing" do expect(proxy_order.resume).to eq false - expect(proxy_order.reload.canceled_at).to be_within(5.seconds).of Time.zone.now + expect_cancelled_now proxy_order expect(order.reload.state).to eq 'canceled' expect(proxy_order.state).to eq 'canceled' end @@ -149,7 +154,7 @@ describe ProxyOrder, type: :model do it "returns false and does nothing" do expect(proxy_order.resume).to eq false - expect(proxy_order.reload.canceled_at).to be_within(5.seconds).of Time.zone.now + expect_cancelled_now proxy_order expect(order.reload.state).to eq 'complete' expect(proxy_order.state).to eq 'canceled' end @@ -184,4 +189,13 @@ describe ProxyOrder, type: :model do end end end + + private + + def expect_cancelled_now(subject) + # We still need to use be_within, because the Database timestamp is not as + # accurate as the Rails timestamp. If we use `eq`, we have differing nano + # seconds. + expect(subject.reload.canceled_at).to be_within(1.second).of Time.zone.now + end end