def test_clear_and_renew_subscription(patron_type_grown_sion, patron_sion_no_email): """Test the `task patrons.tasks.clear_and_renew_subscription`.""" patron_sion = patron_sion_no_email # To test correctly all the code we need to disconnect the listener # `create_subscription_patron_transaction` method. Otherwise, the # first part of the task (clean_obsolete_subscriptions) will automatically # create new subscriptions because the last instruction is a # `patron.update()` call. after_record_update.disconnect(create_subscription_patron_transaction) # first step : clear all subscription for the patron and crate an new # obsolete subscription. if 'subscriptions' in patron_sion_no_email.get('patron', {}): del patron_sion_no_email['patron']['subscriptions'] start = datetime.now() - timedelta(days=200) end = start + timedelta(days=100) patron_sion.add_subscription(patron_type_grown_sion, start, end) assert len(patron_sion.get('patron', {}).get('subscriptions', [])) == 1 assert patron_sion.get('patron', {})['subscriptions'][0]['end_date'] == \ end.strftime('%Y-%m-%d') # clean old subscription - Reload the patron and check they are no more # subscriptions clean_obsolete_subscriptions() patron_sion = Patron.get_record_by_pid(patron_sion.pid) assert len(patron_sion.get('patron', {}).get('subscriptions', [])) == 0 # check for patron needed subscriptions and create new subscription if # needed. As our patron has no subscription and is still connected to # a patron type requiring subscription, this task should create a # new subscription for this patron check_patron_types_and_add_subscriptions() patron_sion = Patron.get_record_by_pid(patron_sion.pid) assert len(patron_sion.get('patron', {}).get('subscriptions', [])) == 1 assert patron_sion.get('patron', {})['subscriptions'][0]['end_date'] == \ add_years(datetime.now(), 1).strftime('%Y-%m-%d') # run both operation using task_clear_and_renew_subscriptions` and check # the result. The patron should still have one subscription but end_date # must be today. del patron_sion['patron']['subscriptions'] start = datetime.now() - timedelta(days=200) end = start + timedelta(days=100) patron_sion.add_subscription(patron_type_grown_sion, start, end) task_clear_and_renew_subscriptions() patron_sion = Patron.get_record_by_pid(patron_sion.pid) assert len(patron_sion.get('patron', {}).get('subscriptions', [])) == 1 assert patron_sion.get('patron', {})['subscriptions'][0]['end_date'] != \ end.strftime('%Y-%m-%d') # as we disconnect the `create_subscription_patron_transaction` listener # at the beginning, we need to connect it now. after_record_update.connect(create_subscription_patron_transaction)
def signals(): """Fixtures to connect signals.""" called = {} def _listener(signal_name, sender, *args, **kwargs): if signal_name not in called: called[signal_name] = 0 called[signal_name] += 1 after_record_delete_listener = partial(_listener, 'after_record_delete') after_record_insert_listener = partial(_listener, 'after_record_insert') after_record_revert_listener = partial(_listener, 'after_record_revert') after_record_update_listener = partial(_listener, 'after_record_update') before_record_delete_listener = partial(_listener, 'before_record_delete') before_record_insert_listener = partial(_listener, 'before_record_insert') before_record_revert_listener = partial(_listener, 'before_record_revert') before_record_update_listener = partial(_listener, 'before_record_update') before_record_insert_listener = partial(_listener, 'before_record_insert') after_record_delete.connect(after_record_delete_listener) after_record_insert.connect(after_record_insert_listener) after_record_revert.connect(after_record_revert_listener) after_record_update.connect(after_record_update_listener) before_record_delete.connect(before_record_delete_listener) before_record_insert.connect(before_record_insert_listener) before_record_revert.connect(before_record_revert_listener) before_record_update.connect(before_record_update_listener) before_record_insert.connect(before_record_insert_listener) yield called after_record_delete.disconnect(after_record_delete_listener) after_record_insert.disconnect(after_record_insert_listener) after_record_revert.disconnect(after_record_revert_listener) after_record_update.disconnect(after_record_update_listener) before_record_delete.disconnect(before_record_delete_listener) before_record_insert.disconnect(before_record_insert_listener) before_record_revert.disconnect(before_record_revert_listener) before_record_update.disconnect(before_record_update_listener) before_record_insert.disconnect(before_record_insert_listener)