<gh_stars>1-10
#  Created by <NAME>.
#  GitHub: https://github.com/ikostan
#  LinkedIn: https://www.linkedin.com/in/egor-kostan/

# PUZZLES ARRAYS GAMES STRINGS NUMBERS FUNCTIONS CONTROL FLOW BASIC LANGUAGE FEATURES FUNDAMENTALS

import allure
import unittest
from utils.log_func import print_log
from kyu_6.pokemon_damage_calculator.calculate_damage import calculate_damage


@allure.epic('6 kyu')
@allure.parent_suite('Novice')
@allure.suite("Games")
@allure.sub_suite("Unit Tests")
@allure.feature("Numbers")
@allure.story('Pokemon Damage Calculator')
@allure.tag('PUZZLES', 'ARRAYS', 'GAMES',
            'STRINGS', 'NUMBERS', 'FUNCTIONS',
            'CONTROL FLOW', 'BASIC LANGUAGE FEATURES',
            'FUNDAMENTALS')
@allure.link(url='https://www.codewars.com/kata/536e9a7973130a06eb000e9f/train/python',
             name='Source/Kata')
class CalculateDamageTestCase(unittest.TestCase):
    """
    Testing calculate_damage function:
    damage = 50 * (attack / defense) * effectiveness
    """

    def test_calculate_damage(self):
        allure.dynamic.title("Testing calculate_damage function")
        allure.dynamic.severity(allure.severity_level.NORMAL)
        allure.dynamic.description_html('<h3>Codewars badge:</h3>'
                                        '<img src="https://www.codewars.com/users/myFirstCode'
                                        '/badges/large">'
                                        '<h3>Test Description:</h3>'
                                        "<p>Verify that the function calculates the damage that a particular "
                                        "move would do using the following formula (not the actual one from "
                                        "the game): damage = 50 * (attack / defense) * effectiveness</p>")

        test_data = [
            (("fire", "water", 100, 100), 25),
            (("grass", "water", 100, 100), 100),
            (("electric", "fire", 100, 100), 50),
            (("grass", "electric", 57, 19), 150),
            (("grass", "water", 40, 40), 100),
            (("grass", "fire", 35, 5), 175),
            (("fire", "electric", 10, 2), 250),
        ]

        for test_data, expected in test_data:
            your_type = test_data[0]
            opponent_type = test_data[1]
            attack = test_data[2]
            defense = test_data[3]
            actual_result = calculate_damage(your_type, opponent_type, attack, defense)
            with allure.step("Enter a test data ({}) and verify the "
                             "expected output ({}) vs actual result ({})".format(test_data,
                                                                                 expected,
                                                                                 actual_result)):
                print_log(test_data=test_data,
                          expected=expected,
                          result=actual_result)

                self.assertEqual(expected,
                                 actual_result)

#  Created by <NAME>.
#  GitHub: https://github.com/ikostan
#  LinkedIn: https://www.linkedin.com/in/egor-kostan/

# PUZZLES ARRAYS GAMES STRINGS NUMBERS FUNCTIONS CONTROL FLOW BASIC LANGUAGE FEATURES FUNDAMENTALS

import allure
import unittest
from utils.log_func import print_log
from kyu_6.pokemon_damage_calculator.calculate_damage import calculate_damage


@allure.epic('6 kyu')
@allure.parent_suite('Novice')
@allure.suite("Games")
@allure.sub_suite("Unit Tests")
@allure.feature("Numbers")
@allure.story('Pokemon Damage Calculator')
@allure.tag('PUZZLES', 'ARRAYS', 'GAMES',
            'STRINGS', 'NUMBERS', 'FUNCTIONS',
            'CONTROL FLOW', 'BASIC LANGUAGE FEATURES',
            'FUNDAMENTALS')
@allure.link(url='https://www.codewars.com/kata/536e9a7973130a06eb000e9f/train/python',
             name='Source/Kata')
class CalculateDamageTestCase(unittest.TestCase):
    """
    Testing calculate_damage function:
    damage = 50 * (attack / defense) * effectiveness
    """

    def test_calculate_damage(self):
        allure.dynamic.title("Testing calculate_damage function")
        allure.dynamic.severity(allure.severity_level.NORMAL)
        allure.dynamic.description_html('<h3>Codewars badge:</h3>'
                                        '<img src="https://www.codewars.com/users/myFirstCode'
                                        '/badges/large">'
                                        '<h3>Test Description:</h3>'
                                        "<p>Verify that the function calculates the damage that a particular "
                                        "move would do using the following formula (not the actual one from "
                                        "the game): damage = 50 * (attack / defense) * effectiveness</p>")

        test_data = [
            (("fire", "water", 100, 100), 25),
            (("grass", "water", 100, 100), 100),
            (("electric", "fire", 100, 100), 50),
            (("grass", "electric", 57, 19), 150),
            (("grass", "water", 40, 40), 100),
            (("grass", "fire", 35, 5), 175),
            (("fire", "electric", 10, 2), 250),
        ]

        for test_data, expected in test_data:
            your_type = test_data[0]
            opponent_type = test_data[1]
            attack = test_data[2]
            defense = test_data[3]
            actual_result = calculate_damage(your_type, opponent_type, attack, defense)
            with allure.step("Enter a test data ({}) and verify the "
                             "expected output ({}) vs actual result ({})".format(test_data,
                                                                                 expected,
                                                                                 actual_result)):
                print_log(test_data=test_data,
                          expected=expected,
                          result=actual_result)

                self.assertEqual(expected,
                                 actual_result)
#  Created by <NAME>. #  GitHub: https://github.com/ikostan #  LinkedIn: https://www.linkedin.com/in/egor-kostan/ # PUZZLES ARRAYS GAMES STRINGS NUMBERS FUNCTIONS CONTROL FLOW BASIC LANGUAGE FEATURES FUNDAMENTALS Testing calculate_damage function:     damage = 50 * (attack / defense) * effectiveness