def setUp(self):
	self._url            = 'https://www.google.co.jp/search?q=ruby'
        self._transaction_id = "transaction_test"
        self._result_json    = "result.json"
        self._validator      = CategoryValidator(self._url,self._transaction_id)
        self._scrapyer       = GoogSearchScrapyer()
        self._scoreler       = StdScoreler()
        self._relatedurls    = ["https://python.com","https://javascript.com"]

        self._no_cat_url_list = "./tests/data/no_cat_url.txt"
        #categorysetterexe
        self._exepath = "ls"
        self._infile  = "./tests/data/" + self._transaction_id + "1.scraped"
        self._outfile = "./tests/data/" + self._transaction_id + "1.categorized"
        self._categorysetter = CategorySetterExe(self._exepath,self._infile,self._outfile)
        rm_quoat   = lambda val: re.sub(r'\"','',val)
class TestCategoryValidator(unittest.TestCase):
    def setUp(self):
	self._url            = 'https://www.google.co.jp/search?q=ruby'
        self._transaction_id = "transaction_test"
        self._result_json    = "result.json"
        self._validator      = CategoryValidator(self._url,self._transaction_id)
        self._scrapyer       = GoogSearchScrapyer()
        self._scoreler       = StdScoreler()
        self._relatedurls    = ["https://python.com","https://javascript.com"]

        self._no_cat_url_list = "./tests/data/no_cat_url.txt"
        #categorysetterexe
        self._exepath = "ls"
        self._infile  = "./tests/data/" + self._transaction_id + "1.scraped"
        self._outfile = "./tests/data/" + self._transaction_id + "1.categorized"
        self._categorysetter = CategorySetterExe(self._exepath,self._infile,self._outfile)
        rm_quoat   = lambda val: re.sub(r'\"','',val)

    #success
    #use mock in all classes
    #one record
    def test_success_all_mock(self):
        #scraper mock
        self._scrapyer.target(self._url)
        self._scrapyer.do = Mock()
        self._scrapyer.do.return_value = 0
        self._scrapyer.getRelatedUrl = Mock()
        self._scrapyer.getRelatedUrl.return_value = self._relatedurls
        #scoreler mock
        self._scoreler.analyze = Mock()
        self._scoreler.analyze.return_value = "lang"

        #categorysetter mock
        self._categorysetter.do()
        category = self._validator.do(self._scrapyer,self._scoreler,self._categorysetter)
        self.assertEqual(category,"lang")

        #outputjson
        evt = fmter.Urls2Json(self._url,category,self._validator.getDetail(),self._transaction_id)
        with JSONStreamWriter.ArrayWriter(self._result_json) as jstream:
            jstream.write(evt)
    #many records
    def test_success_all_mock_many_records(self):
        i=0
        with open(self._no_cat_url_list) as fo:
            with JSONStreamWriter.ArrayWriter(self._result_json) as jstream:
                for url in fo:
                    if url.strip()== "" : continue
                    print "transactionID=>" + str(time.time()).replace(".","_")
                    #scraper mock
                    self._scrapyer.target(url)
                    self._scrapyer.do = Mock()
                    self._scrapyer.do.return_value = 0
                    self._scrapyer.output = Mock()
                    self._scrapyer.output.return_value = 0
 
                    self._scrapyer.getRelatedUrl = Mock()
                    self._scrapyer.getRelatedUrl.return_value = self._relatedurls
                    
                    self._exepath = "ls"
                    fpath         = "./tests/data/"
                    self._infile  = fpath + self._transaction_id + str(i+1) + ".scraped"
                    self._outfile = fpath + self._transaction_id + str(i+1) + ".categorized"
                    self._categorysetter = CategorySetterExe(self._exepath,self._infile,self._outfile)
                    ret = self._categorysetter.do()
                     
                    wkValidator  = CategoryValidator(self._url,fpath + self._transaction_id + str(i))
                    #wkValidator  = CategoryValidator(self._url,self._transaction_id + str(i))
                    category = wkValidator.do(self._scrapyer,self._scoreler,self._categorysetter)

                    #outputjson
                    evt = fmter.Urls2Json(url,category,wkValidator.getDetail(),self._transaction_id)
                    jstream.write(evt)

                    
                    i=i+1
    #error raise error
    #
    def test_error_all_mock_many_records(self):
        print "*******error_all_mock_many_records"
        result_json  = "result_error.json"
        i=0
        with open(self._no_cat_url_list) as fo:
            with JSONStreamWriter.ArrayWriter(result_json) as jstream:
                for url in fo:
                    if url.strip()== "" : continue
                    try:
                        print "transactionID=>" + str(time.time()).replace(".","_")
                        #scraper mock raise exception
                        self._scrapyer.target(url)
                        self._scrapyer.do = Mock()
                        if i==0:
                            self._scrapyer.do.return_value = 0
                        else:
                            self._scrapyer.do.side_effect = Exception

                        self._scrapyer.output = Mock()
                        self._scrapyer.output.return_value = 0
 
                        self._scrapyer.getRelatedUrl = Mock()
                        self._scrapyer.getRelatedUrl.return_value = self._relatedurls
                    
                        self._exepath = "ls"
                        fpath         = "./tests/data/"
                        self._infile  = fpath + self._transaction_id + str(i+1) + ".scraped"
                        self._outfile = fpath + self._transaction_id + str(i+1) + ".categorized"
                        self._categorysetter = CategorySetterExe(self._exepath,self._infile,self._outfile)
                        ret = self._categorysetter.do()
                     
                        wkValidator  = CategoryValidator(self._url,fpath + self._transaction_id + str(i))
                        #wkValidator  = CategoryValidator(self._url,self._transaction_id + str(i))
                        category = wkValidator.do(self._scrapyer,self._scoreler,self._categorysetter)

                        #outputjson
                        evt = fmter.Urls2Json(url,category,wkValidator.getDetail(),self._transaction_id)
                        jstream.write(evt)

                    
                        i=i+1
                    except Exception as e:
                        print "raise exception !! continue---------------------------------"
                        continue