def test_any_advice_in_the_week(self): """Any advice in the middle of the week.""" user = user_pb2.User( user_id=str(mongomock.ObjectId()), features_enabled=user_pb2.Features(advisor=user_pb2.ACTIVE), projects=[project_pb2.Project(advices=[ project_pb2.Advice( advice_id='priority-advice', num_stars=3, score=8, ), project_pb2.Advice( advice_id='easy-advice', num_stars=1, score=2, ), ])], ) advice_given = set() for unused_index in range(101): advice = advisor.select_advice_for_email(user, user_pb2.WEDNESDAY, self.database) self.assertTrue(advice) self.assertIn(advice.advice_id, {'easy-advice', 'priority-advice'}) advice_given.add(advice.advice_id) if len(advice_given) > 2: break # This could fail with a probability of .8^100 ~= 2e-10. self.assertEqual({'easy-advice', 'priority-advice'}, advice_given)
def setUp(self): super(MaybeAdviseTestCase, self).setUp() self.database = mongomock.MongoClient().test self.database.action_templates.insert_one({ '_id': 'rec1CWahSiEtlwEHW', 'goal': 'Reorientation !', }) self.user = user_pb2.User(features_enabled=user_pb2.Features(advisor=user_pb2.ACTIVE)) action.clear_cache() advisor.clear_cache()
def test_one_advice_module_only(self): """Only one advice module was recommended.""" user = user_pb2.User( user_id=str(mongomock.ObjectId()), features_enabled=user_pb2.Features(advisor=user_pb2.ACTIVE), projects=[project_pb2.Project(advices=[project_pb2.Advice( advice_id='only-advice')])], ) advice = advisor.select_advice_for_email(user, user_pb2.TUESDAY, self.database) self.assertTrue(advice) self.assertEqual('only-advice', advice.advice_id)
def setUp(self): super(_BaseTestCase, self).setUp() self.database = mongomock.MongoClient().test self.database.action_templates.insert_one({ '_id': 'rec1CWahSiEtlwEHW', 'goal': 'Reorientation !', }) self.user = user_pb2.User( features_enabled=user_pb2.Features(advisor=user_pb2.ACTIVE), profile=user_pb2.UserProfile(name='Margaux', gender=user_pb2.FEMININE)) advisor.clear_cache()
def test_different_advice_during_the_week(self, mock_now): """Different advice during the week.""" user_id = mongomock.ObjectId() user = user_pb2.User( user_id=str(user_id), features_enabled=user_pb2.Features(advisor=user_pb2.ACTIVE), projects=[project_pb2.Project(advices=[ project_pb2.Advice( advice_id='priority-advice', num_stars=3, score=8, ), project_pb2.Advice( advice_id='other-advice', num_stars=2, score=9, ), project_pb2.Advice( advice_id='easy-advice', num_stars=1, score=2, ), ])], ) advice_given = set() mock_now.return_value = datetime.datetime(2017, 4, 3, 13, 00) advice = advisor.select_advice_for_email(user, user_pb2.MONDAY, self.database) advice_given.add(advice.advice_id) self.database.email_history.update_one( {'_id': user_id}, {'$set': {'advice_modules.%s' % advice.advice_id: mock_now().isoformat() + 'Z'}}, upsert=True, ) mock_now.return_value = datetime.datetime(2017, 4, 5, 13, 00) advice = advisor.select_advice_for_email(user, user_pb2.WEDNESDAY, self.database) advice_given.add(advice.advice_id) self.database.email_history.update_one( {'_id': user_id}, {'$set': {'advice_modules.%s' % advice.advice_id: mock_now().isoformat() + 'Z'}}, upsert=True, ) mock_now.return_value = datetime.datetime(2017, 4, 7, 13, 00) advice = advisor.select_advice_for_email(user, user_pb2.FRIDAY, self.database) advice_given.add(advice.advice_id) self.assertEqual(3, len(advice_given), msg=advice_given)
def setUp(self) -> None: super().setUp() self.database = mongomock.MongoClient().test self.database.action_templates.insert_one({ '_id': 'rec1CWahSiEtlwEHW', 'goal': 'Reorientation !', }) self.database.translations.insert_one({ 'string': 'de {job_name}', 'fr@tu': 'de {job_name}', }) self.user = user_pb2.User( features_enabled=user_pb2.Features(advisor=user_pb2.ACTIVE, workbench=user_pb2.ACTIVE), profile=user_pb2.UserProfile(name='Margaux', gender=user_pb2.FEMININE, email='*****@*****.**', locale='fr@tu')) proto.CachedCollection.update_cache_version()
def _create_mock_scoring_project() -> scoring.ScoringProject: """Create a mock scoring_project.""" _db = mongomock.MongoClient().test _db.job_group_info.insert_one({ '_id': 'A1234', 'requirements': { 'diplomas': [{ 'name': 'Bac+2' }], }, }) user = user_pb2.User() project = project_pb2.Project() project.target_job.job_group.rome_id = 'A1234' project.created_at.FromDatetime(datetime.datetime.now()) project.job_search_started_at.FromDatetime(datetime.datetime.now() - datetime.timedelta(days=30)) features = user_pb2.Features() return scoring.ScoringProject(project, user, features, _db)
def load_set(cls, filename): """Load a set of personas from a JSON file.""" with open(filename) as personas_file: personas_json = json.load(personas_file) personas = {} for name, blob in personas_json.items(): user_profile = user_pb2.UserProfile() assert proto.parse_from_mongo(blob['user'], user_profile) features_enabled = user_pb2.Features() if 'featuresEnabled' in blob: assert proto.parse_from_mongo(blob['featuresEnabled'], features_enabled) project = project_pb2.Project() assert proto.parse_from_mongo(blob['project'], project) assert name not in personas personas[name] = cls(name, user_profile=user_profile, project=project, features_enabled=features_enabled) return personas
def test_easy_advice_on_friday(self): """Easy advice on Friday.""" user = user_pb2.User( user_id=str(mongomock.ObjectId()), features_enabled=user_pb2.Features(advisor=user_pb2.ACTIVE), projects=[project_pb2.Project(advices=[ project_pb2.Advice( advice_id='priority-advice', num_stars=3, score=9, ), project_pb2.Advice( advice_id='easy-advice', num_stars=1, score=2, ), ])], ) advice = advisor.select_advice_for_email(user, user_pb2.FRIDAY, self.database) self.assertTrue(advice) self.assertEqual('easy-advice', advice.advice_id)
def setUp(self): super(PopulateProjectTemplateTest, self).setUp() # Pre-populate project's fields that are usualldy set. Individual tests # should not count on those values. self.project = project_pb2.Project() self.project.target_job.name = 'Boulanger / Boulangère' self.project.target_job.masculine_name = 'Boulanger' self.project.target_job.feminine_name = 'Boulangère' self.project.target_job.job_group.rome_id = 'Z9007' self.project.mobility.city.city_id = '69123' self.project.mobility.city.departement_id = '69' self.project.mobility.city.region_id = '84' self.project.mobility.city.postcodes = '69001-69002-69003-69004' self.project.mobility.city.name = 'Lyon' self.database = mongomock.MongoClient().test self.database.regions.insert_one({ '_id': '84', 'prefix': 'en ', 'name': 'Auvergne-Rhône-Alpes', }) self.scoring_project = scoring.ScoringProject( self.project, user_pb2.UserProfile(), user_pb2.Features(), self.database)
def __init__(self, name, user_profile, project, features_enabled=None): self.name = name self.user_profile = user_profile self.project = project self.features_enabled = features_enabled or user_pb2.Features()