1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2025-01-03 22:52:10 +02:00

#ONECICD-312

Тесты и исправленные ошибки по работе с проектами
This commit is contained in:
aleksey.koryakin 2020-02-18 12:02:13 +03:00
parent 6b2e4451ce
commit 300424bee0
5 changed files with 206 additions and 52 deletions

View File

@ -67,6 +67,8 @@
НастройкиИнициализированы = Истина;
ПроверитьНастройкуПроектов();
Возврат ВозвращаемаяНастройка;
КонецФункции
@ -199,21 +201,19 @@
Функция ИмяПроектаДляФайла(Знач ОтносительноеИмяФайла) Экспорт
Если СтрНачинаетсяС(ОтносительноеИмяФайла, "/") ИЛИ СтрНачинаетсяС(ОтносительноеИмяФайла, "\") Тогда
Если СтрНачинаетсяС(ОтносительноеИмяФайла, "\") ИЛИ СтрНачинаетсяС(ОтносительноеИмяФайла, "/") Тогда
ОтносительноеИмяФайла = Сред(ОтносительноеИмяФайла, 2);
КонецЕсли;
ОтносительноеИмяФайла = СтрЗаменить(НРег(ОтносительноеИмяФайла), "\", "/");
ОтносительноеИмяФайла = НРег(ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогЛокальныхНастроек, ОтносительноеИмяФайла));
Для Каждого ИмяПроекта Из ПроектыКонфигурации() Цикл
НормализованноеИмяФайла = Лев(ОтносительноеИмяФайла, СтрДлина(ИмяПроекта));
НормализованноеИмяПроекта = СтрЗаменить(НРег(ИмяПроекта), "\", "/");
НормализованноеИмяПроекта = НРег(ИмяПроекта);
Если НормализованноеИмяПроекта = НормализованноеИмяФайла Тогда
Если СтрНачинаетсяС(ОтносительноеИмяФайла, НормализованноеИмяПроекта) Тогда
Возврат ИмяПроекта;
@ -244,6 +244,40 @@
КонецПроцедуры
Функция НормализованноеИмяПроекта(ИмяПроекта) Экспорт
Если НЕ ЗначениеЗаполнено(ИмяПроекта) Тогда
Возврат ИмяПроекта;
КонецЕсли;
НормализованноеИмяПроекта = ФайловыеОперации.ПолучитьНормализованныйОтносительныйПуть(КаталогЛокальныхНастроек, ИмяПроекта);
Возврат НормализованноеИмяПроекта;
КонецФункции
Функция ПроверитьНастройкуПроектов() Экспорт
Успешно = Истина;
Лог = МенеджерПриложения.ПолучитьЛог();
Для Каждого ИмяПроекта Из ПроектыКонфигурации() Цикл
Если НормализованноеИмяПроекта(ИмяПроекта) <> ИмяПроекта Тогда
Лог.Предупреждение("Имя проекта '%1' указано не корректно (должно быть %2), возможно приложение будет работать не корректно", ИмяПроекта, НормализованноеИмяПроекта(ИмяПроекта));
Успешно = Ложь;
КонецЕсли;
КонецЦикла;
Возврат Успешно;
КонецФункции
#КонецОбласти
Функция ЭтоНовый() Экспорт
@ -306,10 +340,12 @@
КонецФункции
Функция КлючНастройки(Проект = Неопределено, КлючНастройки = Неопределено)
Функция КлючНастройки(Знач Проект = Неопределено, КлючНастройки = Неопределено)
Ключ = Новый Массив();
Проект = НормализованноеИмяПроекта(Проект);
Если ЗначениеЗаполнено(Проект) И ЕстьПроект(Проект) Тогда
Ключ.Добавить(КлючПроекты());

View File

@ -190,6 +190,15 @@
КонецФункции
Функция КаталогСуществует(Знач Путь1, Знач Путь2 = Неопределено, Знач Путь3 = Неопределено, Знач Путь4 = Неопределено) Экспорт
ПолныйПуть = ОбъединитьПути(Путь1, Путь2, Путь3, Путь4);
Файл = Новый Файл(ПолныйПуть);
Возврат Файл.Существует() И Файл.ЭтоКаталог();
КонецФункции
Процедура ПроверитьКорневойКаталог(ПутьКорневогоКаталога)
Если ПустаяСтрока(ПутьКорневогоКаталога) Тогда

View File

@ -24,11 +24,11 @@
},
"Проекты":{
"configuration": {
"configuration\\": {
"ИспользоватьСценарииРепозитория": false,
"ГлобальныеСценарии": []
},
"ext/extension1": {
"ext\\extension1\\": {
"ИспользоватьСценарииРепозитория": true,
"ОтключенныеСценарии": [],
"КаталогЛокальныхСценариев": "localscenario",

View File

@ -134,33 +134,36 @@
ВсеСценарии = МенеджерНастроек.ПолучитьИменаСценариевКаталога(МенеджерПриложения.КаталогСценариев());
НастройкиПрекоммит = ЗагрузитьНастройкиИзФикстуры("v8configПроекты.json");
Каталог = СоздатьТестовыйКаталог("v8configПроекты.json");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект настроек").Содержит("configuration");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект настроек").Содержит("ext/extension1");
ПроверитьЗначение("ИспользоватьСценарииРепозитория", "configuration", Ложь);
ПроверитьЗначение("ИспользоватьСценарииРепозитория", "ext/extension1", Истина);
ПроверитьЗначение("ИспользоватьСценарииРепозитория", "ext/extension2", Истина, "Несуществующий проект");
Настройки = МенеджерНастроек.НастройкиРепозитория(Каталог);
НастройкиПрекоммит = Настройки.НастройкиПриложения(МенеджерНастроек.КлючНастройкиPrecommit());
ПроверитьЗначение("КаталогЛокальныхСценариев", "ext/extension1", "localscenario");
ПроверитьЗначение("КаталогЛокальныхСценариев", "ext/extension2", "", "Несуществующий проект");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект настроек").Содержит("configuration\");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект настроек").Содержит("ext\extension1\");
ПроверитьЗначение("ИспользоватьСценарииРепозитория", "configuration\", Ложь);
ПроверитьЗначение("ИспользоватьСценарииРепозитория", "ext\extension1\", Истина);
ПроверитьЗначение("ИспользоватьСценарииРепозитория", "ext\extension2\", Истина, "Несуществующий проект");
ПроверитьЗначение("КаталогЛокальныхСценариев", "ext\extension1\", "localscenario");
ПроверитьЗначение("КаталогЛокальныхСценариев", "ext\extension2\", "", "Несуществующий проект");
Сценарии = МенеджерНастроек.ИменаЗагружаемыхСценариев("configuration");
Сценарии = МенеджерНастроек.ИменаЗагружаемыхСценариев("configuration\");
Ожидаем.Что(Сценарии.Количество(), "Сценарии проекта 'configuration'").Равно(0);
Сценарии = МенеджерНастроек.ИменаЗагружаемыхСценариев("ext/extension1");
Ожидаем.Что(Сценарии.Количество(), "Сценарии проекта 'ext/extension1'").Равно(ВсеСценарии.Количество());
Сценарии = МенеджерНастроек.ИменаЗагружаемыхСценариев("ext\extension1\");
Ожидаем.Что(Сценарии.Количество(), "Сценарии проекта 'ext\extension1'").Равно(ВсеСценарии.Количество());
Сценарии = МенеджерНастроек.ИменаЗагружаемыхСценариев("ext/extension2");
Ожидаем.Что(Сценарии.Количество(), "Сценарии проекта 'ext/extension2' несуществующий проект").Равно(ВсеСценарии.Количество() - 1);
Сценарии = МенеджерНастроек.ИменаЗагружаемыхСценариев("ext\extension2\");
Ожидаем.Что(Сценарии.Количество(), "Сценарии проекта 'ext\extension2' несуществующий проект").Равно(ВсеСценарии.Количество() - 1);
НастройкаConfiguration = МенеджерНастроек.НастройкиПроекта("configuration");
НастройкаConfiguration = МенеджерНастроек.НастройкиПроекта("configuration\");
Ожидаем.Что(НастройкаConfiguration,
"Не корректные настройки проекта")
.Не_().Равно(НастройкиПрекоммит);
НастройкаExtension1 = МенеджерНастроек.НастройкиПроекта("ext/extension1");
НастройкаExtension1 = МенеджерНастроек.НастройкиПроекта("ext\extension1\");
Ожидаем.Что(НастройкаExtension1,
"Не корректные настройки проекта")
.Не_().Равно(НастройкиПрекоммит);
@ -226,21 +229,6 @@
КонецПроцедуры
Процедура ДобавитьВариантНастройки(Варианты, Значение1 = Неопределено, Значение2 = Неопределено, Значение3 = Неопределено, Значение4 = Неопределено)
Строка = Варианты.Добавить();
Для Инд = 1 По 4 Цикл
Значение = Вычислить(СтрШаблон("Значение%1", Инд));
Если Значение <> Неопределено Тогда
Строка[Инд - 1] = Значение;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьЗначение(Ключ, Проект, ОжидаемоеЗначение, Дополнение = "")
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки(Ключ, Проект),
@ -292,8 +280,28 @@
КопироватьФайл(Фикстура, ОбъединитьПути(Каталог, "v8config.json"));
СоздатьКаталог(ОбъединитьПути(Каталог, "configuration"));
СоздатьКаталог(ОбъединитьПути(Каталог, "ext"));
СоздатьКаталог(ОбъединитьПути(Каталог, "ext", "extension1"));
СоздатьКаталог(ОбъединитьПути(Каталог, "ext", "extension2"));
Возврат Каталог;
КонецФункции
Процедура ДобавитьВариантНастройки(Варианты, Значение1 = Неопределено, Значение2 = Неопределено, Значение3 = Неопределено, Значение4 = Неопределено)
Строка = Варианты.Добавить();
Для Инд = 1 По 4 Цикл
Значение = Вычислить(СтрШаблон("Значение%1", Инд));
Если Значение <> Неопределено Тогда
Строка[Инд - 1] = Значение;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти

View File

@ -19,6 +19,7 @@
ВсеТесты.Добавить("Тест_СброситьНастройкиРепозитория");
ВсеТесты.Добавить("Тест_СброситьГлобальныеНастройки");
ВсеТесты.Добавить("Тест_ПолучитьСтандартнуюСтруктуруНастроек");
ВсеТесты.Добавить("Тест_ОбновитьНастройки");
Возврат ВсеТесты;
@ -66,22 +67,22 @@
// Сброс по проектно
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект").Содержит("configuration");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект").Содержит("ext/extension1");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект").Содержит("configuration\");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект").Содержит("ext\extension1\");
РедакторНастроек.СброситьНастройкиРепозитория(Истина, "ext\extension1");
РедакторНастроек.СброситьНастройкиРепозитория(Истина, "ext\extension1\");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Проект не удален").НЕ_().Содержит("ext/extension1");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект").Содержит("configuration");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Проект не удален").НЕ_().Содержит("ext\extension1\");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Не найден проект").Содержит("configuration\");
РедакторНастроек.СброситьНастройкиРепозитория(Истина, "configuration\extension1");
РедакторНастроек.СброситьНастройкиРепозитория(Истина, "configuration\extension1\");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Удален лишний репозиторий").Содержит("configuration");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Удален лишний репозиторий").Содержит("configuration\");
// Перезагрузим настройки
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Настройки не сохранены").НЕ_().Содержит("ext/extension1");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Настройки сохранены не корректно").Содержит("configuration");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Настройки не сохранены").НЕ_().Содержит("ext\extension1\");
Ожидаем.Что(МенеджерНастроек.ПроектыКонфигурации(), "Настройки сохранены не корректно").Содержит("configuration\");
// Сброс всех подпроектов
@ -159,8 +160,80 @@
КонецПроцедуры
#КонецОбласти
Процедура Тест_ОбновитьНастройки() Экспорт
Варианты = Новый ТаблицаЗначений();
Варианты.Колонки.Добавить("Описание");
Варианты.Колонки.Добавить("ИмяФикстуры");
Варианты.Колонки.Добавить("НовыеНастройки");
Варианты.Колонки.Добавить("НовыеПроекты");
Варианты.Колонки.Добавить("ОжидаемыеПроекты");
БазовыеНастройки = РедакторНастроек.ПолучитьСтандартнуюСтруктуруНастроек();
НастройкиПроектов = Новый Соответствие();
НастройкиПроектов.Вставить("configuration\", РедакторНастроек.ПолучитьСтандартнуюСтруктуруНастроек());
ДобавитьВариантНастройки(Варианты, "Только базовые настройки", "v8config.json", БазовыеНастройки, , "");
ДобавитьВариантНастройки(Варианты, "К базовым настройкам добавляем проекты", "v8config.json", БазовыеНастройки, НастройкиПроектов, "configuration\");
ДобавитьВариантНастройки(Варианты, "Настройки с проектами, обновляем только базовые настройки", "v8configПроекты.json", БазовыеНастройки, , "configuration\,ext\extension1");
ДобавитьВариантНастройки(Варианты, "Обновление настройки подпроекта", "v8configПроекты.json", БазовыеНастройки, НастройкиПроектов, "configuration\,ext\extension1\");
НастройкиПроектов = Новый Соответствие();
НастройкиПроектов.Вставить("configuration2\", РедакторНастроек.ПолучитьСтандартнуюСтруктуруНастроек());
ДобавитьВариантНастройки(Варианты, "Добавление настройки подпроекта", "v8configПроекты.json", БазовыеНастройки, НастройкиПроектов, "configuration\,configuration2\,ext\extension1\");
Для Каждого Вариант Из Варианты Цикл
Лог.Отладка("Обработка файла %1", Вариант.ИмяФикстуры);
МенеджерНастроек.СбросСостоянияМенеджера();
Каталог = СоздатьТестовыйКаталог(Вариант.ИмяФикстуры);
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
РедакторНастроек.ОбновитьНастройки(Вариант.НовыеНастройки, Вариант.НовыеПроекты);
МенеджерНастроек.СбросСостоянияМенеджера();
МенеджерНастроек.НастройкиРепозитория(Каталог, Ложь);
Префикс = СтрШаблон("Вариант ""%1""", Вариант.Описание);
Для Каждого Элемент Из Вариант.НовыеНастройки Цикл
Сообщение = СтрШаблон("%1. Не верное значение поля '%2'", Префикс, Элемент.Ключ);
ОжидаемоеЗначение = Элемент.Значение;
Если ТипЗнч(ОжидаемоеЗначение) = Тип("Массив") Тогда
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки(Элемент.Ключ), Сообщение).ИмеетТип("Массив").ИмеетДлину(ОжидаемоеЗначение.Количество());
ИначеЕсли ТипЗнч(ОжидаемоеЗначение) = Тип("Соответствие") Тогда
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки(Элемент.Ключ), Сообщение).ИмеетТип("Соответствие").ИмеетДлину(ОжидаемоеЗначение.Количество());
Иначе
Ожидаем.Что(МенеджерНастроек.ЗначениеНастройки(Элемент.Ключ), Сообщение).Равно(ОжидаемоеЗначение);
КонецЕсли;
КонецЦикла;
ИменаПроектов = СтрРазделить(Вариант.ОжидаемыеПроекты, ",");
Для Каждого ИмяПроекта Из ИменаПроектов Цикл
Сообщение = СтрШаблон("%1. Нет настроек для проекта '%2'", Префикс, ИмяПроекта);
Ожидаем.Что(МенеджерНастроек.НастройкиПроекта(ИмяПроекта), Сообщение).Заполнено();
КонецЦикла;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область Служебные
@ -181,8 +254,36 @@
КопироватьФайл(Фикстура, ОбъединитьПути(Каталог, "v8config.json"));
СоздатьКаталог(ОбъединитьПути(Каталог, "configuration"));
СоздатьКаталог(ОбъединитьПути(Каталог, "configuration2"));
СоздатьКаталог(ОбъединитьПути(Каталог, "ext"));
СоздатьКаталог(ОбъединитьПути(Каталог, "ext", "extension1"));
СоздатьКаталог(ОбъединитьПути(Каталог, "ext", "extension2"));
Возврат Каталог;
КонецФункции
Процедура ДобавитьВариантНастройки(Варианты, Значение1 = Неопределено, Значение2 = Неопределено, Значение3 = Неопределено, Значение4 = Неопределено, Значение5 = Неопределено)
Строка = Варианты.Добавить();
Для Инд = 1 По 5 Цикл
Значение = Вычислить(СтрШаблон("Значение%1", Инд));
Если Значение <> Неопределено Тогда
Строка[Инд - 1] = Значение;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
// ПередЗапускомТестов();
// ПередЗапускомТеста();
// Тест_ОбновитьНастройки();
// ПослеЗапускаТеста();
// Сообщить("Успех");