Kata description: https://gist.github.com/chomik/7c7d1895dfd3dfb5a171
Code: pykonik_dojo_11_haikulog_app_kata.py
Notes from Code Review and retro: whiteboard_notes.png
Kata description: https://gist.github.com/chomik/7c7d1895dfd3dfb5a171
Code: pykonik_dojo_11_haikulog_app_kata.py
Notes from Code Review and retro: whiteboard_notes.png
| import uuid | |
| import re | |
| import pytest | |
| class MessageTooLongException(Exception): | |
| pass | |
| class Message(object): | |
| MAX_LEN = 142 | |
| def __init__(self, text): | |
| if len(text) > self.MAX_LEN: | |
| raise MessageTooLongException() | |
| self.uuid = uuid.uuid4() | |
| self.text = text | |
| self.mentions = self._get_mentions() | |
| def _get_mentions(self): | |
| return re.findall(r'@(\w+)', self.text) | |
| class Twitter(object): | |
| def __init__(self, messages=None): | |
| self._messages = messages or {} | |
| def add_message(self, message): | |
| self._messages[message.uuid] = message | |
| def get_message(self, _uuid): | |
| return self._messages[_uuid] | |
| def get_all_messages(self): | |
| return self._messages.values() | |
| def filter(self, **kwargs): | |
| person = kwargs.get('mention') | |
| return [message for message in self._messages.values() if person in message.mentions] | |
| def test_get_message(): | |
| text = 'asd' | |
| message = Message(text) | |
| twitter = Twitter() | |
| twitter.add_message(message) | |
| assert text == twitter.get_message(message.uuid).text | |
| def test_get_messages(): | |
| text = 'asd' | |
| message = Message(text) | |
| twitter = Twitter() | |
| twitter.add_message(message) | |
| second_text = '123' | |
| second_message = Message(second_text) | |
| twitter.add_message(second_message) | |
| messages = twitter.get_all_messages() | |
| assert len(messages) == 2 | |
| assert message in messages | |
| assert second_message in messages | |
| def test_too_long_message(): | |
| text = 'a' * (Message.MAX_LEN + 1) | |
| with pytest.raises(MessageTooLongException): | |
| Message(text) | |
| def test_message_has_id(): | |
| message = Message('test') | |
| assert message.uuid is not None | |
| def test_message_has_content(): | |
| message = Message('test') | |
| assert message.text == 'test' | |
| def test_get_mensioned(): | |
| message = Message('someone @john') | |
| assert 'john' in message.mentions | |
| def test_get_multiple_mentioned(): | |
| message = Message('someone @john1 @john2') | |
| assert 'john1' in message.mentions | |
| assert 'john2' in message.mentions | |
| def test_filter_by_mentions(): | |
| twitter = Twitter() | |
| message = Message('hi @john') | |
| twitter.add_message(message) | |
| assert message in twitter.filter(mention='john') |