Skip to content

Latest commit

 

History

History
688 lines (515 loc) · 25.9 KB

TESTING.md

File metadata and controls

688 lines (515 loc) · 25.9 KB

Тестирование

В пакет Webdavclient включены следующие компоненты:

  • webdav API
  • resource API
  • wdc

Каждый из компонентов имеет свою тестовую базу.

webdav API

Компонент 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 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))