def test_should_respect_max_amount_of_childs(self):
        selector = Mock()
        selector.css_selector = '.ping'
        selector.max_amount_of_childs = 4

        parser = StaticContentParser(StaticContentMock(selectors=[selector]))
        parser.data = static_content_with_childs(amount=5, class_='ping')

        processed_nodes = parser.get_nodes()

        assert_equal(processed_nodes[0].count('ping'), 4)
class ContentProcessingTests(TestCase):
    '''
    Tests the correct processing of data.
    '''

    def setUp(self):
        self.selector = SelectorMock()
        self.static_content_mock = StaticContentMock()
        self.static_content_mock.selector_set.all = Mock(
            return_value=[self.selector])
        self.parser = StaticContentParser(self.static_content_mock)
        self.parser.data = static_content_parsed()

    def test_selector_data_is_processed_correctly(self):
        processed_nodes = self.parser.get_nodes()
        assert_in( '<div class="id-content">', processed_nodes[0])

    def test_links_in_nodes_are_made_absolute(self):
        processed_nodes = self.parser.get_nodes()
        assert_in('<a href="http://mocked.source/test">',
            processed_nodes[0])

    @patch('dasdocc.aggregator.lib.static_content_helpers.datetime',
        new=mocked_datetime)
    def test_processing_time_is_assigned_to_staticcontent_object(self):
        parser = StaticContentParser(self.static_content_mock)
        assert_equals(parser.static_content.date_parsed, 'time')

    @attr('wip')
    def test_should_respect_max_amount_of_childs(self):
        selector = Mock()
        selector.css_selector = '.ping'
        selector.max_amount_of_childs = 4

        parser = StaticContentParser(StaticContentMock(selectors=[selector]))
        parser.data = static_content_with_childs(amount=5, class_='ping')

        processed_nodes = parser.get_nodes()

        assert_equal(processed_nodes[0].count('ping'), 4)
class InterfaceTests(TestCase):
    '''
    Tests the public interface of the parser and asserts that the underlying
    implementation is called correctly. It is not testing any actual content
    processing.
    '''

    def setUp(self):
        self.static_content_mock = StaticContentMock()
        self.static_content_mock.selector_set.all = Mock(return_value=[])
        self.parser = StaticContentParser(self.static_content_mock)

    def teardown(self):
        pass

    @patch('dasdocc.aggregator.lib.static_content_helpers.html.parse')
    def test_parser_should_collect_data_during_get_nodes(self, parse):
        parse.return_value = static_content_parsed()
        self.parser.get_nodes()
        parse.assert_called_once_with('http://mocked.source/')

    @patch('dasdocc.aggregator.lib.static_content_helpers.html.parse')
    def test_parser_should_collect_data_during_process_nodes(self, parse):
        parse.return_value = static_content_parsed()
        self.parser.process_nodes()
        parse.assert_called_once_with('http://mocked.source/')

    @patch('dasdocc.aggregator.lib.static_content_helpers.html.parse')
    def test_parser_should_parse_data_only_once(self, parse):
        parse.return_value = static_content_parsed()
        self.parser.process_nodes()
        self.parser.get_nodes()
        self.parser.process_nodes()
        self.parser.get_nodes()
        parse.assert_called_once_with('http://mocked.source/')