def setUp(self):
        self.ex = SourcesExtractor()

        self.db = db
        self.db.drop_all()
        self.db.create_all()
        seed_db(db)

        self.fx = dbfixture.data(DocumentData, EntityData)
        self.fx.setup()
class TestSourcesExtractor(unittest.TestCase):
    def setUp(self):
        self.ex = SourcesExtractor()

        self.db = db
        self.db.drop_all()
        self.db.create_all()
        seed_db(db)

        self.fx = dbfixture.data(EntityData)
        self.fx.setup()

    def tearDown(self):
        self.fx.teardown()
        self.db.session.rollback()
        self.db.session.remove()
        self.db.drop_all()

    def test_guess_genders(self):
        d = Document()
        d.text = 'Fred Astair did something. He also did something else.'

        de = DocumentEntity()
        de.document = d
        de.entity = Entity.query.get(self.fx.EntityData.sue_no_gender.id)
        de.offset_list = '27:2'

        self.db.session.add(d)

        self.ex.guess_genders(d)
        self.assertEqual('Male', d.entities[0].entity.person.gender.name)

    def test_extract_sources(self):
        d = Document()
        d.text = 'Fred Astair did something. He also did something else.'

        u = Utterance()
        u.entity = self.fx.EntityData.zuma
        u.document = d

        self.ex.extract_sources(d)
        self.assertEqual(['Jacob Zuma'], [s.person.name for s in d.sources])
class TestSourcesExtractor(unittest.TestCase):
    def setUp(self):
        self.ex = SourcesExtractor()

        self.db = db
        self.db.drop_all()
        self.db.create_all()
        seed_db(db)

        self.fx = dbfixture.data(DocumentData, EntityData)
        self.fx.setup()

    def tearDown(self):
        self.db.session.rollback()
        self.fx.teardown()
        self.db.session.remove()
        self.db.drop_all()

    def test_guess_genders(self):
        d = Document.query.get(self.fx.DocumentData.simple.id)
        d.text = 'Fred Astair did something. He also did something else.'

        de = DocumentEntity()
        de.document = d
        de.relevance = 1.0
        de.entity = Entity.query.get(self.fx.EntityData.sue_no_gender.id)
        de.offset_list = '27:2'

        self.db.session.add(d)

        self.ex.guess_genders(d)
        self.assertEqual('Male', d.entities[0].entity.person.gender.name)

    def test_extract_sources(self):
        d = Document.query.get(self.fx.DocumentData.simple.id)
        d.text = 'Fred Astair did something. He also did something else.'

        u = Utterance()
        u.entity = Entity.query.get(self.fx.EntityData.zuma.id)
        u.document = d
        u.quote = 'a quote'

        self.ex.extract_sources(d)
        self.assertEqual(['Jacob Zuma'], [s.person.name for s in d.sources])

    def test_match_people(self):
        d = Document.query.get(self.fx.DocumentData.simple.id)
        d.text = 'Fred Astair did something. He also did something else.'

        u = Utterance()
        u.entity = Entity()
        u.entity.group = 'people'
        u.entity.name = 'Jacob Zume'  # will fix to zuma
        u.quote = 'a quote'
        u.document = d

        u2 = Utterance()
        u2.entity = Entity()
        u2.entity.group = 'people'
        u2.entity.name = 'Jacob Zooma'  # too different
        u2.quote = 'a quote'
        u2.document = d

        self.ex.discover_people(d)
        self.assertEqual('Jacob Zuma', u.entity.person.name)
        self.assertIsNone(u2.entity.person)

    def test_clean_name(self):
        self.assertEqual('Cyril Ramaphosa', self.ex.clean_name('Deputy President Cyril Ramaphosa'))
        self.assertEqual('Nelson Mandela', self.ex.clean_name('President Nelson Mandela'))
        self.assertEqual('NelsonPresident Mandela', self.ex.clean_name('NelsonPresident Mandela'))
        self.assertEqual('Moegoeng Moegoeng', self.ex.clean_name('Chief Justice Moegoeng Moegoeng'))
        self.assertEqual('Alexis Tsipras', self.ex.clean_name('Prime Minister Alexis Tsipras'))