render date without time on invoices list

+ sort invoices in the reverse order of the creation time
This commit is contained in:
Mohamed ABDELLANI
2023-06-24 20:33:41 +01:00
parent 46cb1add63
commit 8fecc9db4b
2 changed files with 100 additions and 60 deletions

View File

@@ -7,12 +7,12 @@
%th= t(:status)
%th= t(:invoice_file)
%tbody
- @order.invoices.each do |invoice|
- @order.invoices.order('number desc').each do |invoice|
- tr_class = cycle('odd', 'even')
- tr_id = spree_dom_id(invoice)
%tr{:class => tr_class, "data-hook" => "invoice_row", :id => tr_id}
%td.align-center.created_at
= pretty_time(invoice.date)
= invoice.presenter.invoice_date
%td.align-center.label
= invoice.number
%td.align-center.label

View File

@@ -4,7 +4,7 @@ require 'system_helper'
describe '
As an administrator
I want to create an invoice for an order
I want to list/create an invoice for an order
' do
include WebHelper
include AuthenticationHelper
@@ -31,74 +31,114 @@ describe '
login_as_admin
visit spree.edit_admin_order_path(order)
end
describe 'creating invoices' do
context 'when the order has no invoices' do
it 'creates an invoice for the order' do
click_link 'Invoices'
context 'when the order has no invoices' do
it 'creates an invoice for the order' do
click_link 'Invoices'
expect {
click_link 'New Invoice'
expect(page).to have_no_link "New Invoice"
}.to change { order.invoices.count }.by(1)
expect {
click_link 'New Invoice'
expect(page).to have_no_link "New Invoice"
}.to change { order.invoices.count }.by(1)
invoice = order.invoices.first
expect(invoice.cancelled).to eq false
expect(invoice.number).to eq 1
end
end
invoice = order.invoices.first
expect(invoice.cancelled).to eq false
expect(invoice.number).to eq 1
context 'when the order has an invoice' do
let!(:latest_invoice){ create(:invoice, order:, number: 1, cancelled: false) }
context 'order not updated since latest invoice' do
it 'should not render new invoice button' do
click_link 'Invoices'
expect(page).to_not have_link 'New Invoice'
end
end
# For reference check:
# https://docs.google.com/spreadsheets/d/1hOM6UL4mWeRCFLcDQ3fTkbhbUQ2WvIUCCA1IerDBtUA/edit#gid=0
context 'order updated since latest invoice' do
context 'changes require regenerating' do
let(:new_note){ 'new note' }
before do
order.update!(note: new_note)
end
it 'updates the lastest invoice for the order' do
click_link 'Invoices'
expect {
click_link 'New Invoice'
expect(page).to have_no_link "New Invoice"
}.to change { order.reload.invoices.count }.by(0)
.and change { latest_invoice.reload.presenter.note }.from("").to(new_note)
expect(latest_invoice.reload.cancelled).to eq false
end
end
context 'changes require generating a new invoice' do
before do
order.line_items.first.update!(quantity: 2)
end
it 'creates a new invoice for the order' do
click_link 'Invoices'
expect {
click_link 'New Invoice'
expect(page).to have_no_link "New Invoice"
}.to change { order.reload.invoices.count }.by(1)
expect(latest_invoice.reload.cancelled).to eq true
expect(latest_invoice.presenter.sorted_line_items.first.quantity).to eq 1
new_invoice = order.invoices.last
expect(new_invoice.cancelled).to eq false
expect(new_invoice.number).to eq 2
expect(new_invoice.presenter.sorted_line_items.first.quantity).to eq 2
end
end
end
end
end
context 'when the order has an invoice' do
let!(:latest_invoice){ create(:invoice, order:, number: 1, cancelled: false) }
context 'order not updated since latest invoice' do
it 'should not render new invoice button' do
click_link 'Invoices'
expect(page).to_not have_link 'New Invoice'
end
describe 'listing invoices' do
before do
create(:invoice, order:, number: 1, cancelled: true)
create(:invoice, order:, number: 2, cancelled: false)
end
# For reference check:
# https://docs.google.com/spreadsheets/d/1hOM6UL4mWeRCFLcDQ3fTkbhbUQ2WvIUCCA1IerDBtUA/edit#gid=0
context 'order updated since latest invoice' do
context 'changes require regenerating' do
let(:new_note){ 'new note' }
before do
order.update!(note: new_note)
end
let(:row1){
[
Time.current.to_date.to_s,
"2",
order.total,
"Active",
"Download"
].join(" ")
}
it 'updates the lastest invoice for the order' do
click_link 'Invoices'
expect {
click_link 'New Invoice'
expect(page).to have_no_link "New Invoice"
}.to change { order.reload.invoices.count }.by(0)
.and change { latest_invoice.reload.presenter.note }.from("").to(new_note)
let(:row2){
[
Time.current.to_date.to_s,
"1",
order.total,
"Cancelled",
"Download"
].join(" ")
}
expect(latest_invoice.reload.cancelled).to eq false
end
end
let(:table_content){
[
row1,
row2
].join(" ")
}
context 'changes require generating a new invoice' do
before do
order.line_items.first.update!(quantity: 2)
end
it 'creates a new invoice for the order' do
click_link 'Invoices'
expect {
click_link 'New Invoice'
expect(page).to have_no_link "New Invoice"
}.to change { order.reload.invoices.count }.by(1)
expect(latest_invoice.reload.cancelled).to eq true
expect(latest_invoice.presenter.sorted_line_items.first.quantity).to eq 1
new_invoice = order.invoices.last
expect(new_invoice.cancelled).to eq false
expect(new_invoice.number).to eq 2
expect(new_invoice.presenter.sorted_line_items.first.quantity).to eq 2
end
end
it 'should list the invoices on the reverse order of creation' do
click_link 'Invoices'
expect(page).to have_content table_content
end
end
end