Перем КонтекстЯдра;
Перем Утверждения;
Перем Ожидаем;

Перем мНастройки;
Перем ОбработкаОбъект;


//{ основная процедура для юнит-тестирования xUnitFor1C
Процедура Инициализация(КонтекстЯдраПараметр) Экспорт
    КонтекстЯдра = КонтекстЯдраПараметр;
    Утверждения = КонтекстЯдра.Плагин("БазовыеУтверждения");
	Ожидаем = КонтекстЯдра.Плагин("УтвержденияBDD");
КонецПроцедуры

Процедура ЗаполнитьНаборТестов(НаборТестов) Экспорт
	
	НаборТестов.Добавить("ТестДолжен_ПроверкаЭкспортныхПеременных");
	
	НаборТестов.НачатьГруппу("Подключение к трекеру и проверка методов Rest API", Истина);
	
	НаборТестов.Добавить("ТестДолжен_ПроверкаНастроекПодключения");
	НаборТестов.Добавить("ТестДолжен_ЗаполнитьНастройкиПодключенияКТрекеруТестовымиЗначениями");
	НаборТестов.Добавить("ТестДолжен_ПолучитьСписокПроектовИзТрекера");
	
	//НаборТестов.Добавить("ТестДолжен_СложитьДваИДва");
КонецПроцедуры

//}

//{ Блок юнит-тестов

Процедура ПередЗапускомТеста() Экспорт
    //НачатьТранзакцию();
	
	ПутьКОбработке = СтрЗаменить(ЭтотОбъект.ИспользуемоеИмяФайла, "tests\tests_", "");
	ОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКОбработке);
	
	ИмяФайлаНастроек = СтрЗаменить(ЭтотОбъект.ИспользуемоеИмяФайла, "tests_integration-1c-redmine.epf", "settings.json");
	ФайлНастроек = Новый Файл(ИмяФайлаНастроек);
	Утверждения.ПроверитьИстину(ФайлНастроек.Существует(), "В каталоге ./test не обнаружен файл с настройками settings.json!");
	
	СтрокаJSON = Новый ТекстовыйДокумент;
	СтрокаJSON.Прочитать(ИмяФайлаНастроек);
	
	Параметры = Новый Массив;
	Параметры.Добавить(СтрокаJSON.ПолучитьТекст());
	Утверждения.ПроверитьМетодВыполнился(ОбработкаОбъект, "асПрочитатьJSON", Параметры, "Не удалось прочитать файл с настройками!");
	
	мНастройки = ОбработкаОбъект.асПрочитатьJSON(СтрокаJSON.ПолучитьТекст());
	
КонецПроцедуры

Процедура ПослеЗапускаТеста() Экспорт
	//Если ТранзакцияАктивна() Тогда
	//    ОтменитьТранзакцию();
	//КонецЕсли;
КонецПроцедуры

Процедура ТестДолжен_ПроверкаЭкспортныхПеременных() Экспорт
	
	Ожидаем.Что(ОбработкаОбъект.ЗагруженныеДанные).ИмеетТип("Соответствие");
	//Утверждения.ПроверитьВхождение(ОбработкаОбъект.мКонвертерTextileToHTML, ".js", "У файла конвертера Textile в HTML некорректное расширение (!'.js')");
	//Утверждения.Проверить(ОбработкаОбъект.мHTTPСоединение, "Не найдено переменная мHTTPСоединение")
	
КонецПроцедуры

Процедура ТестДолжен_ПроверкаНастроекПодключения() Экспорт
	
	Ожидаем.Что(мНастройки).Существует().ИмеетТип("Структура");
	Ожидаем.Что(мНастройки.Свойство("НастройкиПодключенияКТрекеру")).ЭтоИстина();
	Ожидаем.Что(мНастройки.НастройкиПодключенияКТрекеру).ИмеетТип("Структура");
	
	Для Каждого Настройка Из мНастройки.НастройкиПодключенияКТрекеру Цикл
		Утверждения.ПроверитьЗаполненность(Настройка.Значение, "Не заполнено значение настройки " + Настройка.Ключ);
	КонецЦикла;
	
КонецПроцедуры

Процедура ТестДолжен_ЗаполнитьНастройкиПодключенияКТрекеруТестовымиЗначениями() Экспорт
	
	// Заполняем настройки подключения Обработки
	// Обработка должна содержать реквизиты с одноименным названием настройки
	ЗаполнитьНастройкиПодключения();
	
КонецПроцедуры

Процедура ЗаполнитьНастройкиПодключения()
	
	Перем Настройка;
	
	Для Каждого Настройка Из мНастройки.НастройкиПодключенияКТрекеру Цикл
		ОбработкаОбъект[Настройка.Ключ] = Настройка.Значение;
	КонецЦикла;

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

Процедура ТестДолжен_ПолучитьСписокПроектовИзТрекера() Экспорт
	Перем ОтчетОВыполнении;
	
	ЗаполнитьНастройкиПодключения();
	
	ОтчетОВыполнении = ОбработкаОбъект.СформироватьСтруктуруОтчетаОВыполнении();
	Ожидаем.Что(ОтчетОВыполнении).ИмеетТип("Структура");

	Данные = ОбработкаОбъект.ПолучитьДанныеРесурсаИзТрекера("projects", ОтчетОВыполнении);
	
	Утверждения.ПроверитьЛожь(ОтчетОВыполнении.ЕстьОшибки, ОтчетОВыполнении.ТекстОшибки);
	
	Ожидаем.Что(Данные).Существует().ИмеетТип("Структура");

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

//Процедура ТестДолжен_СложитьДваИДва() Экспорт
//    Утверждения.ПроверитьРавенство(2 + 2, 4, "2 + 2, 4");
//КонецПроцедуры

//}