В пакет Webdavclient включены следующие компоненты:
webdav API
resource API
wdc
Каждый из компонентов имеет свою тестовую базу.
Компонент webdav API содержит следующие тестовые наборы:
- настройка подключения
- аутентификация
- методы
- интеграционные тесты
Для инициализации клиента используется словарь (настройки подключения), содержащий набор опций подключения к webdav-серверу.
Настройки подключения имеют обязательные и не обязательные опции. К обязательным опциям относятся webdav_hostname
, webdav_login
и webdav_password
.
Заполнение полей может быть валидным или не валидным.
Для проверки используются метод valid?
.
import webdav.client as wc
options = {
'webdav_hostname': "https://webdav.server.ru",
'webdav_login': "login",
'webdav_password': "password"
}
client = wc.Client(options)
client.valid?
Тестовый сценарий 1
Идентификатор: 1.1.1
Название: Обязательные опции подключения
Описание: В случае присутствия каждой из обязательных опций,
настройки подключения клиента будут валидными.
Красный случай
assert_that(client, is_(not_valid())
Зеленый случай
assert_that(client, is_(valid())
Тестовый сценарий 2
Идентификатор: 1.1.2
Название: Валидность обязательных опций подключения
Описание: В случае валидности обязательных опций,
настройки подключения клиента будут валидными.
Красный случай
#without webdav_hostname
#without webdav_login
#without webdav_password
#with proxy_login or proxy_password, but without proxy_hostname
#with proxy_password and proxy_hostname, but without proxy_login
assert_that(client, is_(not_valid())
Зеленый случай
assert_that(client, is_(valid())
Тестовый сценарий 3
Идентификатор: 1.1.3
Название: Валидность сертификата
Описание: При указании валидного файла и ключа сертификата,
настройки подключения клиента будут валидными.
Красный случай
#with key_path, but without cert_path
#key_path or cert_path not exists
assert_that(calling(client.is_valid), raises(CertificateNotValid))
Зеленый случай
assert_that(calling(client.is_valid), is_not(raises(CertificateNotValid))
При подключении к webdav-серверу, необходимо пройти у него basic-аутентификацию, для этого используются опции webdav_login
и webdav_password
. При наличии proxy-сервера, может потребоваться так же пройти аутентификацию и у proxy-сервера. Для proxy-сервера поддерживаются следующие виды аутентификации:
basic
digest
ntlm
negotiate
Тестовый сценарий 1
Идентификатор: 1.2.1
Название: Аутентификация с webdav-сервером
Описание: При правильной аутентификации клиент подключается к webdav-серверу.
Красный случай
assert_that(calling(client.check), is_(not_suceess())
Зеленый случай
assert_that(calling(client.check), is_(suceess())
Тестовый сценарий 2
Идентификатор: 1.2.2
Название: Аутентификация с proxy-сервером
Описание: При правильной аутентификации клиент подключается к webdav-серверу.
Красный случай
assert_that(calling(client.check), is_(not_suceess())
Зеленый случай
#basic
#digest
#ntlm
#negotiate
assert_that(calling(client.check), is_(suceess())
webdav API реализует следущие методы: check
, free
, info
, list
, mkdir
, clean
, copy
, move
, download
, upload
, publish
и unpublish
.
Тестовый сценарий 1
Идентификатор: 1.3.1
Название: Проверка существования ресурса
Описание: В случае существования ресурса, результат выполнения метода check
будет успешным.
Красный случай
assert_that(calling(client.check).with_args(remote_path), is_(not_suceess())
Зеленый случай
assert_that(calling(client.check).with_args(remote_path), is_(suceess())
Тестовый сценарий 2
Идентификатор: 1.3.2
Название: Проверка свободного места
Описание: В случае если webdav-сервер поддерживает метод free, метод возвращает
размер свободного места.
Красный случай
assert_that(calling(client.free), raises(MethodNotSupported))
Зеленый случай
assert_that(calling(client.free), greater_than(0))
Тестовый сценарий 3
Идентификатор: 1.3.3
Название: Получение информации о ресурсе
Описание: В случае если webdav-сервер поддерживает метод info,
метод возвращает информацию следующего типа:
- дата создания;
- дата модификации;
- размер;
- имя.
Красный случай
assert_that(calling(client.info).with_args(remote_path), raises(RemoteResourceNotFound))
Зеленый случай
info = client(remote_path)
assert_that(info, has_key("data1"))
assert_that(info, has_key("data2"))
assert_that(info, has_key("size"))
assert_that(info, has_key("name"))
Тестовый сценарий 4
Идентификатор: 1.3.4
Название: Получение списка ресурсов
Описание: В случае, если указанный ресурс существует и является директорией, то метод list
возвращает список ресурсов, находящихся в данном ресурсе.
Красный случай
assert_that(calling(client.info).with_args(remote_file), raises(RemoteResourceNotFound))
assert_that(calling(client.list).with_args(remote_path), raises(RemoteResourceNotFound))
Зеленый случай
files = client.list(remote_path)
assert_that(files, not_none()))
Тестовый сценарий 5
Идентификатор: 1.3.5
Название: Создание директории
Описание: В случае, если все директории из путевого разбиения для
указанного ресурса существуют, то данный ресурс будет создан.
Красный случай
assert_that(calling(client.info).with_args(remote_path), raises(RemoteParentNotFound))
Зеленый случай
client.mkdir(remote_path)
assert_that(calling(client.check).with_args(remote_path), is_(success()))
Тестовый сценарий 6
Идентификатор: 1.3.6
Название: Удаление ресурса
Описание: В случае, если указанный ресурс существует и не является корнем, то
метод clean удалит данный ресурс.
Красный случай
assert_that(calling(client.clean).with_args(remote_path), raises(RemoteResourceNotFound))
assert_that(calling(client.clean).with_args(root), raises(InvalidOption))
Зеленый случай
client.clean(remote_path)
assert_that(calling(client.check).with_args(remote_path), is_(not_success()))
Тестовый сценарий 7
Идентификатор: 1.3.7
Название: Копирование ресурса
Описание: В случае, если указанный ресурс существует и не является корнем, то
метод copy копирует данный ресурс.
Красный случай
assert_that(calling(client.copy).with_args(from_path=remote_path, to_path=new_path), raises(RemoteResourceNotFound))
assert_that(calling(client.copy).with_args(from_path=root, to_path=new_path), raises(InvalidOption))
assert_that(calling(client.copy).with_args(from_path=remote_path, to_path=root), raises(InvalidOption))
assert_that(calling(client.copy).with_args(from_path=remote_path, to_path=remote_path), is_not(raises(WebDavException)))
Зеленый случай
client.copy(from_path=remote_path, to_path=new_path)
assert_that(calling(client.check).with_args(new_path), is_(success()))
Тестовый сценарий 8
Идентификатор: 1.3.8
Название: Перемещение ресурса
Описание: В случае, если указанный ресурс существует и не является корнем, то
метод move переместит данный ресурс.
Красный случай
assert_that(calling(client.move).with_args(from_path=old_path, to_path=new_path), raises(RemoteResourceNotFound))
assert_that(calling(client.move).with_args(from_path=root, to_path=new_path), raises(InvalidOption))
assert_that(calling(client.move).with_args(from_path=old_path, to_path=root), raises(InvalidOption))
assert_that(calling(client.move).with_args(from_path=old_path, to_path=remote_path), is_not(raises(WebDavException)))
Зеленый случай
client.move(from_path=old_path, to_path=new_path)
assert_that(calling(client.check).with_args(old_path), is_(not_success()))
assert_that(calling(client.check).with_args(new_path), is_(success()))
Тестовый сценарий 9
Идентификатор: 1.3.9
Название: Загрузка ресурса
Описание: В случае, если указанный ресурс существует,
то метод download загрузит данный ресурс.
Красный случай
assert_that(calling(client.download).with_args(remote_path=remote_path, local_path=local_path), raises(LocalResourceNotFound))
assert_that(calling(client.download).with_args(remote_path=remote_path, local_path=local_path), raises(RemoteResourceNotFound))
assert_that(calling(client.download).with_args(remote_path=remote_file, local_path=local_directory), raises(InvalidOption))
assert_that(calling(client.download).with_args(remote_path=remote_directory, local_path=local_file), raises(InvalidOption))
Зеленый случай
client.download(remote_path=remote_path, local_path=local_path)
assert_that(local_path, is_(exist()))
Тестовый сценарий 10
Идентификатор: 1.3.10
Название: Выгрузка ресурса
Описание: В случае, если родительская директория указанный ресурса
существует, то метод upload выгрузит файл или директорию в
ресурс.
Красный случай
assert_that(calling(client.upload).with_args(remote_path=remote_path, local_path=local_path), raises(RemoteParentNotFound))
assert_that(calling(client.upload).with_args(remote_path=remote_file, local_path=local_directory), raises(InvalidOption))
assert_that(calling(client.upload).with_args(remote_path=remote_directory, local_path=local_file), raises(InvalidOption))
Зеленый случай
client.upload(remote_path=remote_path, to_path=local_path)
assert_that(calling(client.check).with_args(remote_path), is_(success()))
Тестовый сценарий 11
Идентификатор: 1.3.11
Название: Публикация ресурса
Описание: В случае, если указанный ресурс существует, то метод publish
возвращает публичную ссылку на ресурс.
Красный случай
assert_that(calling(client.publish).with_args(remote_path), raises(RemoteResourceNotFound))
Зеленый случай
assert_that(calling(client.publish).with_args(remote_path), is_not(raises(RemoteResourceNotFound))
link = client.publish(remote_path)
assert_that(link, starts_with("http")
Тестовый сценарий 12
Идентификатор: 1.3.12
Название: Отмена публикации ресурса
Описание: В случае, если указанный ресурс существует,
то метод unpublish отменяет публикацию ресурса.
Красный случай
assert_that(calling(client.unpublish).with_args(remote_path), raises(RemoteResourceNotFound))
Зеленый случай
assert_that(calling(client.unpublish).with_args(remote_path), is_not(raises(RemoteResourceNotFound))
Компонент resource API состоит из следующих тестовых наборов методы:
- получение ресурса
- методы
Для получение ресурса, используется метод resource
.
Тестовый сценарий 1
Идентификатор: 2.1.1
Название: Получение ресурса
Описание: В случае, если указанный ресурс является директорией и существует,
то метод resource возвращает ресурс.
В случае, если указанный ресурс является файлом,
то метод resource возвращает ресурс.
Красный случай
assert_that(calling(client.resource).with_args(remote_directory), raises(RemoteResourceNotFound))
assert_that(calling(client.resource).with_args(remote_file), is_not(raises(RemoteResourceNotFound)))
Зеленый случай
assert_that(calling(client.check).with_args(remote_path), is_(success())
res = client.resource(remote_path)
assert_that(res.check())
resource API реализует следущие методы: check
, clean
, is_directory
, rename
, move
, copy
, info
, read_from
, read
, read_async
, write_to
, write
, write_async
, publish
и unpublish
.
Тестовый сценарий 1
Идентификатор: 2.2.1
Название: Проверка существования ресурса
Описание: В случае, если указанный ресурс существует,
то результат метода check будет успешным.
Красный случай
assert_that(calling(client.resource).with_args(remote_path), raises(RemoteResourceNotFound))
Зеленый случай
assert_that(calling(client.check).with_args(remote_path), is_(success())
res = client.resource(remote_path)
assert_that(res.check())
Тестовый сценарий 2
Идентификатор: 2.2.2
Название: Удаление ресурса
Описание: В случае, если указанный ресурс существует,
то метод clean удалит данный ресурс.
Красный случай
res = client.resource(remote_path)
assert_that(calling(res.clean), is_not(raises(RemoteResourceNotFound)))
Зеленый случай
assert_that(calling(client.check).with_args(remote_path), is_(success())
res = client.resource(remote_path)
assert_that(res.check())
Тестовый сценарий 3
Идентификатор: 2.2.3
Название: Проверка является ли ресурс директорией
Описание: В случае, если указанный ресурс является директорией,
то результат метода is_directory будет успешным.
Красный случай
res = client.resource(remote_file)
assert_that(calling(res.is_directory), is_(not_success()))
Зеленый случай
res = client.resource(remote_directory)
assert_that(calling(res.is_directory), is_(success()))
Тестовый сценарий 4
Идентификатор: 2.2.4
Название: Переименование ресурса
Описание: В случае, если указанный ресурс существует,
то метод rename переименует данный ресурс.
Красный случай
res = client.resource(remote_path)
assert_that(calling(res.rename).with_args(new_name), raises(RemoteResourceNotFound))
assert_that(calling(res.rename).with_args(new_name), raises(RemoteResourceAlreadyExists))
Зеленый случай
res = client.resource(old_path)
res.rename(new_name)
new_path = res.urn
assert_that(calling(client.check).with_args(old_path), is_(not_success()))
assert_that(calling(client.check).with_args(new_path), is_(success()))
Тестовый сценарий 5
Идентификатор: 2.2.5
Название: Перемещение ресурса
Описание: В случае, если указанный ресурс существует,
то метод move переместит данный ресурс.
Красный случай
res = client.resource(old_path)
assert_that(calling(res.move).with_args(new_path), raises(RemoteResourceNotFound))
Зеленый случай
res = client.resource(old_path)
res.move(new_path)
assert_that(calling(client.check).with_args(old_path), is_(not_success()))
assert_that(calling(client.check).with_args(new_path), is_(success()))
Тестовый сценарий 6
Идентификатор: 2.2.6
Название: Копирование ресурса
Описание: В случае, если указанный ресурс существует,
то метод copy скопирует данный ресурс.
Красный случай
res = client.resource(remote_path)
assert_that(calling(res.copy).with_args(to_path), raises(RemoteResourceNotFound))
Зеленый случай
res = client.resource(remote_path)
res.copy(new_path)
assert_that(calling(client.check).with_args(remote_path), is_(success()))
assert_that(calling(client.check).with_args(new_path), is_(success()))
Тестовый сценарий 7
Идентификатор: 2.2.7
Название: Получение информации о ресурсе
Описание: В случае, если указанный ресурс существует,
то метод info возвращает информацию следующего типа:
- дата создания;
- дата модификации;
- размер;
- имя.
Красный случай
res = client.resource(remote_path)
assert_that(calling(res.info), raises(RemoteResourceNotFound))
Зеленый случай
res = client.resource(remote_path)
info = res.info()
assert_that(info, has_key("data1"))
assert_that(info, has_key("data2"))
assert_that(info, has_key("size"))
assert_that(info, has_key("name"))
Тестовый сценарий 8
Идентификатор: 2.2.8
Название: Считывание данных с буфера в ресурс
Описание: В случае, если указанный ресурс не является директорией,
то метод read_from считывет содержимое буфера и записывает в ресурс.
Красный случай
res1 = client.resource(remote_file)
assert_that(buff, is_(empty))
assert_that(calling(res1.read_from).with_args(buff), raises(BufferIsEmpty))
res2 = client.resource(remote_directory)
assert_that(calling(res2.read_from).with_args(buff), raises(ResourceIsNotDirectory))
Зеленый случай
res = client.resource(remote_path)
res.read_from(buff)
res_size = res.info("size")
assert_that(buff.size(), equal_to(res_size))
Тестовый сценарий 9
Идентификатор: 2.2.9
Название: Запись данных в буфер
Описание: В случае, если указанный ресурс не является директорией,
то метод write_to записывает содержимое ресурса в буфер.
Красный случай
res = client.resource(remote_path)
assert_that(calling(res.write_to).with_args(buff), raises(RemoteResourceNotFound))
Зеленый случай
res = client.resource(remote_path)
res.write_to(buff)
res_size = res.info("size")
assert_that(buff.size(), equal_to(res_size))
Тестовый сценарий 10
Идентификатор: 2.2.10
Название: Публикация ресурса
Описание: В случае, если указанный ресурс существует, то метод publish
возвращает публичную ссылку на ресурс.
Красный случай
res = client.resource(remote_path)
assert_that(calling(res.publish), raises(RemoteResourceNotFound))
Зеленый случай
res = client.resource(remote_path)
assert_that(calling(res.publish), is_not(raises(RemoteResourceNotFound))
link = res.publish()
assert_that(link, starts_with("http")
Тестовый сценарий 11
Идентификатор: 2.2.11
Название: Отмена публикации ресурса
Описание: В случае, если указанный ресурс существует,
то метод unpublish отменяет публикацию ресурса.
Красный случай
res = client.resource(remote_path)
assert_that(calling(res.unpublish), raises(RemoteResourceNotFound))
Зеленый случай
res = client.resource(remote_path)
assert_that(calling(res.unpublish).with_args(remote_path), is_not(raises(RemoteResourceNotFound))