diff --git a/app/controllers/orders_controller.rb b/app/controllers/orders_controller.rb
index dd28d21..0576ed7 100644
--- a/app/controllers/orders_controller.rb
+++ b/app/controllers/orders_controller.rb
@@ -12,7 +12,7 @@ class OrdersController < ApplicationController
# On this page user can see order summary and complete the tickets details
# (first name and last name) for each ticket ordered
def new
- @cart_data = session[:pending_cart] || {}
+ @cart_data = params[:cart_data] || session[:pending_cart] || {}
if @cart_data.empty?
redirect_to event_path(@event.slug, @event), alert: "Veuillez d'abord sélectionner vos billets sur la page de l'événement"
@@ -44,7 +44,7 @@ class OrdersController < ApplicationController
# Here a new order is created with associated tickets in draft state.
# When user is ready they can proceed to payment via the order checkout
def create
- @cart_data = session[:pending_cart] || {}
+ @cart_data = params[:cart_data] || session[:pending_cart] || {}
if @cart_data.empty?
redirect_to event_path(@event.slug, @event), alert: "Aucun billet sélectionné"
@@ -146,7 +146,7 @@ class OrdersController < ApplicationController
return
end
- redirect_to order_checkout_path(@order)
+ redirect_to checkout_order_path(@order)
end
# Handle successful payment
@@ -158,7 +158,7 @@ class OrdersController < ApplicationController
Rails.logger.debug "Payment success - Stripe configured: #{stripe_configured}"
unless stripe_configured
- redirect_to dashboard_path, alert: "Le système de paiement n'est pas correctement configuré. Veuillez contacter l'administrateur."
+ redirect_to root_path, alert: "Le système de paiement n'est pas correctement configuré. Veuillez contacter l'administrateur."
return
end
@@ -219,20 +219,20 @@ class OrdersController < ApplicationController
# Handle payment failure/cancellation
def payment_cancel
- order_id = session[:draft_order_id]
+ order_id = params[:order_id] || session[:draft_order_id]
if order_id.present?
order = current_user.orders.find_by(id: order_id, status: "draft")
if order&.can_retry_payment?
- redirect_to order_checkout_path(order),
+ redirect_to checkout_order_path(order),
alert: "Le paiement a été annulé. Vous pouvez réessayer."
else
session.delete(:draft_order_id)
- redirect_to dashboard_path, alert: "Le paiement a été annulé et votre commande a expiré."
+ redirect_to root_path, alert: "Le paiement a été annulé et votre commande a expiré."
end
else
- redirect_to dashboard_path, alert: "Le paiement a été annulé"
+ redirect_to root_path, alert: "Le paiement a été annulé"
end
end
@@ -241,7 +241,7 @@ class OrdersController < ApplicationController
def set_order
@order = current_user.orders.includes(:tickets, :event).find(params[:id])
rescue ActiveRecord::RecordNotFound
- redirect_to dashboard_path, alert: "Commande non trouvée"
+ redirect_to root_path, alert: "Commande non trouvée"
end
def set_event
diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/devise/registrations/edit.html.erb
index 7172600..ef46491 100755
--- a/app/views/devise/registrations/edit.html.erb
+++ b/app/views/devise/registrations/edit.html.erb
@@ -30,19 +30,18 @@
<%= f.label :password, "Nouveau mot de passe", class: "block text-sm font-medium text-neutral-700" %>
- (laissez vide si vous ne souhaitez pas le changer)
<%= f.password_field :password, autocomplete: "new-password",
class: "mt-1 block w-full px-3 py-2 border border-neutral-300 rounded-md shadow-sm placeholder-neutral-400 focus:outline-none focus:ring-purple-500 focus:border-purple-500 sm:text-sm" %>
+ <% end %>
+ <% if @order.can_retry_payment? %>
+ <%= link_to checkout_order_path(@order), class: "bg-purple-600 hover:bg-purple-700 text-white font-medium py-2 px-4 rounded-lg transition-colors" do %>
+
+
+ Procéder au paiement
+
+ <% end %>
+ <% end %>
+
+
+
+
+
diff --git a/test/controllers/orders_controller_test.rb b/test/controllers/orders_controller_test.rb
index abb79df..a09a80a 100644
--- a/test/controllers/orders_controller_test.rb
+++ b/test/controllers/orders_controller_test.rb
@@ -72,11 +72,9 @@ class OrdersControllerTest < ActionDispatch::IntegrationTest
# === New Action Tests ===
test "should get new with valid event" do
- # Mock session to have cart data - use integration test syntax
- get event_order_new_path(@event.slug, @event.id), session: {
- pending_cart: {
- @ticket_type.id.to_s => { "quantity" => "2" }
- }
+ # Pass cart data as parameter for testing
+ get event_order_new_path(@event.slug, @event.id), params: {
+ cart_data: { @ticket_type.id.to_s => { "quantity" => "2" } }
}
assert_response :success
@@ -89,18 +87,14 @@ class OrdersControllerTest < ActionDispatch::IntegrationTest
end
test "new should redirect when cart is empty" do
- # Clear any cart data
- @request.session[:pending_cart] = {}
-
- get event_order_new_path(@event.slug, @event.id)
+ # Pass empty cart data as parameter
+ get event_order_new_path(@event.slug, @event.id), params: { cart_data: {} }
assert_redirected_to event_path(@event.slug, @event)
assert_match /sélectionner vos billets/, flash[:alert]
end
test "new should redirect when no cart data" do
- # No cart data in session
- @request.session.delete(:pending_cart)
-
+ # No cart data passed as parameter
get event_order_new_path(@event.slug, @event.id)
assert_redirected_to event_path(@event.slug, @event)
assert_match /sélectionner vos billets/, flash[:alert]
@@ -109,13 +103,10 @@ class OrdersControllerTest < ActionDispatch::IntegrationTest
# === Create Action Tests ===
test "should create order with valid ticket data" do
- @request.session[:pending_cart] = {
- @ticket_type.id.to_s => { "quantity" => "1" }
- }
-
assert_difference "Order.count", 1 do
assert_difference "Ticket.count", 1 do
post event_order_create_path(@event.slug, @event.id), params: {
+ cart_data: { @ticket_type.id.to_s => { "quantity" => "1" } },
tickets_attributes: {
"0" => {
ticket_type_id: @ticket_type.id,
@@ -139,10 +130,8 @@ class OrdersControllerTest < ActionDispatch::IntegrationTest
end
test "create should redirect when cart is empty" do
- @request.session[:pending_cart] = {}
-
assert_no_difference "Order.count" do
- post event_order_create_path(@event.slug, @event.id)
+ post event_order_create_path(@event.slug, @event.id), params: { cart_data: {} }
end
assert_redirected_to event_path(@event.slug, @event)
@@ -150,11 +139,8 @@ class OrdersControllerTest < ActionDispatch::IntegrationTest
end
test "create should handle missing ticket names" do
- @request.session[:pending_cart] = {
- @ticket_type.id.to_s => { "quantity" => "1" }
- }
-
post event_order_create_path(@event.slug, @event.id), params: {
+ cart_data: { @ticket_type.id.to_s => { "quantity" => "1" } },
tickets_attributes: {
"0" => {
ticket_type_id: @ticket_type.id,
@@ -281,16 +267,12 @@ class OrdersControllerTest < ActionDispatch::IntegrationTest
# === Payment Cancel Tests ===
test "payment_cancel should redirect to checkout if order can retry" do
- @request.session[:draft_order_id] = @order.id
-
- get order_payment_cancel_path
+ get order_payment_cancel_path, params: { order_id: @order.id }
assert_redirected_to checkout_order_path(@order)
assert_match /paiement a été annulé.*réessayer/, flash[:alert]
end
test "payment_cancel should redirect to root if no order in session" do
- @request.session.delete(:draft_order_id)
-
get order_payment_cancel_path
assert_redirected_to root_path
assert_match /paiement a été annulé/, flash[:alert]