Skip to content

Commit

Permalink
TDD Плагин "Настройки" Метод ЕстьНастройка работает не в соответствии…
Browse files Browse the repository at this point in the history
… со своим описанием. Альтернативный метод ЕстьЗначениеНастройки. (vanessa-opensource#801)

* issues vanessa-opensource#784 Отображение пути к загруженным настройкам в браузере тестов

-- Изменена управляемая форма. Добавлен элемент Декорация и группа элементов.
-- Добавлен метод формирования представления пути к файлу настроек, для вывода в
Декорации
-- Событие Нажатие в Декорации связано с командой ЗагрузитьНастройкиИзФайла

* Исправлен метод ЕстьНастройка

-- было, в параметре СтруктураНастроек возвращается тип Структура
-- стало, в прараметре Структура настроек возвращается значение ключа,
который был указан в параметре ПутьНастроек

* feature: Добавлен метод ЗагрузитьНастройки

-- так как Настройки это фиксированная структура, то данные в Настройки
можно только загружать через конструктор ФиксированнаяСтруктура из
структуры с данными
-- методы ДобавитьНастройку и ДобавитьНастройки по этой же причине
требуется удалить

* feature: добавлен тест для плагина Настройки

* feature: изменен метод ЗагрузитьНастройки

-- позволяет очистить настройки, если вызвать метод без параметров

* В тест добавлен метод ЕстьНастройка

* fix: вернул код метода ЕстьНастройка к исходному виду

-- нужно полностью менять метод

* tests: Добавлены тесты для тестирования старой функции
ЕстьНастройки. Тесты не проходят

* feature, refactor: Добавил метод ЕстьНастройка2

-- Поведение метода соответствует описанию

* doc: уточнен раздел справки "Текучие-(fluent)-утверждения"

-- добавлено описание метода ВыбрасываетИсключение()
-- уточнен пример запуска "Из кода тестов (TDD)"
-- измен порядок методов публичного api, методы сгруппированы по смыслу
-- исправлена грамматическая ошибка

* tests: В тест добавлены методы новые методы

-- непроходной тест ДобавитьНастройку
-- непроходной тест ДобавитьНастройки

* feature: в модуль объекта плагина добавлен метод
ЕстьЗначениеНастройки

* fix: Изменено описание метода ЕстьНастройка

* doc: Добавлено описание метода Метод
добавлен пример для Метод

* Описание метода

* feature, fix: деректива НаКлиенте ненужна

* tests: Добавлены тесты серверного контекста

-- приведен в порядок тест с методом Метод() на сервере

* feature: Изменены методы ДобавитьНастройку, ДобавитьНастройки

-- измен алгоритм методов, теперь они работают
-- изменено описание методов

* tests: добавлен тест плагина Настройки

-- тестируются три метода ПолучитьНастройки, ДобавитьНастройку, ДобавитьНастройки
на клиенте и на сервере

* fix: ошибка в методе ДобавитьНастройки

* tests: Добавлены дополнительные сценарии для теста ДобавитьНастройки

* fix: Исправлен серверный метод ДобавитьНастройки

-- изменено описание метода
-- удалена отладочная информация
-- добавлена проверка типа входящего параметра

* fix: исправлен метод ДобавитьНастройку

-- изменено описание метода
-- добавлена проверка типа входящего параметра Ключ

* fix, tests: уточнены тесты

* doc: документация к плагину Настройки

* doc: справка плагина Настройки встроена в меню

* tests: восстановлены тесты после слияния с конфликтами

* fix: удален тестовый метод ЗагрузитьНастройки

-- после изменения в методе добавить настройки данный метод больше не нужен

* tests: уточнены тесты

-- была зависимость тестов друг от друга.
добавил в начало каждого теста Настройки.Обновить

* doc: добавлено описание методов
ЕстьНастройка ЕстьЗначениеНастройки

* codereview: vanessa-opensource#801 (comment)

-- вернул, ранее удаленную отладочную информацию

* codereview: vanessa-opensource#801 (comment)

-- непроходные тесты переделаны, теперь все тесты проходят
  • Loading branch information
petypen authored Nov 7, 2020
1 parent a71d913 commit 784c923
Show file tree
Hide file tree
Showing 10 changed files with 774 additions and 39 deletions.
1 change: 1 addition & 0 deletions doc/xdd/README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
* [ПарсерКоманднойСтроки](ПарсерКоманднойСтроки.MD)
* [ЗапросыИзБД](ЗапросыИзБД.MD)
* [ЗагрузчикПользовательскихНастроек](Загрузчик-пользовательских-настроек.MD)
* [Настройки](Плагин-Настройки.MD)

* [Дымовые тесты (тесты открытия всех форм)](../../tests/smoke)

Expand Down
53 changes: 53 additions & 0 deletions doc/xdd/Плагин-Настройки.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Пользовательские настройки

## Обращение к плагину (пример)

```bsl
Перем КонтекстЯдра;
Перем Настройки;
Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
КонтекстЯдра = КонтекстЯдраПараметр;
Настройки = КонтекстЯдра.Плагин("Настройки");
КонецПроцедуры
```

## Использование плагина
Плагин предназначен для чтения пользовательских настроек из файла настроек, а так же для управления настройками и получения значений настроек.

Файл настроек должен быть в формате JSON. Пример файла настроек:
```json
{
"ПолноеИмяФайлаТестируемойОбработки": "D:\\MyProject\\MyProcess.epf"
}
```

В браузере тестирования xddTrstRunner есть команда для подключения файла настроек
`Загрузить - Загрузить настройки из файла...`
Если настройки подключены, то в дальнейшем, используя программный интерфейс плагина можно получить настройки как коллекция. После чего возможно управление настройками и получение значений конкретных настроек.

## Методы интерфейса

`ПолучитьНастройки()` - процедура позволяет получить настройки из подключенного файла настроек. Настройки из файла загружаются в фиксированную структуру Настройки. Получение данных из этой структуры или добавление в нее новых настроек производится с применением методов программного интерфейса.

`ДобавитьНастройку(Ключ, Значение)` - процедура позволяет добавить настройку к текущим настройкам
Параметры:
Ключ - Строка - наименование добавляемой настройки
Значение - Произвольное - значение добавляемой настройки

`ДобавитьНастройки(ИсточникНастроек)` - процедура позволяет добавить настройки к текущим настройкам
Параметры:
ИсточникНастроек - Структура | Фиксированная структура - коллекция с новыми настройками, которые нужно добавить к текущим настройкам

`ЕстьНастройка(ПутьНастроек, СтруктураНастроек)` - функция позволяет проверить, что настройка существует. Возвращает признак Настройка существует (Булево)
Параметры:
ПутьНастроек - Строка - Ключ настройки или путь до настройки, как строка ключей, разделенных точкой, например "Ключ1.Ключ2"
СтруктураНастроек - Структура | Неопределено - исходная структура, которая содержит значение искомой настройки

`ЕстьЗначениеНастройки(ПутьНастроек, ЗначениеНастройки)` - функция позволяет получить значение настройки по указанному имени или пути, а также проверяет, имеется ли настройка по указанному пути. Возвращаемое значение - Булево - признак того, что настройка найдена

Параметры:
ПутьНастроек - Строка - Путь из ключей настройки, разделенных точкой, например: "Ключ1.Ключ2"
ЗначениеНастройки - Произвольный - (выходной параметр) найденное значение настройки. Если ключа или пути из ключей нет в настройках, то возвращается Неопределено.
1 change: 1 addition & 0 deletions doc/xdd/Система-плагинов.MD
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
## Существующие плагины и утилиты

- [Генерация макета на базе реальных данных](Генерация-данных.MD)
- [Пользовательские настройки](Плагин-Настройки.MD)
- [Полный список актуальных плагинов располагается в каталоге "/plugins"](/plugins)

## Плагины, отвечающие за вызов утверждений
Expand Down
94 changes: 76 additions & 18 deletions plugins/Настройки/Настройки/Ext/ObjectModule.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -137,48 +137,53 @@
ПолучитьНастройки();
КонецПроцедуры

// Процедура - Добавить настройку
// Добавить настройку к текущим настройкам
//
// Параметры:
// Ключ - -
// Значение - -
// Ключ - Строка - Наименование настройки
// Значение - Произвольное - Значение настройки
//
Процедура ДобавитьНастройку(Знач Ключ, Знач Значение) Экспорт

ПолучитьНастройки();

НовыеНастройки = Новый Структура();
Для каждого КлючЗначение Из Настройки Цикл
НовыеНастройки.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение);
КонецЦикла;

_ДобавитьНастройку(НовыеНастройки, Ключ, Значение);


Если ТипЗнч(Ключ) = Тип("Строка") И НЕ ПустаяСтрока(Ключ) Тогда
НовыеНастройки.Вставить(Ключ, Значение);
КонецЕсли;

Настройки = Новый ФиксированнаяСтруктура(НовыеНастройки);
КонецПроцедуры

// Процедура - Добавить настройки
// Добавить настройки к текущим настройкам
//
// Параметры:
// ИсточникНастроек - -
// ИсточникНастроек - Структура | Фиксированная структура - новые настройки, которые нужно добавить к текущим
//
Процедура ДобавитьНастройки(Знач ИсточникНастроек) Экспорт

ПолучитьНастройки();

НовыеНастройки = Новый Структура();
Для каждого КлючЗначение Из Настройки Цикл
НовыеНастройки.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение);
КонецЦикла;

КонтекстЯдра().Отладка("Добавляю настройки:");
ПоказатьСвойстваВРежимеОтладки(ИсточникНастроек);

Для каждого КлючЗначение Из ИсточникНастроек Цикл
_ДобавитьНастройку(НовыеНастройки, КлючЗначение.Ключ, КлючЗначение.Значение);
КонецЦикла;


Если ТипЗнч(ИсточникНастроек) = Тип("Структура") ИЛИ ТипЗнч(ИсточникНастроек) = Тип("ФиксированнаяСтруктура") Тогда
Для каждого КлючЗначение Из ИсточникНастроек Цикл
НовыеНастройки.Вставить(КлючЗначение.Ключ, КлючЗначение.Значение);
КонецЦикла;
КонецЕсли;

Настройки = Новый ФиксированнаяСтруктура(НовыеНастройки);

КонецПроцедуры

// Процедура - Показать свойства в режиме отладки
Expand Down Expand Up @@ -219,6 +224,59 @@

КонецПроцедуры

// Получает значение настройки по указанному имени или пути, а также проверяет,
// имеется ли настройка по указанному пути.
//
// Параметры:
// ПутьНастроек - Строка - Путь из ключей настройки разделенных точкой,
// Например: "Ключ2.Ключ21"
// ЗначениеНастройки - Произвольный - найденное значение настройки, если ключа
// или пути из ключей нет в настройках, то возвращается Неопределено.
//
// Возвращаемое значение:
// Булево - признак того, что настройка найдена
//
Функция ЕстьЗначениеНастройки(Знач ПутьНастроек, ЗначениеНастройки) Экспорт
Перем бЕстьНастройка, мЭлементыПути, стНастройки, элементКоллекции;

ЗначениеНастройки = Неопределено;
бЕстьНастройка = Ложь;

Если ТипЗнч(ПутьНастроек) <> Тип("Строка") ИЛИ ПустаяСтрока(ПутьНастроек) Тогда
Возврат бЕстьНастройка;
КонецЕсли;

мЭлементыПути = СтрРазделить(ПутьНастроек, ".", Ложь);
Если мЭлементыПути.Количество() = 0 Тогда
Возврат бЕстьНастройка;
КонецЕсли;

стНастройки = ПолучитьНастройки();

Пока мЭлементыПути.Количество() > 0 Цикл

элементКоллекции = Неопределено;
Если НЕ стНастройки.Свойство(мЭлементыПути[0], элементКоллекции) Тогда
Возврат бЕстьНастройка;
КонецЕсли;

Если мЭлементыПути.Количество() = 1 Тогда
ЗначениеНастройки = элементКоллекции;
бЕстьНастройка = Истина;
Возврат бЕстьНастройка;
КонецЕсли;

Если НЕ(ТипЗнч(элементКоллекции) = Тип("Структура") ИЛИ ТипЗнч(элементКоллекции) = Тип("ФиксированнаяСтруктура")) Тогда
Возврат бЕстьНастройка;
КонецЕсли;

стНастройки = элементКоллекции;
мЭлементыПути.Удалить(0);
КонецЦикла;

Возврат бЕстьНастройка;
КонецФункции

// } Settings interface

Функция ДобавитьВНастройкиДанныеИзВложенныхФайловНастроек(Знач Настройки, Знач ИмяКлючаФайлаНастройки,
Expand Down
Loading

0 comments on commit 784c923

Please sign in to comment.