Example #1
0
    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)
Example #2
0
 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()
Example #3
0
 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()
Example #5
0
    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)
Example #6
0
    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()
Example #7
0
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)
Example #8
0
 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
Example #9
0
 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)
Example #10
0
 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)
Example #11
0
 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()