def setUp(self):
        logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', 
                            level=logging.DEBUG)
            
        
        config = load_config(file_path = "/home/karten/Programmierung/frontend/config.yaml",
                             logger = logger,
                             exit_with_error = True)
        
        #Connect to test database
        connect("nyan_test", port = 27017)
        fill_database()
        #connect(config['database']['db-name'], 
        #        username= config['database']['user'], 
        #        password= config['database']['passwd'], 
        #        port = config['database']['port'])

        self.user_id = User.objects(email = u'*****@*****.**').first().id
        #feature_extractor = EsaFeatureExtractor(prefix = config['prefix'])
        feature_extractor = TfidfFeatureExtractor(prefix = config['prefix'])
        self.trainer = UserModelBayes(self.user_id, extractor = feature_extractor)
class UserModelBayesTest(unittest.TestCase):

    def setUp(self):
        logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', 
                            level=logging.DEBUG)
            
        
        config = load_config(file_path = "/home/karten/Programmierung/frontend/config.yaml",
                             logger = logger,
                             exit_with_error = True)
        
        #Connect to test database
        connect("nyan_test", port = 27017)
        fill_database()
        #connect(config['database']['db-name'], 
        #        username= config['database']['user'], 
        #        password= config['database']['passwd'], 
        #        port = config['database']['port'])

        self.user_id = User.objects(email = u'*****@*****.**').first().id
        #feature_extractor = EsaFeatureExtractor(prefix = config['prefix'])
        feature_extractor = TfidfFeatureExtractor(prefix = config['prefix'])
        self.trainer = UserModelBayes(self.user_id, extractor = feature_extractor)

    def tearDown(self):
        clear_database()
    
    @unittest.skip("training")
    def test_save_load(self):
        self.trainer.train()
        
        tmp_classifier = self.trainer.clf
        
        self.trainer.save()
        self.trainer.load()
        
        self.assertEqual(tmp_classifier.sigma_.all(),
                         self.trainer.clf.sigma_.all())  
        self.assertEqual(tmp_classifier.theta_.all(),
                         self.trainer.clf.theta_.all()) 
    
    @unittest.skip("training")
    def test_get_unread(self):
        unread_articles = self.trainer._get_unread()
        
        headlines = [a.headline for a in unread_articles]

        self.assertIn(u"Apple = Bad", headlines)
        self.assertNotIn(u"Apple", headlines)
        self.assertEqual(len(headlines), 1)
     
    @unittest.skip("ranking")
    def test_rank(self):
        self.trainer.train()
        
        unread_doc = Article.objects(headline = u"Sony = Bad").first()
        read_doc = Article.objects(headline = u"Apple").first()
        
        rank_unread_doc = self.trainer.rank(unread_doc)
        rank_read_doc = self.trainer.rank(read_doc)
        
        self.assertEqual(rank_unread_doc, UserModelBayes.UNREAD) 
        self.assertEqual(rank_read_doc, UserModelBayes.READ)