Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

возможность отключения теста + метаданных в тесте "Проверка чтения не-администраторами" #783

Merged
merged 2 commits into from
Oct 12, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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,110 @@
Возврат "Проверка доступа на Чтение Не-Администраторами";
КонецФункции

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

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

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

Функция ШаблонПредставления()
Возврат ЗаголовокОбщаяЧасть() + " %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