Esempio n. 1
0
 def test_counters_end_to_end(self):
     storm_spirit = HeroFactory(name='Storm Spirit')
     queen_of_pain = HeroFactory(name='Queen of Pain')
     AdvantageFactory(hero=storm_spirit,
                      enemy=queen_of_pain,
                      advantage=1.75)
     response = make_request_and_return_text(
         "what heroes are good against Queen of Pain")
     assert "Storm Spirit" in response
Esempio n. 2
0
 def test_no_counter_picking(self):
     storm_spirit = HeroFactory(name='Storm Spirit')
     queen_of_pain = HeroFactory(name='Queen of Pain')
     AdvantageFactory(hero=storm_spirit,
                      enemy=queen_of_pain,
                      advantage=1.75)
     _, token = ResponseGenerator.respond(
         "What heroes are good against Queen of Pain")
     _, token = ResponseGenerator.respond('No.', token)
     assert isinstance(Context.deserialise(token), FreshContext)
    def test_strengths_response(self):
        queen_of_pain = HeroFactory(name='Queen of Pain')
        storm_spirit = HeroFactory(name='Storm Spirit')
        AdvantageFactory(hero=queen_of_pain,
                         enemy=storm_spirit,
                         advantage=1.75)

        response = SingleHeroAdvantagesResponse.respond(queen_of_pain,
                                                        role=None,
                                                        user_id=None)
        assert response == 'Queen of Pain is good against Storm Spirit'
    def test_counter_respones(self):
        queen_of_pain = HeroFactory(name='Queen of Pain')
        AdvantageFactory(
            hero=HeroFactory(name='Meepo'),
            enemy=queen_of_pain,
            advantage=4.34,
        )

        response = SingleHeroCountersResponse.respond(queen_of_pain,
                                                      role=None,
                                                      user_id=None)
        assert response == 'Meepo is very strong against Queen of Pain'
    def test_strengths_role_response(self):
        queen_of_pain = HeroFactory(name='Queen of Pain')
        storm_spirit = HeroFactory(name='Storm Spirit', is_support=False)
        keeper = HeroFactory(name='Keeper of the Light', is_support=True)
        AdvantageFactory(hero=queen_of_pain,
                         enemy=storm_spirit,
                         advantage=1.75)
        AdvantageFactory(hero=queen_of_pain, enemy=keeper, advantage=1.52)

        response = SingleHeroAdvantagesResponse.respond(queen_of_pain,
                                                        role=HeroRole.SUPPORT,
                                                        user_id=None)
        assert response == 'Queen of Pain is good against Keeper of the Light'
Esempio n. 6
0
    def setUpAdvantages():
        storm_spirit = HeroFactory(name='Storm Spirit', is_mid=True)
        queen_of_pain = HeroFactory(name='Queen of Pain',
                                    is_mid=True,
                                    is_support=False)
        shadow_fiend = HeroFactory(name='Shadow Fiend', is_mid=True)
        razor = HeroFactory(name='Razor', is_mid=True)
        zeus = HeroFactory(name='Zeus', is_mid=True)
        sniper = HeroFactory(name='Sniper', is_mid=True)
        disruptor = HeroFactory(name='Disruptor',
                                is_mid=False,
                                is_support=True)
        meepo = HeroFactory(name='Meepo')

        AdvantageFactory(hero=queen_of_pain,
                         enemy=storm_spirit,
                         advantage=2.14)
        AdvantageFactory(hero=sniper, enemy=storm_spirit, advantage=-3.11)
        AdvantageFactory(hero=shadow_fiend, enemy=storm_spirit, advantage=0.55)
        AdvantageFactory(hero=razor, enemy=storm_spirit, advantage=0.66)
        AdvantageFactory(hero=zeus, enemy=storm_spirit, advantage=-4.50)
        AdvantageFactory(hero=disruptor, enemy=storm_spirit, advantage=1.75)
        AdvantageFactory(hero=storm_spirit,
                         enemy=queen_of_pain,
                         advantage=-1.75)
        AdvantageFactory(hero=meepo, enemy=queen_of_pain, advantage=4.34)
Esempio n. 7
0
 def test_abilities_with_the_same_name(self):
     AbilityFactory(
         hero=HeroFactory(name='Lion'),
         name='Hex',
         cooldown='30/24/18/12',
     )
     AbilityFactory(
         hero=HeroFactory(name='Shadow Shaman'),
         name='Hex',
         cooldown='13',
     )
     response, _ = ResponseGenerator.respond("What's the cooldown of Hex?")
     assert response == (
         "Both Lion and Shadow Shaman have the Hex ability. Lion's cooldown is 13, Shadow "
         "Shaman's is 30, 24, 18, 12 seconds.")
    def test_extreme_strengths_response(self):
        queen_of_pain = HeroFactory(name='Queen of Pain')
        AdvantageFactory(hero=queen_of_pain,
                         enemy=HeroFactory(name='Storm Spirit'),
                         advantage=1.75)
        AdvantageFactory(hero=queen_of_pain,
                         enemy=HeroFactory(name='Clockwerk'),
                         advantage=2.58)

        response = SingleHeroAdvantagesResponse.respond(queen_of_pain,
                                                        role=None,
                                                        user_id=None)
        assert response == (
            'Queen of Pain is very strong against Clockwerk, and also counters Storm Spirit'
        )
 def test_counter_role_response(self):
     queen_of_pain = HeroFactory(name='Queen of Pain')
     AdvantageFactory(
         hero=HeroFactory(name='Meepo', is_support=False),
         enemy=queen_of_pain,
         advantage=4.34,
     )
     AdvantageFactory(
         hero=HeroFactory(name='Oracle', is_support=True),
         enemy=queen_of_pain,
         advantage=1.4,
     )
     response = SingleHeroCountersResponse.respond(queen_of_pain,
                                                   role=HeroRole.SUPPORT,
                                                   user_id=None)
     assert response == "Oracle is good against Queen of Pain"
Esempio n. 10
0
    def test_loads_all_abilities(self):
        disruptor = HeroFactory(name='Disruptor')
        self.scraper.load_hero_abilities(disruptor)

        self.assertEqual(Ability.objects.count(), 4)
        self.assertTrue(
            all(ability.hero == disruptor
                for ability in Ability.objects.all()))
 def test_when_no_cooldown(self):
     ability = AbilityFactory(
         hero=HeroFactory(name='Pangolier'),
         name='Swashbuckle',
         cooldown='',
     )
     response = AbilityCooldownResponse.respond(ability, user_id=None)
     assert response == "Swashbuckle is a passive ability, with no cooldown"
 def test_counter_response_no_matching_hero(self):
     queen_of_pain = HeroFactory(name='Queen of Pain')
     response = SingleHeroCountersResponse.respond(queen_of_pain,
                                                   role=HeroRole.JUNGLER,
                                                   user_id=None)
     assert response == (
         "Sorry, I don't know of any jungle heroes which counter Queen of Pain"
     )
Esempio n. 13
0
 def test_basics_end_to_end(self):
     AbilityFactory(
         hero=HeroFactory(name='Disruptor'),
         name='Static Storm',
         is_ultimate=True,
     )
     response = make_request_and_return_text("what is Disruptor's ultimate")
     assert "Static Storm" in response
Esempio n. 14
0
 def test_no_ability_list(self):
     AbilityFactory(
         name='Glimpse',
         cooldown='60/46/32/18',
         hero=HeroFactory(name='Disruptor'),
     )
     _, token = ResponseGenerator.respond("What are Disruptor's abilities?")
     _, token = ResponseGenerator.respond('No.', token)
     assert isinstance(Context.deserialise(token), FreshContext)
Esempio n. 15
0
 def test_goodbye(self):
     AbilityFactory(
         hero=HeroFactory(name='Disruptor'),
         name='Static Storm',
         is_ultimate=True,
     )
     _, token = ResponseGenerator.respond("What is Disruptor's ultimate?")
     with self.assertRaises(Goodbye):
         ResponseGenerator.respond("goodbye", token)
Esempio n. 16
0
 def setUp(self):
     disruptor = HeroFactory(name='Disruptor')
     AbilityFactory(
         hero=disruptor,
         name='Thunder Strike',
         hotkey='Q',
         is_ultimate=False,
         damage_type=DamageType.MAGICAL,
     )
     AbilityFactory(
         hero=disruptor,
         name='Glimpse',
         cooldown='60/46/32/18',
         description=
         ('Teleports the target hero back to where it was 4 seconds ago. Instantly kills '
          'illusions.'),
         hotkey='W',
         is_ultimate=False,
     )
     AbilityFactory(
         hero=disruptor,
         name='Kinetic Field',
         spell_immunity=SpellImmunity.DOES_NOT_PIERCE,
         spell_immunity_detail=
         ("The Barrier's modifier persists if it was placed before spell immunity."
          ),
         hotkey='E',
         is_ultimate=False,
     )
     AbilityFactory(
         hero=disruptor,
         name='Static Storm',
         cooldown='90/80/70',
         hotkey='R',
         is_ultimate=True,
     )
     AbilityFactory(
         hero=HeroFactory(name='Sniper'),
         name='Assassinate',
         is_ultimate=True,
         damage_type=DamageType.MAGICAL,
         aghanims_damage_type=DamageType.PHYSICAL,
     )
Esempio n. 17
0
 def test_saying_against_breaks_hero_context(self):
     storm_spirit = HeroFactory(name='Storm Spirit')
     AbilityFactory(
         name='Glimpse',
         cooldown='60/46/32/18',
         hero=HeroFactory(name='Disruptor'),
     )
     AbilityFactory(
         name='Static Remnant',
         hero=storm_spirit,
     )
     AdvantageFactory(
         hero=HeroFactory(name='Queen of Pain'),
         enemy=storm_spirit,
         advantage=2.14,
     )
     _, token = ResponseGenerator.respond(
         "Which are Disruptor's abilities?")
     response, _ = ResponseGenerator.respond(
         "Who is good against Storm Spirit?", token)
     assert "Static Remnant" not in response
     assert "Queen of Pain" in response
Esempio n. 18
0
 def test_feedback(self, feedback_logger):
     AbilityFactory(
         name='Glimpse',
         hero=HeroFactory(name='Disruptor'),
     )
     response, context = ResponseGenerator.respond("Give feedback")
     assert "Great" in response
     response, context = ResponseGenerator.respond("I love you", context)
     assert feedback_logger.info.called_with('I love you')
     assert "Thank" in response
     response, context = ResponseGenerator.respond(
         "What are Disruptor's abilities?", context)
     assert "Glimpse in response"
     assert feedback_logger.info.call_count == 1
    def test_ability_list_response_excludes_talent_abilities(self):
        phantom_lancer = HeroFactory(name='Phantom Lancer')
        AbilityFactory(
            hero=phantom_lancer,
            name='Critical Strike',
            is_from_talent=True,
        )
        AbilityFactory(
            hero=phantom_lancer,
            name='Juxtapose',
        )

        response = AbilityListResponse.respond(phantom_lancer, user_id=None)
        assert 'Juxtapose' in response
        assert 'Critical Strike' not in response
Esempio n. 20
0
    def test_loads_kinetic_field(self):
        self.scraper.load_hero_abilities(HeroFactory(name='Disruptor'))

        kinetic_field = Ability.objects.get(name='Kinetic Field')
        self.assertEqual(
            kinetic_field.description,
            "After a short formation time, creates a circular barrier of kinetic energy that "
            "enemies can't pass.")
        self.assertEqual(kinetic_field.cooldown, '13/12/11/10')
        self.assertEqual(kinetic_field.hotkey, 'E')
        self.assertFalse(kinetic_field.is_ultimate)
        self.assertEqual(kinetic_field.spell_immunity,
                         SpellImmunity.DOES_NOT_PIERCE)
        self.assertEqual(kinetic_field.damage_type, None)
        self.assertEqual(kinetic_field.aghanims_damage_type, None)
        self.assertEqual(
            kinetic_field.spell_immunity_detail,
            "The Barrier's modifier persists if it was placed before spell immunity."
        )
Esempio n. 21
0
    def test_changing_context(self):
        AbilityFactory(
            hero=HeroFactory(name='Disruptor'),
            name='Static Storm',
            cooldown='90/80/70',
            hotkey='R',
            is_ultimate=True,
        )

        _, token = ResponseGenerator.respond(
            'What is the cooldown of Static Storm?')
        assert token['context-class'] == 'SingleAbilityContext'
        assert token['useage-count'] == 1

        response, token = ResponseGenerator.respond(
            "What is Disruptor's ultimate?", token)
        assert "ultimate" in response
        assert "Static Storm" in response
        assert token['context-class'] == 'SingleAbilityContext'
        assert token['useage-count'] == 1
Esempio n. 22
0
 def test_hero_ultimate_response_multiple_ultimates(self):
     dark_willow = HeroFactory(name='Dark Willow')
     AbilityFactory(
         hero=dark_willow,
         name='Bedlam',
         cooldown='40,30,20',
         is_ultimate=True,
     )
     AbilityFactory(
         hero=dark_willow,
         name='Terrorize',
         cooldown='40,30,20',
         is_ultimate=True,
     )
     response, context = ResponseGenerator.respond(
         "What is Dark Willow's ultimate?")
     assert response == (
         "<speak>Dark Willow has multiple ultimates: Bedlam and Terrorize.</speak>"
     )
     assert not context
Esempio n. 23
0
 def test_damage_type_with_aghs(self):
     self.scraper.load_hero_abilities(HeroFactory(name='Sniper'))
     assassinate = Ability.objects.get(name='Assassinate')
     self.assertEqual(assassinate.damage_type, DamageType.MAGICAL)
     self.assertEqual(assassinate.aghanims_damage_type, DamageType.PHYSICAL)
Esempio n. 24
0
 def test_abilities_with_long_headers(self):
     self.scraper.load_hero_abilities(HeroFactory(name='Dark Willow'))
     for ability in Ability.objects.all():
         assert len(ability.hotkey) == 1
Esempio n. 25
0
 def test_ignores_second_ability_with_same_hotkey(self):
     self.scraper.load_hero_abilities(HeroFactory(name='Pangolier'))
     assert Ability.objects.count() == 4
     assert Ability.objects.get(name='Rolling Thunder')
     with self.assertRaises(Ability.DoesNotExist):
         assert Ability.objects.get(name='Stop Rolling')
Esempio n. 26
0
 def test_talent_abilities(self):
     self.scraper.load_hero_abilities(HeroFactory(name='Phantom Lancer'))
     assert Ability.objects.get(name='Critical Strike').is_from_talent
     assert Ability.objects.filter(is_from_talent=False).count() == 4
Esempio n. 27
0
 def test_abilities_with_no_cooldown(self):
     self.scraper.load_hero_abilities(HeroFactory(name='Phantom Lancer'))
     assert Ability.objects.get(name='Juxtapose').cooldown == ''
Esempio n. 28
0
 def test_loads_ultimate(self):
     self.scraper.load_hero_abilities(HeroFactory(name='Disruptor'))
     self.assertTrue(Ability.objects.get(name='Static Storm').is_ultimate)
Esempio n. 29
0
 def test_invoker_hotkeys(self):
     self.scraper.load_hero_abilities(HeroFactory(name='Invoker'))
     for a in Ability.objects.all():
         assert (not a.hotkey or len(a.hotkey) == 1)
Esempio n. 30
0
 def test_keeper_after_720(self):
     self.scraper.load_hero_abilities(
         HeroFactory(name='Keeper of the Light'))
     illuminate = Ability.objects.get(name='Blinding Light')
     self.assertEqual(illuminate.damage_type, DamageType.MAGICAL)