예제 #1
0
def test_query_by_user_id(client):
    new_account = Account(id="account_id", balance=100, user_id="Bob")
    db.session.add(new_account)
    new_account = Account(id="account_id_2", balance=100, user_id="Bob")
    db.session.add(new_account)
    db.session.commit()

    r = client.get('/accounts/users/Bob/')
    json_response = json.loads(r.get_data(as_text=True))
    assert json_response == [
        {'balance': 100.0, 'id': 'account_id', 'user_id': 'Bob'},
        {'balance': 100.0, 'id': 'account_id_2', 'user_id': 'Bob'}
    ], "Wrong return from user_id query"
    assert r.status == '200 OK', "Response not 200"
예제 #2
0
 def apply(self):
     account_id = str(uuid4())
     if 'account_id' in self.payload:
         account_id = self.payload['account_id']
     new_account = Account(id=account_id,
                           balance=self.payload['balance'],
                           user_id=self.payload['user_id'])
     db.session.add(new_account)
     self.payload['account_id'] = new_account.id
     self.update_accounts_version()
예제 #3
0
def apply_snapshot(snapshot_response):
    snapshot = snapshot_response['snapshot']
    version = snapshot_response['version']

    from accountService.eventSourcing.aggregates import Account, Constants, db
    for account in snapshot:
        new_account = Account(id=account['id'],
                              balance=account['balance'],
                              user_id=account['user_id'])
        db.session.add(new_account)
    service_version = Constants.query.filter_by(key="accounts_version").first()
    service_version.value = version
    db.session.commit()
예제 #4
0
def test_delete_account_command(client):
    account_id = "TEST_ID"
    new_account = Account(id=account_id, balance=100, user_id="Bob")
    db.session.add(new_account)
    db.session.commit()

    delete_account_command = {
        "type": "DELETE",
        "payload": {
            "account_id": account_id
        }
    }
    r = client.post('/accounts/commands/', data=json.dumps(delete_account_command))
    accounts = Account.query.all()
    assert len(accounts) == 0, "Account was not deleted"
    assert r.status == '202 ACCEPTED', "Response not 202"

    version = Constants.query.filter_by(key='accounts_version').first()
    assert version.value == 1, "Aggregate version not updated"
예제 #5
0
def test_deposit_created_event(client):
    new_account = Account(id="account_id", balance=100, user_id="Bob")
    db.session.add(new_account)
    db.session.commit()

    deposit_created_event = {
        "type": "DEPOSIT_CREATED",
        "command_id": "test",
        "payload": {
            "account_id": "account_id",
            "amount": 50,
            "transaction_id": "transaction_id"
        }
    }
    r = client.post('/accounts/events/', data=json.dumps(deposit_created_event))
    account = Account.query.filter_by(id="account_id").first()
    assert account.balance == 150, "Account balance was not increased."
    assert r.status == '202 ACCEPTED', "Response not 202"

    version = Constants.query.filter_by(key='accounts_version').first()
    assert version.value == 1, "Aggregate version not updated"