From e6f286c743baab90a362f67ebac2985f2b9b13c6 Mon Sep 17 00:00:00 2001 From: Sorrel Bri Date: Wed, 22 Jan 2020 16:30:28 -0800 Subject: [PATCH] refactor api room endpoint to return unjoined game room data --- play-node-go/src/pages/Room/Room.js | 1 + .../src/reducers/err/stateReducer.err.js | 8 ++ .../src/reducers/rooms/stateReducer.rooms.js | 74 +++++++++++++------ .../reducers/rooms/stateReducer.rooms.test.js | 25 ++++--- 4 files changed, 75 insertions(+), 33 deletions(-) diff --git a/play-node-go/src/pages/Room/Room.js b/play-node-go/src/pages/Room/Room.js index ab929c3..51073cb 100644 --- a/play-node-go/src/pages/Room/Room.js +++ b/play-node-go/src/pages/Room/Room.js @@ -31,6 +31,7 @@ const Room = (props) => { const roomSocket = socketIOClient(`${config.socketAddress}/${roomId}`) const roomSocketConnect = () => { + console.log(roomId) roomSocket.emit('connect'); // ! dispatch data roomSocket.on('connected', data => setSocketData('room socket connected')); diff --git a/play-node-go/src/reducers/err/stateReducer.err.js b/play-node-go/src/reducers/err/stateReducer.err.js index ad456e5..876d1c4 100644 --- a/play-node-go/src/reducers/err/stateReducer.err.js +++ b/play-node-go/src/reducers/err/stateReducer.err.js @@ -6,6 +6,9 @@ export const errorReducer = (state: state, action: action):state => { case 'AUTH_ERROR': return authErrorReducer(state, action); + case 'JOIN_ROOM_ERROR': + return joinRoomErrorReducer(state, action); + default: return state; } @@ -14,4 +17,9 @@ export const errorReducer = (state: state, action: action):state => { function authErrorReducer(state: state, action: action): state { const auth = action.body.authError; return {...state, errors: {auth} }; +} + +function joinRoomErrorReducer(state: state, action: action): state { + const joinRoom = action.body.joinRoomError; + return { ...state, errors: {joinRoom} } } \ No newline at end of file diff --git a/play-node-go/src/reducers/rooms/stateReducer.rooms.js b/play-node-go/src/reducers/rooms/stateReducer.rooms.js index a77c30e..a706518 100644 --- a/play-node-go/src/reducers/rooms/stateReducer.rooms.js +++ b/play-node-go/src/reducers/rooms/stateReducer.rooms.js @@ -9,23 +9,19 @@ export const roomsReducer = (state: state, action: action):state => { const rooms = action.body; return {...state, rooms}; + case 'SET_CURRENT': + const currentRoom = action.body; + return {...state, currentRoom}; + case 'JOIN_ROOM': { - // SET MESSAGES - const stateWithMessages = action.body.messages.length ? setMessages(state, action.body) : state; - - // SET CURRENT ROOM + const stateWithRoom = setCurrentRoom(state, action); + const stateWithMessages = setMessages(stateWithRoom, action); + if (!action.body.roomGames) { + return setJoinRoomError(state); + } + const stateWithGames = setGames(stateWithMessages, action); - // if (!data.roomGames.length) { - // const errorAction = { - // type: 'ERR', - // message: 'JOIN_ROOM', - // body: { joinRoomError: 'Game room has no games' } - // } - // return stateReducer(stateWithMessages, errorAction); - // } - - // SET GAMES - return stateWithMessages; + return stateWithGames; } @@ -34,11 +30,47 @@ export const roomsReducer = (state: state, action: action):state => { } } -function setMessages(state, body) { - const messageAction = { - type: 'MESSAGES', - message: 'SET_MESSAGES', - body: body.messages +function setMessages(state, action) { + if(action.body.messages.length) { + const messages = action.body.messages; + const messageAction = { + type: 'MESSAGES', + message: 'SET_MESSAGES', + body: messages + } + return stateReducer(state, messageAction); } - return stateReducer(state, messageAction) + return state; +} + +function setJoinRoomError(state, body) { + const errorAction = { + type: 'ERR', + message: 'JOIN_ROOM_ERROR', + body: { joinRoomError: 'Game room has no games' } + } + return stateReducer(state, errorAction); +} + +function setCurrentRoom(state, action) { + const currentRoom = action.body.currentRoom; + const roomAction = { + type: 'ROOMS', + message: 'SET_CURRENT', + body: currentRoom + } + return stateReducer(state, roomAction); +} + +function setGames(state, action) { + if (action.body.roomGames.length) { + const games = action.body.roomGames; + const gamesAction = { + type: 'GAMES', + message: 'SET_GAMES', + body: games + } + return stateReducer(state, gamesAction); + } + return state; } \ No newline at end of file diff --git a/play-node-go/src/reducers/rooms/stateReducer.rooms.test.js b/play-node-go/src/reducers/rooms/stateReducer.rooms.test.js index fe8b255..8403fbd 100644 --- a/play-node-go/src/reducers/rooms/stateReducer.rooms.test.js +++ b/play-node-go/src/reducers/rooms/stateReducer.rooms.test.js @@ -11,18 +11,20 @@ const roomsData = [ ] const joinRoomData = { - "roomGames": [ - { - "id":1, "name":"main", - "description":"A general place to play Go", - "language":"EN", "komi":6.5, "handicap":0, "board_size":19, - "player_black":"anon", "player_white":"anon", - "player_black_rank":"K3", "player_white_rank":"K2" + currentRoom: { + id:1, name:"main", + description:"A general place to play Go", language:"EN" + }, + roomGames: [ + { + komi:6.5, handicap:0, board_size:19, + player_black:"anon", player_white:"anon", + player_black_rank:"K3", player_white_rank:"K2" } ], - "messages": [ + messages: [ { - "content": "Hey! Welcome to the general room!", "username": "userOne", "admin":true + content: "Hey! Welcome to the general room!", username: "userOne", admin: true } ] } @@ -42,12 +44,11 @@ it('set rooms returns state with rooms added', () => { it('join room returns state with current room, games and messages all populated', () => { const state = initState(); const action = {type: 'ROOMS', message: 'JOIN_ROOM', body: joinRoomData}; - const normalizedRoomGames = joinRoomData.roomGames.map(game => {delete game.id; delete game.name; delete game.description; return game}); expect(stateReducer(state, action)).toEqual({ ...state, - currentRoom: roomsData[0], + currentRoom: joinRoomData.currentRoom, messages: joinRoomData.messages, - roomGames: normalizedRoomGames + games: joinRoomData.roomGames }) }); \ No newline at end of file