def setUp(self):
   self.sut = EpisodeFilesFinder()
class TestEpisodeFilesFinder(TestCase):
  @classmethod
  def setUpClass(cls):
   TestEpisodeFilesFinder.create_and_populate_folder(cls,TEST_FILES_DIR, TEST_FILES)

  @classmethod
  def tearDownClass(cls):
    shutil.rmtree(TEST_FILES_DIR)

  def setUp(self):
    self.sut = EpisodeFilesFinder()

  def create_and_populate_folder(self, directory, files_list):
    if not os.path.exists(directory):
      os.mkdir(directory)
    for file in files_list:
      file = os.path.join(directory, file)
      open(file, 'a').close()

  def tearDown(self):
    self.sut = None

  def test_scan_for_episodes_files(self):
    files = ()
    self.assertEqual(len(files),0)
    series, episode_list = self.sut.scan_for_episodes_files(TEST_FILES_DIR)

    self.assertEqual(series,"Elementary")
    self.assertEqual(len(episode_list),6)
    self.assertTrue((1,1) in episode_list)
    self.assertEqual(os.path.basename(episode_list[1,1]), TEST_FILES[0])
    self.assertTrue((-1,2) in episode_list)
    self.assertEqual(os.path.basename(episode_list[-1,2]), TEST_FILES[1])
    self.assertTrue((3,2) in episode_list)
    self.assertEqual(os.path.basename(episode_list[3,2]), TEST_FILES[2])
    self.assertTrue((5,1) in episode_list)
    self.assertEqual(os.path.basename(episode_list[5,1]), TEST_FILES[3])
    self.assertTrue((2,4) in episode_list)
    self.assertEqual(os.path.basename(episode_list[2,4]), TEST_FILES[4])
    self.assertTrue((1,3) in episode_list)
    self.assertEqual(os.path.basename(episode_list[1,3]), TEST_FILES[5])

  def test_extract_episode_data_01(self):
    season, episode = self.sut.extract_episode_data(TEST_FILES[0])
    self.assertEqual(season, 1)
    self.assertEqual(episode, 1)

  def test_extract_episode_data_02(self):
    season, episode = self.sut.extract_episode_data(TEST_FILES[1])
    self.assertEqual(season, -1)
    self.assertEqual(episode, 2)

  def test_extract_episode_data_03(self):
    season, episode = self.sut.extract_episode_data(TEST_FILES[2])
    self.assertEqual(season, 3)
    self.assertEqual(episode, 2)

  def test_extract_episode_data_04(self):
    season, episode = self.sut.extract_episode_data(TEST_FILES[3])
    self.assertEqual(season, 5)
    self.assertEqual(episode, 1)

  def test_extract_episode_data_05(self):
    season, episode = self.sut.extract_episode_data(TEST_FILES[4])
    self.assertEqual(season, 2)
    self.assertEqual(episode, 4)

  def test_extract_episode_data_06(self):
    season, episode = self.sut.extract_episode_data(TEST_FILES[5])
    self.assertEqual(season, 1)
    self.assertEqual(episode, 3)

  def test_extract_episode_data_07(self):
    season, episode = self.sut.extract_episode_data("'Utopia.720p.HDTV.FoV.mkv'")
    self.assertEqual(season, -1)
    self.assertEqual(episode, -1)

  def test_locate_series_name_01(self):
    series_name = self.sut.locate_series_name(TEST_SERIES_STRUCTURE[0])
    self.assertEqual(series_name, 'Ergo proxy')

  def test_locate_series_name_02(self):
    series_name = self.sut.locate_series_name(TEST_SERIES_STRUCTURE[1])
    self.assertEqual(series_name, 'Daredevil')

  def test_locate_series_name_03(self):
    series_name = self.sut.locate_series_name(TEST_SERIES_STRUCTURE[2])
    self.assertEqual(series_name, 'Game of Throne')

  def test_locate_series_name_04(self):
    series_name = self.sut.locate_series_name(TEST_SERIES_STRUCTURE[3])
    self.assertEqual(series_name, 'Game of Throne')

  def test_locate_series_name_05(self):
    series_name = self.sut.locate_series_name(TEST_SERIES_STRUCTURE[4])
    self.assertEqual(series_name, 'Elementary')

  def test_locate_series_name_06(self):
    series_name = self.sut.locate_series_name(TEST_SERIES_STRUCTURE[5])
    self.assertEqual(series_name, 'Gotham')