Beispiel #1
0
async def test_create_post(client: AsyncClient, admin: Mapping) -> None:
    published_at = datetime.now(timezone.utc) + timedelta(minutes=1)
    new_post = CreatePost(
        title='Ещё одна заметка',
        text={
            "time": 1605425931108,
            "blocks": [{
                "type": "paragraph",
                "data": {
                    "text": "test"
                }
            }],
            "version": "2.19.0",
        },
        slug='new-test-post',
        published_at=published_at,
    )
    response = await client.post(
        '/posts/',
        content=new_post.json(),
        headers=create_auth_header(admin['username']),
    )

    assert response.status_code == status.HTTP_200_OK
    assert Post.validate(response.json())
Beispiel #2
0
async def test_get_current_user(client: AsyncClient, admin: Mapping) -> None:
    response = await client.get(
        '/users/me',
        headers=create_auth_header(admin['username']),
    )

    assert response.status_code == status.HTTP_200_OK
    assert MyUser.validate(response.json())
Beispiel #3
0
async def test_delete_channel(
    client: AsyncClient,
    channel_to_be_deleted: typing.Mapping,
    admin: typing.Mapping,
) -> None:
    auth_headers = create_auth_header(admin['username'])
    response = await client.delete(
        f'/channels/{channel_to_be_deleted["slug"]}', headers=auth_headers)

    assert response.status_code == status.HTTP_204_NO_CONTENT
Beispiel #4
0
async def test_delete_post(
    client: AsyncClient,
    posts: List[Mapping],
    admin: dict,
) -> None:
    response = await client.delete(
        f'/posts/{posts[0]["slug"]}',
        headers=create_auth_header(admin['username']),
    )

    assert response.status_code == status.HTTP_204_NO_CONTENT
Beispiel #5
0
async def test_delete_channel_by_user(
    client: AsyncClient,
    channel_to_be_deleted: typing.Mapping,
    user: typing.Mapping,
) -> None:
    auth_headers = create_auth_header(user['username'])
    response = await client.delete(
        f'/channels/{channel_to_be_deleted["slug"]}',
        headers=auth_headers,
    )

    assert response.status_code == status.HTTP_403_FORBIDDEN
Beispiel #6
0
async def test_patch_group(
    client: AsyncClient,
    dj: Mapping,
    group: Mapping,
    admin: Mapping,
) -> None:
    """
    Изменение членов группы
    :param client:
    :param dj:
    :param group:
    :param admin:
    :return:
    """
    auth_headers = create_auth_header(admin['username'])
    response = await client.patch(
        f'/djs/{group["slug"]}',
        headers=auth_headers,
        json={'is_group': False},
    )
    data = response.json()

    assert response.status_code == status.HTTP_200_OK
    assert data['group_members'] == []
    assert not data['is_group']
    assert not await dj_crud.get_groups_members([group['id']])

    new_data = {'is_group': True, 'group_members': [dj['id']]}
    response = await client.patch(
        f'/djs/{group["slug"]}',
        headers=auth_headers,
        json=new_data,
    )
    data = response.json()

    assert response.status_code == status.HTTP_200_OK
    assert data['group_members'] == [dj['slug']]
    assert data['is_group']
    assert await dj_crud.get_groups_members([group['id']])

    new_data = {'group_members': []}
    response = await client.patch(
        f'/djs/{group["slug"]}',
        headers=auth_headers,
        json=new_data,
    )
    data = response.json()

    assert response.status_code == status.HTTP_200_OK
    assert not data['group_members']
    assert data['is_group']
    assert not await dj_crud.get_groups_members([group['id']])
Beispiel #7
0
async def test_remove_livestream(
        client: AsyncClient,
        livestream: Mapping,
        admin: Mapping,
) -> None:
    headers = create_auth_header(admin['username'])
    response = await client.delete(
        f'/livestreams/{livestream["id"]}:{livestream["slug"]}',
        headers=headers,
    )

    assert response.status_code == status.HTTP_204_NO_CONTENT
    assert not await livestream_crud.find_one(livestream['id'])
Beispiel #8
0
async def test_change_password(client: AsyncClient, admin: Mapping) -> None:
    data = {
        'new_password': {
            'password': '******',
            'password_confirm': 'newpassword',
        },
        'old_password': '******',
    }
    response = await client.put(
        '/users/password',
        headers=create_auth_header(admin['username']),
        json=data,
    )

    assert response.status_code == status.HTTP_204_NO_CONTENT
Beispiel #9
0
async def test_prohibit_delete(client: AsyncClient, user: Mapping,
                               dj: Mapping) -> None:
    """
    Запрет удаления DJ
    :param client:
    :param user:
    :param dj:
    :return:
    """
    headers = create_auth_header(user['username'])
    user_response = await client.delete(f'/djs/{dj["slug"]}', headers=headers)
    guest_response = await client.delete(f'/djs/{dj["slug"]}')

    assert user_response.status_code == status.HTTP_403_FORBIDDEN
    assert guest_response.status_code == status.HTTP_401_UNAUTHORIZED
    assert await dj_crud.find(id_=dj['id'])
Beispiel #10
0
async def test_create_livestream(
        client: AsyncClient,
        livestream_data: dict,
        admin: Mapping,
) -> None:
    headers = create_auth_header(admin['username'])
    response = await client.post(
        '/livestreams',
        json=livestream_data,
        headers=headers,
    )

    assert response.status_code == status.HTTP_201_CREATED
    data = response.json()
    assert LiveStream.validate(data)
    assert await livestream_crud.find_one(data['id'])
Beispiel #11
0
async def test_delete(
    client: AsyncClient,
    admin: Mapping,
    dj: Mapping,
) -> None:
    """
    Удаление DJ
    :param client:
    :param admin:
    :param dj:
    :return:
    """
    headers = create_auth_header(admin['username'])
    response = await client.delete(f'/djs/{dj["slug"]}', headers=headers)

    assert response.status_code == status.HTTP_204_NO_CONTENT
    assert await dj_crud.find(id_=dj['id']) is None
Beispiel #12
0
async def test_prohibit_adding_by_user(
    client: AsyncClient,
    dj_data: dict,
    user: Mapping,
) -> None:
    """
    Запрет создания DJ пользователям
    :param client:
    :param dj_data:
    :param user:
    :return:
    """
    auth_headers = create_auth_header(user['username'])
    response = await client.post('/djs', json=dj_data, headers=auth_headers)

    assert response.status_code == status.HTTP_403_FORBIDDEN
    assert await dj_crud.find(name=dj_data['name']) is None
Beispiel #13
0
async def test_delete_group(
    client: AsyncClient,
    admin: Mapping,
    group: Mapping,
) -> None:
    """
    Удаление группы
    :param client:
    :param admin:
    :param group:
    :return:
    """
    headers = create_auth_header(admin['username'])
    response = await client.delete(f'/djs/{group["slug"]}', headers=headers)
    group_members = await dj_crud.get_groups_members(ids=[group['id']])

    assert response.status_code == status.HTTP_204_NO_CONTENT
    assert await dj_crud.find(id_=group['id']) is None
    assert not len(group_members)
Beispiel #14
0
async def test_removal_without_privileges(
        client: AsyncClient,
        livestream: Mapping,
        user: Mapping,
) -> None:
    response = await client.delete(
        f'/livestreams/{livestream["id"]}:{livestream["slug"]}',
    )

    assert response.status_code == status.HTTP_401_UNAUTHORIZED
    assert await livestream_crud.find_one(livestream['id'])

    headers = create_auth_header(user['username'])
    response = await client.delete(
        f'/livestreams/{livestream["id"]}:{livestream["slug"]}',
        headers=headers,
    )

    assert response.status_code == status.HTTP_403_FORBIDDEN
    assert await livestream_crud.find_one(livestream['id'])
Beispiel #15
0
async def test_create_dj(
    client: AsyncClient,
    dj_data: dict,
    admin: Mapping,
) -> None:
    """
    Создание пользователя
    :param client:
    :param dj_data:
    :param admin:
    :return:
    """
    auth_headers = create_auth_header(admin['username'])
    response = await client.post('/djs', json=dj_data, headers=auth_headers)
    data = response.json()

    assert response.status_code == status.HTTP_201_CREATED
    assert await dj_crud.find(data['id'])
    assert DJ.validate(data)
    for k, v in dj_data.items():
        assert data[k] == v
Beispiel #16
0
async def test_create_group(
    client: AsyncClient,
    group_data: dict,
    admin: Mapping,
    dj: Mapping,
) -> None:
    """
    Создание группы
    :param client:
    :param group_data:
    :param admin:
    :return:
    """
    auth_headers = create_auth_header(admin['username'])
    response = await client.post('/djs', json=group_data, headers=auth_headers)
    data = response.json()

    assert response.status_code == status.HTTP_201_CREATED
    assert await dj_crud.find(data['id'])
    assert DJ.validate(data)
    assert data['is_group']
    assert data['group_members']
Beispiel #17
0
async def test_disallow_creation_livestream_without_privileges(
        client: AsyncClient,
        livestream_data: dict,
        user: Mapping,
) -> None:
    headers = create_auth_header(user['username'])
    response = await client.post(
        '/livestreams',
        json=livestream_data,
        headers=headers,
    )

    assert response.status_code == status.HTTP_403_FORBIDDEN
    assert not await livestream_crud.find_one(title=livestream_data['title'])

    response = await client.post(
        '/livestreams',
        json=livestream_data,
    )

    assert response.status_code == status.HTTP_401_UNAUTHORIZED
    assert not await livestream_crud.find_one(title=livestream_data['title'])
Beispiel #18
0
async def test_update_livestream(
        client: AsyncClient,
        livestream: Mapping,
        admin: Mapping,
) -> None:
    headers = create_auth_header(admin['username'])
    stream = dict(livestream)
    stream['title'] = 'Новое название'
    stream['start_time'] = stream['start_time'].isoformat()
    stream['end_time'] = None
    response = await client.put(
        f'/livestreams/{livestream["id"]}:{livestream["slug"]}',
        headers=headers,
        json=stream,
    )

    assert response.status_code == status.HTTP_200_OK
    data = response.json()
    assert LiveStream.validate(data)
    db_stream = cast(Mapping, await livestream_crud.find_one(livestream['id']))
    assert db_stream['slug'] == data['slug']
    assert db_stream['title'] == stream['title']
Beispiel #19
0
async def test_prohibit_patch(
    client: AsyncClient,
    dj: Mapping,
    user: Mapping,
) -> None:
    """
    Проверка прав на изменение DJ
    :param client:
    :param dj:
    :param user:
    :return:
    """
    new_data = {'name': 'New name'}
    auth_headers = create_auth_header(user['username'])
    response = await client.patch(
        f'/djs/{dj["slug"]}',
        headers=auth_headers,
        json=new_data,
    )
    db_dj = await dj_crud.find(dj['id'])

    assert response.status_code == status.HTTP_403_FORBIDDEN
    assert db_dj['name'] == dj['name']
Beispiel #20
0
async def test_update_without_privileges(
        client: AsyncClient,
        livestream: Mapping,
        user: Mapping,
) -> None:
    headers = create_auth_header(user['username'])
    response = await client.put(
        f'/livestreams/{livestream["id"]}:{livestream["slug"]}',
        headers=headers,
        json={'title': 'Новый заголовок'},
    )

    assert response.status_code == status.HTTP_403_FORBIDDEN
    db_stream = cast(Mapping, await livestream_crud.find_one(livestream['id']))
    assert db_stream['title'] == livestream['title']

    response = await client.put(
        f'/livestreams/{livestream["id"]}:{livestream["slug"]}',
        json={'title': 'Новый заголовок'},
    )

    assert response.status_code == status.HTTP_401_UNAUTHORIZED
    db_stream = cast(Mapping, await livestream_crud.find_one(livestream['id']))
    assert db_stream['title'] == livestream['title']
Beispiel #21
0
async def test_patch(client: AsyncClient, dj: Mapping, admin: Mapping) -> None:
    """
    Изменение DJ
    :param client:
    :param dj:
    :return:
    """
    auth_headers = create_auth_header(admin['username'])
    new_data = {
        'name': f'new{dj["name"]}',
        'real_name': f'new{dj["real_name"]}'
    }
    response = await client.patch(
        f'/djs/{dj["slug"]}',
        headers=auth_headers,
        json=new_data,
    )
    data = response.json()

    assert response.status_code == status.HTTP_200_OK
    assert data['slug'] == dj['slug']
    assert data['name'] == new_data['name']
    db_dj = await dj_crud.find(name=new_data['name'])
    assert db_dj['slug'] == dj['slug']