From 9141af2a70226b5ae2accb531006bb6b5a4b98cd Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Thu, 4 Jun 2020 18:12:58 +0800 Subject: [PATCH] refactor fetching texture info --- app/Http/Controllers/SkinlibController.php | 8 ++--- resources/assets/src/scripts/urls.ts | 6 ++-- .../assets/src/views/skinlib/Show/index.tsx | 4 +-- .../assets/tests/views/skinlib/Show.test.tsx | 34 +++++++++---------- routes/web.php | 2 +- .../ControllersTest/SkinlibControllerTest.php | 17 ++-------- 6 files changed, 27 insertions(+), 44 deletions(-) diff --git a/app/Http/Controllers/SkinlibController.php b/app/Http/Controllers/SkinlibController.php index dfdb9354..4ccb4014 100644 --- a/app/Http/Controllers/SkinlibController.php +++ b/app/Http/Controllers/SkinlibController.php @@ -123,13 +123,9 @@ class SkinlibController extends Controller ]); } - public function info($tid) + public function info(Texture $texture) { - if ($t = Texture::find($tid)) { - return json('', 0, $t->toArray()); - } else { - return abort(404); - } + return $texture; } public function upload(Filter $filter) diff --git a/resources/assets/src/scripts/urls.ts b/resources/assets/src/scripts/urls.ts index 1efa708d..03ae2765 100644 --- a/resources/assets/src/scripts/urls.ts +++ b/resources/assets/src/scripts/urls.ts @@ -29,7 +29,7 @@ export default { }, skinlib: { home: () => '/skinlib' as const, - info: (tid: number) => `/skinlib/info/${tid}`, + info: (texture: number) => `/skinlib/info/${texture}`, list: () => '/skinlib/list' as const, show: (tid: number) => `/skinlib/show/${tid}`, upload: () => '/skinlib/upload' as const, @@ -37,8 +37,8 @@ export default { user: { home: () => '/user' as const, closet: { - page: () => '/user/closet' as const, add: () => '/user/closet' as const, + page: () => '/user/closet' as const, ids: () => '/user/closet/ids' as const, list: () => '/user/closet/list' as const, rename: (tid: number) => `/user/closet/${tid}`, @@ -46,8 +46,8 @@ export default { }, notification: (id: number) => `/user/notifications/${id}`, player: { - add: () => '/user/player' as const, page: () => '/user/player' as const, + add: () => '/user/player' as const, list: () => '/user/player/list' as const, delete: (player: number) => `/user/player/${player}`, rename: (player: number) => `/user/player/${player}/name`, diff --git a/resources/assets/src/views/skinlib/Show/index.tsx b/resources/assets/src/views/skinlib/Show/index.tsx index 902c5f1e..96a67049 100644 --- a/resources/assets/src/views/skinlib/Show/index.tsx +++ b/resources/assets/src/views/skinlib/Show/index.tsx @@ -40,8 +40,8 @@ const Show: React.FC = () => { .replace(blessing.base_url, '') .replace('show', 'info') - const { data } = await fetch.get>(url) - setTexture(data) + const texture = await fetch.get(url) + setTexture(texture) } fetchInfo() }, []) diff --git a/resources/assets/tests/views/skinlib/Show.test.tsx b/resources/assets/tests/views/skinlib/Show.test.tsx index 5cebb717..8abad3a4 100644 --- a/resources/assets/tests/views/skinlib/Show.test.tsx +++ b/resources/assets/tests/views/skinlib/Show.test.tsx @@ -54,7 +54,7 @@ afterEach(() => { }) test('without authenticated', async () => { - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) const { queryByText, queryByTitle } = render() await waitFor(() => expect(fetch.get).toBeCalledTimes(1)) @@ -72,7 +72,7 @@ test('without authenticated', async () => { }) test('authenticated but not uploader', async () => { - fetch.get.mockResolvedValue({ data: fixtureCape }) + fetch.get.mockResolvedValue(fixtureCape) const { queryByText, queryByTitle } = render() await waitFor(() => expect(fetch.get).toBeCalledTimes(1)) @@ -92,7 +92,7 @@ test('authenticated but not uploader', async () => { test('uploader is not existed', async () => { window.blessing.extra.nickname = 'not existed' window.blessing.extra.uploaderExists = false - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) const { queryByText } = render() await waitFor(() => expect(fetch.get).toBeCalledTimes(1)) @@ -103,7 +103,7 @@ test('badges', async () => { window.blessing.extra.badges = [ { text: 'STAFF', color: 'primary' }, ] as Badge[] - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) const { queryByText } = render() await waitFor(() => expect(fetch.get).toBeCalledTimes(1)) @@ -114,7 +114,7 @@ test('apply to player', async () => { window.blessing.extra.currentUid = 2 window.blessing.extra.inCloset = true fetch.get - .mockResolvedValueOnce({ data: fixtureSkin }) + .mockResolvedValueOnce(fixtureSkin) .mockResolvedValueOnce([]) const { getByText, getByLabelText } = render() @@ -128,7 +128,7 @@ test('apply to player', async () => { test('set as avatar', async () => { window.blessing.extra.currentUid = fixtureSkin.uploader + 1 - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) fetch.post.mockResolvedValue({ code: 0, message: 'ok' }) const { getByText, getByRole, queryByText } = render() @@ -145,7 +145,7 @@ test('set as avatar', async () => { describe('download texture', () => { beforeEach(() => { window.blessing.extra.currentUid = fixtureSkin.uploader + 1 - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) }) it('allowed', async () => { @@ -166,7 +166,7 @@ describe('download texture', () => { describe('operation panel', () => { beforeEach(() => { - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) }) it('uploader', async () => { @@ -192,7 +192,7 @@ describe('operation panel', () => { describe('edit texture name', () => { beforeEach(() => { window.blessing.extra.currentUid = fixtureSkin.uploader - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) }) it('cancelled', async () => { @@ -273,7 +273,7 @@ describe('edit texture name', () => { describe('edit texture type', () => { beforeEach(() => { Object.assign(window.blessing.extra, { currentUid: fixtureSkin.uploader }) - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) }) it('cancelled', async () => { @@ -345,7 +345,7 @@ describe('edit texture type', () => { describe('add to closet', () => { beforeEach(() => { window.blessing.extra.currentUid = fixtureSkin.uploader + 1 - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) }) it('cancelled', async () => { @@ -416,7 +416,7 @@ describe('remove from closet', () => { beforeEach(() => { window.blessing.extra.currentUid = fixtureSkin.uploader + 1 window.blessing.extra.inCloset = true - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) }) it('succeeded', async () => { @@ -455,7 +455,7 @@ describe('remove from closet', () => { describe('report texture', () => { beforeEach(() => { window.blessing.extra.currentUid = fixtureSkin.uploader + 1 - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) }) it('positive score', async () => { @@ -537,7 +537,7 @@ describe('change privacy', () => { }) it('cancelled', async () => { - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) const { getByText, queryByText } = render() await waitFor(() => expect(fetch.get).toBeCalledTimes(1)) @@ -549,7 +549,7 @@ describe('change privacy', () => { }) it('succeeded', async () => { - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) fetch.post.mockResolvedValue({ code: 0, message: 'ok' }) const { getByText, getByRole, queryByText } = render() @@ -568,7 +568,7 @@ describe('change privacy', () => { }) it('failed', async () => { - fetch.get.mockResolvedValue({ data: { ...fixtureSkin, public: false } }) + fetch.get.mockResolvedValue({ ...fixtureSkin, public: false }) fetch.post.mockResolvedValue({ code: 1, message: 'failed' }) const { getByText, getByRole, queryByText } = render() @@ -590,7 +590,7 @@ describe('change privacy', () => { describe('delete texture', () => { beforeEach(() => { window.blessing.extra.currentUid = fixtureSkin.uploader - fetch.get.mockResolvedValue({ data: fixtureSkin }) + fetch.get.mockResolvedValue(fixtureSkin) }) it('cancelled', async () => { diff --git a/routes/web.php b/routes/web.php index ea2a7d53..f47d8b79 100644 --- a/routes/web.php +++ b/routes/web.php @@ -93,7 +93,7 @@ Route::prefix('user') Route::prefix('skinlib')->name('skinlib.')->group(function () { Route::view('', 'skinlib.index')->name('home'); - Route::get('info/{tid}', 'SkinlibController@info')->name('info'); + Route::get('info/{texture}', 'SkinlibController@info')->name('info'); Route::get('show/{tid}', 'SkinlibController@show')->name('show'); Route::get('list', 'SkinlibController@library')->name('list'); diff --git a/tests/HttpTest/ControllersTest/SkinlibControllerTest.php b/tests/HttpTest/ControllersTest/SkinlibControllerTest.php index fc5ecea0..21f4e45b 100644 --- a/tests/HttpTest/ControllersTest/SkinlibControllerTest.php +++ b/tests/HttpTest/ControllersTest/SkinlibControllerTest.php @@ -191,22 +191,9 @@ class SkinlibControllerTest extends TestCase public function testInfo() { - // Non-existed texture - $this->get('/skinlib/info/1')->assertNotFound(); - $texture = factory(Texture::class)->create(); - $this->get('/skinlib/info/'.$texture->tid) - ->assertJson(['data' => [ - 'tid' => $texture->tid, - 'name' => $texture->name, - 'type' => $texture->type, - 'likes' => $texture->likes, - 'hash' => $texture->hash, - 'size' => $texture->size, - 'uploader' => $texture->uploader, - 'public' => $texture->public, - 'upload_at' => $texture->upload_at->format('Y-m-d H:i:s'), - ]]); + $this->get(route('skinlib.info', ['texture' => $texture])) + ->assertJson($texture->toArray()); } public function testUpload()