Skip to content

Instantly share code, notes, and snippets.

@gatukgl
Created July 30, 2014 16:18
Show Gist options
  • Save gatukgl/c2d2063c3ecc072608f0 to your computer and use it in GitHub Desktop.
Save gatukgl/c2d2063c3ecc072608f0 to your computer and use it in GitHub Desktop.
import unittest
#####################################################################
# UNIT TEST
#####################################################################
class FizzBuzzTest(unittest.TestCase):
def test_number_3_should_return_number_fizz(self):
fizzbuzz_factory = FizzBuzzFactory()
fizzbuzz = fizzbuzz_factory.create()
result = fizzbuzz.take(3)
self.assertEqual(result, 'fizz')
fizzbuzz_factory = FizzBuzzFactory()
fizzbuzz = fizzbuzz_factory.create()
result = fizzbuzz.take(6)
self.assertEqual(result, 'fizz')
def test_number_5_should_return_number_buzz(self):
fizzbuzz_factory = FizzBuzzFactory()
fizzbuzz = fizzbuzz_factory.create()
result = fizzbuzz.take(5)
self.assertEqual(result, 'buzz')
fizzbuzz_factory = FizzBuzzFactory()
fizzbuzz = fizzbuzz_factory.create()
result = fizzbuzz.take(10)
self.assertEqual(result, 'buzz')
def test_number_15_should_return_number_fizzbuzz(self):
fizzbuzz_factory = FizzBuzzFactory()
fizzbuzz = fizzbuzz_factory.create()
result = fizzbuzz.take(15)
self.assertEqual(result, 'fizzbuzz')
fizzbuzz_factory = FizzBuzzFactory()
fizzbuzz = fizzbuzz_factory.create()
result = fizzbuzz.take(30)
self.assertEqual(result, 'fizzbuzz')
def test_number_indivisible_by_3_and_5_should_return_number_(self):
fizzbuzz_factory = FizzBuzzFactory()
fizzbuzz = fizzbuzz_factory.create()
result = fizzbuzz.take(1)
self.assertEqual(result, 1)
fizzbuzz_factory = FizzBuzzFactory()
fizzbuzz = fizzbuzz_factory.create()
result = fizzbuzz.take(2)
self.assertEqual(result, 2)
#####################################################################
# RULE INTERFACE
#####################################################################
class Rule:
def check_rule(self):
pass
def result_rule(self):
pass
#####################################################################
# RULES
#####################################################################
class FizzRule(Rule):
def check_rule(self, number):
fizz_rule = number % 3 == 0
return fizz_rule
def result_rule(self, number):
return 'fizz'
class BuzzRule(Rule):
def check_rule(self, number):
buzz_rule = number % 5 == 0
return buzz_rule
def result_rule(self, number):
return 'buzz'
class FizzBuzzRule(Rule):
def check_rule(self, number):
fizz_rule = number % 3 == 0
buzz_rule = number % 5 == 0
return fizz_rule and buzz_rule
def result_rule(self, number):
return 'fizzbuzz'
class NumberRule(Rule):
def check_rule(self, number):
not_fizz_rule = number % 3 != 0
not_buzz_rule = number % 5 != 0
return not_fizz_rule and not_buzz_rule
def result_rule(self, number):
return number
#####################################################################
# FACTORY
#####################################################################
class FizzBuzzFactory:
rules = []
rules.append(FizzBuzzRule())
rules.append(FizzRule())
rules.append(BuzzRule())
rules.append(NumberRule())
def create(self):
return FizzBuzz()
#####################################################################
# CORE
#####################################################################
class FizzBuzz:
def take(self, number):
fizzbuzz_factory = FizzBuzzFactory()
rules = fizzbuzz_factory.rules
for rule in rules:
if rule.check_rule(number):
return rule.result_rule(number)
if __name__ == "__main__":
unittest.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment