class BayesianFilterStrategyTestCase(unittest.TestCase): def setUp(self): self.env = EnvironmentStub(enable=[BayesianFilterStrategy]) self.env.config.set('spam-filter', 'bayes_karma', '10') FilterSystem(self.env).upgrade_environment() self.strategy = BayesianFilterStrategy(self.env) def tearDown(self): reset_db(self.env) def test_karma_calculation_unsure(self): bayes.Hammie = lambda x: Mock(score=lambda x: .5, bayes=Mock(nham=1000, nspam=1000)) req = MockRequest(self.env) self.assertEquals(None, self.strategy.test(req, 'John Doe', 'Spam', '127.0.0.1')) def test_karma_calculation_negative(self): bayes.Hammie = lambda x: Mock(score=lambda x: .75, bayes=Mock(nham=1000, nspam=1000)) req = MockRequest(self.env) points, reasons, args = \ self.strategy.test(req, 'John Doe', 'Spam', '127.0.0.1') self.assertEquals(-5, points) def test_karma_calculation_positive(self): bayes.Hammie = lambda x: Mock(score=lambda x: .25, bayes=Mock(nham=1000, nspam=1000)) req = MockRequest(self.env) points, reasons, args = \ self.strategy.test(req, 'John Doe', 'Spam', '127.0.0.1') self.assertEquals(5, points) def test_classifier_untrained(self): req = MockRequest(self.env) self.assertEqual(None, self.strategy.test(req, 'John Doe', 'Hammie', '127.0.0.1')) def test_classifier_basics(self): req = MockRequest(self.env) self.env.config.set('spam-filter', 'bayes_min_training', '1') self.strategy.train(req, 'John Doe', 'Spam spam spammie', '127.0.0.1', True) self.strategy.train(req, 'John Doe', 'Ham ham hammie', '127.0.0.1', False) points, reasons, args = \ self.strategy.test(req, 'John Doe', 'Hammie', '127.0.0.1') self.assertGreater(points, 0, 'Expected positive karma') points, reasons, args = \ self.strategy.test(req, 'John Doe', 'Spam', '127.0.0.1') self.assertLess(points, 0, 'Expected negative karma')
class BayesianFilterStrategyTestCase(unittest.TestCase): def setUp(self): self.env = EnvironmentStub(enable=[BayesianFilterStrategy]) self.env.config.set('spam-filter', 'bayes_karma', '10') db = self.env.get_db_cnx() cursor = db.cursor() for table in schema: for stmt in _to_sql(table): cursor.execute(stmt) self.strategy = BayesianFilterStrategy(self.env) def test_karma_calculation_unsure(self): bayes.Hammie = lambda x: Mock(score=lambda x: .5, bayes=Mock(nham=1000, nspam=1000)) req = Mock(authname='anonymous', base_url='http://example.org/', remote_addr='127.0.0.1') self.assertEquals(None, self.strategy.test(req, 'John Doe', 'Spam')) def test_karma_calculation_negative(self): bayes.Hammie = lambda x: Mock(score=lambda x: .75, bayes=Mock(nham=1000, nspam=1000)) req = Mock(authname='anonymous', base_url='http://example.org/', remote_addr='127.0.0.1') points, reasons = self.strategy.test(req, 'John Doe', 'Spam') self.assertEquals(-5, points) def test_karma_calculation_positive(self): bayes.Hammie = lambda x: Mock(score=lambda x: .25, bayes=Mock(nham=1000, nspam=1000)) req = Mock(authname='anonymous', base_url='http://example.org/', remote_addr='127.0.0.1') points, reasons = self.strategy.test(req, 'John Doe', 'Spam') self.assertEquals(5, points) def test_classifier_untrained(self): req = Mock(authname='anonymous', base_url='http://example.org/', remote_addr='127.0.0.1') self.assertEqual(None, self.strategy.test(req, 'John Doe', 'Hammie')) def test_classifier_basics(self): req = Mock(authname='anonymous', base_url='http://example.org/', remote_addr='127.0.0.1') self.env.config.set('spam-filter', 'bayes_min_training', '1') self.strategy.train(req, 'John Doe', 'Spam spam spammie', True) self.strategy.train(req, 'John Doe', 'Ham ham hammie', False) points, reasons = self.strategy.test(req, 'John Doe', 'Hammie') assert points > 0, 'Expected positive karma' points, reasons = self.strategy.test(req, 'John Doe', 'Spam') assert points < 0, 'Expected negative karma'