mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-28 21:07:16 +00:00
220 lines
7.5 KiB
Ruby
220 lines
7.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Spree::Admin::OrdersController do
|
|
describe "#invoice" do
|
|
let!(:user) { create(:user) }
|
|
let!(:enterprise_user) { create(:user) }
|
|
let!(:order) {
|
|
create(:order_with_distributor, bill_address: create(:address),
|
|
ship_address: create(:address))
|
|
}
|
|
let!(:distributor) { order.distributor }
|
|
let(:params) { { id: order.number } }
|
|
|
|
context "as a normal user" do
|
|
before { allow(controller).to receive(:spree_current_user) { user } }
|
|
|
|
it "should prevent me from sending order invoices" do
|
|
spree_get :invoice, params
|
|
expect(response).to redirect_to unauthorized_path
|
|
end
|
|
end
|
|
|
|
context "as an enterprise user" do
|
|
context "which is not a manager of the distributor for an order" do
|
|
before { allow(controller).to receive(:spree_current_user) { user } }
|
|
|
|
it "should prevent me from sending order invoices" do
|
|
spree_get :invoice, params
|
|
expect(response).to redirect_to unauthorized_path
|
|
end
|
|
end
|
|
|
|
context "which is a manager of the distributor for an order" do
|
|
before { allow(controller).to receive(:spree_current_user) { distributor.owner } }
|
|
|
|
context "when the distributor's ABN has not been set" do
|
|
before { distributor.update_attribute(:abn, "") }
|
|
it "should allow me to send order invoices" do
|
|
expect do
|
|
spree_get :invoice, params
|
|
end.not_to change{ Spree::OrderMailer.deliveries.count }
|
|
expect(response).to redirect_to spree.edit_admin_order_path(order)
|
|
expect(flash[:error])
|
|
.to eq "#{distributor.name} must have a valid ABN before invoices can be used."
|
|
end
|
|
end
|
|
|
|
context "when the distributor's ABN has been set" do
|
|
let(:mail_mock) { double(:mailer_mock, deliver_later: true) }
|
|
|
|
before do
|
|
allow(Spree::OrderMailer).to receive(:invoice_email) { mail_mock }
|
|
distributor.update_attribute(:abn, "123")
|
|
end
|
|
|
|
it "should allow me to send order invoices" do
|
|
spree_get :invoice, params
|
|
|
|
expect(response).to redirect_to spree.edit_admin_order_path(order)
|
|
expect(Spree::OrderMailer).to have_received(:invoice_email)
|
|
expect(mail_mock).to have_received(:deliver_later)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#print" do
|
|
let!(:user) { create(:user) }
|
|
let!(:enterprise_user) { create(:user) }
|
|
let!(:order) {
|
|
create(:order_with_distributor, bill_address: create(:address),
|
|
ship_address: create(:address))
|
|
}
|
|
let!(:distributor) { order.distributor }
|
|
let(:params) { { id: order.number } }
|
|
|
|
context "as a normal user" do
|
|
before { allow(controller).to receive(:spree_current_user) { user } }
|
|
|
|
it "should prevent me from sending order invoices" do
|
|
spree_get :print, params
|
|
expect(response).to redirect_to unauthorized_path
|
|
end
|
|
end
|
|
|
|
context "as an enterprise user" do
|
|
context "which is not a manager of the distributor for an order" do
|
|
before { allow(controller).to receive(:spree_current_user) { user } }
|
|
it "should prevent me from sending order invoices" do
|
|
spree_get :print, params
|
|
expect(response).to redirect_to unauthorized_path
|
|
end
|
|
end
|
|
|
|
context "which is a manager of the distributor for an order" do
|
|
before { allow(controller).to receive(:spree_current_user) { distributor.owner } }
|
|
it "should allow me to send order invoices" do
|
|
spree_get :print, params
|
|
expect(response).to render_template :invoice
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
RSpec.describe Spree::Admin::InvoicesController do
|
|
describe "#index" do
|
|
let(:user) { create(:user) }
|
|
let(:enterprise_user) { create(:user, enterprises: [create(:enterprise)]) }
|
|
let(:order) {
|
|
create(:order_with_distributor, bill_address: create(:address),
|
|
ship_address: create(:address))
|
|
}
|
|
let(:distributor) { order.distributor }
|
|
let(:params) { { order_id: order.number } }
|
|
|
|
context "as a normal user" do
|
|
before { allow(controller).to receive(:spree_current_user) { user } }
|
|
|
|
it "should prevent me from listing invoices for the order" do
|
|
spree_get :index, params
|
|
expect(response).to redirect_to unauthorized_path
|
|
end
|
|
end
|
|
|
|
context "as an enterprise user" do
|
|
context "which is not a manager of the distributor for an order" do
|
|
before { allow(controller).to receive(:spree_current_user) { enterprise_user } }
|
|
|
|
it "shows only invoices of manged enterprises" do
|
|
spree_get :index, params
|
|
expect(response).to redirect_to unauthorized_path
|
|
end
|
|
end
|
|
|
|
context 'which is a manager of the distributor for an order' do
|
|
before { allow(controller).to receive(:spree_current_user) { distributor.owner } }
|
|
|
|
it "should allow me to see the order" do
|
|
spree_get :index, params
|
|
expect(response).to have_http_status :success
|
|
expect(assigns(:order)).to eq order
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "#generate" do
|
|
let(:user) { create(:user) }
|
|
let(:enterprise_user) { create(:user, enterprises: [create(:enterprise)]) }
|
|
let(:order) {
|
|
create(:order_with_distributor, bill_address: create(:address),
|
|
ship_address: create(:address))
|
|
}
|
|
let(:distributor) { order.distributor }
|
|
let(:params) { { order_id: order.number } }
|
|
|
|
before do
|
|
distributor.update_attribute(:abn, "123412341234")
|
|
end
|
|
|
|
context "as a normal user" do
|
|
before { allow(controller).to receive(:spree_current_user) { user } }
|
|
|
|
it "should prevent me from generating invoices for the order" do
|
|
expect do
|
|
spree_get :generate, params
|
|
end.to change{ Invoice.count }.by(0)
|
|
|
|
expect(response).to redirect_to unauthorized_path
|
|
end
|
|
end
|
|
|
|
context "as an enterprise user" do
|
|
context "which is not a manager of the distributor for an order" do
|
|
before { allow(controller).to receive(:spree_current_user) { enterprise_user } }
|
|
|
|
it "should prevent me from generating invoices for the order" do
|
|
expect do
|
|
spree_get :generate, params
|
|
end.to change{ Invoice.count }.by(0)
|
|
|
|
expect(response).to redirect_to unauthorized_path
|
|
end
|
|
end
|
|
|
|
context 'which is a manager of the distributor for an order' do
|
|
before { allow(controller).to receive(:spree_current_user) { distributor.owner } }
|
|
|
|
it "should allow me to generate a new invoice for the order" do
|
|
expect do
|
|
spree_get :generate, params
|
|
end.to change{ Invoice.count }.by(1)
|
|
|
|
expect(response).to redirect_to spree.admin_dashboard_path
|
|
end
|
|
|
|
context "distributor didn't set an ABN" do
|
|
before do
|
|
distributor.update_attribute(:abn, "")
|
|
end
|
|
|
|
it "should not allow me to generate a new invoice for the order" do
|
|
expect do
|
|
spree_get :generate, params
|
|
end.to change{ Invoice.count }.by(0)
|
|
|
|
expect(response).to redirect_to spree.admin_dashboard_path
|
|
expect(flash[:error])
|
|
.to eq "#{distributor.name} must have a valid ABN before invoices can be used."
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|