改为独立座驾模块
This commit is contained in:
@@ -8,10 +8,10 @@
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use App\Models\Ride;
|
||||
use App\Models\Room;
|
||||
use App\Models\ShopItem;
|
||||
use App\Models\User;
|
||||
use App\Models\UserPurchase;
|
||||
use App\Models\UserRidePurchase;
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Illuminate\Support\Facades\Redis;
|
||||
use Tests\TestCase;
|
||||
@@ -41,9 +41,9 @@ class RideControllerTest extends TestCase
|
||||
$user = User::factory()->create();
|
||||
$ride = $this->createRide(['name' => '歼-35测试座驾', 'slug' => 'ride_j35']);
|
||||
|
||||
UserPurchase::create([
|
||||
UserRidePurchase::create([
|
||||
'user_id' => $user->id,
|
||||
'shop_item_id' => $ride->id,
|
||||
'ride_id' => $ride->id,
|
||||
'status' => 'active',
|
||||
'price_paid' => 18888,
|
||||
'expires_at' => now()->addDays(3),
|
||||
@@ -76,9 +76,9 @@ class RideControllerTest extends TestCase
|
||||
->assertJsonPath('status', 'error');
|
||||
|
||||
$this->assertSame(100, (int) $user->fresh()->jjb);
|
||||
$this->assertDatabaseMissing('user_purchases', [
|
||||
$this->assertDatabaseMissing('user_ride_purchases', [
|
||||
'user_id' => $user->id,
|
||||
'shop_item_id' => $ride->id,
|
||||
'ride_id' => $ride->id,
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -102,9 +102,9 @@ class RideControllerTest extends TestCase
|
||||
->assertJsonPath('current_ride.item.slug', 'ride_99a')
|
||||
->assertJsonPath('jjb', 11112);
|
||||
|
||||
$this->assertDatabaseHas('user_purchases', [
|
||||
$this->assertDatabaseHas('user_ride_purchases', [
|
||||
'user_id' => $user->id,
|
||||
'shop_item_id' => $ride->id,
|
||||
'ride_id' => $ride->id,
|
||||
'status' => 'active',
|
||||
'price_paid' => 18888,
|
||||
]);
|
||||
@@ -120,9 +120,9 @@ class RideControllerTest extends TestCase
|
||||
$this->joinRoom($user, $room);
|
||||
$ride = $this->createRide(['price' => 1000, 'duration_days' => 7]);
|
||||
|
||||
$purchase = UserPurchase::create([
|
||||
$purchase = UserRidePurchase::create([
|
||||
'user_id' => $user->id,
|
||||
'shop_item_id' => $ride->id,
|
||||
'ride_id' => $ride->id,
|
||||
'status' => 'active',
|
||||
'price_paid' => 1000,
|
||||
'expires_at' => now()->addDays(2),
|
||||
@@ -136,14 +136,14 @@ class RideControllerTest extends TestCase
|
||||
$response->assertOk();
|
||||
|
||||
$this->assertSame('cancelled', $purchase->fresh()->status);
|
||||
$activePurchase = UserPurchase::query()
|
||||
$activePurchase = UserRidePurchase::query()
|
||||
->where('user_id', $user->id)
|
||||
->where('shop_item_id', $ride->id)
|
||||
->where('ride_id', $ride->id)
|
||||
->where('status', 'active')
|
||||
->firstOrFail();
|
||||
$this->assertSame(1000, (int) $activePurchase->price_paid);
|
||||
$this->assertTrue($activePurchase->expires_at->greaterThan(now()->addDays(8)));
|
||||
$this->assertSame(1, UserPurchase::query()->where('user_id', $user->id)->where('status', 'active')->count());
|
||||
$this->assertSame(1, UserRidePurchase::query()->where('user_id', $user->id)->where('status', 'active')->count());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -157,9 +157,9 @@ class RideControllerTest extends TestCase
|
||||
$oldRide = $this->createRide(['slug' => 'ride_j35', 'price' => 1000]);
|
||||
$newRide = $this->createRide(['slug' => 'ride_df5c', 'price' => 2000]);
|
||||
|
||||
$oldPurchase = UserPurchase::create([
|
||||
$oldPurchase = UserRidePurchase::create([
|
||||
'user_id' => $user->id,
|
||||
'shop_item_id' => $oldRide->id,
|
||||
'ride_id' => $oldRide->id,
|
||||
'status' => 'active',
|
||||
'price_paid' => 1000,
|
||||
'expires_at' => now()->addDays(3),
|
||||
@@ -174,66 +174,78 @@ class RideControllerTest extends TestCase
|
||||
->assertJsonPath('current_ride.item.slug', 'ride_df5c');
|
||||
|
||||
$this->assertSame('cancelled', $oldPurchase->fresh()->status);
|
||||
$this->assertDatabaseHas('user_purchases', [
|
||||
$this->assertDatabaseHas('user_ride_purchases', [
|
||||
'user_id' => $user->id,
|
||||
'shop_item_id' => $newRide->id,
|
||||
'ride_id' => $newRide->id,
|
||||
'status' => 'active',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试后台商店可以保存座驾类型和欢迎语字段。
|
||||
* 测试后台座驾独立模块可以保存欢迎语字段。
|
||||
*/
|
||||
public function test_admin_can_store_ride_with_welcome_message(): void
|
||||
{
|
||||
$admin = User::factory()->create(['id' => 1, 'user_level' => 100]);
|
||||
|
||||
$response = $this->actingAs($admin)->post(route('admin.shop.store'), [
|
||||
$response = $this->actingAs($admin)->post(route('admin.rides.store'), [
|
||||
'name' => '测试座驾',
|
||||
'slug' => 'ride_test',
|
||||
'effect_key' => 'test',
|
||||
'icon' => '🚘',
|
||||
'description' => '测试座驾说明',
|
||||
'price' => 12345,
|
||||
'type' => 'ride',
|
||||
'duration_days' => 7,
|
||||
'duration_minutes' => 0,
|
||||
'intimacy_bonus' => 0,
|
||||
'charm_bonus' => 0,
|
||||
'welcome_message' => '【{name}】驾驶【{ride}】入场',
|
||||
'sort_order' => 99,
|
||||
'is_active' => 1,
|
||||
]);
|
||||
|
||||
$response->assertRedirect(route('admin.shop.index'));
|
||||
$this->assertDatabaseHas('shop_items', [
|
||||
$response->assertRedirect(route('admin.rides.index'));
|
||||
$this->assertDatabaseHas('rides', [
|
||||
'slug' => 'ride_test',
|
||||
'type' => 'ride',
|
||||
'effect_key' => 'test',
|
||||
'welcome_message' => '【{name}】驾驶【{ride}】入场',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建测试用座驾商品。
|
||||
* 测试后台座驾管理页面可以显示独立座驾数据。
|
||||
*/
|
||||
public function test_admin_can_view_ride_management_page(): void
|
||||
{
|
||||
$admin = User::factory()->create(['id' => 1, 'user_level' => 100]);
|
||||
$ride = $this->createRide(['name' => '后台可见座驾', 'slug' => 'ride_admin_visible']);
|
||||
|
||||
$response = $this->actingAs($admin)->get(route('admin.rides.index'));
|
||||
|
||||
$response->assertOk()
|
||||
->assertSee('座驾管理')
|
||||
->assertSee($ride->name)
|
||||
->assertSee('ride_admin_visible');
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建测试用独立座驾。
|
||||
*
|
||||
* @param array<string, mixed> $attributes 覆盖字段
|
||||
*/
|
||||
private function createRide(array $attributes = []): ShopItem
|
||||
private function createRide(array $attributes = []): Ride
|
||||
{
|
||||
$data = array_merge([
|
||||
'name' => '测试座驾',
|
||||
'slug' => 'ride_test_'.str()->random(8),
|
||||
'effect_key' => 'test_'.str()->random(8),
|
||||
'description' => '测试座驾说明',
|
||||
'icon' => '🚘',
|
||||
'price' => 1000,
|
||||
'type' => 'ride',
|
||||
'duration_days' => 7,
|
||||
'duration_minutes' => 0,
|
||||
'sort_order' => 80,
|
||||
'is_active' => true,
|
||||
'welcome_message' => '【{name}】驾驶【{ride}】入场',
|
||||
], $attributes);
|
||||
|
||||
return ShopItem::query()->updateOrCreate(
|
||||
return Ride::query()->updateOrCreate(
|
||||
['slug' => $data['slug']],
|
||||
$data,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user