class testOracleScraper(unittest.TestCase):

    def setUp(self):
        self.St = OracleScraper(databaseName = ":memory:", fetchData = False,fr = 2009, to = 2012,calc = False)

    def test_getSeasonUrls(self):
        urls = self.St.getSeasonUrls(fr=1969,to=2012)
        self.assertIn("http://www.basketball-reference.com/leagues/NBA_1969_games.html",urls)
        self.assertNotIn("http://www.basketball-reference.com/leagues/NBA_984_games.html",urls)

    def test_parseSeasons(self): 
        urls = ["http://www.basketball-reference.com/leagues/NBA_1969_games.html"]
        results = self.St.parseSeasons(urls)
        results = results[("NBA","1969")]
        results = results["playoffs"]
        self.assertIn(["Tue, Apr 29, 1969", "Los Angeles Lakers", "88", "Boston Celtics","89"],results)
        self.assertNotIn(["Tue, Apr 29, 1969", "Los Angeles Lakers", "88", "Boston Celtics","87"],results)
        self.assertIn(["Fri, Apr 18, 1969", "New York Knicks", "105", "Boston Celtics","106"],results)
            
    def test_seasonsToSql(self):
        urls = ["http://www.basketball-reference.com/leagues/NBA_1969_games.html"]
        results = self.St.parseSeasons(urls)
        self.St.seasonsToSql(seasons = results, dbTableName = "testdata")
        res = list(self.St.dbConn.execute("select date,visitor_team,visitor_points from testdata where home_team='Boston Celtics'"))
        self.assertIn((str(date(1969,4,29)),'Los Angeles Lakers',88),res)
        self.assertNotIn((str(date(1969,4,15)),'Boston Celtics',87),res)
        self.assertIn((str(date(1969,4,18)),'New York Knicks',105),res)

    def test_getTeams(self):
        lis = self.St.getTeams()
        self.assertIn(["Atlanta Hawks","Atlanta Hawks", "St. Louis Hawks", "Milwaukee Hawks", "Tri-Cities Blackhawks"],lis)
        self.assertIn(["Boston Celtics"],lis)
        self.assertNotIn(["Reykjavik Penguins"],lis)

    def test_getTeamUrls(self):
        urls = self.St.getTeamUrls()
        self.assertIn("http://www.basketball-reference.com/teams/ATL/",urls)
        self.assertNotIn("http://www.basketball-reference.com/leagues/RPG/",urls)
    
    def test_teamNamesToSql(self):
        self.St.teamNamesToSql(self.St.getTeams())
        results = map(lambda x: list(x)[0],list(self.St.dbConn.execute("select name from teamNames")))
        self.assertIn("Boston Celtics",results)
        self.assertIn("Chicago Bulls",results)
        self.assertNotIn("Reykjavik Penguins",results)

    def test_teamsToSql(self):
        self.St.teamNamesToSql(self.St.getTeams())
        self.St.teamsToSql()
        results = map(lambda x: list(x), list(self.St.dbConn.execute("select * from teams")))
        self.assertTrue(len(results[0]) == 14)
        self.assertIn("Atlanta Hawks", results[0])
        self.assertNotIn("Reykjavik Polar", results[0])
        
    def test_parseTeamStats(self):
        results = self.St.parseTeamStats(["http://www.basketball-reference.com/teams/ATL/"])
        self.assertIn("Atlanta Hawks", results)
        self.assertTrue(len(results["Atlanta Hawks"][0]) == 10)
        self.assertNotIn("Reykjavik Polar", results)
        
    def test_teamStatsToSql(self):
        self.St.teamStatsToSql(self.St.parseTeamStats(["http://www.basketball-reference.com/teams/DEN/"]))
        results = map(lambda x: list(x), list(self.St.dbConn.execute("select * from teamStats")))
        self.assertTrue(len(results[0]) == 10)
        self.assertIn([1990,'NBA', 'Denver Nuggets', 43, 39,0.524,4.0,1.56,108.0,106.7], results)