From 504d985c8dbba04dde934f36c69dd54a3f210b59 Mon Sep 17 00:00:00 2001 From: Pig Fang Date: Sat, 9 May 2020 10:11:07 +0800 Subject: [PATCH] tweak players API (breaking change) --- app/Http/Controllers/PlayerController.php | 10 ++---- .../assets/src/views/user/Players/index.tsx | 10 +++--- .../assets/tests/views/user/Players.test.tsx | 34 +++++++++++++------ resources/misc/changelogs/en/5.0.0.md | 3 +- resources/misc/changelogs/zh_CN/5.0.0.md | 1 + routes/api.php | 2 +- routes/web.php | 2 +- .../ControllersTest/PlayerControllerTest.php | 9 ++--- 8 files changed, 36 insertions(+), 35 deletions(-) diff --git a/app/Http/Controllers/PlayerController.php b/app/Http/Controllers/PlayerController.php index 96c8591d..30225e7b 100644 --- a/app/Http/Controllers/PlayerController.php +++ b/app/Http/Controllers/PlayerController.php @@ -60,15 +60,9 @@ class PlayerController extends Controller ]); } - public function listAll() + public function list() { - $players = Auth::user() - ->players() - ->select('pid', 'name', 'tid_skin', 'tid_cape') - ->get() - ->toArray(); - - return json('', 0, $players); + return Auth::user()->players; } public function add(Request $request, Dispatcher $dispatcher) diff --git a/resources/assets/src/views/user/Players/index.tsx b/resources/assets/src/views/user/Players/index.tsx index c6755031..40a64c82 100644 --- a/resources/assets/src/views/user/Players/index.tsx +++ b/resources/assets/src/views/user/Players/index.tsx @@ -30,12 +30,10 @@ const Players: React.FC = () => { useEffect(() => { const getPlayers = async () => { setIsLoading(true) - const { data } = await fetch.get>( - '/user/player/list', - ) - setPlayers(data) - if (data.length === 1) { - selectPlayer(data[0]) + const players = await fetch.get('/user/player/list') + setPlayers(players) + if (players.length === 1) { + selectPlayer(players[0]) } setIsLoading(false) } diff --git a/resources/assets/tests/views/user/Players.test.tsx b/resources/assets/tests/views/user/Players.test.tsx index 3783eb4b..18c2f74c 100644 --- a/resources/assets/tests/views/user/Players.test.tsx +++ b/resources/assets/tests/views/user/Players.test.tsx @@ -34,7 +34,7 @@ afterEach(() => { }) test('loading indicator', () => { - fetch.get.mockResolvedValue({ data: [] }) + fetch.get.mockResolvedValue([]) const { queryByTitle } = render() expect(queryByTitle('Loading...')).toBeInTheDocument() }) @@ -48,7 +48,7 @@ test('search players', async () => { tid_cape: 4, last_modified: new Date().toString(), } - fetch.get.mockResolvedValue({ data: [fixture, fixture2] }) + fetch.get.mockResolvedValue([fixture, fixture2]) const { getByPlaceholderText, queryByText } = render() await waitFor(() => expect(fetch.get).toBeCalledTimes(1)) @@ -63,7 +63,10 @@ test('search players', async () => { describe('select player automatically', () => { it('only one player', async () => { - fetch.get.mockResolvedValue({ data: [fixture] }) + fetch.get + .mockResolvedValueOnce([fixture]) + .mockResolvedValueOnce({ data: { hash: '', type: 'steve' } }) + .mockResolvedValueOnce({ data: { hash: '', type: 'cape' } }) render() await waitFor(() => expect(fetch.get).toBeCalledTimes(1)) @@ -80,7 +83,7 @@ describe('select player automatically', () => { tid_cape: 4, last_modified: new Date().toString(), } - fetch.get.mockResolvedValue({ data: [fixture, fixture2] }) + fetch.get.mockResolvedValue([fixture, fixture2]) render() await waitFor(() => expect(fetch.get).toBeCalledTimes(1)) @@ -92,7 +95,7 @@ describe('select player automatically', () => { describe('2d preview', () => { it('skin and cape', async () => { fetch.get - .mockResolvedValueOnce({ data: [fixture] }) + .mockResolvedValueOnce([fixture]) .mockResolvedValueOnce({ data: { hash: 'a', type: 'steve' } }) .mockResolvedValueOnce({ data: { hash: 'b', type: 'cape' } }) @@ -113,7 +116,7 @@ describe('2d preview', () => { it('skin only', async () => { fetch.get - .mockResolvedValueOnce({ data: [{ ...fixture, tid_cape: 0 }] }) + .mockResolvedValueOnce([{ ...fixture, tid_cape: 0 }]) .mockResolvedValueOnce({ data: { hash: 'a', type: 'steve' } }) const { getByAltText, queryByAltText, getByText, queryByText } = render( @@ -133,7 +136,7 @@ describe('2d preview', () => { it('cape only', async () => { fetch.get - .mockResolvedValueOnce({ data: [{ ...fixture, tid_skin: 0 }] }) + .mockResolvedValueOnce([{ ...fixture, tid_skin: 0 }]) .mockResolvedValueOnce({ data: { hash: 'a', type: 'cape' } }) const { getByAltText, queryByAltText, getByText, queryByText } = render( @@ -154,7 +157,7 @@ describe('2d preview', () => { describe('create player', () => { beforeEach(() => { - fetch.get.mockResolvedValue({ data: [] }) + fetch.get.mockResolvedValue([]) }) it('alert if score is enough', async () => { @@ -259,7 +262,10 @@ describe('create player', () => { describe('edit player name', () => { beforeEach(() => { - fetch.get.mockResolvedValue({ data: [fixture] }) + fetch.get + .mockResolvedValueOnce([fixture]) + .mockResolvedValueOnce({ data: { hash: 'a', type: 'skin' } }) + .mockResolvedValueOnce({ data: { hash: 'b', type: 'cape' } }) }) it('succeeded', async () => { @@ -351,7 +357,10 @@ describe('edit player name', () => { describe('reset texture', () => { beforeEach(() => { - fetch.get.mockResolvedValue({ data: [fixture] }) + fetch.get + .mockResolvedValueOnce([fixture]) + .mockResolvedValueOnce({ data: { hash: 'a', type: 'skin' } }) + .mockResolvedValueOnce({ data: { hash: 'b', type: 'cape' } }) }) it('clear skin and cape', async () => { @@ -471,7 +480,10 @@ describe('reset texture', () => { describe('delete player', () => { beforeEach(() => { - fetch.get.mockResolvedValue({ data: [fixture] }) + fetch.get + .mockResolvedValueOnce([fixture]) + .mockResolvedValueOnce({ data: { hash: 'a', type: 'skin' } }) + .mockResolvedValueOnce({ data: { hash: 'b', type: 'cape' } }) }) it('succeeded', async () => { diff --git a/resources/misc/changelogs/en/5.0.0.md b/resources/misc/changelogs/en/5.0.0.md index 82374015..25014211 100644 --- a/resources/misc/changelogs/en/5.0.0.md +++ b/resources/misc/changelogs/en/5.0.0.md @@ -29,7 +29,7 @@ - Added support of clicking on the uploader's nickname in skin library to view other uploads of that user. - Added `php artisan update` command for updating by CLI. -## Tweaked +## Changed - Tweaked policy of retrieve CA cert for GuzzleHttp. - Refactor account system. @@ -49,6 +49,7 @@ - Make "CSRF token mismatched" error friendly. - Reduced times of sending verification email. - Changed icon of "Walking/Running" button of skin viewer. +- Changed API of retrieving all players. ## Fixed diff --git a/resources/misc/changelogs/zh_CN/5.0.0.md b/resources/misc/changelogs/zh_CN/5.0.0.md index 37074262..e8ddcf59 100644 --- a/resources/misc/changelogs/zh_CN/5.0.0.md +++ b/resources/misc/changelogs/zh_CN/5.0.0.md @@ -49,6 +49,7 @@ - 使 "CSRF token mismatched" 的错误提示变得友好 - 减少发送验证邮件的次数 - 更换皮肤预览器的「行走/奔跑」按钮图标 +- 更改获取角色的 API ## 修复 diff --git a/routes/api.php b/routes/api.php index 41fb4b00..87944514 100644 --- a/routes/api.php +++ b/routes/api.php @@ -16,7 +16,7 @@ Route::prefix('user')->middleware('auth:jwt,oauth')->group(function () { }); Route::prefix('players')->middleware('auth:jwt,oauth')->group(function () { - Route::get('', 'PlayerController@listAll'); + Route::get('', 'PlayerController@list'); Route::post('', 'PlayerController@add'); Route::delete('{pid}', 'PlayerController@delete'); Route::put('{pid}/name', 'PlayerController@rename'); diff --git a/routes/web.php b/routes/web.php index 6defaf8c..067ffd00 100644 --- a/routes/web.php +++ b/routes/web.php @@ -70,7 +70,7 @@ Route::prefix('user') ->middleware('verified') ->group(function () { Route::get('', 'PlayerController@index')->name('page'); - Route::get('list', 'PlayerController@listAll')->name('list'); + Route::get('list', 'PlayerController@list')->name('list'); Route::post('add', 'PlayerController@add')->name('add'); Route::post('set/{pid}', 'PlayerController@setTexture')->name('set'); Route::post('texture/clear/{pid}', 'PlayerController@clearTexture')->name('clear'); diff --git a/tests/HttpTest/ControllersTest/PlayerControllerTest.php b/tests/HttpTest/ControllersTest/PlayerControllerTest.php index 0538f63c..8de0b4e3 100644 --- a/tests/HttpTest/ControllersTest/PlayerControllerTest.php +++ b/tests/HttpTest/ControllersTest/PlayerControllerTest.php @@ -29,18 +29,13 @@ class PlayerControllerTest extends TestCase $filter->assertApplied('grid:user.player'); } - public function testListAll() + public function testList() { $user = factory(User::class)->create(); $player = factory(Player::class)->create(['uid' => $user->uid]); $this->actingAs($user) ->get('/user/player/list') - ->assertJson(['data' => [ - [ - 'pid' => $player->pid, - 'name' => $player->name, - ], - ]]); + ->assertJson([$player->toArray()]); } public function testAdd()