def test_post_challenge(self): # create an active challenge, with fake questions Formula.add('chall-warranty') Formula.add('chall-timer') category = Category.add('challenge') for i in range(Challenge.LIMIT + 1): q = Question.objects.create(text='text %s' % i, category=category, active=True) for j in range(5): Answer.objects.create(correct=j==1, question=q) chall = Challenge.create(user_from=self.challuser2, user_to=self.challuser) chall.accept() response = self.client.get('/api/challenge/{id}/'.format(id=chall.id)) data = json.loads(response.content) self.assertTrue(data) self.assertEqual(data['status'], 'A') self.assertEqual(data['to'], self.challuser.user.username) self.assertEqual(len(data['questions']), Challenge.LIMIT) # attempt post data = {} for q in Question.objects.all(): answers = [] for a in q.correct_answers: answers.append(str(a.id)) data[q.id] = ','.join(answers) response = self.client.post('/api/challenge/{id}/'.format(id=chall.id), data) self.assertEqual(response.status_code, 200) data = json.loads(response.content) self.assertTrue(data['success']) self.assertEqual(data['result']['points'], Challenge.LIMIT * 100)
def test_paralyze(self): """ Test if Paralyze spell works """ Formula.add('chall-warranty') player = self._get_player() chall_user = player.get_extension(ChallengeUser) # Check if player can launch before spell is cast self.assertTrue(chall_user.can_launch()) # Create and add spell to user paralyze = Spell.objects.create(name='challenge-cannot-challenge', available=True, price=10, percents=100, type='n') obs = PlayerSpellDue.objects.create(player=chall_user, source=chall_user, spell=paralyze, due=datetime.now() + timedelta(days=1)) # Check if player has the modifier self.assertTrue( chall_user.magic.has_modifier('challenge-cannot-challenge')) # Player should not be able to launch challenge with Paralyze on self.assertFalse(chall_user.can_launch())
def test_get_challenge(self): # create an active challenge Formula.add('chall-warranty') Formula.add('chall-timer') chall = Challenge.create(user_from=self.challuser2, user_to=self.challuser, ignore_questions=True) chall.accept() response = self.client.get('/api/challenge/{id}/'.format(id=chall.id)) data = json.loads(response.content) self.assertTrue(data) self.assertEqual(data['status'], 'A') self.assertEqual(data['to'], self.challuser.user.username)
def test_list_active(self): response = self.client.get('/api/challenge/list/') self.assertEqual(response.status_code, 200) data = json.loads(response.content) self.assertFalse(data) # create an active challenge Formula.add('chall-warranty') chall = Challenge.create(user_from=self.challuser2, user_to=self.challuser, ignore_questions=True) response = self.client.get('/api/challenge/list/') data = json.loads(response.content) self.assertTrue(data) data = data[0] self.assertEqual(data['id'], chall.id)
def test_buy_spell(self): Coin.add('gold') Formula.add('buy-spell', expression="gold=-{price}") spell = Spell.objects.create(name='test-spell', available=True, price=10) player = User.objects.create_user('test', '*****@*****.**', password='******').get_profile() scoring.score_simple(player, 'gold', 100) self.assertEqual(player.coins['gold'], 100) response = self.client.get(reverse('bazaar_home')) self.assertTrue('test-spell' in response.content) self.client.login(username='******', password='******') response = self.client.get(reverse('bazaar_buy', kwargs={'spell': spell.id})) self.assertFalse('error' in response.content) player = Player.objects.get(user__username='******') self.assertEqual(player.coins['gold'], 90)
def test_buy_spell(self): Coin.add('gold') Formula.add('buy-spell', expression="gold=-{price}") spell = Spell.objects.create(name='test-spell', available=True, price=10) player = User.objects.create_user('test', '*****@*****.**', password='******').get_profile() scoring.score_simple(player, 'gold', 100) self.assertEqual(player.coins['gold'], 100) # TODO: interface test should not be here response = self.client.get(reverse('bazaar_home')) self.assertTrue('test-spell' in response.content) self.client.login(username='******', password='******') response = self.client.get(reverse('bazaar_buy', kwargs={'spell': spell.id})) self.assertFalse('error' in response.content) player = Player.objects.get(user__username='******') self.assertEqual(player.coins['gold'], 90)
def test_buy_spell(self): Coin.add("gold") Formula.add("buy-spell", definition="gold=-{price}") spell = Spell.objects.create(name="test-spell", available=True, price=10) player = User.objects.create_user("test", "*****@*****.**", password="******").get_profile() scoring.score_simple(player, "gold", 100) self.assertEqual(player.coins["gold"], 100) # TODO: interface test should not be here response = self.client.get(reverse("bazaar_home")) self.assertTrue("test-spell" in response.content) self.client.login(username="******", password="******") response = self.client.get(reverse("bazaar_buy", kwargs={"spell": spell.id})) self.assertFalse("error" in response.content) player = Player.objects.get(user__username="******") self.assertEqual(player.coins["gold"], 90)
def setup(): """ Prepare database for Scoring """ for cc in CORE_POINTS: if not Coin.get(cc): Coin.add(cc, name=cc) # special case, gold is integer gold = Coin.get('gold') gold.integer = True gold.save() # iterate through games and register formulas for game in get_games(): for formula in game.get_formulas(): if not Formula.get(formula.id): Formula.add(formula) # add wouso formulas for formula in God.get_system_formulas(): if not Formula.get(formula.id): Formula.add(formula)
def test_variable_timer(self): formula = Formula.add('chall-timer') formula.expression = 'tlimit=10' formula.save() self.assertEqual(scoring.timer(self.chall_user, ChallengeGame, 'chall-timer', level=self.chall_user.level_no), 10) formula.expression = 'tlimit={level}' formula.save() self.assertEqual(scoring.timer(self.chall_user, ChallengeGame, 'chall-timer', level=self.chall_user.level_no), self.chall_user.level_no)
def test_paralyze(self): """ Test if Paralyze spell works """ Formula.add('chall-warranty') player = self._get_player() chall_user = player.get_extension(ChallengeUser) # Check if player can launch before spell is cast self.assertTrue(chall_user.can_launch()) # Create and add spell to user paralyze = Spell.objects.create(name='challenge-cannot-challenge', available=True, price=10, percents=100, type='n') obs = PlayerSpellDue.objects.create(player=chall_user, source=chall_user, spell=paralyze, due=datetime.now() + timedelta(days=1)) # Check if player has the modifier self.assertTrue(chall_user.magic.has_modifier('challenge-cannot-challenge')) # Player should not be able to launch challenge with Paralyze on self.assertFalse(chall_user.can_launch())
def test_first_login_points(self): f = Formula.add('start-points', formula='points=10') Coin.add('points') player = self._get_player() self.assertEqual(player.points, 0) # this won't work, since the activity is sent in our custom view #self.client.login(username=player.user.username, password='******') # using this instead signals.addActivity.send(sender=None, user_from=player, action="login", game = None, public=False) player = Player.objects.get(pk=player.pk) self.assertEqual(player.points, 10)
def test_bazaar_buy_ok(self): spell = Spell.objects.create(price=0) f = Formula.add('buy-spell') f.expression = 'points=0' f.save() Coin.add('points') response = self.client.post('/api/bazaar/buy/', {'spell': spell.id}) self.assertEqual(response.status_code, 200) data = json.loads(response.content) self.assertTrue(data) self.assertTrue(data['success']) player = self.user.get_profile() self.assertTrue(spell in [s.spell for s in player.magic.spells_available])
def test_first_login_points(self): f = Formula.add('start-points', formula='points=10') Coin.add('points') player = self._get_player() self.assertEqual(player.points, 0) # this won't work, since the activity is sent in our custom view #self.client.login(username=player.user.username, password='******') # using this instead signals.addActivity.send(sender=None, user_from=player, action="login", game=None, public=False) player = Player.objects.get(pk=player.pk) self.assertEqual(player.points, 10)