def test_get_user_profile_user_has_badges(self): user_1 = UserFactory(name='Name') profile_badge_1 = ProfileItemFactory( file_path=os.path.join("tests", "support", "badge1.png")) profile_badge_2 = ProfileItemFactory( file_path=os.path.join("tests", "support", "badge2.png")) profile_badge_3 = ProfileItemFactory( file_path=os.path.join("tests", "support", "badge3.png")) profile_badge_4 = ProfileItemFactory( file_path=os.path.join("tests", "support", "badge1.png")) user_1.profile_items = [ UserProfileItemFactory(profile_item=profile_badge_1), UserProfileItemFactory(profile_item=profile_badge_2), UserProfileItemFactory(profile_item=profile_badge_3), UserProfileItemFactory(profile_item=profile_badge_4, equipped=False), ] self.test_session.commit() with open(os.path.join('tests', 'support', 'user_avatar.png'), 'rb') as f: user_avatar_bytes = f.read() result = asyncio.run(Profile().get_user_profile(user_1.id, user_avatar_bytes, lang='pt')) with open( os.path.join('tests', 'support', 'get_user_profile_with_badges.png'), 'rb') as f: self.assertEqual(result.getvalue(), f.read())
def test_get_currency_user_exists(self): user = UserFactory(currency=150) self.db_session.commit() result = asyncio.run(Palplatina().get_currency(user.id)) self.assertEqual(result, 150)
def test_get_user_items_user_has_no_items(self): user = UserFactory() self.db_session.commit() result = asyncio.run(Palplatina().get_user_items(user.id)) self.assertEqual(len(result), 0)
def test_buy_item_item_already_bought(self): profile_item = ProfileItemFactory() user = UserFactory(currency=150) user.profile_items = [ UserProfileItemFactory(profile_item=profile_item) ] self.db_session.commit() with self.assertRaises(AlreadyOwnsItem): asyncio.run(Palplatina().buy_item(user.id, profile_item.name)) persisted_user = self.db_session.query(User).get(user.id) persisted_user_profile_items = persisted_user.profile_items self.assertEqual(persisted_user.currency, 150) self.assertEqual(len(persisted_user_profile_items), 1) self.assertEqual(persisted_user_profile_items[0].profile_item.id, profile_item.id)
def test_unequip_item_user_has_item(self): user = UserFactory() profile_item = ProfileItemFactory() user.profile_items = [ UserProfileItemFactory(equipped=True, profile_item=profile_item) ] self.db_session.commit() result = asyncio.run(Palplatina().unequip_item(user.id, profile_item.name)) self.assertFalse(result.equipped) Session.remove() fetched_user_profile_item = self.db_session.query(UserProfileItem).get( (user.id, profile_item.id)) self.assertFalse(fetched_user_profile_item.equipped)
def test_add_game_creates_new_game(): # GIVEN Proxy() user = UserFactory() Proxy().load(full=True) # WHEN new_game, _ = GameService().add_game(host_id=user.id, players_amount=5) # THEN assert len(Proxy().games_dict) == 1
def test_add_game_creates_new_game_with_code(): # GIVEN Proxy() user = UserFactory() Proxy().load(full=True) # WHEN new_game, _ = GameService().add_game(host_id=user.id, players_amount=5) # THEN assert GameProvider().get_game(new_game.id).code is not None
def test_add_game_sets_proper_players_amount(): # GIVEN Proxy() user = UserFactory() Proxy().load(full=True) # WHEN new_game, _ = GameService().add_game(host_id=user.id, players_amount=5) # THEN assert new_game.players_amount == 5
def test_create_offer_when_success(): Proxy() user = UserFactory() game = GameFactory() player = PlayerFactory(user=user, game=game, move=1) card = CardFactory(position=5) user_property = PropertyFactory(card=card, player=player, game=game) Proxy().load(full=True) response = WebsocketService().create_offer(player.game_id, player.user_id, card_id=card.id, price=5000) assert response['status'] == 1000
def test_get_game_returns_proper_player(): # GIVEN Proxy() user = UserFactory() game = GameFactory() Proxy().load(full=True) # WHEN get_game = GameService().get_game(game.id) # THEN assert get_game == (game, 1000)
def test_join_player_creates_new_player(): # GIVEN Proxy() game = GameFactory() user = UserFactory() Proxy().load(full=True) # WHEN GameService().join_player(game_id=game.id, user_id=user.id) # THEN assert len(PlayerProvider().get_game_players(game.id)) == 1
def test_property_change_owner_method(): user1 = UserFactory() game = GameFactory(host=user1) old_owner = valid_player(user=user1, game=game) new_owner = valid_player(game=game) player_property = valid_property(player=old_owner, selling_price=300) player_property.change_owner(new_owner, old_owner) assert player_property.player_id == new_owner.id assert old_owner.balance == 800 assert new_owner.balance == 200
def test_set_player_defeated_changes_active_to_false(): # GIVEN Proxy() user = UserFactory() game = GameFactory() Proxy().load(full=True) player, _ = GameService().join_player(game_id=game.id, user_id=user.id) # WHEN GameService().set_player_defeated(user_id=user.id, game_id=game.id) # THEN assert PlayerProvider().get_player_with_id(player.id).active == False
def test_accept_offer_when_success(): Proxy() user = UserFactory() game = GameFactory() player = PlayerFactory(user=user, game=game, balance=6000) card = CardFactory(position=5) old_owner = PlayerFactory(game=game, balance=1000) user_property = PropertyFactory(card=card, game=game, player=old_owner, selling_price=5000) Proxy().load(full=True) response = WebsocketService().accept_offer(player.game_id, player.user_id, card_id=card.id) assert response['status'] == 1000
def test_join_player_does_not_create_new_player_if_board_is_full(): # GIVEN Proxy() game = GameFactory() for i in range(4): user = UserFactory() Proxy().load(full=True) GameService().join_player(game_id=game.id, user_id=user.id) # WHEN GameService().join_player(game_id=game.id, user_id=user.id) # THEN assert len(PlayerProvider().get_game_players(game.id)) == 4
def test_set_user_profile_frame_color_invalid_color(self): user = UserFactory() self.test_session.commit() color = 'invalid color' with self.assertRaises(ValueError): asyncio.run(Profile().set_user_profile_frame_color(user.id, color)) Session.remove() self.assertEqual( self.test_session.query(User).get(user.id).profile_frame_color, None)
def test_buy_item_item_not_found(self): user = UserFactory(currency=150) self.db_session.commit() with self.assertRaises(ItemNotFound): asyncio.run(Palplatina().buy_item(user.id, 'random')) Session.remove() persisted_user = self.db_session.query(User).get(user.id) persisted_user_profile_items = persisted_user.profile_items self.assertEqual(persisted_user.currency, 150) self.assertEqual(len(persisted_user_profile_items), 0)
def test_cancel_offer_when_success(): # GIVEN Proxy() user = UserFactory() # WHEN game = GameFactory() player = PlayerFactory(user=user, game=game) card = CardFactory(position=5) user_property = PropertyFactory(card=card, player=player, game=game, selling_price=5000) Proxy().load(full=True) response = WebsocketService().cancel_offer(player.game_id, player.user_id, card_id=card.id) assert response['status'] == 1000
def test_get_not_possible_to_buy_card(): # GIVEN Proxy() game = GameFactory() card = CardFactory(position=1) user = UserFactory() player = PlayerFactory(game_id=game.id, user_id=user.id, position=0) Proxy().load(full=True) # WHEN get_card = CardService().get_available_card_to_buy(game_id=game.id, user_id=user.id) # THEN assert get_card == (None, 2005)
def test_give_daily_not_clear_for_new_daily(self): user = UserFactory(currency=150, daily_last_collected_at=datetime.utcnow()) self.db_session.commit() result, user_actual = asyncio.run(Palplatina().give_daily( user.id, user.name)) Session.remove() self.assertFalse(result) self.assertEqual(user_actual.currency, 150) self.assertEqual( self.db_session.query(User).get(user.id).currency, 150)
def test_buy_item_not_enough_currency(self): user = UserFactory(currency=150) profile_item = ProfileItemFactory(price=200) self.db_session.commit() with self.assertRaises(NotEnoughCredits): asyncio.run(Palplatina().buy_item(user.id, profile_item.name)) Session.remove() persisted_user = self.db_session.query(User).get(user.id) persisted_user_profile_items = persisted_user.profile_items self.assertEqual(persisted_user.currency, 150) self.assertEqual(len(persisted_user_profile_items), 0)
def test_add_1(): title = 'Test title' content = 'Test content' user = UserFactory.create() return { 'params': { 'user': user, 'title': title, 'content': content }, 'title': title, 'content': content, 'user': user }
def test_cancel_offer_when_already_not_for_sale(): # GIVEN Proxy() user = UserFactory() # WHEN game = GameFactory() player = PlayerFactory(user=user, game=game, move=1) card = CardFactory(position=5) user_property = PropertyFactory(card=card, player=player, game=game) Proxy().load(full=True) [prop, status] = TradingService().cancel_offer(game.id, user.id, card.id) # THEN assert prop == None assert status == 2013
def test_get_already_owned_card_to_buy(): # GIVEN Proxy() game = GameFactory() card = CardFactory(position=99) property = PropertyFactory(game_id=game.id, card_id=card.id) user = UserFactory() player = PlayerFactory(game_id=game.id, user_id=user.id, position=99) Proxy().load(full=True) # WHEN get_card = CardService().get_available_card_to_buy(game_id=game.id, user_id=user.id) # THEN assert get_card == (None, 2006)
def test_get_user_profile_user_has_wallpaper(self): user_1 = UserFactory(name='Name') profile_badge = ProfileItemFactory(type='wallpaper', file_path=os.path.join( "tests", "support", "wallpaper.png")) user_1.profile_items = [ UserProfileItemFactory(profile_item=profile_badge), ] self.test_session.commit() with open(os.path.join('tests', 'support', 'user_avatar.png'), 'rb') as f: user_avatar_bytes = f.read() result = asyncio.run(Profile().get_user_profile(user_1.id, user_avatar_bytes, lang='pt')) with open( os.path.join('tests', 'support', 'get_user_profile_with_wallpaper.png'), 'rb') as f: self.assertEqual(result.getvalue(), f.read())
def test_get_user_profile_all_available_fields(self): user_1 = UserFactory(name='My very long name') user_2 = UserFactory() chess_game_1 = ChessGameFactory(player1=user_1, result=1) xp_point_1 = XpPointFactory(user=user_1, points=140) self.test_session.commit() astrology_bot = AstrologyChart() datetime = ('1997/08/10', '07:17', '-03:00') geopos = (-23.5506507, -46.6333824) chart = astrology_bot.calc_chart_raw(datetime, geopos) asyncio.run(astrology_bot.save_chart(user_1.id, chart)) with open(os.path.join('tests', 'support', 'user_avatar.png'), 'rb') as f: user_avatar_bytes = f.read() result = asyncio.run(Profile().get_user_profile(user_1.id, user_avatar_bytes, lang='pt')) with open( os.path.join('tests', 'support', 'get_user_profile_all_fields.png'), 'rb') as f: self.assertEqual(result.getvalue(), f.read())
def test_create_offer_when_property_is_not_present(): # GIVEN Proxy() user = UserFactory() # WHEN game = GameFactory() player = PlayerFactory(user=user, game=game, move=1) card = CardFactory(position=5) user_property = PropertyFactory(card=card) Proxy().load(full=True) [prop, status] = TradingService().create_offer(game.id, user.id, card.id, 5000) # THEN assert prop == None assert status == 2007
def test_accept_offer_when_valid(): # GIVEN Proxy() user = UserFactory() # WHEN game = GameFactory() player = PlayerFactory(user=user, game=game, move=1, balance=6000) card = CardFactory(position=5) user_property = PropertyFactory(card=card, game=game) Proxy().load(full=True) [new_owner, status] = TradingService().accept_offer(game.id, user.id, card.id, 5000) # THEN assert new_owner == player assert status == 1000
def test_get_user_profile_user_exists_no_info(self): user_1 = UserFactory(name='Name') self.test_session.commit() with open(os.path.join('tests', 'support', 'user_avatar.png'), 'rb') as f: user_avatar_bytes = f.read() result = asyncio.run(Profile().get_user_profile(user_1.id, user_avatar_bytes, lang='pt')) with open( os.path.join('tests', 'support', 'get_user_profile_no_info.png'), 'rb') as f: self.assertEqual(result.getvalue(), f.read())
def test_set_user_profile_frame_color_valid_color(self): user = UserFactory() self.test_session.commit() color = '#f7b1d8' result = asyncio.run(Profile().set_user_profile_frame_color( user.id, color)) self.assertEqual(result.id, user.id) self.assertEqual(result.profile_frame_color, color) Session.remove() self.assertEqual( self.test_session.query(User).get(user.id).profile_frame_color, color)