develop #3

Merged
kbe merged 227 commits from develop into main 2025-09-16 14:35:23 +00:00
3 changed files with 35 additions and 7 deletions
Showing only changes of commit 67d3bcde5b - Show all commits

View File

@@ -147,6 +147,7 @@ class StripeInvoiceService
end end
def add_line_items_to_invoice(customer, invoice) def add_line_items_to_invoice(customer, invoice)
# Add ticket line items
@order.tickets.group_by(&:ticket_type).each do |ticket_type, tickets| @order.tickets.group_by(&:ticket_type).each do |ticket_type, tickets|
quantity = tickets.count quantity = tickets.count
@@ -164,6 +165,20 @@ class StripeInvoiceService
} }
}) })
end end
# Add service fee line item
service_fee_cents = 100 # 1€ service fee
Stripe::InvoiceItem.create({
customer: customer.id,
invoice: invoice.id,
amount: service_fee_cents,
currency: "eur",
description: "Frais de service - Frais de traitement de la commande",
metadata: {
item_type: "service_fee",
amount_cents: service_fee_cents
}
})
end end
def build_line_item_description(ticket_type, tickets) def build_line_item_description(ticket_type, tickets)

View File

@@ -122,7 +122,7 @@ class OrdersControllerTest < ActionDispatch::IntegrationTest
assert_equal "draft", new_order.status assert_equal "draft", new_order.status
assert_equal @user, new_order.user assert_equal @user, new_order.user
assert_equal @event, new_order.event assert_equal @event, new_order.event
assert_equal @ticket_type.price_cents, new_order.total_amount_cents assert_equal @ticket_type.price_cents + 100, new_order.total_amount_cents # includes 1€ service fee
assert_redirected_to checkout_order_path(new_order) assert_redirected_to checkout_order_path(new_order)
assert_equal new_order.id, session[:draft_order_id] assert_equal new_order.id, session[:draft_order_id]

View File

@@ -151,7 +151,7 @@ class StripeInvoiceServiceTest < ActiveSupport::TestCase
mock_invoice.stubs(:finalize_invoice).returns(mock_invoice) mock_invoice.stubs(:finalize_invoice).returns(mock_invoice)
mock_invoice.expects(:pay) mock_invoice.expects(:pay)
Stripe::Invoice.expects(:create).returns(mock_invoice) Stripe::Invoice.expects(:create).returns(mock_invoice)
Stripe::InvoiceItem.expects(:create).once Stripe::InvoiceItem.expects(:create).twice # Once for tickets, once for service fee
result = @service.create_post_payment_invoice result = @service.create_post_payment_invoice
assert_not_nil result assert_not_nil result
@@ -173,7 +173,7 @@ class StripeInvoiceServiceTest < ActiveSupport::TestCase
mock_invoice.stubs(:finalize_invoice).returns(mock_invoice) mock_invoice.stubs(:finalize_invoice).returns(mock_invoice)
mock_invoice.expects(:pay) mock_invoice.expects(:pay)
Stripe::Invoice.expects(:create).returns(mock_invoice) Stripe::Invoice.expects(:create).returns(mock_invoice)
Stripe::InvoiceItem.expects(:create).once Stripe::InvoiceItem.expects(:create).twice # Once for tickets, once for service fee
result = @service.create_post_payment_invoice result = @service.create_post_payment_invoice
assert_not_nil result assert_not_nil result
@@ -196,7 +196,7 @@ class StripeInvoiceServiceTest < ActiveSupport::TestCase
mock_customer.stubs(:id).returns("cus_test123") mock_customer.stubs(:id).returns("cus_test123")
Stripe::Customer.expects(:create).returns(mock_customer) Stripe::Customer.expects(:create).returns(mock_customer)
expected_line_item = { expected_ticket_line_item = {
customer: "cus_test123", customer: "cus_test123",
invoice: "in_test123", invoice: "in_test123",
amount: @ticket_type.price_cents * 2, # 2 tickets amount: @ticket_type.price_cents * 2, # 2 tickets
@@ -210,12 +210,25 @@ class StripeInvoiceServiceTest < ActiveSupport::TestCase
} }
} }
expected_service_fee_line_item = {
customer: "cus_test123",
invoice: "in_test123",
amount: 100,
currency: "eur",
description: "Frais de service - Frais de traitement de la commande",
metadata: {
item_type: "service_fee",
amount_cents: 100
}
}
mock_invoice = mock("invoice") mock_invoice = mock("invoice")
mock_invoice.stubs(:id).returns("in_test123") mock_invoice.stubs(:id).returns("in_test123")
mock_invoice.stubs(:finalize_invoice).returns(mock_invoice) mock_invoice.stubs(:finalize_invoice).returns(mock_invoice)
mock_invoice.expects(:pay) mock_invoice.expects(:pay)
Stripe::Invoice.expects(:create).returns(mock_invoice) Stripe::Invoice.expects(:create).returns(mock_invoice)
Stripe::InvoiceItem.expects(:create).with(expected_line_item) Stripe::InvoiceItem.expects(:create).with(expected_ticket_line_item)
Stripe::InvoiceItem.expects(:create).with(expected_service_fee_line_item)
result = @service.create_post_payment_invoice result = @service.create_post_payment_invoice
assert_not_nil result assert_not_nil result
@@ -248,7 +261,7 @@ class StripeInvoiceServiceTest < ActiveSupport::TestCase
mock_invoice.expects(:pay) mock_invoice.expects(:pay)
Stripe::Invoice.expects(:create).with(expected_invoice_data).returns(mock_invoice) Stripe::Invoice.expects(:create).with(expected_invoice_data).returns(mock_invoice)
Stripe::InvoiceItem.expects(:create).once Stripe::InvoiceItem.expects(:create).twice # Once for tickets, once for service fee
result = @service.create_post_payment_invoice result = @service.create_post_payment_invoice
assert_not_nil result assert_not_nil result
@@ -287,7 +300,7 @@ class StripeInvoiceServiceTest < ActiveSupport::TestCase
}) })
Stripe::Invoice.expects(:create).returns(mock_invoice) Stripe::Invoice.expects(:create).returns(mock_invoice)
Stripe::InvoiceItem.expects(:create).once Stripe::InvoiceItem.expects(:create).twice # Once for tickets, once for service fee
mock_invoice.expects(:finalize_invoice).returns(mock_finalized_invoice) mock_invoice.expects(:finalize_invoice).returns(mock_finalized_invoice)
result = @service.create_post_payment_invoice result = @service.create_post_payment_invoice