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