def test_room_ready(self): client1 = WSClient() client1.login(username='******', password='******') client1.send_and_consume('websocket.connect', path='/api/websocket/') client1.receive() client2 = WSClient() client2.login(username='******', password='******') client2.send_and_consume('websocket.connect', path='/api/websocket/') client2.receive() data = { 'room_id': 'room', } req = request('room-join', data, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) client1.receive() client1.receive() client2.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) client2.receive() client2.receive() client1.receive() req = request('room-ready', {'ready': True}, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_ready_consumer(self.get_next_message('room-ready')) room_cache = cache.get('room:room') response = client1.receive() self.assertTrue(response['success']) self.assertTrue(room_cache['players'][0]['ready']) self.assertFalse(room_cache['players'][1]['ready']) client1.receive() response = client2.receive() self.assertEqual(response['event'], 'room-ready') self.assertEqual(response['data']['player'], 'skystar1') req = request('room-ready', {'ready': False}, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_ready_consumer(self.get_next_message('room-ready')) room_cache = cache.get('room:room') response = client1.receive() self.assertTrue(response['success']) self.assertFalse(room_cache['players'][0]['ready'])
def test_room_join_with_password(self): client = WSClient() client.login(username='******', password='******') client.send_and_consume('websocket.connect', path='/api/websocket/') client.receive() data = {'room_id': 'room2', 'password': '******'} req = request('room-join', data, nonce='test') client.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) response = client.receive() room_cache = cache.get('room:room2') player_room_cache = cache.get('player-room:skystar1') self.assertTrue(response['success']) result = response['result'] self.assertEqual(result['room_id'], 'room2') self.assertEqual(result['room_id'], player_room_cache) self.assertEqual(len(room_cache['players']), 1) self.assertEqual(room_cache['players'][0]['username'], 'skystar1')
def test_room_join_with_wrong_room_id(self): client = WSClient() client.login(username='******', password='******') client.send_and_consume('websocket.connect', path='/api/websocket/') client.receive() data = { 'room_id': 'room3', } req = request('room-join', data, nonce='test') client.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) response = client.receive() player_room_cache = cache.get('player-room:skystar1') self.assertFalse(response['success']) self.assertEqual(response['error']['reason'], 'Room does not exist') self.assertIsNone(player_room_cache)
def test_room_join_broadcast(self): client1 = WSClient() client1.login(username='******', password='******') client1.send_and_consume('websocket.connect', path='/api/websocket/') client2 = WSClient() client2.login(username='******', password='******') client2.send_and_consume('websocket.connect', path='/api/websocket/') client3 = WSClient() client3.login(username='******', password='******') client3.send_and_consume('websocket.connect', path='/api/websocket/') client1.receive() client2.receive() client3.receive() data = { 'room_id': 'room', } req = request('room-join', data, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) client1.receive() self.assertEqual(client1.receive()['data']['player'], 'skystar1') client2.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) self.assertEqual(len(client2.receive()['result']['players']), 2) response = client1.receive() room_cache = cache.get('room:room') self.assertIn('event', response) self.assertEqual(response['event'], 'room-join') result = response['data'] self.assertEqual(len(room_cache['players']), 2) self.assertEqual(room_cache['players'][0]['username'], 'skystar1') self.assertEqual(room_cache['players'][1]['username'], 'skystar2') self.assertEqual(result['player'], 'skystar2') client3.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) response = client3.receive() self.assertFalse(response['success']) self.assertEqual(response['error']['reason'], 'Room is full')
def test_room_ai(self): client = WSClient() client.login(username='******', password='******') client.send_and_consume('websocket.connect', path='/api/websocket/') client.receive() data = { 'room_id': 'test', } req = request('room-join', data, nonce='test') client.send_and_consume('websocket.receive', req, path='/api/websocket/') client.consume('room-join') client.receive() client.receive() nick = ['doge', 'bitcoin', 'ethereum', 'egger'] for i in range(4): req = request('room-ai-add', {}, nonce='test') client.send_and_consume('websocket.receive', req, path='/api/websocket/') client.consume('room-ai-add') client.receive() response = client.receive() self.assertEqual(response['event'], 'room-join') self.assertEqual(response['data']['player'], '*AI-' + nick[i]) client.receive() data = { 'ai_name': '*AI-ethereum', } req = request('room-ai-delete', data, nonce='test') client.send_and_consume('websocket.receive', req, path='/api/websocket/') client.consume('room-ai-delete') client.receive() response = client.receive() self.assertEqual(response['event'], 'room-leave') self.assertEqual(response['data']['player'], '*AI-ethereum')
def test_room_reset(self): client1 = WSClient() client1.login(username='******', password='******') client1.send_and_consume('websocket.connect', path='/api/websocket/') client1.receive() client2 = WSClient() client2.login(username='******', password='******') client2.send_and_consume('websocket.connect', path='/api/websocket/') client2.receive() data = { 'room_id': 'room', } req = request('room-join', data, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) client1.receive() client1.receive() req = request('room-join', data, nonce='test') client2.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) client2.receive() client2.receive() client1.receive() room_cache = cache.get('room:room') room_cache['game']['state'] = RoomState.PLAYING cache.set('room:room', room_cache) req = request('room-leave', {}, nonce='test') client2.send_and_consume('websocket.receive', req, path='/api/websocket/') room_leave_consumer(self.get_next_message('room-leave')) response = client1.receive() self.assertEqual(response['event'], 'room-leave') self.assertEqual(response['data']['player'], 'skystar2') room_reset_consumer(self.get_next_message('room-reset')) response = client1.receive() self.assertEqual(response['event'], 'room-reset') players = response['data']['players'] self.assertEqual(players[0]['username'], 'skystar1') room_cache = cache.get('room:room') new_room_data_ = reset_room_data(room_cache) self.assertEqual(room_cache, new_room_data_)
def test_room_start(self): client1 = WSClient() client1.login(username='******', password='******') client1.send_and_consume('websocket.connect', path='/api/websocket/') client1.receive() client2 = WSClient() client2.login(username='******', password='******') client2.send_and_consume('websocket.connect', path='/api/websocket/') client2.receive() data = { 'room_id': 'room', } req = request('room-join', data, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) client1.receive() client1.receive() req = request('room-ready', {'ready': True}, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_ready_consumer(self.get_next_message('room-ready')) client1.receive() client1.receive() req = request('room-start', {}, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_start_consumer(self.get_next_message('room-start')) response = client1.receive() self.assertFalse(response['success']) self.assertEqual(response['error']['reason'], 'Not enough players') req = request('room-join', data, nonce='test') client2.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) client2.receive() client2.receive() client1.receive() req = request('room-ready', {'ready': True}, nonce='test') client2.send_and_consume('websocket.receive', req, path='/api/websocket/') room_ready_consumer(self.get_next_message('room-ready')) client2.receive() client2.receive() client1.receive() req = request('room-start', {}, nonce='test') client2.send_and_consume('websocket.receive', req, path='/api/websocket/') room_start_consumer(self.get_next_message('room-start')) response = client2.receive() self.assertFalse(response['success']) self.assertEqual(response['error']['reason'], 'You are not host') room_cache = cache.get('room:room') self.assertIs(room_cache['game']['state'], RoomState.NOT_PLAYING) req = request('room-start', {}, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_start_consumer(self.get_next_message('room-start')) response = client1.receive() self.assertTrue(response['success']) response = client1.receive() self.assertEqual(response['event'], 'room-start') response = client2.receive() self.assertEqual(response['event'], 'room-start')
def test_room_leave(self): client1 = WSClient() client1.login(username='******', password='******') client1.send_and_consume('websocket.connect', path='/api/websocket/') client1.receive() client2 = WSClient() client2.login(username='******', password='******') client2.send_and_consume('websocket.connect', path='/api/websocket/') client2.receive() client3 = WSClient() client3.login(username='******', password='******') client3.send_and_consume('websocket.connect', path='/api/websocket/') client3.receive() data = { 'room_id': 'room', } req = request('room-join', data, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) client1.receive() client1.receive() client2.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) client2.receive() client2.receive() client1.receive() client3.send_and_consume('websocket.receive', req, path='/api/websocket/') room_join_consumer(self.get_next_message('room-join')) client3.receive() client3.receive() client1.receive() client2.receive() req = request('room-leave', {}, nonce='test') client1.send_and_consume('websocket.receive', req, path='/api/websocket/') room_leave_consumer(self.get_next_message('room-leave')) response = client1.receive() self.assertTrue(response['success']) self.assertEqual(response['result'], {}) player_room_cache = cache.get('player-room:skystar1') self.assertIsNone(player_room_cache) room_cache = cache.get('room:room') self.assertEqual(len(room_cache['players']), 2) response = client2.receive() client3.receive() self.assertEqual(response['event'], 'room-leave') self.assertEqual(response['data']['player'], 'skystar1') self.assertEqual(room_cache['players'][0]['username'], 'skystar2') self.assertIsNotNone(cache.get('session:skystar1')) self.assertIsNone(cache.get('player-room:skystar1')) client2.send_and_consume('websocket.disconnect', {'code': 1000}, path='/api/websocket') room_leave_consumer(self.get_next_message('room-leave')) room_cache = cache.get('room:room') response = client3.receive() self.assertEqual(response['event'], 'room-leave') self.assertEqual(response['data']['player'], 'skystar2') self.assertEqual(room_cache['players'][0]['username'], 'skystar3') self.assertIsNone(cache.get('session:skystar2')) self.assertIsNone(cache.get('player-room:skystar2')) req = request('room-leave', {}, nonce='test') client3.send_and_consume('websocket.receive', req, path='/api/websocket/') room_leave_consumer(self.get_next_message('room-leave')) room_cache = cache.get('room:room') self.assertIsNone(room_cache) self.assertFalse(Room.objects.filter(room_id='room').exists())