Beispiel #1
0
 def setUp(self):
     self.haiku = HaikuExtension(mock_bot())
Beispiel #2
0
class HaikuExtensionTestCase(TestCase):
    def setUp(self):
        self.haiku = HaikuExtension(mock_bot())

    @patch('helga.extensions.haiku.db')
    def test_add(self, db):
        self.haiku.add(5, 'foobar')

        assert db.haiku.insert.called

    @patch('helga.extensions.haiku.db')
    def test_remove(self, db):
        self.haiku.remove(5, 'foobar')

        assert db.haiku.remove.called

    @patch('helga.extensions.haiku.db')
    def test_get_random_line(self, db):

        # We mock out the find, because we will do sorting and slicing
        def fake_find(q_dict):
            result = Mock()
            result.sort = result
            result.count.return_value = 1
            result.limit.return_value = result
            result.skip.return_value = result
            result.next.return_value = {'message': 'fives1'}

            return result

        db.haiku.find = fake_find
        line = self.haiku.get_random_line(5)

        assert line == 'fives1'

    @patch('helga.extensions.haiku.db')
    def test_get_random_line_returns_none(self, db):
        db.haiku.find.return_value = db
        db.count.return_value = 0

        assert self.haiku.get_random_line(5) is None

    def test_use_fives(self):
        self.haiku.add = Mock()
        self.haiku.make_poem = Mock()
        self.haiku.make_poem.return_value = ['one', 'two', 'three']

        poem = self.haiku.use(5, 'foo')

        assert 'foo' in (poem[0], poem[2])

    def test_use_fives_does_not_duplicate(self):
        self.haiku.add = Mock()
        self.haiku.make_poem = Mock()
        self.haiku.make_poem.return_value = ['foo', 'two', 'three']

        poem = self.haiku.use(5, 'foo')

        assert poem[0] == 'foo'
        assert poem[2] != 'foo'

    def test_use_sevens(self):
        self.haiku.add = Mock()
        self.haiku.make_poem = Mock()
        self.haiku.make_poem.return_value = ['one', 'two', 'three']

        poem = self.haiku.use(7, 'foo')

        assert poem[1] == 'foo'

    def test_fix_repitition_replaces(self):
        poem = ['foo', 'bar', 'foo']
        self.haiku.get_random_line = Mock(return_value='baz')
        poem = self.haiku.fix_repitition(poem)

        assert poem == ['foo', 'bar', 'baz']

    def test_fix_repititions_gives_up_after_retry(self):
        poem = ['foo', 'bar', 'foo']
        self.haiku.get_random_line = Mock(return_value='foo')
        poem = self.haiku.fix_repitition(poem)

        assert poem == ['foo', 'bar', 'foo']
        assert self.haiku.get_random_line.call_count == 2

    def test_fix_repitition_does_not_replace(self):
        poem = ['foo', 'bar', 'baz']
        self.haiku.get_random_line = Mock()
        poem = self.haiku.fix_repitition(poem)

        assert poem == ['foo', 'bar', 'baz']
        assert not self.haiku.get_random_line.called
Beispiel #3
0
class HaikuExtensionTestCase(TestCase):

    def setUp(self):
        self.haiku = HaikuExtension(mock_bot())

    @patch('helga.extensions.haiku.db')
    def test_add(self, db):
        self.haiku.add(5, 'foobar')

        assert db.haiku.insert.called

    @patch('helga.extensions.haiku.db')
    def test_remove(self, db):
        self.haiku.remove(5, 'foobar')

        assert db.haiku.remove.called

    @patch('helga.extensions.haiku.db')
    def test_get_random_line(self, db):

        # We mock out the find, because we will do sorting and slicing
        def fake_find(q_dict):
            result = Mock()
            result.sort = result
            result.count.return_value = 1
            result.limit.return_value = result
            result.skip.return_value = result
            result.next.return_value = {'message': 'fives1'}

            return result

        db.haiku.find = fake_find
        line = self.haiku.get_random_line(5)

        assert line == 'fives1'

    @patch('helga.extensions.haiku.db')
    def test_get_random_line_returns_none(self, db):
        db.haiku.find.return_value = db
        db.count.return_value = 0

        assert self.haiku.get_random_line(5) is None

    def test_use_fives(self):
        self.haiku.add = Mock()
        self.haiku.make_poem = Mock()
        self.haiku.make_poem.return_value = ['one', 'two', 'three']

        poem = self.haiku.use(5, 'foo')

        assert 'foo' in (poem[0], poem[2])

    def test_use_fives_does_not_duplicate(self):
        self.haiku.add = Mock()
        self.haiku.make_poem = Mock()
        self.haiku.make_poem.return_value = ['foo', 'two', 'three']

        poem = self.haiku.use(5, 'foo')

        assert poem[0] == 'foo'
        assert poem[2] != 'foo'

    def test_use_sevens(self):
        self.haiku.add = Mock()
        self.haiku.make_poem = Mock()
        self.haiku.make_poem.return_value = ['one', 'two', 'three']

        poem = self.haiku.use(7, 'foo')

        assert poem[1] == 'foo'

    def test_fix_repitition_replaces(self):
        poem = ['foo', 'bar', 'foo']
        self.haiku.get_random_line = Mock(return_value='baz')
        poem = self.haiku.fix_repitition(poem)

        assert poem == ['foo', 'bar', 'baz']

    def test_fix_repititions_gives_up_after_retry(self):
        poem = ['foo', 'bar', 'foo']
        self.haiku.get_random_line = Mock(return_value='foo')
        poem = self.haiku.fix_repitition(poem)

        assert poem == ['foo', 'bar', 'foo']
        assert self.haiku.get_random_line.call_count == 2

    def test_fix_repitition_does_not_replace(self):
        poem = ['foo', 'bar', 'baz']
        self.haiku.get_random_line = Mock()
        poem = self.haiku.fix_repitition(poem)

        assert poem == ['foo', 'bar', 'baz']
        assert not self.haiku.get_random_line.called
Beispiel #4
0
 def setUp(self):
     self.haiku = HaikuExtension(mock_bot())
Beispiel #5
0
class HaikuExtensionTestCase(TestCase):

    def setUp(self):
        self.haiku = HaikuExtension(mock_bot())

    @patch('helga.extensions.haiku.db')
    def test_add_line(self, db):
        self.haiku.add_line(5, 'foobar')

        assert db.haiku.insert.called

    @patch('helga.extensions.haiku.db')
    def test_make_poem(self, db):

        # We mock out the find, because we will do sorting and slicing
        def fake_find(q_dict):
            result = Mock()
            result.sort = result
            result.count.return_value = 3

            if q_dict.get('syllables', 5) == 5:
                result.return_value = [
                    {'message': 'fives1'},
                    {'message': 'fives2'},
                    {'message': 'fives3'}
                ]
            else:
                result.return_value = [
                    {'message': 'sevens1'},
                    {'message': 'sevens2'},
                    {'message': 'sevens3'}
                ]

            return result

        db.haiku.find = fake_find
        poem = self.haiku.make_poem()

        assert len(poem) == 3
        assert poem[0].startswith('fives')
        assert poem[1].startswith('sevens')
        assert poem[2].startswith('fives')

    @patch('helga.extensions.haiku.db')
    def test_make_poem_returns_none(self, db):
        db.haiku.find.return_value = db
        db.count.return_value = 0

        assert self.haiku.make_poem() is None

    def test_add_use_line_fives(self):
        self.haiku.add_line = Mock()
        self.haiku.make_poem = Mock()
        self.haiku.make_poem.return_value = ['one', 'two', 'three']

        poem = self.haiku.add_use_line(5, 'foo')

        assert 'foo' in (poem[0], poem[2])

    def test_add_use_line_fives_does_not_duplicate(self):
        self.haiku.add_line = Mock()
        self.haiku.make_poem = Mock()
        self.haiku.make_poem.return_value = ['foo', 'two', 'three']

        poem = self.haiku.add_use_line(5, 'foo')

        assert poem[0] == 'foo'
        assert poem[2] != 'foo'

    def test_add_use_line_sevens(self):
        self.haiku.add_line = Mock()
        self.haiku.make_poem = Mock()
        self.haiku.make_poem.return_value = ['one', 'two', 'three']

        poem = self.haiku.add_use_line(7, 'foo')

        assert poem[1] == 'foo'

    def test_parse_message_is_public_raises_without_nick(self):
        self.assertRaises(Exception,
                          self.haiku.parse_message,
                          'haiku add fives this is a haiku',
                          True)

    def test_parse_message_is_public_parses_with_nick(self):
        retval = self.haiku.parse_message('helga haiku add fives this is a haiku', True)
        assert ('add', 'fives', 'this is a haiku') == retval

    def test_parse_message_not_public_optional_nick(self):
        retval = self.haiku.parse_message('haiku add fives this is a haiku', False)
        assert ('add', 'fives', 'this is a haiku') == retval