mardi 12 avril 2016

Circle tests failing and passing locally

require 'spec_helper'

describe UpcomingOrdersFactory do
  let(:user) { create(:user, :active) }
  let!(:subscription) { create(:subscription, :active, user: user,
    window: create(:window), plan_option: plan_option,
    alternate_window: alternate_window) }

  before { user.reload }

  describe 'find_or_create_for_delivery' do
    subject { subscription
      .find_or_create_upcoming_order_for_delivery(delivery) }

    it { is_expected.to be_an(Order) }
  end

  describe 'find_or_create' do

    it 'creates order in primary window' do
      expect { user.find_or_create_upcoming_orders }.to change {
        user.orders.primary_window.count }.by(1)
    end

    context "order after subscription window change while still before cutoff" do
      let(:user) { create(:user, :active) }
      let!(:subscription) { create(:subscription, :with_orders, user: user) }

      let(:first_order) do
        user.orders.min do |o1, o2|
          o1.delivery_window.arrival_date <=> o2.delivery_window.arrival_date
        end
      end
      let(:second_order) do
        user.orders.max do |o1, o2|
          o1.delivery_window.arrival_date <=> o2.delivery_window.arrival_date
        end
      end

      let(:first_order_delivery_window) { create(:delivery_window,
                                                  delivery: first_order.delivery,
                                                  arrival_date: first_order.delivery.date + (first_order.window.day_of_week - 1).days) }

      subject { user.find_or_create_upcoming_orders }

      before do
        first_order.delivery_window.arrival_date = Utils.now_in_zone
        first_order.delivery_window.save

        first_order.delivery_window = first_order_delivery_window
        first_order.save
      end

      it { is_expected.to have_exactly(2).items }
      it { is_expected.to include(first_order, second_order) }
    end

    context "already arrived order should not show up as upcoming" do
      let(:user) { create(:user, :active) }
      let!(:subscription) { create(:subscription, :with_orders, user: user) }

      let(:first_order) do
        user.orders.min do |o1, o2|
          o1.delivery_window.arrival_date <=> o2.delivery_window.arrival_date
        end
      end
      let(:second_order) do
        user.orders.max do |o1, o2|
          o1.delivery_window.arrival_date <=> o2.delivery_window.arrival_date
        end
      end

      subject { user.find_or_create_upcoming_orders }

...

These tests all pass locally. They fail on circleCI with parallelism. Any ideas on where might be failing?

My suspicious are the several let(:user) and let!(:subscription) Anyone see where might be the issue?

Question, since according to the docs:

You can use let! to force the method's invocation before each example.

Is it possible that a user is getting multiple subscriptions which have multiple orders? Is it possible that that's what's happening on Circle?

Aucun commentaire:

Enregistrer un commentaire