Пример #1
0
def test_execute_select_process_result_value(mocked_client, mocker) -> None:
    mocked_client.execute_statement.return_value = {
        'numberOfRecordsUpdated': 0,
        'records': [[{'longValue': 1}, {'stringValue': 'cat'}]],
        'columnMetadata': [
            {
                "arrayBaseColumnType": 0,
                "isAutoIncrement": False,
                "isCaseSensitive": False,
                "isCurrency": False,
                "isSigned": True,
                "label": "id",
                "name": "id",
                "nullable": 1,
                "precision": 11,
                "scale": 0,
                "schemaName": "",
                "tableName": "pets",
                "type": 4,
                "typeName": "INT",
            },
            {
                "arrayBaseColumnType": 0,
                "isAutoIncrement": False,
                "isCaseSensitive": False,
                "isCurrency": False,
                "isSigned": False,
                "label": "name",
                "name": "name",
                "nullable": 1,
                "precision": 255,
                "scale": 0,
                "schemaName": "",
                "tableName": "pets",
                "type": 12,
                "typeName": "VARCHAR",
            },
        ],
    }
    data_api = DataAPI(
        resource_arn='arn:aws:rds:dummy',
        secret_arn='dummy',
        database='test',
        client=mocked_client,
    )
    assert list(data_api.execute(Select([Pets]))[0]) == [1, 'my_type_cat']
    assert mocked_client.execute_statement.call_args == mocker.call(
        continueAfterTimeout=True,
        database='test',
        includeResultMetadata=True,
        resourceArn='arn:aws:rds:dummy',
        secretArn='dummy',
        sql="""SELECT pets.id, pets.name 
FROM pets""",
    )
Пример #2
0
def test_execute_select(mocked_client, mocker) -> None:
    mocked_client.execute_statement.return_value = {
        'numberOfRecordsUpdated': 0,
        'records': [[{'longValue': 1}, {'stringValue': 'cat'}]],
    }
    data_api = DataAPI(
        resource_arn='dummy', secret_arn='dummy', database='test', client=mocked_client
    )
    assert list(data_api.execute("select * from pets")[0]) == [1, 'cat']
    assert mocked_client.execute_statement.call_args == mocker.call(
        continueAfterTimeout=True,
        database='test',
        includeResultMetadata=True,
        resourceArn='dummy',
        secretArn='dummy',
        sql='select * from pets',
    )
Пример #3
0
def test_execute_insert_parameters(mocked_client, mocker) -> None:
    mocked_client.execute_statement.return_value = {
        'generatedFields': [],
        'numberOfRecordsUpdated': 1,
    }
    data_api = DataAPI(
        resource_arn='arn:aws:rds:dummy',
        secret_arn='dummy',
        database='test',
        client=mocked_client,
    )
    results = data_api.execute(
        "insert into pets values(:id, :name)",
        {
            'id': 1,
            'name': 'cat'
        },
        transaction_id='abc',
    )
    assert results.generated_fields == []
    assert results.number_of_records_updated == 1
    assert mocked_client.execute_statement.call_args == mocker.call(
        continueAfterTimeout=True,
        includeResultMetadata=True,
        parameters=[
            {
                'name': 'id',
                'value': {
                    'longValue': 1
                }
            },
            {
                'name': 'name',
                'value': {
                    'stringValue': 'cat'
                }
            },
        ],
        resourceArn='arn:aws:rds:dummy',
        secretArn='dummy',
        transactionId='abc',
        sql="insert into pets values(:id, :name)",
        database='test',
    )
Пример #4
0
def test_execute_insert(mocked_client, mocker) -> None:
    mocked_client.execute_statement.return_value = {
        'generatedFields': [],
        'numberOfRecordsUpdated': 1,
    }
    data_api = DataAPI(
        resource_arn='dummy', secret_arn='dummy', database='test', client=mocked_client
    )
    results = data_api.execute(
        "insert into pets values(1, 'cat')", transaction_id='abc'
    )
    assert results.generated_fields == []
    assert results.number_of_records_updated == 1
    assert mocked_client.execute_statement.call_args == mocker.call(
        continueAfterTimeout=True,
        includeResultMetadata=True,
        resourceArn='dummy',
        secretArn='dummy',
        transactionId='abc',
        sql="insert into pets values(1, 'cat')",
        database='test',
    )
Пример #5
0
def test_execute_select_as_model(mocked_client, mocker) -> None:
    mocked_client.execute_statement.return_value = {
        "columnMetadata": [
            {
                "arrayBaseColumnType": 0,
                "isAutoIncrement": False,
                "isCaseSensitive": False,
                "isCurrency": False,
                "isSigned": True,
                "label": "id",
                "name": "id",
                "nullable": 1,
                "precision": 11,
                "scale": 0,
                "schemaName": "",
                "tableName": "users",
                "type": 4,
                "typeName": "INT",
            },
            {
                "arrayBaseColumnType": 0,
                "isAutoIncrement": False,
                "isCaseSensitive": False,
                "isCurrency": False,
                "isSigned": False,
                "label": "name",
                "name": "name",
                "nullable": 1,
                "precision": 255,
                "scale": 0,
                "schemaName": "",
                "tableName": "users",
                "type": 12,
                "typeName": "VARCHAR",
            },
        ],
        'numberOfRecordsUpdated':
        0,
        'records': [[{
            'longValue': 1
        }, {
            'stringValue': 'cat'
        }]],
    }
    data_api = DataAPI(
        resource_arn='arn:aws:rds:dummy',
        secret_arn='dummy',
        database='test',
        client=mocked_client,
    )

    class Pet(BaseModel):
        id: int
        name: str

    result = data_api.execute("select * from pets")
    assert len(result) == 1
    assert result[0].model(Pet) == Pet(name='cat', id=1)

    assert mocked_client.execute_statement.call_args == mocker.call(
        continueAfterTimeout=True,
        database='test',
        includeResultMetadata=True,
        resourceArn='arn:aws:rds:dummy',
        secretArn='dummy',
        sql='select * from pets',
    )
Пример #6
0
 def add_user(data_api: DataAPI, id_, name):
     data_api.execute(f"insert into pets values({id_}, {name})")