def test_do_not_give_for_friendly(self): """Не даётся модификация за вылет со стрельбой по своим""" _create(FILTER, TEST_PLAYER) controller = processing.PlayersController(IOC) aircraft_name = 'I-16 type 24' bot_name = 'BotPilot' target_name = 'static_il2' atype12_aircraft = tests.mocks.atype_12_stub(1, aircraft_name, 201, 'test_aircraft', -1) atype12_bot = tests.mocks.atype_12_stub(2, bot_name, 201, 'test_bot', 1) atype12_static = tests.mocks.atype_12_stub(3, target_name, 201, 'test_target', -1) atype10 = _atype_10_stub(1, 2, { 'x': 100, 'z': 100 }, aircraft_name, 201, 3) aircraft = IOC.objects_controller.create_object(atype12_aircraft) bot = IOC.objects_controller.create_object(atype12_bot) target = IOC.objects_controller.create_object(atype12_static) IOC.objects_controller.spawn(atype10) pos = {'x': 100.0, 'y': 100.0, 'z': 100.0} expect = TEST_PLAYER[constants.Player.UNLOCKS] # Act controller.start_mission() controller.spawn(atype10) IOC.objects_controller.kill( atypes.Atype3(7888, aircraft.obj_id, target.obj_id, pos)) controller.finish(atypes.Atype16(9222, bot.obj_id, pos)) controller.disconnect(TEST_ACCOUNT_ID) # Assert document = IOC.storage.players.collection.find_one(FILTER) self.assertEqual(expect, document[constants.Player.UNLOCKS])
def test_kick_restricted_takeoff(self): """Отправляется команда кика при запрещённом взлёте""" TEST_PLAYER[constants.Player.UNLOCKS] = 0 _create(FILTER, TEST_PLAYER) controller = processing.PlayersController(IOC) aircraft_name = 'I-16 type 24' bot_name = 'BotPilot' pos = {'x': 100.0, 'y': 100.0, 'z': 100.0} atype12_aircraft = tests.mocks.atype_12_stub(1, aircraft_name, 201, 'test_aircraft', -1) atype12_bot = tests.mocks.atype_12_stub(2, bot_name, 201, 'test_bot', 1) atype10 = _atype_10_stub(1, 2, { 'x': 100, 'z': 100 }, aircraft_name, 201, 3) aircraft = IOC.objects_controller.create_object(atype12_aircraft) IOC.objects_controller.create_object(atype12_bot) atype5 = atypes.Atype5(2132, aircraft.obj_id, pos) # Act controller.start_mission() IOC.objects_controller.spawn(atype10) controller.spawn(atype10) IOC.objects_controller.takeoff(atype5) controller.takeoff(atype5) # Assert self.assertGreater(len(IOC.console_mock.kicks), 0) # приветствие + предупреждение
def test_give_unlock_for_damage(self): """Даётся модификация за вылет с уроном""" _create(FILTER, TEST_PLAYER) controller = processing.PlayersController(IOC) aircraft_name = 'I-16 type 24' bot_name = 'BotPilot' target_name = 'static_il2' atype12_aircraft = tests.mocks.atype_12_stub(1, aircraft_name, 201, 'test_aircraft', -1) atype12_bot = tests.mocks.atype_12_stub(2, bot_name, 201, 'test_bot', 1) atype12_static = tests.mocks.atype_12_stub(3, target_name, 101, 'test_target', -1) atype10 = _atype_10_stub(1, 2, { 'x': 100, 'z': 100 }, aircraft_name, 201, 3) aircraft = IOC.objects_controller.create_object(atype12_aircraft) bot = IOC.objects_controller.create_object(atype12_bot) target = IOC.objects_controller.create_object(atype12_static) IOC.objects_controller.spawn(atype10) pos = {'x': 100.0, 'y': 100.0, 'z': 100.0} damage = 80.0 expect = TEST_PLAYER[constants.Player.UNLOCKS] + 1 # Act controller.start_mission() controller.spawn(atype10) IOC.objects_controller.damage( atypes.Atype2(8999, damage, aircraft.obj_id, target.obj_id, pos)) controller.finish(atypes.Atype16(9222, bot.obj_id, pos)) # Assert document = IOC.storage.players.collection.find_one(FILTER) self.assertEqual(expect, document[constants.Player.UNLOCKS])
def test_multiple_spawn_new_nick(self): """Пополняются известные ники при спауне с новым ником""" _create(FILTER, TEST_PLAYER) controller = processing.PlayersController(IOC) aircraft_name = 'I-16 type 24' bot_name = 'BotPilot' atype12_aircraft = tests.mocks.atype_12_stub(1, aircraft_name, 201, 'test_aircraft', -1) atype12_bot = tests.mocks.atype_12_stub(2, bot_name, 201, 'test_bot', 1) atype10 = _atype_10_stub(1, 2, { 'x': 100, 'z': 100 }, aircraft_name, 201, 3) IOC.objects_controller.create_object(atype12_aircraft) IOC.objects_controller.create_object(atype12_bot) IOC.objects_controller.spawn(atype10) # Act controller.start_mission() controller.spawn(atype10) atype10.name = 'new_nickname' controller.spawn(atype10) # Assert document = IOC.storage.players.collection.find_one(FILTER) self.assertEqual([TEST_NICKNAME], document[constants.Player.KNOWN_NICKNAMES])
def test_connect_player_init(self): """Инициализируется игрок на первом входе на сервер""" controller = processing.PlayersController(IOC) # Act controller.connect(TEST_ACCOUNT_ID) document = IOC.storage.players.collection.find_one(FILTER) # Assert self.assertNotEqual(None, document)
def test_disconnect_player(self): """Ставится статус offline при дисконнекте игрока""" _create(FILTER, TEST_PLAYER) controller = processing.PlayersController(IOC) # Act controller.disconnect(TEST_ACCOUNT_ID) # Assert document = IOC.storage.players.collection.find_one(FILTER) self.assertEqual(False, document[constants.Player.ONLINE])
def test_reset(self): """Сбрасывается состояние игроков в кампании""" TEST_PLAYER[constants.Player.UNLOCKS] = 4 _create(FILTER, TEST_PLAYER) controller = processing.PlayersController(IOC) # Act controller.reset() # Assert self.assertEqual( IOC.storage.players.find(TEST_ACCOUNT_ID).unlocks, IOC.config.gameplay.unlocks_start)
def test_connect_player_check_ban(self): """Отправляется команда бана забаненого пользователя через консоль""" _create(FILTER, TEST_PLAYER) controller = processing.PlayersController(IOC) date = datetime.datetime.now() + datetime.timedelta(days=1) IOC.storage.players.collection.update_one( FILTER, update={'$set': { constants.Player.BAN_DATE: date }}) # Act controller.connect(TEST_ACCOUNT_ID) # Assert self.assertIn(TEST_ACCOUNT_ID, IOC.console_mock.banned)
def test_player_initialization(self): """Обновляется ник игрока на спауне""" _create(FILTER, TEST_PLAYER) controller = processing.PlayersController(IOC) aircraft_name = 'I-16 type 24' bot_name = 'BotPilot' atype12_aircraft = tests.mocks.atype_12_stub(1, aircraft_name, 201, 'test_aircraft', -1) atype12_bot = tests.mocks.atype_12_stub(2, bot_name, 201, 'test_bot', 1) atype10 = _atype_10_stub(1, 2, { 'x': 100, 'z': 100 }, aircraft_name, 201, 3) IOC.objects_controller.create_object(atype12_aircraft) IOC.objects_controller.create_object(atype12_bot) IOC.objects_controller.spawn(atype10) # Act controller.start_mission() controller.spawn(atype10) # Assert player = IOC.storage.players.collection.find_one(FILTER) self.assertEqual(TEST_NICKNAME, player[constants.Player.NICKNAME])
def test_multiple_spawn_nickname(self): """Не добавляетcя лишний известный ник при неоднократном спауне""" _create(FILTER, TEST_PLAYER) controller = processing.PlayersController(IOC) aircraft_name = 'I-16 type 24' bot_name = 'BotPilot' atype12_aircraft = tests.mocks.atype_12_stub(1, aircraft_name, 201, 'test_aircraft', -1) atype12_bot = tests.mocks.atype_12_stub(2, bot_name, 201, 'test_bot', 1) atype10 = _atype_10_stub(1, 2, { 'x': 100, 'z': 100 }, aircraft_name, 201, 3) IOC.objects_controller.create_object(atype12_aircraft) IOC.objects_controller.create_object(atype12_bot) IOC.objects_controller.spawn(atype10) # Act controller.start_mission() controller.spawn(atype10) controller.spawn(atype10) # Assert document = IOC.storage.players.collection.find_one(FILTER) self.assertEqual([], document[constants.Player.KNOWN_NICKNAMES])
def test_connect_player(self): """Отправляется приветственное сообщение игроку на подключении""" TEST_PLAYER[constants.Player.NICKNAME] = TEST_NICKNAME _create(FILTER, TEST_PLAYER) controller = processing.PlayersController(IOC) aircraft_name = 'I-16 type 24' bot_name = 'BotPilot' atype12_aircraft = tests.mocks.atype_12_stub(1, aircraft_name, 201, 'test_aircraft', -1) atype12_bot = tests.mocks.atype_12_stub(2, bot_name, 201, 'test_bot', 1) atype10 = _atype_10_stub(1, 2, { 'x': 100, 'z': 100 }, aircraft_name, 201, 3) IOC.objects_controller.create_object(atype12_aircraft) IOC.objects_controller.create_object(atype12_bot) IOC.objects_controller.spawn(atype10) # Act controller.start_mission() controller.connect(TEST_ACCOUNT_ID) # Assert self.assertIn((TEST_ACCOUNT_ID, 'Hello {}!'.format(TEST_NICKNAME)), IOC.console_mock.received_private_messages)
def players_controller(self) -> processing.PlayersController: """Контроллер игроков""" if not self._players_controller: self._players_controller = processing.PlayersController(self) return self._players_controller