From 97705755c5e31ed24139eb8586c2530b7dbd2390 Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Sat, 14 Mar 2020 14:59:52 +0800 Subject: [PATCH] fix admin can't add private texture --- app/Http/Controllers/ClosetController.php | 2 +- database/factories/TextureModelFactory.php | 2 ++ resources/misc/changelogs/en/5.0.0.md | 1 + resources/misc/changelogs/zh_CN/5.0.0.md | 1 + .../ControllersTest/ClosetControllerTest.php | 28 ++++++++++++++----- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/ClosetController.php b/app/Http/Controllers/ClosetController.php index cc70e8f9..62f089e4 100644 --- a/app/Http/Controllers/ClosetController.php +++ b/app/Http/Controllers/ClosetController.php @@ -100,7 +100,7 @@ class ClosetController extends Controller return json(trans('user.closet.add.not-found'), 1); } - if (!$texture->public && $texture->uploader != $user->uid) { + if (!$texture->public && ($texture->uploader != $user->uid && !$user->isAdmin())) { return json(trans('skinlib.show.private'), 1); } diff --git a/database/factories/TextureModelFactory.php b/database/factories/TextureModelFactory.php index fd04dee0..038f886e 100644 --- a/database/factories/TextureModelFactory.php +++ b/database/factories/TextureModelFactory.php @@ -19,3 +19,5 @@ $factory->define(Texture::class, function (Faker\Generator $faker) { $factory->state(Texture::class, 'alex', ['type' => 'alex']); $factory->state(Texture::class, 'cape', ['type' => 'cape']); + +$factory->state(Texture::class, 'private', ['public' => false]); diff --git a/resources/misc/changelogs/en/5.0.0.md b/resources/misc/changelogs/en/5.0.0.md index 0d2d4784..db8357ea 100644 --- a/resources/misc/changelogs/en/5.0.0.md +++ b/resources/misc/changelogs/en/5.0.0.md @@ -65,6 +65,7 @@ - Fixed that the same texture files with different models were treated as different textures. - Fixed when uploading duplicated texture, alert is missing. - Fixed that "score cost per closet item" isn't calculated at "texture upload" page. +- Fixed that administrator can't add private texture to his/her closet. ## Removed diff --git a/resources/misc/changelogs/zh_CN/5.0.0.md b/resources/misc/changelogs/zh_CN/5.0.0.md index 89f7a964..d6938f5d 100644 --- a/resources/misc/changelogs/zh_CN/5.0.0.md +++ b/resources/misc/changelogs/zh_CN/5.0.0.md @@ -65,6 +65,7 @@ - 修复同一材质文件但模型不同被认为不同材质的问题 - 修复上传重复材质时没有提示用户的问题 - 「材质上传」页面的积分消耗没有计算衣柜收藏所需的积分 +- 修复管理员不能添加私有材质到衣柜的问题 ## 移除 diff --git a/tests/HttpTest/ControllersTest/ClosetControllerTest.php b/tests/HttpTest/ControllersTest/ClosetControllerTest.php index 294d0056..2f8a5a7b 100644 --- a/tests/HttpTest/ControllersTest/ClosetControllerTest.php +++ b/tests/HttpTest/ControllersTest/ClosetControllerTest.php @@ -142,14 +142,28 @@ class ClosetControllerTest extends TestCase 'message' => trans('skinlib.show.private'), ]); - // Add a texture successfully - $this->postJson( - '/user/closet/add', - ['tid' => $texture->tid, 'name' => $name] - )->assertJson([ - 'code' => 0, - 'message' => trans('user.closet.add.success', ['name' => $name]), + // Administrator can add it. + $privateTexture = factory(Texture::class)->state('private')->create([ + 'uploader' => 0, ]); + $this->actingAs(factory(User::class)->state('admin')->create()) + ->postJson( + '/user/closet/add', + ['tid' => $privateTexture->tid, 'name' => $name] + )->assertJson([ + 'code' => 0, + 'message' => trans('user.closet.add.success', ['name' => $name]), + ]); + + // Add a texture successfully + $this->actingAs($this->user) + ->postJson( + '/user/closet/add', + ['tid' => $texture->tid, 'name' => $name] + )->assertJson([ + 'code' => 0, + 'message' => trans('user.closet.add.success', ['name' => $name]), + ]); $this->assertEquals($likes + 1, Texture::find($texture->tid)->likes); $this->user = User::find($this->user->uid); $this->assertEquals(90, $this->user->score);