def test_fizz(self): number = 6 result = FizzBuzz.fizzbuzz(number) self.assertEqual(result, 'Fizz')
def test_normal(self): a = FizzBuzz() self.assertEqual(a.fizzbuzz(1), "1") self.assertEqual(a.fizzbuzz(2), "2") self.assertEqual(a.fizzbuzz(4), "4")
class flask_app(): def __init__(self, cfg_path): self.__cfg = self.__read_config(cfg_path) self.__set_logger() self.fizzbuzz = FizzBuzz() def __read_config(self, cfg_path): """read json config file""" with open(cfg_path, "r") as file: d = json.load(file) return d def __set_logger(self): self.__logger = logging.getLogger( self.__cfg["app"]["logger"]["logger_name"]) self.__logger.setLevel(self.__cfg["app"]["logger"]["log_level"]) # log formatter formatter = logging.Formatter( "[{0}][%(levelname)s] %(asctime)s %(message)s".format( self.__cfg["app"]["logger"]["logger_name"]), datefmt="%Y-%m-%d %H:%M:%S") # stream handler stream_handler = logging.StreamHandler() stream_handler.setFormatter(formatter) self.__logger.addHandler(stream_handler) # file handler file_handler = logging.FileHandler( self.__cfg["app"]["logger"]["logger_file"]) file_handler.setFormatter(formatter) self.__logger.addHandler(file_handler) def create_app(self): """creates flask app""" self.__logger.info("creating fizzbuzz app") # flask app app = Flask(__name__) app.config["DEBUG"] = self.__cfg["app"]["debug"] app.secret_key = self.__cfg["app"]["secret"] @app.route('/', methods=['GET']) def home(): return render_template("index.html") @app.route('/api', methods=['GET', 'POST']) def api(): # check parameters try: start = int(self.__cfg["api"]["defaults"]["start"]) stop = int(self.__cfg["api"]["defaults"]["stop"]) to_list = self.__cfg["api"]["defaults"]["to_list"] if 'to_list' in request.args: to_list = True if 'start' in request.args: start = int(request.args["start"]) if 'stop' in request.args: stop = int(request.args["stop"]) if abs(start - stop) <= 0: raise ValueError if abs(abs(start) - abs(stop)) >= int( self.__cfg["api"]["max_fizzbuzz_amount"]): raise ValueError except: self.__logger.warning( "api request failed, wrong parameters passed") api_resp = api_response( self.__cfg["api"]["statuses"]["fail"], self.__cfg["api"]["errors"]["wrong_parameter"], "") return api_resp.get_api_response() # handle post request for custom api response if (request.method == 'POST'): try: self.__logger.info( "custom fizzbuzz api is requested with params start:{0} stop:{1} to_list:{2}" .format(start, stop, to_list)) # parse posted json custom_fizzbuzz_array = json.loads( request.data.decode('utf-8')) # check max size for the custom array if (len(custom_fizzbuzz_array["custom_fizzbuzz"]) > int( self.__cfg["api"]["max_custom_fizzbuzz_amount"])): raise ValueError # get custom fizzbuzz data = self.fizzbuzz.fizzbuzz_custom(custom_fizzbuzz_array, start=start, stop=stop, to_list=to_list) api_resp = api_response( self.__cfg["api"]["statuses"]["success"], "", data) except ZeroDivisionError: self.__logger.warning( "api request failed with ZeroDivisionError") api_resp = api_response( self.__cfg["api"]["statuses"]["fail"], self.__cfg["api"]["errors"]["divide_by_zero"], "") except json.decoder.JSONDecodeError: self.__logger.warning( "api request failed with JSONDecodeError") api_resp = api_response( self.__cfg["api"]["statuses"]["fail"], self.__cfg["api"]["errors"]["json_decode_error"], "") except ValueError: self.__logger.warning("api request failed with ValueError") api_resp = api_response( self.__cfg["api"]["statuses"]["fail"], self.__cfg["api"]["errors"]["wrong_parameter"], "") except: self.__logger.warning( "api request failed with unknown error", exc_info=True) api_resp = api_response( self.__cfg["api"]["statuses"]["fail"], self.__cfg["api"]["errors"]["general_error"], "") return api_resp.get_api_response() # handle get request for regular api response else: try: self.__logger.info( "regular fizzbuzz api is requested with params start:{0} stop:{1} to_list:{2}" .format(start, stop, to_list)) data = self.fizzbuzz.fizzbuzz(start=start, stop=stop, to_list=to_list) api_resp = api_response( self.__cfg["api"]["statuses"]["success"], "", data) except: self.__logger.warning( "api request failed with unknown error", exc_info=True) api_resp = api_response( self.__cfg["api"]["statuses"]["fail"], self.__cfg["api"]["errors"]["general_error"], "") return api_resp.get_api_response() # return flask app for serving return app
def test_contain_5(self): a = FizzBuzz('/ or contain') self.assertEqual(a.fizzbuzz(5), "Buzz") self.assertEqual(a.fizzbuzz(25), "Buzz") self.assertEqual(a.fizzbuzz(10), "Buzz")
def test_contain_3_and_5(self): a = FizzBuzz('/ or contain') self.assertEqual(a.fizzbuzz(15), "FizzBuzz") self.assertEqual(a.fizzbuzz(35), "FizzBuzz") self.assertEqual(a.fizzbuzz(53), "FizzBuzz") self.assertEqual(a.fizzbuzz(15), "FizzBuzz")
def test_contain_3(self): a = FizzBuzz('/ or contain') self.assertEqual(a.fizzbuzz(3), "Fizz") self.assertEqual(a.fizzbuzz(13), "Fizz") self.assertEqual(a.fizzbuzz(6), "Fizz") self.assertEqual(a.fizzbuzz(9), "Fizz")
def test_contain_normal(self): a = FizzBuzz('/ or contain') self.assertEqual(a.fizzbuzz(1), "1") self.assertEqual(a.fizzbuzz(2), "2") self.assertEqual(a.fizzbuzz(4), "4")
def test_divide_3_and_5(self): a = FizzBuzz() self.assertEqual(a.fizzbuzz(15), "FizzBuzz") self.assertEqual(a.fizzbuzz(30), "FizzBuzz")
def test_divide_5(self): a = FizzBuzz() self.assertEqual(a.fizzbuzz(5), "Buzz") self.assertEqual(a.fizzbuzz(10), "Buzz") self.assertEqual(a.fizzbuzz(20), "Buzz")
def test_divide_3(self): a = FizzBuzz() self.assertEqual(a.fizzbuzz(3), "Fizz") self.assertEqual(a.fizzbuzz(6), "Fizz") self.assertEqual(a.fizzbuzz(9), "Fizz")