Last active
February 7, 2019 17:49
-
-
Save jackyvo/958a6c807208b30d5d2dbc21257a3354 to your computer and use it in GitHub Desktop.
Rspec + Ruby code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'rails_helper' | |
require 'unicode_utils/upcase' | |
describe 'Meal Detail', type: :feature, js: true do | |
let(:customer) { create(:customer) } | |
let(:cart) { create(:shopping_cart) } | |
before(:each) do | |
provider = create(:provider, | |
latitude: 9.935245, longitude: -84.108547, provider_type: 0) | |
create(:timetable, wday: Time.current.wday, | |
open_hour: 6.minutes.ago.strftime('%H:%M'), | |
close_hour: 6.minutes.from_now.strftime('%H:%M'), | |
provider: provider | |
) | |
@meal = create(:meal, provider: provider) | |
@user = create(:user, profile: customer) | |
customer.update shopping_cart: cart | |
address = create(:coordinates_address, latitude: 9.935245, longitude: -84.108547) | |
customer.delivery_addresses << address | |
create_cookie(:default_location_id_v1, address.id) | |
login_as @user | |
visit customers.meal_path(@meal) | |
end | |
it 'shows the order type selection' do | |
expect(page).to have_selector('#order-types') | |
end | |
it 'shows shopping cart' do | |
expect(page).to have_content('Mi Cuenta') | |
end | |
it 'shows add to cart buttons' do | |
expect(page).to have_content('Agregar') | |
expect(page).to have_content('Especificar') | |
end | |
it 'add to shopping cart' do | |
find('.add-btn', match: :first).click | |
expect(page).to have_content("Total #{@meal.decorate.base_price}") | |
end | |
it 'go to beverage page' do | |
click_on 'Continuar' | |
expect(current_path).to eq(customers.beverage_meals_path) | |
end | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'rails_helper' | |
RSpec.feature 'Orders', type: :feature do | |
before :each do | |
@user = create(:customer_user) | |
@customer = @user.profile | |
login_as @user | |
Paperclip::Attachment.any_instance.stub(:save).and_return(true) | |
end | |
describe 'get order info' do | |
context 'without owner role' do | |
it 'redirects to home page' do | |
order = create(:delivery_order) | |
visit customers.order_path(order) | |
expect(current_path).to eq(root_path) | |
end | |
end | |
context 'with owner role' do | |
it 'shows order info' do | |
order = create(:delivery_order, customer: @customer) | |
visit customers.order_path(order) | |
expect(current_path).to eq(customers.order_path(order)) | |
expect(page).to have_content(@customer.full_name) | |
end | |
end | |
end | |
xscenario 'the customer can reuse an order to fill the shopping cart', js: true do | |
item_1 = create(:meal, name: "arroz" ) | |
item_2 = create(:meal, name: "huevos" ) | |
cart = ShoppingCart.create | |
cart.add(item_1, 1000, 2) | |
cart.add(item_2, 3000, 3) | |
Customers::OrderBuilder.new(@user, cart).create() | |
visit customers.orders_path | |
click_on "Volver a Ordenar" | |
expect(page).to have_selector("input[value='2']") | |
expect(page).to have_selector("input[value='3']") | |
within('#edit_shopping_cart_item_3') do | |
fill_in 'shopping_cart_item_quantity', with: 4 | |
click_on 'Cambiar Cantidad' | |
end | |
sleep(3) | |
expect(ShoppingCartItem.find(3).reload.quantity).to eq(4) | |
end | |
describe 'Current Order', js: true do | |
context 'with no active order' do | |
xit 'shows no items text' do | |
visit customers.current_orders_path | |
expect(page).to have_content('No tiene órdenes abiertas por el momento') | |
end | |
end | |
context 'with active order' do | |
before(:each){ | |
@order = create(:delivery_order, customer: @customer, distance_covered: 3.2) | |
@provider = create(:provider, name: "The Restaurant") | |
meal = create(:meal, provider: @provider) | |
@order.items.create(meal_id: meal.id) | |
Customers::InvoiceBuilder.new(@order).build! | |
visit customers.current_orders_path | |
} | |
context 'with delivery order' do | |
it 'shows order info box' do | |
expect(page).to have_content('Confirmación de Pedido') | |
end | |
it 'shows CO2 information' do | |
expect(page).to have_content("#{(@order.distance_covered * 100).round(0)} gramos") | |
end | |
it 'doesnt show co2 after refresh' do | |
visit customers.current_orders_path | |
expect(page).not_to have_content("#{(@order.distance_covered * 100).round(0)} gramos") | |
end | |
end | |
context 'with other order type' do | |
before(:each) do | |
@order = create(:order, customer: @customer) | |
meal = create(:meal, provider: @provider) | |
@order.items.create(meal_id: meal.id) | |
visit customers.current_orders_path | |
end | |
it 'show the info box' do | |
expect(page).to have_content('Confirmación de Pedido') | |
end | |
it 'doesnt show the CO2 info' do | |
expect(page).not_to have_content("gramos") | |
end | |
end | |
it 'shows current order panel' do | |
expect(page).to have_content("Anular Orden") | |
expect(page).to have_content("Total: #{@order.decorate.total}") | |
end | |
describe 'cancels the order' do | |
context 'with valid state' do | |
it 'changes order state to cancelled_by_user' do | |
click_on 'Continuar' | |
click_on 'Anular Orden' | |
balance = @order.customer.balance | |
expect(@order.reload.cancelled_by_user?).to be true | |
end | |
end | |
context 'with invalid state' do | |
it 'shows errors message' do | |
@order.update(aasm_state: 'cancelled_by_driver') | |
click_on 'Continuar' | |
click_on 'Anular Orden' | |
expect(page).to have_content('La orden ya ha sido aceptada y no puede ser cancelada en este momento.') | |
expect(current_path).to eq(customers.root_path) | |
expect(@order.reload.cancelled_by_user?).to be false | |
end | |
end | |
end | |
context 'when cancelled by provider' do | |
before(:each){ | |
@cause = create(:rejection_cause) | |
@mediator = ProviderOrderMediator.new(@order, @provider) | |
} | |
it 'updates order item to cancelled' do | |
@mediator.reject(@cause) | |
status = @order.items_for(@provider).map(&:cancelled) | |
expect(status).to match_array([true]) | |
end | |
end | |
context 'when cancelled by admin' do | |
before(:each){ | |
@service = Customers::OrderCancellation.new(@order) | |
@mediator = ProviderOrderMediator.new(@order, @provider) | |
@mediator.approve | |
} | |
it 'returns balance to customer' do | |
expect{ | |
@service.cancel_by_administrator | |
}.to change { @order.customer.balance }.by(@order.total) | |
end | |
it 'destroys invoice' do | |
expect{ | |
@service.cancel_by_administrator | |
}.to change(Invoice, :count).by(-1) | |
end | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment