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

Feature/feature 360 #371

Merged
merged 5 commits into from
Dec 8, 2018
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<ExternalDataProcessor uuid="fd6d9ecc-2745-4e4c-b8bf-4d2bd5fe785b">
<InternalInfo>
<xr:ContainedObject>
<xr:ClassId>c3831ec8-d8d5-4f93-8a22-f9bfae07327f</xr:ClassId>
<xr:ObjectId>0966cc50-c47b-497e-adc8-f21eebacff8d</xr:ObjectId>
</xr:ContainedObject>
<xr:GeneratedType name="ExternalDataProcessorObject.ПроверкаРежимаБлокировки" category="Object">
<xr:TypeId>40de5826-8f25-4b00-a777-0a1a8f271cee</xr:TypeId>
<xr:ValueId>8e434fe6-7ceb-4cf8-b1bf-61ccffcf22c0</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>ПроверкаРежимаБлокировки</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Проверка режима блокировки</v8:content>
</v8:item>
</Synonym>
<Comment/>
<DefaultForm/>
<AuxiliaryForm/>
</Properties>
<ChildObjects/>
</ExternalDataProcessor>
</MetaDataObject>
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
Перем Ожидаем;
Перем ИтераторМетаданных;

#Область Стандартный_интерфейс

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

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

// Подключаем Итератор
ИтераторМетаданных = КонтекстЯдраПараметр.Плагин("ИтераторМетаданных");
ИтераторМетаданных.Инициализация(КонтекстЯдраПараметр); // Сбрасываем настройки Итератора
ИтераторМетаданных.ДополнятьЗависимымиОбъектами = Истина;
// Исключим коллекции, у элементов которых нет свойства РежимУправленияБлокировкойДанных
ИтераторМетаданных.ИсключаемыеМетаданные.Добавить(Метаданные.Перечисления);
ИтераторМетаданных.ИсключаемыеМетаданные.Добавить(Метаданные.Обработки);
ИтераторМетаданных.ИсключаемыеМетаданные.Добавить(Метаданные.ЖурналыДокументов);
ИтераторМетаданных.ИсключаемыеМетаданные.Добавить(Метаданные.КритерииОтбора);

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

Процедура ЗаполнитьНаборТестов(НаборТестовПараметр, КонтекстЯдраПараметр) Экспорт

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

// Из итератора получаем ДеревоЗначений с описанием метаданных
ДеревоМетаданных = ИтераторМетаданных.ДеревоМетаданных();

// Проходим по дереву, по корневым узлам
Для Каждого КорневаяСтрока Из ДеревоМетаданных.Строки Цикл

Родитель = КорневаяСтрока.ОбъектМетаданных;
// Начинаем группу тестов по разделу метаданных
НаборТестовПараметр.НачатьГруппу("Проверка режима блокировки данных " + Родитель);

// Проходим по составу раздела метаданных
Для Каждого СтрокаМетаданных Из КорневаяСтрока.Строки Цикл

ТекОбъектМетаданных = СтрокаМетаданных.ОбъектМетаданных;
ПолноеИмяОбъекта = ТекОбъектМетаданных.ПолноеИмя();
ЭтоВебСервис = Найти(ПолноеИмяОбъекта, "WebСервис")=1;

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

КонецЦикла;
КонецЦикла;

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

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

РежимПроверен = ОбъектМетаданных.РежимУправленияБлокировкойДанных=Метаданные.РежимУправленияБлокировкойДанных;
Ожидаем.Что(РежимПроверен).ЕстьИстина();

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

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

Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4">
<ExternalDataProcessor uuid="fd6d9ecc-2745-4e4c-b8bf-4d2bd5fe785b">
<InternalInfo>
<xr:ContainedObject>
<xr:ClassId>c3831ec8-d8d5-4f93-8a22-f9bfae07327f</xr:ClassId>
<xr:ObjectId>0966cc50-c47b-497e-adc8-f21eebacff8d</xr:ObjectId>
</xr:ContainedObject>
<xr:GeneratedType name="ExternalDataProcessorObject.ПроверкаЧтенияНеАдминистраторами" category="Object">
<xr:TypeId>40de5826-8f25-4b00-a777-0a1a8f271cee</xr:TypeId>
<xr:ValueId>8e434fe6-7ceb-4cf8-b1bf-61ccffcf22c0</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>ПроверкаЧтенияНеАдминистраторами</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Проверка чтения не-администраторами</v8:content>
</v8:item>
</Synonym>
<Comment/>
<DefaultForm/>
<AuxiliaryForm/>
</Properties>
<ChildObjects/>
</ExternalDataProcessor>
</MetaDataObject>
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
Перем КонтекстЯдра;
Перем Ожидаем, ИтераторМетаданных;

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

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

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

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

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

ИтераторМетаданных = КонтекстЯдра.Плагин("ИтераторМетаданных");
ИтераторМетаданных.Инициализация(КонтекстЯдраПараметр); // Сброс реквизитов плагина. Необходимо сделать, т.к. плагин уже мог быть инициализирован другой тестовой обработкой
ИтераторМетаданных.ДополнятьЗависимымиОбъектами = Истина; // В принципе, можно и не дополнять. Проверял работу этого флага.

ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.Документы);
ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.Справочники);
ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.РегистрыСведений);
ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.Константы);
ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.РегистрыНакопления);
ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.ПланыВидовХарактеристик);
ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.Задачи);
ИтераторМетаданных.ДопустимыеМетаданные.Добавить(Метаданные.БизнесПроцессы);

// При ДополнятьЗависимымиОбъектами = Истина, в объектах проверки появляются и перечисления.
// Но настройки прав для перечислений - нет. Поэтому Перечисления исключаем.
ИтераторМетаданных.ИсключаемыеМетаданные.Добавить(Метаданные.Перечисления);

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

Процедура ЗаполнитьНаборТестов(НаборТестовПараметр, КонтекстЯдраПараметр) Экспорт

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

НаборТестов.Добавить("Тест_РолиОпределены"); // Проверим, что есть роли с полными полномочиями чтения

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

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

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

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

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

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

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

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

ИначеЕсли ОбъектМетаданных<>Неопределено Тогда
ПараметрыТеста = НаборТестов.ПараметрыТеста(ОбъектМетаданных, Родитель);
ЗаголовокТеста = "" + ОбъектМетаданных.ПолноеИмя() + ": " + ЗаголовокОбщаяЧасть;
НаборТестов.Добавить("Тест_ПроверитьНеАдминистраторскиеПраваНаЧтение", ПараметрыТеста, ЗаголовокТеста);

КонецЕсли;

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

Процедура Тест_ПроверитьНеАдминистраторскиеПраваНаЧтение(ОбъектМетаданных, Родитель) Экспорт

ЧтениеДоступно = Ложь;
Для Каждого ТекРоль Из Метаданные.Роли Цикл

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

ПараметрыДоступаОбъекта = ПараметрыДоступа("Read", ОбъектМетаданных, , ТекРоль);
Если ПараметрыДоступаОбъекта.Доступность Тогда
ЧтениеДоступно = Истина;
Прервать;
КонецЕсли;

КонецЦикла;

Ожидаем.Что(ЧтениеДоступно).ЕстьИстина();

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