示例#1
0
def test_lists_dto_add__when_new_list_is_added__then_update_dynamodb__and_return_saved_object(
        dynamodb_lists_table, dynamodb_user_to_lists_table, sample_data):
    from sf_shopping_list.data.dto.lists_dto import ListsDto
    from sf_shopping_list.data.clients.dynamodb import lists_table, user_to_lists_table

    guest_user_id = 'guest1_id'

    # add new list
    new_list = NewList(name='new sample list',
                       items=[
                           'item0',
                           'item1',
                           'item2',
                       ],
                       guests=[guest_user_id])

    with patch('sf_shopping_list.data.dto.lists_dto.datetime',
               spec=datetime) as mock_date:
        mock_date.utcnow.return_value = added_time
        res = ListsDto.create(new_list, tested_user_id)

    # assert returned object has all fields filled correctly
    assert res.id == added_id
    assert res.userId == tested_user_id
    assert res.createdAt == added_time
    assert res.guests == new_list.guests
    assert res.items == new_list.items
    assert res.listName == new_list.name

    # assert returned object has been persisted
    saved_list = lists_table().get_item(Key={'id': added_id})
    assert saved_list['Item'] is not None
    assert ListMappers.map_doc_to_dto(
        ListDocModel.from_db_doc(saved_list['Item'])) == res

    # assert owner user_to_lists entry has been updated with new list
    owner_lists = user_to_lists_table().get_item(
        Key={'user_id': tested_user_id})
    assert owner_lists['Item'] is not None
    assert added_id in owner_lists['Item']['lists']

    # assert guest user_to_lists entry has been updated with new list
    guest_lists = user_to_lists_table().get_item(
        Key={'user_id': guest_user_id})
    assert guest_lists['Item'] is not None
    assert added_id in owner_lists['Item']['lists']
def create_list(body: NewList):
    assert isinstance(app.current_event, APIGatewayProxyEventV2)
    sub = _get_auth_user_sub(app.current_event)
    return ListsDto.create(body, sub)