Files
openfoodnetwork/spec/system/admin/order_cycles/edit_spec.rb
Maikel Linke f74492190d Select time like the user does
It makes it easier to understand. It didn't improve stability.
2024-12-20 11:15:49 +11:00

166 lines
6.4 KiB
Ruby

# frozen_string_literal: true
require 'system_helper'
RSpec.describe '
As an administrator
I want to edit a specific order cycle
' do
include AdminHelper
include AuthenticationHelper
include WebHelper
let(:order_cycle_attrs) {
{ orders_open_at: "2024-03-01 08:00", orders_close_at: "2024-03-20 20:00", }
}
describe 'simple order cycle' do
let(:coordinator) { create(:distributor_enterprise, sells: 'own') }
let(:order_cycle) {
create(:simple_order_cycle, coordinator:, **order_cycle_attrs, suppliers: [coordinator],
distributors: [coordinator])
}
context 'with attached order(s)' do
let!(:order) { create(:order, order_cycle: ) }
it "shows warning modal when datetime field values change" do
login_as_admin
visit edit_admin_order_cycle_path(order_cycle)
# change non-date range field
fill_in 'order_cycle_name', with: "Order cycle name updated"
# Set Ready for value to enable save button
fill_in 'order_cycle_outgoing_exchange_0_pickup_time', with: 'pickup time'
expect(page).to have_content('You have unsaved changes')
click_button 'Save'
expect(page).not_to have_content "Orders are linked to this order cycle"
expect(page).to have_field 'order_cycle_name', with: "Order cycle name updated"
expect(page).to have_content('Your order cycle has been updated.')
select_datetime_from "#order_cycle_orders_close_at", "2024-03-30 00:00"
expect(page).to have_content('You have unsaved changes')
# click save to open warning modal
click_button('Save')
expect(page).to have_content('You have unsaved changes')
expect(page).to have_content "Orders are linked to this order cycle."
# confirm to close modal and update order cycle changed fields
click_button('Proceed anyway')
expect(page).not_to have_content "Orders are linked to this cycle"
expect(page).to have_field 'order_cycle_orders_close_at', with: '2024-03-30 00:00'
expect(page).to have_content('Your order cycle has been updated.')
end
it "it redirects user to oc list when modal cancel is clicked" do
login_as_admin
visit edit_admin_order_cycle_path(order_cycle)
select_datetime_from "#order_cycle_orders_open_at", "2024-03-30 00:00"
# click save to open warning modal
click_button('Save')
expect(page).to have_content('You have unsaved changes')
expect(page).to have_content "Orders are linked to this order cycle."
# Now cancel modal
within('.modal-actions') do
click_link('Cancel')
end
expect(page).not_to have_content('You have unsaved changes')
expect(page).to have_current_path admin_order_cycles_path
end
end
context "with no attached order" do
it "does not show warning modal" do
login_as_admin
visit edit_admin_order_cycle_path(order_cycle)
# change non-date range field value
fill_in "order_cycle_name", with: "OC1 name updated"
expect(page).to have_content "You have unsaved changes"
# click save
click_button "Save"
expect(page).not_to have_content "You have unsaved changes"
expect(page).to have_content "Your order cycle has been updated."
expect(page).to have_field "order_cycle_name", with: "OC1 name updated"
select_datetime_from "#order_cycle_orders_close_at", "2024-03-30 01:20"
expect(page).to have_content "You have unsaved changes"
click_button "Save"
expect(page).not_to have_content "You have unsaved changes"
expect(page).to have_content "Your order cycle has been updated."
expect(page).to have_field "order_cycle_orders_close_at", with: "2024-03-30 01:20"
end
end
end
describe 'non simple order cycle' do
let(:coordinator) { create(:supplier_enterprise, sells: 'any') }
let(:order_cycle) { create(:simple_order_cycle, coordinator:, **order_cycle_attrs) }
context 'with attached orders' do
let!(:order) { create(:order, order_cycle: ) }
it "shows warning modal when datetime field values change" do
login_as_admin
visit edit_admin_order_cycle_path(order_cycle)
# change non-date range field
fill_in 'order_cycle_name', with: "Order cycle name updated"
expect(page).to have_content('You have unsaved changes')
click_button 'Save'
expect(page).not_to have_content "Orders are linked to this order cycle"
expect(page).to have_content('Your order cycle has been updated.')
expect(page).to have_field 'order_cycle_name', with: "Order cycle name updated"
select_datetime_from "#order_cycle_orders_close_at", "2024-03-30 00:00"
expect(page).to have_content('You have unsaved changes')
# click save to open warning modal
click_button('Save')
expect(page).to have_content('You have unsaved changes')
expect(page).to have_content "Orders are linked to this order cycle."
# confirm to close modal and update order cycle changed fields
click_button('Proceed anyway')
expect(page).not_to have_content "Orders are linked to this cycle"
expect(page).to have_field 'order_cycle_orders_close_at', with: '2024-03-30 00:00'
expect(page).to have_content('Your order cycle has been updated.')
end
end
context 'with no attached orders' do
it "does not show warning modal" do
login_as_admin
visit edit_admin_order_cycle_path(order_cycle)
# change non-date range field value
fill_in 'order_cycle_name', with: "OC1 name updated"
expect(page).to have_content('You have unsaved changes')
sleep(2)
# click save
click_button('Save')
expect(page).to have_content('Your order cycle has been updated.')
expect(page.find('#order_cycle_name').value).to eq 'OC1 name updated'
select_datetime_from "#order_cycle_orders_close_at", "2024-03-30 00:00"
expect(page).to have_content('You have unsaved changes')
sleep(2)
click_button('Save')
expect(page).to have_content('Your order cycle has been updated.')
expect(page).not_to have_content "Orders are linked to this cycle"
expect(page).to have_field 'order_cycle_orders_close_at', with: '2024-03-30 00:00'
end
end
end
end