def test_activate_new_debtor(db_session): with pytest.raises(p.InvalidDebtor): debtor = p.reserve_debtor(MAX_INT64 + 1) debtor = p.reserve_debtor(D_ID) assert debtor.debtor_id == D_ID assert not debtor.is_activated assert len(Debtor.query.all()) == 1 with pytest.raises(p.DebtorExists): p.reserve_debtor(D_ID) assert not p.get_active_debtor(D_ID) with pytest.raises(p.InvalidReservationId): p.activate_debtor(D_ID, -123) p.activate_debtor(D_ID, debtor.reservation_id) debtor = p.get_active_debtor(D_ID) assert debtor assert debtor.is_activated cas = ConfigureAccountSignal.query.one() assert cas.debtor_id == D_ID assert cas.config_data == '' assert cas.config_flags == 0 with pytest.raises(p.DebtorExists): p.reserve_debtor(D_ID)
def test_process_account_purge_signal(db_session, debtor, current_ts): creation_date = date(2020, 1, 10) p.process_account_update_signal( debtor_id=D_ID, creditor_id=p.ROOT_CREDITOR_ID, last_change_seqnum=1, last_change_ts=current_ts, principal=0, interest_rate=0.0, creation_date=creation_date, last_config_ts=TS0, last_config_seqnum=0, config_data='', account_id='0', transfer_note_max_bytes=100, negligible_amount=2.0, config_flags=0, ts=current_ts, ttl=1000000, ) d = p.get_active_debtor(D_ID) assert d.has_server_account p.process_account_purge_signal( debtor_id=D_ID, creditor_id=p.ROOT_CREDITOR_ID, creation_date=creation_date, ) d = p.get_active_debtor(D_ID) assert not d.has_server_account
def test_process_rejected_config_signal(debtor): d = p.get_active_debtor(D_ID) assert d.config_error is None params = { 'debtor_id': D_ID, 'creditor_id': ROOT_CREDITOR_ID, 'config_ts': debtor.last_config_ts, 'config_seqnum': debtor.last_config_seqnum, 'negligible_amount': HUGE_NEGLIGIBLE_AMOUNT, 'config_data': '', 'config_flags': debtor.config_flags, 'rejection_code': 'TEST_CODE', } p.process_rejected_config_signal(**{**params, 'config_data': 'UNEXPECTED'}) p.process_rejected_config_signal( **{ **params, 'negligible_amount': HUGE_NEGLIGIBLE_AMOUNT * 1.0001 }) p.process_rejected_config_signal( **{ **params, 'config_flags': d.config_flags ^ 1 }) p.process_rejected_config_signal( **{ **params, 'config_seqnum': d.last_config_seqnum - 1 }) p.process_rejected_config_signal( **{ **params, 'config_seqnum': d.last_config_seqnum + 1 }) p.process_rejected_config_signal( **{ **params, 'config_ts': d.last_config_ts + timedelta(seconds=-1) }) p.process_rejected_config_signal( **{ **params, 'config_ts': d.last_config_ts + timedelta(seconds=1) }) d = p.get_active_debtor(D_ID) assert d.config_error is None p.process_rejected_config_signal(**params) d = p.get_active_debtor(D_ID) assert d.config_error == 'TEST_CODE' p.process_rejected_config_signal(**params) assert d.config_error == 'TEST_CODE'
def get(self, debtorId): """Redirect to the debtor's public info document. The user will be redirected to the info URL specified in the debtor's configuration. If no URL is specified in the configuration, a `404` error code will be returned. """ debtor = procedures.get_active_debtor(debtorId) or abort(404) location = debtor.debtor_info_iri or abort(404) response = redirect(location, code=302) response.headers['Cache-Control'] = 'max-age=86400' return response
def test_update_debtor_config(debtor): last_config_ts = debtor.last_config_ts last_config_seqnum = debtor.last_config_seqnum p.update_debtor_config(D_ID, config_data='TEST', latest_update_id=2) debtor = p.get_active_debtor(D_ID) assert debtor assert debtor.config_data == 'TEST' assert debtor.last_config_seqnum == last_config_seqnum + 1 assert debtor.last_config_ts >= last_config_ts cas = ConfigureAccountSignal.query.one() assert cas.debtor_id == D_ID assert cas.config_data == 'TEST' assert cas.config_flags == 0 assert cas.ts == debtor.last_config_ts assert cas.seqnum == debtor.last_config_seqnum
def get(self, debtorId): """Return debtors's configuration.""" return procedures.get_active_debtor(debtorId) or abort(404)
def get(self, debtorId): """Return debtor.""" return procedures.get_active_debtor(debtorId) or abort(403)