Skip to content

Commit c18409b

Browse files
committed
Тесты на установку пакета локально
1 parent 6ffeb25 commit c18409b

File tree

10 files changed

+440
-12
lines changed

10 files changed

+440
-12
lines changed

features/install-file.feature

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# language: ru
2+
3+
Функциональность: Настройки продукта
4+
5+
Как разработчик
6+
Я хочу иметь устанавливать пакет из файла
7+
Чтобы иметь возможность проверять локальные версии пакетов
8+
9+
10+
Контекст: Тестовый контекст
11+
Допустим Я очищаю параметры команды "opm" в контексте
12+
И Я устанавливаю путь выполнения команды "opm" к текущей библиотеке
13+
И Я создаю временный каталог и сохраняю его в переменной "КаталогСборкиПакета"
14+
И Я создаю временный каталог и сохраняю его в переменной "РабочийКаталог"
15+
И Я выполняю сборку пакета "fixtures/testpackage" в каталог из переменной "КаталогСборкиПакета"
16+
И Я сохраняю файл пакета из каталога "КаталогСборкиПакета" в переменную "ИмяФайлаПакета"
17+
18+
Сценарий: Установка пакета из файла в локальный каталог
19+
Допустим Я установил рабочий каталог из переменной "РабочийКаталог"
20+
И Я добавляю параметр "install" для команды "opm"
21+
И Я добавляю параметр "--local" для команды "opm"
22+
И Я добавляю опцию "-f" для команды "opm" из переменной "ИмяФайлаПакета"
23+
Когда Я выполняю команду "opm"
24+
Тогда Вывод команды "opm" содержит "ИНФОРМАЦИЯ - Установка завершена"
25+
И Вывод команды "opm" не содержит "Внешнее исключение"
26+
И Код возврата команды "opm" равен 0
27+
И В каталоге из переменной "РабочийКаталог" создается файл или каталог "oscript_modules"

features/opm-build.feature

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# language: ru
2+
3+
Функционал: Проверка сборки продукта
4+
Как Пользователь
5+
Я хочу автоматически проверять сборку моего продукта
6+
Чтобы гарантировать возможность установку моего продукта у пользователей
7+
8+
Контекст: Отключение отладки в логах
9+
Допустим Я выключаю отладку лога с именем "oscript.lib.gitsync"
10+
И Я очищаю параметры команды "opm" в контексте
11+
12+
Сценарий: Выполнение команды без параметров
13+
Когда Я добавляю параметр "build ." для команды "opm"
14+
И Я выполняю команду "opm"
15+
Тогда Вывод команды "opm" содержит "Сборка пакета завершена"
16+
И Вывод команды "opm" не содержит "Внешнее исключение"
17+
И Код возврата команды "opm" равен 0
18+
19+
Сценарий: Сборка, установка и выполнение пакета
20+
Допустим Я создаю временный каталог и сохраняю его в контекст
21+
Допустим Я собираю пакет во временном каталоге
22+
И Я устанавливаю временный каталог как рабочий каталог
23+
И Я установил рабочий каталог как текущий каталог
24+
Тогда каталог "oscript_modules" не существует
25+
Когда я устанавливаю пакет из файла собранного пакета
26+
Тогда файл "oscript_modules/opm/src/cmd/opm.os" существует
27+
Тогда я выполняю команду получения версии установленного пакета "oscript oscript_modules/opm/src/cmd/opm.os version"
28+
И версия установленного пакета равна версии пакета из контекста
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// заглушка
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// заглушка
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+

2+
Описание.Имя("test")
3+
.Версия("0.3.1")
4+
.ВключитьФайл("folder");
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd
2+
3+
Перем БДД; //контекст фреймворка 1bdd
4+
5+
// Метод выдает список шагов, реализованных в данном файле-шагов
6+
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
7+
БДД = КонтекстФреймворкаBDD;
8+
9+
ВсеШаги = Новый Массив;
10+
11+
ВсеШаги.Добавить("ЯВыполняюСборкуПакетаВКаталогИзПеременной");
12+
ВсеШаги.Добавить("ЯСохраняюФайлПакетаИзКаталогаВПеременную");
13+
ВсеШаги.Добавить("ЯУстановилРабочийКаталогИзПеременной");
14+
15+
Возврат ВсеШаги;
16+
КонецФункции
17+
18+
// Реализация шагов
19+
20+
// Процедура выполняется перед запуском каждого сценария
21+
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
22+
23+
КонецПроцедуры
24+
25+
// Процедура выполняется после завершения каждого сценария
26+
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
27+
28+
КонецПроцедуры
29+
30+
31+
//Я выполняю сборку пакета "fixture/testpackage" в каталог из переменной "КаталогСборкиПакета"
32+
Процедура ЯВыполняюСборкуПакетаВКаталогИзПеременной(Знач ПутьКаталогуПакета, Знач ИмяПеременнойКаталогаСборки) Экспорт
33+
34+
ПутьККаталогуПакета = ОбъединитьПути(ТекущийСценарий().Каталог, ПутьКаталогуПакета);
35+
36+
КаталогСборкиПакета = БДД.ПолучитьИзКонтекста(ИмяПеременнойКаталогаСборки);
37+
38+
СтрокаЗапуска = СтрШаблон("oscript ""%1"" build --out %2 %3", ПутьКИсполняемомуФайлу(), КаталогСборкиПакета, ПутьККаталогуПакета );
39+
КодВозврата = ВыполнитьКоманду(СтрокаЗапуска);
40+
41+
Ожидаем.Что(КодВозврата,
42+
"Ожидали, что сборка пакета (opm build) завершится с кодом возврата 0, а получили другое значение").
43+
Равно(0);
44+
45+
КонецПроцедуры
46+
47+
48+
//Я установил рабочий каталог из переменной "РабочийКаталог"
49+
Процедура ЯУстановилРабочийКаталогИзПеременной(Знач ИмяКаталога) Экспорт
50+
РабочийКаталог = БДД.ПолучитьИзКонтекста(ИмяКаталога);
51+
52+
УстановитьТекущийКаталог(РабочийКаталог);
53+
54+
КонецПроцедуры
55+
56+
//Я сохраняю файл пакета из каталога "КаталогСборкиПакета" в переменную "ИмяФайлаПакета"
57+
Процедура ЯСохраняюФайлПакетаИзКаталогаВПеременную(Знач ИмяПеременнойКаталога, Знач ИмяПеременнойФайла) Экспорт
58+
ПутьВременногоКаталога = БДД.ПолучитьИзКонтекста(ИмяПеременнойКаталога);
59+
МассивФайлов = НайтиФайлы(ПутьВременногоКаталога, "*.ospx", Ложь);
60+
Ожидаем.Что(МассивФайлов.Количество(), "Должны были найти только 1 собранный пакет, а не несколько").Равно(1);
61+
ФайлПакета = МассивФайлов[0];
62+
БДД.СохранитьВКонтекст(ИмяПеременнойФайла, ФайлПакета.ПолноеИмя);
63+
64+
КонецПроцедуры
65+
66+
Функция ВыполнитьКоманду(Знач СтрокаКоманды, ТекстВывода = "")
67+
Команда = Новый Команда;
68+
Команда.ПоказыватьВыводНемедленно(Истина);
69+
70+
Команда.УстановитьСтрокуЗапуска(СтрокаКоманды);
71+
72+
КодВозврата = Команда.Исполнить();
73+
ТекстВывода = Команда.ПолучитьВывод();
74+
75+
Если КодВозврата <> 0 Тогда
76+
// Лог.Информация(ТекстВывода);
77+
Сообщить(ТекстВывода);
78+
КонецЕсли;
79+
Возврат КодВозврата;
80+
КонецФункции
81+
82+
Функция ПутьКИсполняемомуФайлу()
83+
84+
Возврат ОбъединитьПути(КаталогБиблиотеки(), "src", "cmd", "opm.os");
85+
86+
КонецФункции
87+
88+
Функция КаталогFixtures()
89+
Возврат ОбъединитьПути(КаталогБиблиотеки(), "tests", "fixtures");
90+
КонецФункции
91+
92+
Функция КаталогБиблиотеки()
93+
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..", "..");
94+
КонецФункции
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
// Реализация шагов BDD-фич/сценариев с помощью фреймворка https://github.com/artbear/1bdd
2+
#Использовать tempfiles
3+
4+
Перем БДД; //контекст фреймворка 1bdd
5+
6+
// Метод выдает список шагов, реализованных в данном файле-шагов
7+
Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт
8+
БДД = КонтекстФреймворкаBDD;
9+
10+
ВсеШаги = Новый Массив;
11+
12+
ВсеШаги.Добавить("ЯСобираюПакетВоВременномКаталоге");
13+
ВсеШаги.Добавить("ЯУстанавливаюПакетИзФайлаСобранногоПакета");
14+
ВсеШаги.Добавить("ЯВыполняюКомандуПолученияВерсииУстановленногоПакета");
15+
ВсеШаги.Добавить("ВерсияУстановленногоПакетаРавнаВерсииПакетаИзКонтекста");
16+
17+
Возврат ВсеШаги;
18+
КонецФункции
19+
20+
// Реализация шагов
21+
22+
// Процедура выполняется перед запуском каждого сценария
23+
Процедура ПередЗапускомСценария(Знач Узел) Экспорт
24+
25+
КонецПроцедуры
26+
27+
// Процедура выполняется после завершения каждого сценария
28+
Процедура ПослеЗапускаСценария(Знач Узел) Экспорт
29+
30+
КонецПроцедуры
31+
32+
//Я собираю пакет во временном каталоге
33+
Процедура ЯСобираюПакетВоВременномКаталоге() Экспорт
34+
ПутьВременногоКаталога = БДД.ПолучитьИзКонтекста("ВременныйКаталог");
35+
СтрокаЗапуска = СтрШаблон("oscript %3 build --out %2 %1", ТекущийКаталог(), ПутьВременногоКаталога, ПутьКИсполняемомуФайлу());
36+
КодВозврата = ВыполнитьКоманду(СтрокаЗапуска);
37+
38+
Ожидаем.Что(КодВозврата,
39+
"Ожидали, что сборка пакета (opm build) завершится с кодом возврата 0, а получили другое значение").
40+
Равно(0);
41+
КонецПроцедуры
42+
43+
//я устанавливаю пакет из файла собранного пакета
44+
Процедура ЯУстанавливаюПакетИзФайлаСобранногоПакета() Экспорт
45+
ЗапоминаюСобранныйФайлПакетаВКонтексте();
46+
ЗапоминаюВерсиюСобранногоПакетаВКонтексте();
47+
ФайлСобранногоПакета = БДД.ПолучитьИзКонтекста("ФайлСобранногоПакета");
48+
ПутьВременногоКаталога = БДД.ПолучитьИзКонтекста("ВременныйКаталог");
49+
50+
УстановитьПеременнуюСреды("OSCRIPTBIN", ПутьВременногоКаталога);
51+
52+
СтрокаЗапуска = СтрШаблон("oscript %2 install -l -f %1", ФайлСобранногоПакета.Имя, ПутьКИсполняемомуФайлу());
53+
КодВозврата = ВыполнитьКоманду(СтрокаЗапуска);
54+
55+
Ожидаем.Что(КодВозврата, "ВыполнитьЛокальнуюУстановкуСобранногоПакета КодВозврата").Равно(0);
56+
57+
КонецПроцедуры
58+
59+
//я выполняю команду получения версии установленного пакета "oscript src\main.os version"
60+
Процедура ЯВыполняюКомандуПолученияВерсииУстановленногоПакета(Знач СтрокаЗапуска) Экспорт
61+
УстановленнаяВерсияПакета = "";
62+
КодВозврата = ВыполнитьКоманду(СтрокаЗапуска, УстановленнаяВерсияПакета);
63+
Ожидаем.Что(КодВозврата, "Должны были получить код возврата 0, а это не так").Равно(0);
64+
УстановленнаяВерсияПакета = СокрЛП(УстановленнаяВерсияПакета);
65+
БДД.СохранитьВКонтекст("УстановленнаяВерсияПакета", УстановленнаяВерсияПакета);
66+
67+
КонецПроцедуры
68+
69+
//версия установленного пакета равна версии пакета из контекста
70+
Процедура ВерсияУстановленногоПакетаРавнаВерсииПакетаИзКонтекста() Экспорт
71+
УстановленнаяВерсияПакета = БДД.ПолучитьИзКонтекста("УстановленнаяВерсияПакета");
72+
ВерсияСобранногоПакета = БДД.ПолучитьИзКонтекста("ВерсияСобранногоПакета");
73+
74+
ВерсияСобранногоПакета = СокрЛП(ВерсияСобранногоПакета);
75+
76+
СообщениеОшибки = СтрШаблон("Ожидали, что установленная версия <%1> равна версии из исходников проекта");
77+
Если УстановленнаяВерсияПакета <> ВерсияСобранногоПакета И
78+
Найти(УстановленнаяВерсияПакета, ВерсияСобранногоПакета) = Неопределено Тогда
79+
80+
ВызватьИсключение СообщениеОшибки;
81+
82+
КонецЕсли;
83+
// Ожидаем.Что(УстановленнаяВерсияПакета, СообщениеОшибки).Равно(ВерсияСобранногоПакета);
84+
КонецПроцедуры
85+
86+
Функция ВыполнитьКоманду(Знач СтрокаКоманды, ТекстВывода = "")
87+
Команда = Новый Команда;
88+
Команда.ПоказыватьВыводНемедленно(Истина);
89+
90+
Команда.УстановитьСтрокуЗапуска(СтрокаКоманды);
91+
92+
КодВозврата = Команда.Исполнить();
93+
ТекстВывода = Команда.ПолучитьВывод();
94+
95+
Если КодВозврата <> 0 Тогда
96+
// Лог.Информация(ТекстВывода);
97+
Сообщить(ТекстВывода);
98+
КонецЕсли;
99+
Возврат КодВозврата;
100+
КонецФункции
101+
102+
//запоминаю собранный файл пакета в контексте
103+
Процедура ЗапоминаюСобранныйФайлПакетаВКонтексте() //Экспорт
104+
ПутьВременногоКаталога = БДД.ПолучитьИзКонтекста("ВременныйКаталог");
105+
МассивФайлов = НайтиФайлы(ПутьВременногоКаталога, "*.ospx", Ложь);
106+
Ожидаем.Что(МассивФайлов.Количество(), "Должны были найти только 1 собранный пакет, а не несколько").Равно(1);
107+
ФайлПакета = МассивФайлов[0];
108+
БДД.СохранитьВКонтекст("ФайлСобранногоПакета", ФайлПакета);
109+
КонецПроцедуры
110+
111+
//я выполняю команду получения версии установленного пакета
112+
Процедура ЗапоминаюВерсиюСобранногоПакетаВКонтексте() //Экспорт
113+
ФайлПакета = БДД.ПолучитьИзКонтекста("ФайлСобранногоПакета");
114+
РегулярноеВыражение = Новый РегулярноеВыражение("([^-]+-[^-]+|[^-]+)-(\d+\.(\d+\.)*\d+)\.ospx");
115+
Совпадения = РегулярноеВыражение.НайтиСовпадения(ФайлПакета.Имя);
116+
СообщениеОшибки = СтрШаблон("Должны были файл пакета с правильным форматом имени, а это не так. <%1>", ФайлПакета.Имя);
117+
Ожидаем.Что(Совпадения.Количество(), СообщениеОшибки).Равно(1);
118+
Ожидаем.Что(Совпадения[0].Группы.Количество(), "Количество групп должно быть 1").БольшеИлиРавно(3);
119+
ИмяСобранногоПакета = Совпадения[0].Группы[1].Значение;
120+
ВерсияПакета = Совпадения[0].Группы[2].Значение;
121+
122+
БДД.СохранитьВКонтекст("ИмяСобранногоПакета", ИмяСобранногоПакета);
123+
БДД.СохранитьВКонтекст("ВерсияСобранногоПакета", ВерсияПакета);
124+
КонецПроцедуры
125+
126+
127+
Функция ПутьКИсполняемомуФайлу()
128+
129+
Возврат ОбъединитьПути(КаталогБиблиотеки(), "src", "cmd", "opm.os");
130+
131+
КонецФункции
132+
133+
134+
Функция КаталогFixtures()
135+
Возврат ОбъединитьПути(КаталогБиблиотеки(), "tests", "fixtures");
136+
КонецФункции
137+
138+
Функция КаталогБиблиотеки()
139+
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..", "..");
140+
КонецФункции

0 commit comments

Comments
 (0)