def test_only_completes_experiments_with_matching_application_collection( self): desktop_experiment = NimbusExperimentFactory.create_with_status( NimbusExperiment.Status.LIVE, application=NimbusExperiment.Application.DESKTOP, ) fenix_experiment = NimbusExperimentFactory.create_with_status( NimbusExperiment.Status.LIVE, application=NimbusExperiment.Application.FENIX, ) def get_records(bucket, collection): if collection == settings.KINTO_COLLECTION_NIMBUS_DESKTOP: return [{"id": desktop_experiment.slug}] if collection == settings.KINTO_COLLECTION_NIMBUS_MOBILE: return [{"id": fenix_experiment.slug}] self.mock_kinto_client.get_records.side_effect = get_records tasks.nimbus_check_experiments_are_complete() self.assertTrue( NimbusExperiment.objects.filter( id=desktop_experiment.id, status=NimbusExperiment.Status.LIVE).exists()) self.assertTrue( NimbusExperiment.objects.filter( id=fenix_experiment.id, status=NimbusExperiment.Status.LIVE).exists())
def test_experiment_updates_when_record_is_not_in_main(self): experiment1 = NimbusExperimentFactory.create_with_lifecycle( NimbusExperimentFactory.Lifecycles.LAUNCH_APPROVE_APPROVE, ) experiment2 = NimbusExperimentFactory.create_with_lifecycle( NimbusExperimentFactory.Lifecycles.ENDING_APPROVE_WAITING, ) experiment3 = NimbusExperimentFactory.create_with_lifecycle( NimbusExperimentFactory.Lifecycles.CREATED, ) initial_change_count = experiment3.changes.count() self.setup_kinto_get_main_records([experiment1.slug]) tasks.nimbus_check_experiments_are_complete() self.assertEqual(experiment3.changes.count(), initial_change_count) self.assertTrue( NimbusExperiment.objects.filter( id=experiment1.id, status=NimbusExperiment.Status.LIVE, publish_status=NimbusExperiment.PublishStatus.IDLE, ).exists() ) self.assertTrue( NimbusExperiment.objects.filter( id=experiment2.id, status=NimbusExperiment.Status.COMPLETE, publish_status=NimbusExperiment.PublishStatus.IDLE, ).exists() ) self.assertTrue( NimbusExperiment.objects.filter( id=experiment3.id, status=NimbusExperiment.Status.DRAFT, publish_status=NimbusExperiment.PublishStatus.IDLE, ).exists() ) self.assertFalse( experiment1.changes.filter( changed_by__email=settings.KINTO_DEFAULT_CHANGELOG_USER, old_status=NimbusExperiment.Status.LIVE, new_status=NimbusExperiment.Status.COMPLETE, message=NimbusChangeLog.Messages.COMPLETED, ).exists() ) self.assertTrue( experiment2.changes.filter( changed_by__email=settings.KINTO_DEFAULT_CHANGELOG_USER, old_status=NimbusExperiment.Status.LIVE, old_publish_status=NimbusExperiment.PublishStatus.WAITING, new_status=NimbusExperiment.Status.COMPLETE, new_publish_status=NimbusExperiment.PublishStatus.IDLE, message=NimbusChangeLog.Messages.COMPLETED, ).exists() )
def test_experiment_ending_email_not_sent_for_experiments_before_proposed_end_date( self, ): experiment = NimbusExperimentFactory.create_with_status( NimbusExperiment.Status.LIVE, proposed_duration=10, ) self.assertEqual(experiment.emails.count(), 0) self.setup_kinto_get_main_records([experiment.slug]) tasks.nimbus_check_experiments_are_complete() self.assertEqual(experiment.emails.count(), 0)
def test_experiment_updates_when_record_is_not_in_main(self): experiment1 = NimbusExperimentFactory.create_with_status( NimbusExperiment.Status.LIVE, ) experiment2 = NimbusExperimentFactory.create_with_status( NimbusExperiment.Status.LIVE, ) experiment3 = NimbusExperimentFactory.create_with_status( NimbusExperiment.Status.DRAFT, ) self.assertEqual(experiment1.changes.count(), 4) self.assertEqual(experiment2.changes.count(), 4) self.assertEqual(experiment3.changes.count(), 1) self.setup_kinto_get_main_records([experiment1.slug]) tasks.nimbus_check_experiments_are_complete() self.assertEqual(experiment3.changes.count(), 1) self.assertTrue( NimbusExperiment.objects.filter( id=experiment1.id, status=NimbusExperiment.Status.LIVE).exists()) self.assertTrue( NimbusExperiment.objects.filter( id=experiment2.id, status=NimbusExperiment.Status.COMPLETE).exists()) self.assertTrue( NimbusExperiment.objects.filter( id=experiment3.id, status=NimbusExperiment.Status.DRAFT).exists()) self.assertFalse( experiment1.changes.filter( changed_by__email=settings.KINTO_DEFAULT_CHANGELOG_USER, old_status=NimbusExperiment.Status.LIVE, new_status=NimbusExperiment.Status.COMPLETE, ).exists()) self.assertTrue( experiment2.changes.filter( changed_by__email=settings.KINTO_DEFAULT_CHANGELOG_USER, old_status=NimbusExperiment.Status.LIVE, new_status=NimbusExperiment.Status.COMPLETE, ).exists())
def test_experiment_ending_email_sent_for_experiments_past_proposed_end_date( self): experiment = NimbusExperimentFactory.create_with_status( NimbusExperiment.Status.LIVE, proposed_duration=10, ) experiment.changes.filter( old_status=NimbusExperiment.Status.ACCEPTED, new_status=NimbusExperiment.Status.LIVE, ).update(changed_on=datetime.datetime.now() - datetime.timedelta(days=10)) self.assertEqual(experiment.emails.count(), 0) self.setup_kinto_get_main_records([experiment.slug]) tasks.nimbus_check_experiments_are_complete() self.assertTrue( experiment.emails.filter( type=NimbusExperiment.EmailType.EXPERIMENT_END).exists()) self.assertEqual(len(mail.outbox), 1)