Skip to content

Commit

Permalink
Merged release/v1.1.0 into master
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Feb 18, 2017
2 parents 2f63d4c + ea64142 commit aab617a
Show file tree
Hide file tree
Showing 4 changed files with 273 additions and 7 deletions.
11 changes: 6 additions & 5 deletions packagedef
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@

Описание.Имя("messenger")
.Версия("1.0.2")
.ВключитьФайл("readme.md")
.ВключитьФайл("src")
.ВключитьФайл("lib.config")
.ИсполняемыйФайл("src/Мессенджер.os");
.Версия("1.1.0")
.ЗависитОт("json")
.ВключитьФайл("readme.md")
.ВключитьФайл("src")
.ВключитьФайл("lib.config")
.ИсполняемыйФайл("src/Мессенджер.os");

17 changes: 17 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Отправка сообщений используя разные транспорты

[![GitHub release](https://img.shields.io/github/release/oscript-library/messenger.svg)](https://github.com/oscript-library/messenger)

## Введение

## Установка
Expand All @@ -20,3 +22,18 @@
- sms4b: https://www.sms4b.ru/

Перед отправкой сообщений необходимо у созданного объекта вызвать метод 'ИнициализацияSMS' куда передать код оператора "SMSBliss" ,"infobip" или "sms4b" и данные авторизации.

### Для Gitter
Необходимо получить токен авторизации https://developer.gitter.im/apps
Имя комнаты указывается полностью ИмяОрганизации/ИмяРепозитория
например для `https://gitter.im/asosnoviy/Lobby` имя комнаты `asosnoviy/Lobby`
Перед отправкой сообщений необходимо у созданного объекта вызвать метод 'ИнициализацияGitter' куда передать токен.

####№ Пример:
```
ИмяКомнаты = "organization/repo";
Мессенджер = Новый Мессенджер();
Мессенджер.ИнициализацияGitter(ТокенПользователя);
Мессенджер.ОтправитьСообщение(Мессенджер.ДоступныеПротоколы().gitter, ИмяКомнаты, "Всем привет!" );
```

107 changes: 105 additions & 2 deletions src/Мессенджер.os
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@
// (с) BIA Technologies, LLC
//
///////////////////////////////////////////////////////////////////////////////////////////////
#Использовать json

Перем АвторизацияSLACK;
Перем АвторизацияSMS;
Перем АвторизацияGitter Экспорт;

Перем ПараметрыДоступныеОператорыSMS;
Перем ПараметрыДоступныеПротоколы;
Expand All @@ -30,6 +32,19 @@

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

Процедура ОтправитьСообщениеGitter(Комната, Сообщение) Экспорт

IdКомнаты = АвторизацияGitter.Комнаты[Комната];
Если IdКомнаты = Неопределено Тогда

ВызватьИсключение "Комната не найдена в списке комнат пользователя";

Иначе
ОтправитьСообщениеВКомнатуGitter(IdКомнаты, Сообщение);
КонецЕсли;

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

///////////////////////////////////////////////////////////////////////////////////////////////

Процедура ОтправитьСообщение(Протокол, Адресат, Сообщение, ТемаСообщения = "", ТипСообщения = "") Экспорт
Expand All @@ -41,7 +56,11 @@
ИначеЕсли Протокол = ДоступныеПротоколы().sms Тогда

ОтправитьСообщениеОператоруSMS(Адресат, Сообщение);

ИначеЕсли Протокол = ДоступныеПротоколы().gitter Тогда

ОтправитьСообщениеGitter(Адресат, Сообщение);

Иначе

ВызватьИсключение "Неизвестный протокол отправки: " + Протокол;
Expand Down Expand Up @@ -102,9 +121,48 @@

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

Процедура ОтправитьСообщениеВКомнатуGitter(IdКомнаты, ТекстСообщения) Экспорт

Если АвторизацияGitter = Неопределено Тогда

ВызватьИсключение "Необходимо выполнить инициализацию комнат Gitter";

КонецЕсли;

ИмяСервера = "https://api.gitter.im";

Прокси = Новый ИнтернетПрокси(Истина);

URL = "/v1/rooms/"
+ IdКомнаты
+ "/chatMessages";

Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "application/json");
Заголовки.Вставить("Accept", "application/json");
Заголовки.Вставить("Authorization", " Bearer " + АвторизацияGitter.Токен);

HTTPЗапрос = Новый HTTPЗапрос(URL, Заголовки);

ТекстТела = "{""text"":""%1""}";
ТелоЗапроса = СтрШаблон(ТекстТела, ТекстСообщения);

HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапроса);

HTTP = Новый HTTPСоединение(ИмяСервера);
ОтветHTTP = HTTP.ОтправитьДляОбработки(HTTPЗапрос);

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

///////////////////////////////////////////////////////////////////////////////////////////////
// Инициализация
///////////////////////////////////////////////////////////////////////////////////////////////
Процедура ИнициализацияGitter(Токен) Экспорт

Комнаты = ПолучитьСписокКомнатGitter(Токен);
АвторизацияGitter = Новый Структура("Токен, Комнаты", Токен, Комнаты);

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

Процедура ИнициализацияSLACK(Логин, Ключ)Экспорт

Expand Down Expand Up @@ -258,11 +316,11 @@

КонецФункции

Функция ДоступныеПротоколы()Экспорт
Функция ДоступныеПротоколы() Экспорт

Если ПараметрыДоступныеПротоколы = Неопределено Тогда

ПараметрыДоступныеПротоколы = Новый Структура("slack, sms", "slack", "sms")
ПараметрыДоступныеПротоколы = Новый Структура("slack, sms, gitter", "slack", "sms", "gitter")

КонецЕсли;

Expand All @@ -272,7 +330,52 @@

///////////////////////////////////////////////////////////////////////////////////////////////

Функция ПолучитьСписокКомнатGitter(Токен)

СписокКомнат = Новый Соответствие();

ИмяСервера = "https://api.gitter.im";

Прокси = Новый ИнтернетПрокси(ИСТИНА);

URL = "v1/rooms?access_token="
+ Токен ;

HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.АдресРесурса = URL;

HTTP = Новый HTTPСоединение(ИмяСервера);
Ответ = HTTP.Получить(HTTPЗапрос);

json = Новый ПарсерJSON();
UnJason = json.ПрочитатьJSON(Ответ.ПолучитьТелоКакСтроку());

Если Ответ.КодСостояния = 200 И ТипЗнч(UnJason) = Тип("Массив") Тогда

Для Каждого Комната Из UnJason Цикл

СписокКомнат.Вставить(Комната.Получить("name"),Комната.Получить("id"));

КонецЦикла;

ИначеЕсли ТипЗнч(UnJason) = Тип("Соответствие") И UnJason["error"] = "Unauthorized" Тогда

ВызватьИсключение "Ошибка авторизации";

Иначе

ВызватьИсключение "Ошибка получения списка комнат";

КонецЕсли;

Возврат СписокКомнат;

КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////

АвторизацияSLACK = Неопределено;
АвторизацияSMS = Неопределено;
АвторизацияGitter = Неопределено;
ПараметрыДоступныеОператорыSMS = Неопределено;
ПараметрыДоступныеПротоколы = Неопределено;
145 changes: 145 additions & 0 deletions tests/gitter-test.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
#Использовать asserts
#Использовать "../"

Перем юТест;
Перем Мессенджер;

Перем ИмяКомнаты;
Перем IdКомнаты;
Перем ТокенПользователя;
Перем ОшибкаВходящихПараметров;

Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт

// Мока нет, или задавть параметры тут или передвать через переменные окружения
// Переменные окружения:
// GitterToken
// GitterRoomId
// GitterRoomName

ТокенПользователя = ""; // https://developer.gitter.im/apps
IdКомнаты = ""; // https://api.gitter.im/v1/rooms?access_token=ТокенПользователя
ИмяКомнаты = ""; // для комнаты https://gitter.im/asosnoviy/Lobby имя будет asosnoviy/Lobby

ЗаполнитьПарметрыИзПеременныхОкружения();


юТест = ЮнитТестирование;

ВсеТесты = Новый Массив;

ВсеТесты.Добавить("ТестДолжен_ПроверитьАвторизацию");

Если ЗначениеЗаполнено(ТокенПользователя) И
ЗначениеЗаполнено(IdКомнаты) И
ЗначениеЗаполнено(ИмяКомнаты) Тогда

ВсеТесты.Добавить("ТестДолжен_ПроверитьПолучениеСпискаКомнат");
ВсеТесты.Добавить("ТестДолжен_ОтправитьСообщениеВGitterПоidКомнаты");
ВсеТесты.Добавить("ТестДолжен_ОтправитьСообщениеВGitterПоИмениКомнаты");
ВсеТесты.Добавить("ТестДолжен_НеНайтиКомнатуПоИмениКомнаты");
ВсеТесты.Добавить("ТестДолжен_ОтправитьСообщениеМетодомОтправитьСообщение");
Иначе
Сообщить("Не заполненны входящие параметры");
Сообщить("Тест ТестДолжен_ПроверитьПолучениеСпискаКомнат будет пропущен");
Сообщить("Тест ТестДолжен_ОтправитьСообщениеВGitterПоidКомнаты будет пропущен");
Сообщить("Тест ТестДолжен_НеНайтиКомнатуПоИмениКомнаты будет пропущен");
Сообщить("Тест ТестДолжен_ОтправитьСообщениеВGitterПоИмениКомнаты будет пропущен");
Сообщить("Тест ТестДолжен_ОтправитьСообщениеМетодомОтправитьСообщение будет пропущен");

КонецЕсли;

Возврат ВсеТесты;

КонецФункции

Процедура ПередЗапускомТеста() Экспорт

Мессенджер = Новый Мессенджер();

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

Процедура ПослеЗапускаТеста() Экспорт

Мессенджер = Неопределено;

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

Процедура ТестДолжен_ПроверитьАвторизацию() Экспорт

НеверныйТокенПользователя = "123";

Попытка
Мессенджер.ИнициализацияGitter(НеверныйТокенПользователя);
Исключение
Ожидаем.Что(ОписаниеОшибки(), "Должен Упасть С Ошибкой авторизации").Содержит("Ошибка авторизации");
КонецПопытки

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

Процедура ТестДолжен_ПроверитьПолучениеСпискаКомнат() Экспорт

Мессенджер.ИнициализацияGitter(ТокенПользователя);

Ожидаем.Что(Мессенджер.ДоступныеПротоколы().Количество(), "Количество доступных протоколов 3").Равно(3);
Ожидаем.Что(Мессенджер.АвторизацияGitter.Токен, "Токен должен инициализироватся").Равно(ТокенПользователя) ;
Ожидаем.Что(Мессенджер.АвторизацияGitter.Комнаты.Количество(), "Комнаты Должны быть").Больше(0) ;
Ожидаем.Что(Мессенджер.АвторизацияGitter.Комнаты.Получить(ИмяКомнаты), "Комнаты Должны совпадать с id").Равно(IdКомнаты) ;

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

Процедура ТестДолжен_ОтправитьСообщениеВGitterПоidКомнаты() Экспорт

Мессенджер.ИнициализацияGitter(ТокенПользователя);

Мессенджер.ОтправитьСообщениеВКомнатуGitter(IdКомнаты,"Тестовое сообщение по IdКомнаты " + Строка(ТекущаяДата()));

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

Процедура ТестДолжен_ОтправитьСообщениеВGitterПоИмениКомнаты() Экспорт

Мессенджер.ИнициализацияGitter(ТокенПользователя);
Мессенджер.ОтправитьСообщениеGitter(ИмяКомнаты, "Тестовое сообщение по имени комнаты " + Строка(ТекущаяДата()));

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

Процедура ТестДолжен_НеНайтиКомнатуПоИмениКомнаты() Экспорт

НевернаяИмяКомнаты = "КомнатаКоторойНет";

Мессенджер.ИнициализацияGitter(ТокенПользователя);

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

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

Процедура ТестДолжен_ОтправитьСообщениеМетодомОтправитьСообщение() Экспорт

Мессенджер.ИнициализацияGitter(ТокенПользователя);
Мессенджер.ОтправитьСообщение(Мессенджер.ДоступныеПротоколы().gitter, ИмяКомнаты, "Тестовое сообщение Методом отправить сообщение " + Строка(ТекущаяДата()));

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

Процедура ЗаполнитьПарметрыИзПеременныхОкружения()


СИ = Новый СистемнаяИнформация();
ПеременныеСреды = СИ.ПеременныеСреды();

Если НЕ ЗначениеЗаполнено(ТокенПользователя) И НЕ ПеременныеСреды["GitterToken"] = Неопределено Тогда
ТокенПользователя = ПеременныеСреды["GitterToken"];
КонецЕсли;

Если НЕ ЗначениеЗаполнено(IdКомнаты) И НЕ ПеременныеСреды["GitterRoomId"] = Неопределено Тогда
IdКомнаты = ПеременныеСреды["GitterRoomId"];
КонецЕсли;

Если НЕ ЗначениеЗаполнено(ИмяКомнаты) И НЕ ПеременныеСреды["GitterRoomName"] = Неопределено Тогда
ИмяКомнаты = ПеременныеСреды["GitterRoomName"];
КонецЕсли;

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

0 comments on commit aab617a

Please sign in to comment.