Skip to content

Commit

Permalink
возможность отключения теста + метаданных
Browse files Browse the repository at this point in the history
Проверка чтения не-администраторами
добавил области в модуль

vanessa-opensource#645
  • Loading branch information
artbear committed Oct 12, 2020
1 parent 935c98e commit c2cc020
Show file tree
Hide file tree
Showing 4 changed files with 196 additions and 31 deletions.
12 changes: 12 additions & 0 deletions tests/smoke/smoke.bsp.json
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,18 @@

},

"ПроверкаЧтенияНеАдминистраторами": {
"Используется" : true,
"ИсключенияПоИмениМетаданных" : [
"Справочник_Нужный*"
],
"ПривилегированныеРоли" : [
"Администратор",
"ПолныеПрава",
"АдминистраторСистемы"
]
},

"ПроведениеДокументов":{
"Используется" : true,
"КоличествоДокументов" : 5,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,39 @@
<DefaultForm/>
<AuxiliaryForm/>
</Properties>
<ChildObjects/>
<ChildObjects>
<Attribute uuid="ac6444ad-9373-4567-89a9-919d20bee876">
<Properties>
<Name>Настройки</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Настройки</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type/>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
</Properties>
</Attribute>
</ChildObjects>
</ExternalDataProcessor>
</MetaDataObject>
Original file line number Diff line number Diff line change
@@ -1,18 +1,30 @@
Перем КонтекстЯдра;
#Область ОписаниеПеременных

Перем КонтекстЯдра;
Перем Ожидаем, ИтераторМетаданных;

Перем НаборТестов;
Перем ПривилегированныеРоли;

#КонецОбласти

#Область ПрограммныйИнтерфейс

#Область ИнтерфейсТестирования

Функция КлючНастройки() Экспорт
Возврат "ПроверкаЧтенияНеАдминистраторами";
КонецФункции

Процедура Инициализация(КонтекстЯдраПараметр) Экспорт

КонтекстЯдра = КонтекстЯдраПараметр;
Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD");

ЗагрузитьНастройки();

Если Не ЗначениеЗаполнено(ПривилегированныеРоли) Тогда
Возврат; // ВНИМАНИЕ! Ранний возврат.
Если Не ЗначениеЗаполнено(ПривилегированныеРоли) Или Не НужноВыполнятьТест() Тогда
Возврат;
КонецЕсли;

ИтераторМетаданных = КонтекстЯдра.Плагин("ИтераторМетаданных");
Expand All @@ -37,40 +49,60 @@
Процедура ЗаполнитьНаборТестов(НаборТестовПараметр, КонтекстЯдраПараметр) Экспорт

НаборТестов = НаборТестовПараметр; // Запищем в переменную модуля, чтобы другие методы могли дополнять набор тестов
Инициализация(КонтекстЯдраПараметр);// Все инициализируем. В т.ч. и ИтераторМетаданных
Инициализация(КонтекстЯдраПараметр); // Все инициализируем. В т.ч. и ИтераторМетаданных

НаборТестов.Добавить("Тест_РолиОпределены", Неопределено, "Есть роли с полными/администраторскими полномочиями чтения - "
+ ЗаголовокОбщаяЧасть());

// Заполним дерево тестов
Если ЗначениеЗаполнено(ПривилегированныеРоли) Тогда
ИтераторМетаданных.Перечислить(ЭтотОбъект, "ПриСледующемОбъектеМетаданных", "ПриСледующемОбъектеМетаданных");
ИтераторМетаданных.Перечислить(ЭтотОбъект, "ПриСледующемОбъектеМетаданных", "ПриСледующемТипеМетаданных");
КонецЕсли;

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

Процедура ДобавитьРоль(РолиСоответствие, ИмяРоли)

Попытка
РолиСоответствие.Вставить(Метаданные.Роли[ИмяРоли], Истина)
РолиСоответствие.Вставить(Метаданные.Роли[ИмяРоли], Истина);
Исключение
КонецПопытки;

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

#КонецОбласти

#Область Тесты

Процедура Тест_РолиОпределены() Экспорт
Ожидаем.Что(ПривилегированныеРоли, "Есть проверяемые роли").Заполнено();
КонецПроцедуры

Процедура ПриСледующемТипеМетаданных(ОбъектМетаданных, Родитель) Экспорт

ЗаголовокОбщаяЧасть = ЗаголовокОбщаяЧасть();
Если Родитель = Неопределено И ТипЗнч(ОбъектМетаданных) = Тип("Строка") Тогда
НаборТестов.НачатьГруппу(ЗаголовокОбщаяЧасть + " " + ОбъектМетаданных);

КонецЕсли;

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

Процедура ПриСледующемОбъектеМетаданных(ОбъектМетаданных, Родитель) Экспорт

ПолноеИмяОбъекта = ОбъектМетаданных.ПолноеИмя();

ЗаголовокОбщаяЧасть = ЗаголовокОбщаяЧасть();
Если Родитель=Неопределено И ТипЗнч(ОбъектМетаданных)=Тип("Строка") Тогда
НаборТестов.НачатьГруппу(ЗаголовокОбщаяЧасть + " " + ОбъектМетаданных);

Если ОбъектМетаданных <> Неопределено Тогда

Сообщение = "Пропускаем из-за исключения по имени метаданного - " +
КонтекстЯдра.СтрШаблон_(ШаблонПредставления(), Родитель, ОбъектМетаданных.Имя);
Если ДобавитьТестИсключениеЕслиЕстьВИсключаемойКоллекции(ОбъектМетаданных.Имя, Настройки.ИсключенияПоИмениМетаданных,
Сообщение, НаборТестов) Тогда
Возврат;
КонецЕсли;

ИначеЕсли ОбъектМетаданных<>Неопределено Тогда
ПараметрыТеста = НаборТестов.ПараметрыТеста(ПолноеИмяОбъекта, Родитель);
ЗаголовокТеста = "" + ОбъектМетаданных.ПолноеИмя() + ": " + ЗаголовокОбщаяЧасть;
НаборТестов.Добавить("Тест_ПроверитьНеАдминистраторскиеПраваНаЧтение", ПараметрыТеста, ЗаголовокТеста);
Expand All @@ -85,7 +117,7 @@
ЧтениеДоступно = Ложь;
Для Каждого ТекРоль Из Метаданные.Роли Цикл

Если ПривилегированныеРоли.Получить(ТекРоль)<>Неопределено Тогда
Если ПривилегированныеРоли.Получить(ТекРоль) <> Неопределено Тогда
Продолжить;
КонецЕсли;

Expand All @@ -105,35 +137,115 @@
Возврат "Проверка доступа на Чтение Не-Администраторами";
КонецФункции

#Область РаботаСНастройками
#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция ШаблонПредставления()
Возврат ЗаголовокОбщаяЧасть() + " %1: %2";
КонецФункции

Функция ДобавитьТестИсключениеЕслиЕстьВИсключаемойКоллекции(Знач ЧтоИщем, Знач КоллекцияДляПоиска, Знач Сообщение,
Знач НаборТестов)

Если КонтекстЯдра.ЕстьВИсключаемойКоллекции(ЧтоИщем, КоллекцияДляПоиска) Тогда
КонтекстЯдра.Отладка(Сообщение);
ПараметрыТеста = НаборТестов.ПараметрыТеста(Сообщение);

НаборТестов.Добавить("Тест_ПропуститьМетаданное", ПараметрыТеста, Сообщение);
//Наборы.Добавить(
// Новый Структура("ИмяПроцедуры, Параметры, Представление",
// "Тест_ПропуститьМетаданное",
// ПараметрыТеста,
// Сообщение));

Возврат Истина;
КонецЕсли;

Возврат Ложь;
КонецФункции

#Область Настройки

Процедура ЗагрузитьНастройки()
Если ЗначениеЗаполнено(Настройки) Тогда
Возврат;
КонецЕсли;

ПутьНастройки = "ПроверкаЧтенияНеАдминистраторами";
ПлагинНастроек = КонтекстЯдра.Плагин("Настройки");
ПлагинНастроек.Инициализация(КонтекстЯдра);
МассивПривилегированныеРоли = ПлагинНастроек.ПолучитьНастройку(ПутьНастройки);
ПлагинНастройки = КонтекстЯдра.Плагин("Настройки");
ПлагинНастройки.Инициализация(КонтекстЯдра);

Настройки = ПлагинНастройки.ПолучитьНастройку(КлючНастройки());

НастройкиПоУмолчанию = НастройкиПоУмолчанию();
Если ТипЗнч(Настройки) <> Тип("Структура") Then
Настройки = НастройкиПоУмолчанию;
Иначе
ЗаполнитьЗначенияСвойств(НастройкиПоУмолчанию, Настройки);
Настройки = НастройкиПоУмолчанию;
КонецЕсли;

МассивПривилегированныеРоли = Настройки.ПривилегированныеРоли;

ПривилегированныеРоли = Новый Соответствие;
Если ЗначениеЗаполнено(МассивПривилегированныеРоли) Тогда
Для Каждого ИмяРоли Из МассивПривилегированныеРоли Цикл
ДобавитьРоль(ПривилегированныеРоли, ИмяРоли);
КонецЦикла;
Иначе
ЗаполнитьПривилегированныеРолиПоУмолчанию();
КонецЕсли;

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

Процедура ЗаполнитьПривилегированныеРолиПоУмолчанию()
Функция НастройкиПоУмолчанию()

Результат = Новый Структура;

Результат.Вставить("Используется", Истина);
Результат.Вставить("ИсключенияПоИмениМетаданных", Новый Массив);
Результат.Вставить("ПривилегированныеРоли", ЗаполнитьПривилегированныеРолиПоУмолчанию());

Возврат Результат;
КонецФункции

Функция ЗаполнитьПривилегированныеРолиПоУмолчанию()
// Заполняем специализированные роли - это не администраторские роли и не общие роли на Чтение
ДобавитьРоль(ПривилегированныеРоли, "Администратор");
ДобавитьРоль(ПривилегированныеРоли, "ПолныеПрава");
ДобавитьРоль(ПривилегированныеРоли, "АдминНСИ");
ДобавитьРоль(ПривилегированныеРоли, "Тестирование");
ДобавитьРоль(ПривилегированныеРоли, "РазработкаКонфигурации");
ДобавитьРоль(ПривилегированныеРоли, "Обмен");
ДобавитьРоль(ПривилегированныеРоли, "Пользователь"); // общая роль на Чтение
КонецПроцедуры
Результат = Новый Массив;

Результат.Добавить("Админ");
Результат.Добавить("Администратор");
Результат.Добавить("ПолныеПрава");
Результат.Добавить("АдминНСИ");
Результат.Добавить("Тестирование");
Результат.Добавить("РазработкаКонфигурации");
Результат.Добавить("Обмен");
Результат.Добавить("Пользователь"); // общая роль на Чтение

Возврат Результат;
КонецФункции

Функция НужноВыполнятьТест()

ЗагрузитьНастройки();

Если Не ЗначениеЗаполнено(Настройки) Тогда
Возврат Истина;
КонецЕсли;

КлючНастройки = КлючНастройки();

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

Возврат ВыполнятьТест = Истина;
КонецЕсли;

Возврат Истина;

КонецФункции

#КонецОбласти

#КонецОбласти
16 changes: 12 additions & 4 deletions tools/JSON/xUnitParams.json
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,18 @@
]
},

"ПроверкаЧтенияНеАдминистраторами": [
"ПолныеПрава",
"АдминистраторСистемы"
],
"ПроверкаЧтенияНеАдминистраторами": {
"Используется" : true,
"ИсключенияПоИмениМетаданных" : [
"Справочник*"
],
"ПривилегированныеРоли" : [
"Админ",
"Администратор",
"ПолныеПрава",
"АдминистраторСистемы"
]
},

"smokeInputBasedOn": {
"Исключения": {
Expand Down

0 comments on commit c2cc020

Please sign in to comment.