-
+
+
{{ t('channels.default_channel') }}
-
{{ t('channels.default_channel_hint') }}
+
+ {{ channel.default ? t('channels.default_locked_hint') : t('channels.default_channel_hint') }}
+
diff --git a/packages/panel/resources/lang/ar/channels.php b/packages/panel/resources/lang/ar/channels.php
index 070618eba2..12107182da 100644
--- a/packages/panel/resources/lang/ar/channels.php
+++ b/packages/panel/resources/lang/ar/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'الحالة',
'default_channel' => 'القناة الافتراضية',
'default_channel_hint' => 'يُستخدم عندما لا يحدد الطلب قناة بشكل صريح.',
+ 'default_locked_hint' => 'هذه هي القناة الافتراضية. لتغييرها، اجعل قناة أخرى هي الافتراضية.',
+ 'default_unset_blocked' => 'لا يمكن إلغاء تعيين القناة الافتراضية. اجعل قناة أخرى هي الافتراضية بدلاً من ذلك.',
'section_details' => 'التفاصيل',
'section_state' => 'الحالة',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'هل تريد حذف القناة؟',
'confirm_delete_body' => 'سيتم حذف "{name}" نهائيًا.',
'delete_blocked' => 'لا يمكن حذف قناة لها سجل طلبات.',
+ 'delete_blocked_default' => 'لا يمكن حذف القناة الافتراضية. اجعل قناة أخرى هي الافتراضية أولاً.',
'flash_created' => 'تم إنشاء القناة.',
'flash_updated' => 'تم تحديث القناة.',
diff --git a/packages/panel/resources/lang/bg/channels.php b/packages/panel/resources/lang/bg/channels.php
index a31a0f7f7f..4e6c18c601 100644
--- a/packages/panel/resources/lang/bg/channels.php
+++ b/packages/panel/resources/lang/bg/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Статус',
'default_channel' => 'Канал по подразбиране',
'default_channel_hint' => 'Използва се, когато заявката не избере изрично друг.',
+ 'default_locked_hint' => 'Това е каналът по подразбиране. За да го промените, направете друг канал по подразбиране.',
+ 'default_unset_blocked' => 'Каналът по подразбиране не може да бъде премахнат. Вместо това направете друг канал по подразбиране.',
'section_details' => 'Детайли',
'section_state' => 'Състояние',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Изтриване на канал?',
'confirm_delete_body' => '"{name}" ще бъде премахнат за постоянно.',
'delete_blocked' => 'Не може да се изтрие канал с история на поръчки.',
+ 'delete_blocked_default' => 'Каналът по подразбиране не може да бъде изтрит. Първо направете друг канал по подразбиране.',
'flash_created' => 'Каналът е създаден.',
'flash_updated' => 'Каналът е актуализиран.',
diff --git a/packages/panel/resources/lang/de/channels.php b/packages/panel/resources/lang/de/channels.php
index 2c74b99a8f..157c56765b 100644
--- a/packages/panel/resources/lang/de/channels.php
+++ b/packages/panel/resources/lang/de/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Status',
'default_channel' => 'Standardkanal',
'default_channel_hint' => 'Wird verwendet, wenn eine Anfrage keinen explizit auswählt.',
+ 'default_locked_hint' => 'Dies ist der Standardkanal. Um dies zu ändern, machen Sie einen anderen Kanal zum Standard.',
+ 'default_unset_blocked' => 'Der Standardkanal kann nicht deaktiviert werden. Machen Sie stattdessen einen anderen Kanal zum Standard.',
'section_details' => 'Details',
'section_state' => 'Status',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Kanal löschen?',
'confirm_delete_body' => '"{name}" wird dauerhaft entfernt.',
'delete_blocked' => 'Ein Kanal mit Bestellhistorie kann nicht gelöscht werden.',
+ 'delete_blocked_default' => 'Der Standardkanal kann nicht gelöscht werden. Machen Sie zuerst einen anderen Kanal zum Standard.',
'flash_created' => 'Kanal erstellt.',
'flash_updated' => 'Kanal aktualisiert.',
diff --git a/packages/panel/resources/lang/en/channels.php b/packages/panel/resources/lang/en/channels.php
index 034cd7f4d6..7a3fba3e81 100644
--- a/packages/panel/resources/lang/en/channels.php
+++ b/packages/panel/resources/lang/en/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Status',
'default_channel' => 'Default channel',
'default_channel_hint' => "Used when a request doesn't pick one explicitly.",
+ 'default_locked_hint' => 'This is the default channel. To change it, make another channel the default.',
+ 'default_unset_blocked' => 'The default channel cannot be unset. Make another channel the default instead.',
'section_details' => 'Details',
'section_state' => 'State',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Delete channel?',
'confirm_delete_body' => '"{name}" will be permanently removed.',
'delete_blocked' => 'Cannot delete a channel with order history.',
+ 'delete_blocked_default' => 'The default channel cannot be deleted. Make another channel the default first.',
'flash_created' => 'Channel created.',
'flash_updated' => 'Channel updated.',
diff --git a/packages/panel/resources/lang/es/channels.php b/packages/panel/resources/lang/es/channels.php
index e50fa9ee7f..6308dcb558 100644
--- a/packages/panel/resources/lang/es/channels.php
+++ b/packages/panel/resources/lang/es/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Estado',
'default_channel' => 'Canal predeterminado',
'default_channel_hint' => 'Se utiliza cuando una solicitud no selecciona uno explícitamente.',
+ 'default_locked_hint' => 'Este es el canal predeterminado. Para cambiarlo, establece otro canal como predeterminado.',
+ 'default_unset_blocked' => 'No se puede desactivar el canal predeterminado. Establece otro canal como predeterminado en su lugar.',
'section_details' => 'Detalles',
'section_state' => 'Estado',
@@ -30,6 +32,7 @@
'confirm_delete_title' => '¿Eliminar canal?',
'confirm_delete_body' => '"{name}" se eliminará permanentemente.',
'delete_blocked' => 'No se puede eliminar un canal con historial de pedidos.',
+ 'delete_blocked_default' => 'No se puede eliminar el canal predeterminado. Establece primero otro canal como predeterminado.',
'flash_created' => 'Canal creado.',
'flash_updated' => 'Canal actualizado.',
diff --git a/packages/panel/resources/lang/fa/channels.php b/packages/panel/resources/lang/fa/channels.php
index 01e323e859..cbadf34bee 100644
--- a/packages/panel/resources/lang/fa/channels.php
+++ b/packages/panel/resources/lang/fa/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'وضعیت',
'default_channel' => 'کانال پیشفرض',
'default_channel_hint' => 'زمانی استفاده میشود که یک درخواست بهطور صریح کانالی را انتخاب نکند.',
+ 'default_locked_hint' => 'این کانال پیشفرض است. برای تغییر آن، کانال دیگری را پیشفرض کنید.',
+ 'default_unset_blocked' => 'کانال پیشفرض را نمیتوان غیرفعال کرد. در عوض کانال دیگری را پیشفرض کنید.',
'section_details' => 'جزئیات',
'section_state' => 'وضعیت',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'کانال حذف شود؟',
'confirm_delete_body' => '"{name}" بهطور دائم حذف خواهد شد.',
'delete_blocked' => 'حذف کانالی که دارای سابقه سفارش است امکانپذیر نیست.',
+ 'delete_blocked_default' => 'کانال پیشفرض قابل حذف نیست. ابتدا کانال دیگری را پیشفرض کنید.',
'flash_created' => 'کانال ایجاد شد.',
'flash_updated' => 'کانال بهروزرسانی شد.',
diff --git a/packages/panel/resources/lang/fr/channels.php b/packages/panel/resources/lang/fr/channels.php
index 1e21db5f8e..fbe551d331 100644
--- a/packages/panel/resources/lang/fr/channels.php
+++ b/packages/panel/resources/lang/fr/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Statut',
'default_channel' => 'Canal par défaut',
'default_channel_hint' => "Utilisé lorsqu'une requête n'en sélectionne pas explicitement.",
+ 'default_locked_hint' => 'Ceci est le canal par défaut. Pour le changer, définissez un autre canal par défaut.',
+ 'default_unset_blocked' => 'Impossible de désactiver le canal par défaut. Définissez plutôt un autre canal par défaut.',
'section_details' => 'Détails',
'section_state' => 'État',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Supprimer le canal ?',
'confirm_delete_body' => '« {name} » sera définitivement supprimé.',
'delete_blocked' => 'Impossible de supprimer un canal ayant un historique de commandes.',
+ 'delete_blocked_default' => "Impossible de supprimer le canal par défaut. Définissez d'abord un autre canal par défaut.",
'flash_created' => 'Canal créé.',
'flash_updated' => 'Canal mis à jour.',
diff --git a/packages/panel/resources/lang/hr/channels.php b/packages/panel/resources/lang/hr/channels.php
index bbbfcaaca7..ed71ed2494 100644
--- a/packages/panel/resources/lang/hr/channels.php
+++ b/packages/panel/resources/lang/hr/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Status',
'default_channel' => 'Zadani kanal',
'default_channel_hint' => 'Koristi se kada zahtjev izričito ne odabere kanal.',
+ 'default_locked_hint' => 'Ovo je zadani kanal. Da biste to promijenili, postavite drugi kanal kao zadani.',
+ 'default_unset_blocked' => 'Zadani kanal nije moguće poništiti. Umjesto toga postavite drugi kanal kao zadani.',
'section_details' => 'Detalji',
'section_state' => 'Stanje',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Izbrisati kanal?',
'confirm_delete_body' => '"{name}" bit će trajno uklonjen.',
'delete_blocked' => 'Nije moguće izbrisati kanal s poviješću narudžbi.',
+ 'delete_blocked_default' => 'Zadani kanal nije moguće izbrisati. Najprije postavite drugi kanal kao zadani.',
'flash_created' => 'Kanal je kreiran.',
'flash_updated' => 'Kanal je ažuriran.',
diff --git a/packages/panel/resources/lang/hu/channels.php b/packages/panel/resources/lang/hu/channels.php
index d04d6979fa..85d60542df 100644
--- a/packages/panel/resources/lang/hu/channels.php
+++ b/packages/panel/resources/lang/hu/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Állapot',
'default_channel' => 'Alapértelmezett csatorna',
'default_channel_hint' => 'Akkor kerül felhasználásra, ha egy kérés nem választ ki kifejezetten egyet.',
+ 'default_locked_hint' => 'Ez az alapértelmezett csatorna. A módosításhoz tegyen egy másik csatornát alapértelmezetté.',
+ 'default_unset_blocked' => 'Az alapértelmezett csatorna nem kapcsolható ki. Tegyen inkább egy másik csatornát alapértelmezetté.',
'section_details' => 'Részletek',
'section_state' => 'Állapot',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Törli a csatornát?',
'confirm_delete_body' => '"{name}" véglegesen eltávolításra kerül.',
'delete_blocked' => 'Nem törölhető olyan csatorna, amelynek rendelési előzményei vannak.',
+ 'delete_blocked_default' => 'Az alapértelmezett csatorna nem törölhető. Előbb tegyen egy másik csatornát alapértelmezetté.',
'flash_created' => 'A csatorna létrehozva.',
'flash_updated' => 'A csatorna frissítve.',
diff --git a/packages/panel/resources/lang/mn/channels.php b/packages/panel/resources/lang/mn/channels.php
index 81de023033..9f23df7f8d 100644
--- a/packages/panel/resources/lang/mn/channels.php
+++ b/packages/panel/resources/lang/mn/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Төлөв',
'default_channel' => 'Үндсэн суваг',
'default_channel_hint' => 'Хүсэлт тодорхой суваг сонгоогүй үед ашиглагдана.',
+ 'default_locked_hint' => 'Энэ бол үндсэн суваг. Өөрчлөхийн тулд өөр сувгийг үндсэн болгоно уу.',
+ 'default_unset_blocked' => 'Үндсэн сувгийг болиулах боломжгүй. Оронд нь өөр сувгийг үндсэн болгоно уу.',
'section_details' => 'Дэлгэрэнгүй',
'section_state' => 'Төлөв',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Сувгийг устгах уу?',
'confirm_delete_body' => '"{name}" бүрмөсөн устах болно.',
'delete_blocked' => 'Захиалгын түүхтэй сувгийг устгах боломжгүй.',
+ 'delete_blocked_default' => 'Үндсэн сувгийг устгах боломжгүй. Эхлээд өөр сувгийг үндсэн болгоно уу.',
'flash_created' => 'Суваг үүсгэгдлээ.',
'flash_updated' => 'Суваг шинэчлэгдлээ.',
diff --git a/packages/panel/resources/lang/nl/channels.php b/packages/panel/resources/lang/nl/channels.php
index 8ab16177b4..d3db94c601 100644
--- a/packages/panel/resources/lang/nl/channels.php
+++ b/packages/panel/resources/lang/nl/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Status',
'default_channel' => 'Standaardkanaal',
'default_channel_hint' => 'Wordt gebruikt wanneer een verzoek er niet expliciet één kiest.',
+ 'default_locked_hint' => 'Dit is het standaardkanaal. Maak een ander kanaal standaard om dit te wijzigen.',
+ 'default_unset_blocked' => 'Het standaardkanaal kan niet worden uitgeschakeld. Maak in plaats daarvan een ander kanaal standaard.',
'section_details' => 'Details',
'section_state' => 'Status',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Kanaal verwijderen?',
'confirm_delete_body' => '"{name}" wordt permanent verwijderd.',
'delete_blocked' => 'Kan geen kanaal verwijderen met bestelgeschiedenis.',
+ 'delete_blocked_default' => 'Het standaardkanaal kan niet worden verwijderd. Maak eerst een ander kanaal standaard.',
'flash_created' => 'Kanaal aangemaakt.',
'flash_updated' => 'Kanaal bijgewerkt.',
diff --git a/packages/panel/resources/lang/pl/channels.php b/packages/panel/resources/lang/pl/channels.php
index 81907de900..7bf490c68c 100644
--- a/packages/panel/resources/lang/pl/channels.php
+++ b/packages/panel/resources/lang/pl/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Status',
'default_channel' => 'Domyślny kanał',
'default_channel_hint' => 'Używany, gdy żądanie nie wybiera go jawnie.',
+ 'default_locked_hint' => 'To jest domyślny kanał. Aby to zmienić, ustaw inny kanał jako domyślny.',
+ 'default_unset_blocked' => 'Nie można wyłączyć domyślnego kanału. Zamiast tego ustaw inny kanał jako domyślny.',
'section_details' => 'Szczegóły',
'section_state' => 'Stan',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Usunąć kanał?',
'confirm_delete_body' => '"{name}" zostanie trwale usunięty.',
'delete_blocked' => 'Nie można usunąć kanału z historią zamówień.',
+ 'delete_blocked_default' => 'Nie można usunąć domyślnego kanału. Najpierw ustaw inny kanał jako domyślny.',
'flash_created' => 'Kanał utworzony.',
'flash_updated' => 'Kanał zaktualizowany.',
diff --git a/packages/panel/resources/lang/pt_BR/channels.php b/packages/panel/resources/lang/pt_BR/channels.php
index 95a09f1ca1..acdf452b6f 100644
--- a/packages/panel/resources/lang/pt_BR/channels.php
+++ b/packages/panel/resources/lang/pt_BR/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Status',
'default_channel' => 'Canal padrão',
'default_channel_hint' => 'Usado quando uma solicitação não escolhe um explicitamente.',
+ 'default_locked_hint' => 'Este é o canal padrão. Para alterá-lo, defina outro canal como padrão.',
+ 'default_unset_blocked' => 'O canal padrão não pode ser desativado. Em vez disso, defina outro canal como padrão.',
'section_details' => 'Detalhes',
'section_state' => 'Estado',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Excluir canal?',
'confirm_delete_body' => '"{name}" será removido permanentemente.',
'delete_blocked' => 'Não é possível excluir um canal com histórico de pedidos.',
+ 'delete_blocked_default' => 'O canal padrão não pode ser excluído. Defina outro canal como padrão primeiro.',
'flash_created' => 'Canal criado.',
'flash_updated' => 'Canal atualizado.',
diff --git a/packages/panel/resources/lang/ro/channels.php b/packages/panel/resources/lang/ro/channels.php
index 505cdb7e0f..5f8257d798 100644
--- a/packages/panel/resources/lang/ro/channels.php
+++ b/packages/panel/resources/lang/ro/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Stare',
'default_channel' => 'Canal implicit',
'default_channel_hint' => 'Folosit atunci când o solicitare nu alege unul în mod explicit.',
+ 'default_locked_hint' => 'Acesta este canalul implicit. Pentru a-l schimba, setați un alt canal ca implicit.',
+ 'default_unset_blocked' => 'Canalul implicit nu poate fi dezactivat. Setați în schimb un alt canal ca implicit.',
'section_details' => 'Detalii',
'section_state' => 'Stare',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Ștergi canalul?',
'confirm_delete_body' => '"{name}" va fi eliminat definitiv.',
'delete_blocked' => 'Nu poți șterge un canal care are istoric de comenzi.',
+ 'delete_blocked_default' => 'Canalul implicit nu poate fi șters. Setați mai întâi un alt canal ca implicit.',
'flash_created' => 'Canal creat.',
'flash_updated' => 'Canal actualizat.',
diff --git a/packages/panel/resources/lang/tr/channels.php b/packages/panel/resources/lang/tr/channels.php
index 837b7836ae..cdc4e6fce9 100644
--- a/packages/panel/resources/lang/tr/channels.php
+++ b/packages/panel/resources/lang/tr/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Durum',
'default_channel' => 'Varsayılan kanal',
'default_channel_hint' => 'Bir istek açıkça birini seçmediğinde kullanılır.',
+ 'default_locked_hint' => 'Bu varsayılan kanaldır. Değiştirmek için başka bir kanalı varsayılan yapın.',
+ 'default_unset_blocked' => 'Varsayılan kanal kaldırılamaz. Bunun yerine başka bir kanalı varsayılan yapın.',
'section_details' => 'Detaylar',
'section_state' => 'Durum',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Kanal silinsin mi?',
'confirm_delete_body' => '"{name}" kalıcı olarak kaldırılacak.',
'delete_blocked' => 'Sipariş geçmişi olan bir kanal silinemez.',
+ 'delete_blocked_default' => 'Varsayılan kanal silinemez. Önce başka bir kanalı varsayılan yapın.',
'flash_created' => 'Kanal oluşturuldu.',
'flash_updated' => 'Kanal güncellendi.',
diff --git a/packages/panel/resources/lang/vi/channels.php b/packages/panel/resources/lang/vi/channels.php
index b5908778b4..9f7a2b9b18 100644
--- a/packages/panel/resources/lang/vi/channels.php
+++ b/packages/panel/resources/lang/vi/channels.php
@@ -21,6 +21,8 @@
'field_status' => 'Trạng thái',
'default_channel' => 'Kênh mặc định',
'default_channel_hint' => 'Được sử dụng khi một yêu cầu không chọn kênh cụ thể.',
+ 'default_locked_hint' => 'Đây là kênh mặc định. Để thay đổi, hãy đặt một kênh khác làm mặc định.',
+ 'default_unset_blocked' => 'Không thể bỏ đặt kênh mặc định. Thay vào đó, hãy đặt một kênh khác làm mặc định.',
'section_details' => 'Chi tiết',
'section_state' => 'Trạng thái',
@@ -30,6 +32,7 @@
'confirm_delete_title' => 'Xóa kênh?',
'confirm_delete_body' => '"{name}" sẽ bị xóa vĩnh viễn.',
'delete_blocked' => 'Không thể xóa kênh có lịch sử đơn hàng.',
+ 'delete_blocked_default' => 'Không thể xóa kênh mặc định. Hãy đặt một kênh khác làm mặc định trước.',
'flash_created' => 'Đã tạo kênh.',
'flash_updated' => 'Đã cập nhật kênh.',
diff --git a/packages/panel/src/Http/Controllers/Settings/ChannelEditController.php b/packages/panel/src/Http/Controllers/Settings/ChannelEditController.php
index c46b3658db..8c766c95d6 100644
--- a/packages/panel/src/Http/Controllers/Settings/ChannelEditController.php
+++ b/packages/panel/src/Http/Controllers/Settings/ChannelEditController.php
@@ -35,7 +35,11 @@ public function edit(Channel $channel): Response
public function update(ChannelRequest $request, Channel $channel, UpdatesChannel $updatesChannel): RedirectResponse
{
- $updatesChannel->execute($channel, $request->channelAttributes());
+ try {
+ $updatesChannel->execute($channel, $request->channelAttributes());
+ } catch (ChannelActionException) {
+ return back()->with('error', __('panel::channels.default_unset_blocked'));
+ }
return redirect()->route('panel.settings.channels.index')->with('success', __('panel::channels.flash_updated'));
}
@@ -45,7 +49,9 @@ public function destroy(Channel $channel, DeletesChannel $deletesChannel): Redir
try {
$deletesChannel->execute($channel);
} catch (ChannelActionException) {
- return back()->with('error', __('panel::channels.delete_blocked'));
+ return back()->with('error', $channel->default
+ ? __('panel::channels.delete_blocked_default')
+ : __('panel::channels.delete_blocked'));
}
return redirect()->route('panel.settings.channels.index')->with('success', __('panel::channels.flash_deleted'));
diff --git a/specs/0049-inertia-panel.md b/specs/0049-inertia-panel.md
index 8e75644ff7..b86b68f1c0 100644
--- a/specs/0049-inertia-panel.md
+++ b/specs/0049-inertia-panel.md
@@ -276,7 +276,10 @@ Against the core `staff` guard (`Lunar\Core\Models\Staff`), configurable via
`SettingsNav`.
- **Channels** (settings section) — list on `DataTable`; inline create dialog; edit page
(name, auto-slugged handle, URL, default toggle, status); delete with confirmation,
- blocked when `Channel::hasOrderHistory()` is true.
+ blocked when `Channel::hasOrderHistory()` is true or the channel is the default. The
+ default flag moves by promoting another channel, never by unsetting, so a store with
+ channels always has a default — the core `UpdateChannel`/`DeleteChannel` actions enforce
+ both rules and the edit page disables the corresponding controls.
### Data layer and authorization
diff --git a/tests/core/Unit/Actions/Channels/DeleteChannelTest.php b/tests/core/Unit/Actions/Channels/DeleteChannelTest.php
index dfa318f5a8..b252138e09 100644
--- a/tests/core/Unit/Actions/Channels/DeleteChannelTest.php
+++ b/tests/core/Unit/Actions/Channels/DeleteChannelTest.php
@@ -10,8 +10,8 @@
uses(TestCase::class);
uses(RefreshDatabase::class);
-it('deletes a channel with no order history', function () {
- $channel = Channel::factory()->create();
+it('deletes a non-default channel with no order history', function () {
+ $channel = Channel::factory()->create(['default' => false]);
app(DeleteChannel::class)->execute($channel);
@@ -19,7 +19,7 @@
});
it('rejects deleting a channel with order history', function () {
- $channel = Channel::factory()->create();
+ $channel = Channel::factory()->create(['default' => false]);
Order::factory()->create(['channel_id' => $channel->id]);
@@ -27,7 +27,7 @@
})->throws(ChannelActionException::class);
it('does not delete a channel with order history', function () {
- $channel = Channel::factory()->create();
+ $channel = Channel::factory()->create(['default' => false]);
Order::factory()->create(['channel_id' => $channel->id]);
@@ -39,3 +39,21 @@
expect(Channel::find($channel->id))->not->toBeNull();
});
+
+it('rejects deleting the default channel', function () {
+ $channel = Channel::factory()->create(['default' => true]);
+
+ app(DeleteChannel::class)->execute($channel);
+})->throws(ChannelActionException::class);
+
+it('does not delete the default channel', function () {
+ $channel = Channel::factory()->create(['default' => true]);
+
+ try {
+ app(DeleteChannel::class)->execute($channel);
+ } catch (ChannelActionException) {
+ // expected
+ }
+
+ expect(Channel::find($channel->id))->not->toBeNull();
+});
diff --git a/tests/core/Unit/Actions/Channels/UpdateChannelTest.php b/tests/core/Unit/Actions/Channels/UpdateChannelTest.php
index fb8da88f39..7ef0d5970d 100644
--- a/tests/core/Unit/Actions/Channels/UpdateChannelTest.php
+++ b/tests/core/Unit/Actions/Channels/UpdateChannelTest.php
@@ -2,6 +2,7 @@
use Illuminate\Foundation\Testing\RefreshDatabase;
use Lunar\Core\Actions\Channels\UpdateChannel;
+use Lunar\Core\Exceptions\ChannelActionException;
use Lunar\Core\Models\Channel;
use Lunar\Tests\Core\TestCase;
@@ -58,3 +59,39 @@
expect($channel->fresh()->default)->toBeTrue();
});
+
+it('rejects unsetting default on the default channel', function () {
+ $channel = Channel::factory()->create(['default' => true]);
+
+ app(UpdateChannel::class)->execute($channel, [
+ 'name' => $channel->name,
+ 'default' => false,
+ ]);
+})->throws(ChannelActionException::class);
+
+it('keeps the default channel unchanged when unsetting default is rejected', function () {
+ $channel = Channel::factory()->create(['name' => 'Webstore', 'default' => true]);
+
+ try {
+ app(UpdateChannel::class)->execute($channel, [
+ 'name' => 'Renamed',
+ 'default' => false,
+ ]);
+ } catch (ChannelActionException) {
+ // expected
+ }
+
+ expect($channel->fresh()->default)->toBeTrue();
+ expect($channel->fresh()->name)->toBe('Webstore');
+});
+
+it('updates the default channel when default stays untouched', function () {
+ $channel = Channel::factory()->create(['default' => true]);
+
+ app(UpdateChannel::class)->execute($channel, [
+ 'name' => 'Renamed',
+ ]);
+
+ expect($channel->fresh()->name)->toBe('Renamed');
+ expect($channel->fresh()->default)->toBeTrue();
+});
diff --git a/tests/panel/Feature/Settings/ChannelEditTest.php b/tests/panel/Feature/Settings/ChannelEditTest.php
index 8a3de58003..af12aff7c0 100644
--- a/tests/panel/Feature/Settings/ChannelEditTest.php
+++ b/tests/panel/Feature/Settings/ChannelEditTest.php
@@ -82,6 +82,30 @@
expect(Channel::where('default', true)->count())->toBe(1);
});
+test('unsetting default on the default channel is rejected with a flash error', function () {
+ $channel = Channel::factory()->create(['name' => 'Webstore', 'default' => true]);
+
+ $this->from(route('panel.settings.channels.edit', $channel))
+ ->put(route('panel.settings.channels.update', $channel), [
+ 'name' => 'Webstore',
+ 'default' => false,
+ ])->assertRedirect(route('panel.settings.channels.edit', $channel))
+ ->assertSessionHas('error', __('panel::channels.default_unset_blocked'));
+
+ expect($channel->fresh()->default)->toBeTrue();
+});
+
+test('the default channel cannot be deleted and shows a flash error', function () {
+ $channel = Channel::factory()->create(['default' => true]);
+
+ $this->from(route('panel.settings.channels.edit', $channel))
+ ->delete(route('panel.settings.channels.destroy', $channel))
+ ->assertRedirect(route('panel.settings.channels.edit', $channel))
+ ->assertSessionHas('error', __('panel::channels.delete_blocked_default'));
+
+ expect(Channel::find($channel->id))->not->toBeNull();
+});
+
test('a channel with no order history can be deleted', function () {
$channel = Channel::factory()->create(['default' => false]);