import os
import tempfile
import unittest
from mock import patch, Mock
from ddt import ddt, file_data

import pavelib.quality
import paver.easy
from paver.easy import BuildFailure


class TestGetReportFiles(unittest.TestCase):
    """
    Ensure only the report files we want are returned as part of run_quality.
    """

    @patch('os.walk')
    def test_get_pylint_reports(self, my_mock):

        my_mock.return_value = iter([
            ('/foo', ('',), ('pylint.report',)),
            ('/bar', ('/baz',), ('pylint.report',))
        ])
        reports = pavelib.quality.get_violations_reports("pylint")
        self.assertEqual(len(reports), 2)

    @patch('os.walk')
    def test_get_pep8_reports(self, my_mock):
        my_mock.return_value = iter([
            ('/foo', ('',), ('pep8.report',)),
            ('/bar', ('/baz',), ('pep8.report',))
        ])
        reports = pavelib.quality.get_violations_reports("pep8")
        self.assertEqual(len(reports), 2)

    @patch('os.walk')
    def test_get_pep8_reports_noisy(self, my_mock):
        """ Several conditions: different report types, different files, multiple files """
        my_mock.return_value = iter([
            ('/foo', ('',), ('pep8.report',)),
            ('/fooz', ('/ball',), ('pylint.report',)),
            ('/fooz', ('/ball',), ('non.report',)),
            ('/fooz', ('/ball',), ('lms.xml',)),
            ('/bar', ('/baz',), ('pep8.report',))
        ])
        reports = pavelib.quality.get_violations_reports("pep8")
        self.assertEqual(len(reports), 2)