Skip to content

Commit

Permalink
Merge pull request #6 from silverbulleters/feature/testing
Browse files Browse the repository at this point in the history
Тестирование
  • Loading branch information
otymko authored Oct 18, 2020
2 parents 3c28b1c + a1d4b8c commit 4826e7d
Show file tree
Hide file tree
Showing 8 changed files with 272 additions and 49 deletions.
37 changes: 37 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Сборка

on:
push:
branches:
- develop
- master
pull_request:

jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
oscript_version: [1.4.0]
os: [ubuntu-latest, windows-latest, macOS-latest]
name: Сборка для ${{ matrix.oscript_version }}
steps:
- name: Последняя версия проекта
uses: actions/checkout@v1
- name: Установка OneScript
uses: otymko/setup-onescript@master
with:
version: ${{ matrix.oscript_version }}
- name: Загрузка зависимостей
run: opm install cli && opm install logos && opm install 1bdd && opm install 1testrunner && opm install asserts && opm install fs
- name: Запуск тестов
run: opm run test
- name: Сборка
run: opm build
- name: Формирование артефактов
if: matrix.os == 'ubuntu-latest'
uses: actions/upload-artifact@master
with:
name: git2sonar.ospx
path: ./git2sonar*.ospx
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
build
out
build
oscript_modules
Empty file added features/.gitkeep
Empty file.
5 changes: 4 additions & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,8 @@
.ВключитьФайл("tests")
.ЗависитОт("cli", "0.9.8")
.ЗависитОт("logos", "0.5")
.ЗависитОт("1commands", "0.8")
.ЗависитОт("1bdd", "1.10.0")
.ЗависитОт("1testrunner", "1.8.0")
.ЗависитОт("asserts", "1.3.0")
.ЗависитОт("fs")
.ИсполняемыйФайл("src/cmd/git2sonar.os", ИмяПродукта);
47 changes: 3 additions & 44 deletions src/cmd/Классы/КомандаExport.os
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@
НастройкиЗапуска.Вставить("ДатаАнализа", Команда.ЗначениеОпции("date"));
НастройкиЗапуска.Вставить("ВеткаПроекта", Команда.ЗначениеОпции("branch"));

НастройкиЗапуска.ДатаАнализа = Формат(НастройкиЗапуска.ДатаАнализа, "ДФ=yyyy-MM-dd");
НастройкиЗапуска.ДатаАнализа = УправлениеАнализом.ДатаДляИстории(НастройкиЗапуска.ДатаАнализа);

Отказ = ВходящиеНастройкиУказаныКорректно(НастройкиЗапуска);
Отказ = УправлениеАнализом.ВходящиеНастройкиКомандыУказаныКорректно(НастройкиЗапуска);
Если Отказ Тогда
Возврат;
КонецЕсли;
Expand All @@ -64,45 +64,4 @@

УправлениеАнализом.ЗапуститьМассовыйАнализ(НастройкиЗапуска);

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

Функция ВходящиеНастройкиУказаныКорректно(ВходящиеНастройки)
Отказ = Ложь;

Если ПустаяСтрока(ВходящиеНастройки.ПутьДоКаталогаПроекта) Тогда
Сообщить("Не заполнен параметр `project`");
Отказ = Истина;
КонецЕсли;
Файл = Новый Файл(ВходящиеНастройки.ПутьДоКаталогаПроекта);
Если Не Файл.Существует() Тогда
Сообщить("Каталог проекта из параметра`project` не существует");
Отказ = Истина;
КонецЕсли;

Если ПустаяСтрока(ВходящиеНастройки.КаталогиИсходныхКодов) Тогда
Сообщить("Не заполнен параметр `source`");
Отказ = Истина;
КонецЕсли;

Если ПустаяСтрока(ВходящиеНастройки.КлючПроекта) Тогда
Сообщить("Не заполнен параметр `key`");
Отказ = Истина;
КонецЕсли;

Если ПустаяСтрока(ВходящиеНастройки.АдресСонара) Тогда
Сообщить("Не заполнен параметр `url`");
Отказ = Истина;
КонецЕсли;

Если ПустаяСтрока(ВходящиеНастройки.ТокенСонара) Тогда
Сообщить("Не заполнен параметр `token`");
Отказ = Истина;
КонецЕсли;

Если ПустаяСтрока(ВходящиеНастройки.ДатаАнализа) Тогда
Сообщить("Не заполнен параметр `date`");
Отказ = Истина;
КонецЕсли;

Возврат Отказ;
КонецФункции
КонецПроцедуры
63 changes: 60 additions & 3 deletions src/core/Модули/УправлениеАнализом.os
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#Использовать 1commands

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

Процедура ЗапуститьМассовыйАнализ(ПараметрыЗапуска) Экспорт

ПараметрыЗапуска.Вставить("НаименованиеПроекта", ПараметрыЗапуска.КлючПроекта);
Expand Down Expand Up @@ -30,7 +32,52 @@
КонецЦикла;
КонецПроцедуры

Функция СписокКоммитов(КаталогРепозитария, ДатаПоследнегоАнализа, ВеткаПроекта)
#КонецОбласти

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

Функция ВходящиеНастройкиКомандыУказаныКорректно(ВходящиеНастройки) Экспорт
Отказ = Ложь;

Если ПустаяСтрока(ВходящиеНастройки.ПутьДоКаталогаПроекта) Тогда
Сообщить("Не заполнен параметр `project`");
Отказ = Истина;
КонецЕсли;
Файл = Новый Файл(ВходящиеНастройки.ПутьДоКаталогаПроекта);
Если Не Файл.Существует() Тогда
Сообщить("Каталог проекта из параметра `project` не существует");
Отказ = Истина;
КонецЕсли;

Если ПустаяСтрока(ВходящиеНастройки.КаталогиИсходныхКодов) Тогда
Сообщить("Не заполнен параметр `source`");
Отказ = Истина;
КонецЕсли;

Если ПустаяСтрока(ВходящиеНастройки.КлючПроекта) Тогда
Сообщить("Не заполнен параметр `key`");
Отказ = Истина;
КонецЕсли;

Если ПустаяСтрока(ВходящиеНастройки.АдресСонара) Тогда
Сообщить("Не заполнен параметр `url`");
Отказ = Истина;
КонецЕсли;

Если ПустаяСтрока(ВходящиеНастройки.ТокенСонара) Тогда
Сообщить("Не заполнен параметр `token`");
Отказ = Истина;
КонецЕсли;

Если ПустаяСтрока(ВходящиеНастройки.ДатаАнализа) Тогда
Сообщить("Не заполнен параметр `date`");
Отказ = Истина;
КонецЕсли;

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

Функция СписокКоммитов(КаталогРепозитария, ДатаПоследнегоАнализа, ВеткаПроекта) Экспорт

Лог = ГитЛог(КаталогРепозитария, ВеткаПроекта);
ПараметрыПриложения.Логирование().Отладка(Лог);
Expand All @@ -50,13 +97,21 @@
ПоследняяДатаКоммита = ДатаКоммита;
СтрокаТЗ = Коммиты.Добавить();
СтрокаТЗ.Коммит = СокрЛП(ТекКоммитСДатой[0]);
СтрокаТЗ.КоммитДата = Формат(ДатаКоммита, "ДФ=""гггг-ММ-дд""");
СтрокаТЗ.КоммитДата = ДатаДляИстории(ДатаКоммита);
КонецЕсли;
КонецЦикла;

Возврат Коммиты;
КонецФункции

Функция ДатаДляИстории(Знач Дата) Экспорт
Возврат Формат(Дата, "ДФ=yyyy-MM-dd");
КонецФункции

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

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

Процедура ГитЧекаут(КаталогРепозитория, ТекущийКоммит)
КомандаЧекаут = Новый Команда();
КомандаЧекаут.УстановитьКоманду("git");
Expand Down Expand Up @@ -99,4 +154,6 @@
КомандаСканера.ДобавитьПараметр("-Dsonar.projectVersion=" + "1.0");
КомандаСканера.Исполнить();
Возврат КомандаСканера.ПолучитьВывод();
КонецФункции
КонецФункции

#КонецОбласти
87 changes: 87 additions & 0 deletions tasks/test.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
#Использовать "../src/cmd"
#Использовать "../src/core"
#Использовать 1bdd
#Использовать 1testrunner
#Использовать fs

Функция ПрогнатьТесты()

Тестер = Новый Тестер;

ПутьКТестам = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests");
ПутьКОтчетуJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "out");

ФС.ОбеспечитьКаталог(ПутьКОтчетуJUnit);

ПутьКОтчетуJUnit = Новый Файл(ПутьКОтчетуJUnit).ПолноеИмя;

РезультатТестирования = Тестер.ТестироватьКаталог(
Новый Файл(ПутьКТестам),
Новый Файл(ПутьКОтчетуJUnit)
);

Успешно = РезультатТестирования = 0;

Возврат Успешно;
КонецФункции // ПрогнатьТесты()

Функция ПрогнатьФичи(Знач ПутьФич = "features")

ПутьОтчетаJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "out", "bdd-log.xml");

КаталогФич = ОбъединитьПути(".", ПутьФич);

Файл_КаталогФич = Новый Файл(КаталогФич);

ИсполнительБДД = Новый ИсполнительБДД;
РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич);
ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);

СтатусВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().НеВыполнялся;
Если РезультатыВыполнения.Строки.Количество() > 0 Тогда

СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);

ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(РезультатыВыполнения, Файл_КаталогФич.ЭтоКаталог());
КонецЕсли;

ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit;
ГенераторОтчетаJUnit.Сформировать(РезультатыВыполнения, СтатусВыполнения, ПутьОтчетаJUnit);

Сообщить(СтрШаблон("Результат прогона фич <%1>. Путь %2
|", ИтоговыйРезультатВыполнения, ПутьФич));

Возврат ИтоговыйРезультатВыполнения <> ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался;
КонецФункции // ПрогнатьФичи()

// основной код

ТекКаталог = ТекущийКаталог();

Попытка
ТестыПрошли = ПрогнатьТесты();
Исключение
ТестыПрошли = Ложь;
Сообщить(СтрШаблон("Тесты через 1testrunner выполнены неудачно
|%1
|%2", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ОписаниеОшибки()));
КонецПопытки;

УстановитьТекущийКаталог(ТекКаталог);

Попытка
ФичиПрошли = ПрогнатьФичи("features");
Исключение
ФичиПрошли = Ложь;
Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно
|%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
КонецПопытки;

Сообщить(СтрШаблон("Результат прогона тестов <%1>
|", ТестыПрошли));
Сообщить(СтрШаблон("Результат прогона основных фич <%1>
|", ФичиПрошли));

Если НЕ ТестыПрошли Или НЕ ФичиПрошли Тогда
ВызватьИсключение "Тестирование завершилось неудачно!";
КонецЕсли;
78 changes: 78 additions & 0 deletions tests/Тест_БазовыеТест.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#Использовать "../src/cmd"
#Использовать "../src/core"
#Использовать asserts

Перем СсылкаНаПроект;
Перем КаталогПроекта;

&Тест
Процедура ПроверитьДатуДляИстории() Экспорт

Дата = Дата(2020, 1, 1);
ДатаДляИстории = УправлениеАнализом.ДатаДляИстории(Дата);

Ожидаем.Что(ДатаДляИстории).Равно("2020-01-01");

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

&Тест
Процедура ПроверитьСпискаКоммитов() Экспорт

КлонироватьПроект(СсылкаНаПроект);

// проверяем на ветке master
Ветка = "master";
ДатаСреза = УправлениеАнализом.ДатаДляИстории(Дата(2020, 9, 1));
КоллекцияКоммитов = УправлениеАнализом.СписокКоммитов(КаталогПроекта, ДатаСреза, Ветка);

Ожидаем.Что(КоллекцияКоммитов.Количество()).Больше(1);
Коммит1 = КоллекцияКоммитов[0];
Ожидаем.Что(Коммит1.Коммит).Равно("4169be4");

Коммит2 = КоллекцияКоммитов[1];
Ожидаем.Что(Коммит2.Коммит).Равно("e155496");

ДатаСреза = УправлениеАнализом.ДатаДляИстории(Дата(2020, 9, 10));
КоллекцияКоммитов = УправлениеАнализом.СписокКоммитов(КаталогПроекта, ДатаСреза, Ветка);
Ожидаем.Что(КоллекцияКоммитов.Количество()).Больше(0);

Коммит1 = КоллекцияКоммитов[0];
Ожидаем.Что(Коммит1.Коммит).Равно("e155496");

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

&Тест
Процедура ПроверитьВходящиеПараметрыКоманды() Экспорт

КлонироватьПроект(СсылкаНаПроект);

НастройкиЗапуска = Новый Структура;
НастройкиЗапуска.Вставить("ПутьДоКаталогаПроекта", КаталогПроекта);
НастройкиЗапуска.Вставить("КаталогиИсходныхКодов", "src");
НастройкиЗапуска.Вставить("КлючПроекта", "repo");
НастройкиЗапуска.Вставить("АдресСонара", "http://localhost:9000");
НастройкиЗапуска.Вставить("ТокенСонара", "d91e860e57084ad681d1952d407fb343f6f504e3");
НастройкиЗапуска.Вставить("ДатаАнализа", ТекущаяДата());
НастройкиЗапуска.Вставить("ВеткаПроекта", "master");

Отказ = УправлениеАнализом.ВходящиеНастройкиКомандыУказаныКорректно(НастройкиЗапуска);
Ожидаем.Что(Отказ).ЕстьЛожь();

НастройкиЗапуска.Вставить("ПутьДоКаталогаПроекта", "123");
Отказ = УправлениеАнализом.ВходящиеНастройкиКомандыУказаныКорректно(НастройкиЗапуска);
Ожидаем.Что(Отказ).ЕстьИстина();

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

Процедура КлонироватьПроект(Ссылка)
КомандаClone = Новый Команда();
КомандаClone.УстановитьКоманду("git");
КомандаClone.ДобавитьПараметр("clone");
КомандаClone.ДобавитьПараметр(Ссылка);
КомандаClone.ДобавитьПараметр("repo");
КомандаClone.УстановитьРабочийКаталог("build");
КомандаClone.Исполнить();
КонецПроцедуры

СсылкаНаПроект = "https://github.com/silverbulleters/git2sonar.git";
КаталогПроекта = "build/repo";

0 comments on commit 4826e7d

Please sign in to comment.