Skip to content

Commit 4826e7d

Browse files
authored
Merge pull request #6 from silverbulleters/feature/testing
Тестирование
2 parents 3c28b1c + a1d4b8c commit 4826e7d

File tree

8 files changed

+272
-49
lines changed

8 files changed

+272
-49
lines changed

.github/workflows/build.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: Сборка
2+
3+
on:
4+
push:
5+
branches:
6+
- develop
7+
- master
8+
pull_request:
9+
10+
jobs:
11+
build:
12+
runs-on: ${{ matrix.os }}
13+
strategy:
14+
fail-fast: false
15+
matrix:
16+
oscript_version: [1.4.0]
17+
os: [ubuntu-latest, windows-latest, macOS-latest]
18+
name: Сборка для ${{ matrix.oscript_version }}
19+
steps:
20+
- name: Последняя версия проекта
21+
uses: actions/checkout@v1
22+
- name: Установка OneScript
23+
uses: otymko/setup-onescript@master
24+
with:
25+
version: ${{ matrix.oscript_version }}
26+
- name: Загрузка зависимостей
27+
run: opm install cli && opm install logos && opm install 1bdd && opm install 1testrunner && opm install asserts && opm install fs
28+
- name: Запуск тестов
29+
run: opm run test
30+
- name: Сборка
31+
run: opm build
32+
- name: Формирование артефактов
33+
if: matrix.os == 'ubuntu-latest'
34+
uses: actions/upload-artifact@master
35+
with:
36+
name: git2sonar.ospx
37+
path: ./git2sonar*.ospx

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
build
1+
out
2+
build
3+
oscript_modules

features/.gitkeep

Whitespace-only changes.

packagedef

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,8 @@
1515
.ВключитьФайл("tests")
1616
.ЗависитОт("cli", "0.9.8")
1717
.ЗависитОт("logos", "0.5")
18-
.ЗависитОт("1commands", "0.8")
18+
.ЗависитОт("1bdd", "1.10.0")
19+
.ЗависитОт("1testrunner", "1.8.0")
20+
.ЗависитОт("asserts", "1.3.0")
21+
.ЗависитОт("fs")
1922
.ИсполняемыйФайл("src/cmd/git2sonar.os", ИмяПродукта);

src/cmd/Классы/КомандаExport.os

Lines changed: 3 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@
4747
НастройкиЗапуска.Вставить("ДатаАнализа", Команда.ЗначениеОпции("date"));
4848
НастройкиЗапуска.Вставить("ВеткаПроекта", Команда.ЗначениеОпции("branch"));
4949

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

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

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

67-
КонецПроцедуры
68-
69-
Функция ВходящиеНастройкиУказаныКорректно(ВходящиеНастройки)
70-
Отказ = Ложь;
71-
72-
Если ПустаяСтрока(ВходящиеНастройки.ПутьДоКаталогаПроекта) Тогда
73-
Сообщить("Не заполнен параметр `project`");
74-
Отказ = Истина;
75-
КонецЕсли;
76-
Файл = Новый Файл(ВходящиеНастройки.ПутьДоКаталогаПроекта);
77-
Если Не Файл.Существует() Тогда
78-
Сообщить("Каталог проекта из параметра`project` не существует");
79-
Отказ = Истина;
80-
КонецЕсли;
81-
82-
Если ПустаяСтрока(ВходящиеНастройки.КаталогиИсходныхКодов) Тогда
83-
Сообщить("Не заполнен параметр `source`");
84-
Отказ = Истина;
85-
КонецЕсли;
86-
87-
Если ПустаяСтрока(ВходящиеНастройки.КлючПроекта) Тогда
88-
Сообщить("Не заполнен параметр `key`");
89-
Отказ = Истина;
90-
КонецЕсли;
91-
92-
Если ПустаяСтрока(ВходящиеНастройки.АдресСонара) Тогда
93-
Сообщить("Не заполнен параметр `url`");
94-
Отказ = Истина;
95-
КонецЕсли;
96-
97-
Если ПустаяСтрока(ВходящиеНастройки.ТокенСонара) Тогда
98-
Сообщить("Не заполнен параметр `token`");
99-
Отказ = Истина;
100-
КонецЕсли;
101-
102-
Если ПустаяСтрока(ВходящиеНастройки.ДатаАнализа) Тогда
103-
Сообщить("Не заполнен параметр `date`");
104-
Отказ = Истина;
105-
КонецЕсли;
106-
107-
Возврат Отказ;
108-
КонецФункции
67+
КонецПроцедуры

src/core/Модули/УправлениеАнализом.os

Lines changed: 60 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#Использовать 1commands
22

3+
#Область ПрограммныйИнтерфейс
4+
35
Процедура ЗапуститьМассовыйАнализ(ПараметрыЗапуска) Экспорт
46

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

33-
Функция СписокКоммитов(КаталогРепозитария, ДатаПоследнегоАнализа, ВеткаПроекта)
35+
#КонецОбласти
36+
37+
#Область СлужебныйПрограммныйИнтерфейс
38+
39+
Функция ВходящиеНастройкиКомандыУказаныКорректно(ВходящиеНастройки) Экспорт
40+
Отказ = Ложь;
41+
42+
Если ПустаяСтрока(ВходящиеНастройки.ПутьДоКаталогаПроекта) Тогда
43+
Сообщить("Не заполнен параметр `project`");
44+
Отказ = Истина;
45+
КонецЕсли;
46+
Файл = Новый Файл(ВходящиеНастройки.ПутьДоКаталогаПроекта);
47+
Если Не Файл.Существует() Тогда
48+
Сообщить("Каталог проекта из параметра `project` не существует");
49+
Отказ = Истина;
50+
КонецЕсли;
51+
52+
Если ПустаяСтрока(ВходящиеНастройки.КаталогиИсходныхКодов) Тогда
53+
Сообщить("Не заполнен параметр `source`");
54+
Отказ = Истина;
55+
КонецЕсли;
56+
57+
Если ПустаяСтрока(ВходящиеНастройки.КлючПроекта) Тогда
58+
Сообщить("Не заполнен параметр `key`");
59+
Отказ = Истина;
60+
КонецЕсли;
61+
62+
Если ПустаяСтрока(ВходящиеНастройки.АдресСонара) Тогда
63+
Сообщить("Не заполнен параметр `url`");
64+
Отказ = Истина;
65+
КонецЕсли;
66+
67+
Если ПустаяСтрока(ВходящиеНастройки.ТокенСонара) Тогда
68+
Сообщить("Не заполнен параметр `token`");
69+
Отказ = Истина;
70+
КонецЕсли;
71+
72+
Если ПустаяСтрока(ВходящиеНастройки.ДатаАнализа) Тогда
73+
Сообщить("Не заполнен параметр `date`");
74+
Отказ = Истина;
75+
КонецЕсли;
76+
77+
Возврат Отказ;
78+
КонецФункции
79+
80+
Функция СписокКоммитов(КаталогРепозитария, ДатаПоследнегоАнализа, ВеткаПроекта) Экспорт
3481

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

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

107+
Функция ДатаДляИстории(Знач Дата) Экспорт
108+
Возврат Формат(Дата, "ДФ=yyyy-MM-dd");
109+
КонецФункции
110+
111+
#КонецОбласти
112+
113+
#Область СлужебныеПроцедурыИФункции
114+
60115
Процедура ГитЧекаут(КаталогРепозитория, ТекущийКоммит)
61116
КомандаЧекаут = Новый Команда();
62117
КомандаЧекаут.УстановитьКоманду("git");
@@ -99,4 +154,6 @@
99154
КомандаСканера.ДобавитьПараметр("-Dsonar.projectVersion=" + "1.0");
100155
КомандаСканера.Исполнить();
101156
Возврат КомандаСканера.ПолучитьВывод();
102-
КонецФункции
157+
КонецФункции
158+
159+
#КонецОбласти

tasks/test.os

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#Использовать "../src/cmd"
2+
#Использовать "../src/core"
3+
#Использовать 1bdd
4+
#Использовать 1testrunner
5+
#Использовать fs
6+
7+
Функция ПрогнатьТесты()
8+
9+
Тестер = Новый Тестер;
10+
11+
ПутьКТестам = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests");
12+
ПутьКОтчетуJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "out");
13+
14+
ФС.ОбеспечитьКаталог(ПутьКОтчетуJUnit);
15+
16+
ПутьКОтчетуJUnit = Новый Файл(ПутьКОтчетуJUnit).ПолноеИмя;
17+
18+
РезультатТестирования = Тестер.ТестироватьКаталог(
19+
Новый Файл(ПутьКТестам),
20+
Новый Файл(ПутьКОтчетуJUnit)
21+
);
22+
23+
Успешно = РезультатТестирования = 0;
24+
25+
Возврат Успешно;
26+
КонецФункции // ПрогнатьТесты()
27+
28+
Функция ПрогнатьФичи(Знач ПутьФич = "features")
29+
30+
ПутьОтчетаJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "out", "bdd-log.xml");
31+
32+
КаталогФич = ОбъединитьПути(".", ПутьФич);
33+
34+
Файл_КаталогФич = Новый Файл(КаталогФич);
35+
36+
ИсполнительБДД = Новый ИсполнительБДД;
37+
РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич);
38+
ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);
39+
40+
СтатусВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().НеВыполнялся;
41+
Если РезультатыВыполнения.Строки.Количество() > 0 Тогда
42+
43+
СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);
44+
45+
ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(РезультатыВыполнения, Файл_КаталогФич.ЭтоКаталог());
46+
КонецЕсли;
47+
48+
ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit;
49+
ГенераторОтчетаJUnit.Сформировать(РезультатыВыполнения, СтатусВыполнения, ПутьОтчетаJUnit);
50+
51+
Сообщить(СтрШаблон("Результат прогона фич <%1>. Путь %2
52+
|", ИтоговыйРезультатВыполнения, ПутьФич));
53+
54+
Возврат ИтоговыйРезультатВыполнения <> ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался;
55+
КонецФункции // ПрогнатьФичи()
56+
57+
// основной код
58+
59+
ТекКаталог = ТекущийКаталог();
60+
61+
Попытка
62+
ТестыПрошли = ПрогнатьТесты();
63+
Исключение
64+
ТестыПрошли = Ложь;
65+
Сообщить(СтрШаблон("Тесты через 1testrunner выполнены неудачно
66+
|%1
67+
|%2", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), ОписаниеОшибки()));
68+
КонецПопытки;
69+
70+
УстановитьТекущийКаталог(ТекКаталог);
71+
72+
Попытка
73+
ФичиПрошли = ПрогнатьФичи("features");
74+
Исключение
75+
ФичиПрошли = Ложь;
76+
Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно
77+
|%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())));
78+
КонецПопытки;
79+
80+
Сообщить(СтрШаблон("Результат прогона тестов <%1>
81+
|", ТестыПрошли));
82+
Сообщить(СтрШаблон("Результат прогона основных фич <%1>
83+
|", ФичиПрошли));
84+
85+
Если НЕ ТестыПрошли Или НЕ ФичиПрошли Тогда
86+
ВызватьИсключение "Тестирование завершилось неудачно!";
87+
КонецЕсли;
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#Использовать "../src/cmd"
2+
#Использовать "../src/core"
3+
#Использовать asserts
4+
5+
Перем СсылкаНаПроект;
6+
Перем КаталогПроекта;
7+
8+
&Тест
9+
Процедура ПроверитьДатуДляИстории() Экспорт
10+
11+
Дата = Дата(2020, 1, 1);
12+
ДатаДляИстории = УправлениеАнализом.ДатаДляИстории(Дата);
13+
14+
Ожидаем.Что(ДатаДляИстории).Равно("2020-01-01");
15+
16+
КонецПроцедуры
17+
18+
&Тест
19+
Процедура ПроверитьСпискаКоммитов() Экспорт
20+
21+
КлонироватьПроект(СсылкаНаПроект);
22+
23+
// проверяем на ветке master
24+
Ветка = "master";
25+
ДатаСреза = УправлениеАнализом.ДатаДляИстории(Дата(2020, 9, 1));
26+
КоллекцияКоммитов = УправлениеАнализом.СписокКоммитов(КаталогПроекта, ДатаСреза, Ветка);
27+
28+
Ожидаем.Что(КоллекцияКоммитов.Количество()).Больше(1);
29+
Коммит1 = КоллекцияКоммитов[0];
30+
Ожидаем.Что(Коммит1.Коммит).Равно("4169be4");
31+
32+
Коммит2 = КоллекцияКоммитов[1];
33+
Ожидаем.Что(Коммит2.Коммит).Равно("e155496");
34+
35+
ДатаСреза = УправлениеАнализом.ДатаДляИстории(Дата(2020, 9, 10));
36+
КоллекцияКоммитов = УправлениеАнализом.СписокКоммитов(КаталогПроекта, ДатаСреза, Ветка);
37+
Ожидаем.Что(КоллекцияКоммитов.Количество()).Больше(0);
38+
39+
Коммит1 = КоллекцияКоммитов[0];
40+
Ожидаем.Что(Коммит1.Коммит).Равно("e155496");
41+
42+
КонецПроцедуры
43+
44+
&Тест
45+
Процедура ПроверитьВходящиеПараметрыКоманды() Экспорт
46+
47+
КлонироватьПроект(СсылкаНаПроект);
48+
49+
НастройкиЗапуска = Новый Структура;
50+
НастройкиЗапуска.Вставить("ПутьДоКаталогаПроекта", КаталогПроекта);
51+
НастройкиЗапуска.Вставить("КаталогиИсходныхКодов", "src");
52+
НастройкиЗапуска.Вставить("КлючПроекта", "repo");
53+
НастройкиЗапуска.Вставить("АдресСонара", "http://localhost:9000");
54+
НастройкиЗапуска.Вставить("ТокенСонара", "d91e860e57084ad681d1952d407fb343f6f504e3");
55+
НастройкиЗапуска.Вставить("ДатаАнализа", ТекущаяДата());
56+
НастройкиЗапуска.Вставить("ВеткаПроекта", "master");
57+
58+
Отказ = УправлениеАнализом.ВходящиеНастройкиКомандыУказаныКорректно(НастройкиЗапуска);
59+
Ожидаем.Что(Отказ).ЕстьЛожь();
60+
61+
НастройкиЗапуска.Вставить("ПутьДоКаталогаПроекта", "123");
62+
Отказ = УправлениеАнализом.ВходящиеНастройкиКомандыУказаныКорректно(НастройкиЗапуска);
63+
Ожидаем.Что(Отказ).ЕстьИстина();
64+
65+
КонецПроцедуры
66+
67+
Процедура КлонироватьПроект(Ссылка)
68+
КомандаClone = Новый Команда();
69+
КомандаClone.УстановитьКоманду("git");
70+
КомандаClone.ДобавитьПараметр("clone");
71+
КомандаClone.ДобавитьПараметр(Ссылка);
72+
КомандаClone.ДобавитьПараметр("repo");
73+
КомандаClone.УстановитьРабочийКаталог("build");
74+
КомандаClone.Исполнить();
75+
КонецПроцедуры
76+
77+
СсылкаНаПроект = "https://github.com/silverbulleters/git2sonar.git";
78+
КаталогПроекта = "build/repo";

0 commit comments

Comments
 (0)