Created
July 30, 2014 16:18
-
-
Save gatukgl/c2d2063c3ecc072608f0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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