class test_storyteller(TestCase):
    
    def setUp(self):
        self.setUpStoryFiles()
        self.story = StoryTeller()
        self.story.setAudioDir(TESTDIR)
        self.story.setPlayer(MockPlayer)
        self.story.loadStoryLines()
        
    def setUpStoryFiles(self):
        for filename in AUDIOFILES:
            self.touch(filename)
        
    def touch(self, filename):
        if not os.path.exists(TESTDIR):
            os.makedirs(TESTDIR) 
        fullname = os.path.join(TESTDIR,filename)
        with open(fullname, 'a'):
            os.utime(fullname, None)   
            
    def tearDown(self): 
        if os.path.exists(TESTDIR):
            shutil.rmtree(TESTDIR)
        
    def test_can_list_stories(self):
        storylines = self.story.getStoryLines()
        self.assertIsInstance(storylines,dict)
        count = len(STORYLENGTHS)
        self.assertEqual(len(storylines), count)
        for i in STORYLENGTHS:
            self.assertEqual(len(storylines[i]), STORYLENGTHS[i])
        
    def test_can_set_the_story_player(self):
        self.story.setCurrentStoryline(1)
        self.story.play()
        
    def test_if_current_storyline_not_set_raise_exception(self):
        self.assertRaises(StoryTellerError, self.story.play)
            
    def test_can_cycle_through_multiple_stories(self):
        self.story.setCurrentStoryline(1)
        self.assertCorrectFile(0)
        self.assertCorrectFile(1)
        self.assertCorrectFile(0)        
        self.story.setCurrentStoryline(2)
        self.assertCorrectFile(2)
        self.assertCorrectFile(3)
        self.assertCorrectFile(4)
        self.assertCorrectFile(2)
        
    def test_can_do_playNext(self):
        self.story.playNext(1)
        self.assertCorrectFile(1)
        self.story.playNext(2)
        self.story.playNext(2)
        self.story.playNext(2)
        self.assertCorrectFile(2)
        
    def test_can_show_storylines(self):
        self.assertEqual(self.story.showStoryLines(), '\n'.join(AUDIOFILES))
           
    def assertCorrectFile(self, audiofileindex):
        self.assertEquals(self.story.getCurrentStory(),AUDIOFILES[audiofileindex])
        self.story.play()