Thoughtworks interview question

Coding challenge. Use OOP and TDD to succeed.