Регистрация  |  Вход

Task for talented salesforce developers: Trigger + WF + Callout

Ребята, вдруг вам стало скучно, а у меня для вас есть задачка:
Пусть есть триггер на опп-ти, который отправляется запрос в гугл, также есть воркфлоу, который на любое дествие обновляет имя опп-ти на имя аккаунта.
Задача очень проста: написать тест, что запрос прошел и тело запроса соответствует желаемому.
Примечание: воркфлоу модифицировать и удалять нельзя.

P.s. я часто общаюсь/собеседую СФ программистов, вот и приходится придумывать простенькие задачки. =)

Ребята, вдруг вам стало скучно, а у меня для вас есть задачка:
Пусть есть триггер на опп-ти, который отправляется запрос в гугл, также есть воркфлоу, который на любое дествие обновляет имя опп-ти на имя аккаунта.
Задача очень проста: написать тест, что запрос прошел и тело запроса соответствует желаемому.
Примечание: воркфлоу модифицировать и удалять нельзя.

P.s. я часто общаюсь/собеседую СФ программистов, вот и приходится придумывать простенькие задачки. =)

Что-то странно твоя задача звучит. Может задача и интересная, но тут какой-то получился по описанию.

Пишу как понял - есть триггер делает запрос и вокфлов меняет имя. Надо написать тест для триггера но воркфлов менять нельзя. o_O

Вот интересно как у тебя проходят собеседование - или тут главная цель вообще понять что делать?

Что-то странно твоя задача звучит. Может задача и интересная, но тут какой-то получился по описанию.

Пишу как понял - есть триггер делает запрос и вокфлов меняет имя. Надо написать тест для триггера но воркфлов менять нельзя. o_O

Вот интересно как у тебя проходят собеседование :D - или тут главная цель вообще понять что делать? :D 

Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли

Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли

wilder
Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли

Не отменяли, а ты думаешь он сработает?

[quote="wilder"]Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли[/quote]
Не отменяли, а ты думаешь он сработает?

Dmitry Shnyrev
Что-то странно твоя задача звучит. Может задача и интересная, но тут какой-то получился по описанию.

Пишу как понял - есть триггер делает запрос и вокфлов меняет имя. Надо написать тест для триггера но воркфлов менять нельзя. o_O

Вот интересно как у тебя проходят собеседование - или тут главная цель вообще понять что делать? :D


Могу тебе дать пример кода.
Согласен, что в данном случае с постановкой задачи есть проблемы.

[quote="Dmitry Shnyrev"]Что-то странно твоя задача звучит. Может задача и интересная, но тут какой-то получился по описанию.

Пишу как понял - есть триггер делает запрос и вокфлов меняет имя. Надо написать тест для триггера но воркфлов менять нельзя. o_O

Вот интересно как у тебя проходят собеседование :D - или тут главная цель вообще понять что делать? :D[/quote]
Могу тебе дать пример кода.
Согласен, что в данном случае с постановкой задачи есть проблемы.

Dmitry Shnyrev
Вот интересно как у тебя проходят собеседование - или тут главная цель вообще понять что делать?

Для задач я выдаю пример кода.

[quote="Dmitry Shnyrev"]Вот интересно как у тебя проходят собеседование - или тут главная цель вообще понять что делать? [/quote]
Для задач я выдаю пример кода.

Dmitry Shnyrev
тут главная цель вообще понять что делать?

Хотя из условия все более менее понятно, есть триггер, есть воркфлоу, нужно написать тест на триггер.

[quote="Dmitry Shnyrev"]тут главная цель вообще понять что делать?[/quote]
Хотя из условия все более менее понятно, есть триггер, есть воркфлоу, нужно написать тест на триггер.

wilder
Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли

Я всегда использую очень простой и рабочий способ для тестирования кода который обрабатывает результаты callouts - тупо воссоздаю его ручками (то что в else ниже в примере).
Согласен если скажете что мешать мух с котлетами плохо - зато просто и понятно

if (!test.isRunningTest()) {
res = http.send(req);
} else {
res = new HttpResponse();
res.setHeader('Content-Type', 'application/json');
res.setBody('{"hash":"2217de39a332b843cb2ad93365eecad4","success":true}');
res.setStatusCode(200);
}

[quote="wilder"]Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли[/quote]
Я всегда использую очень простой и рабочий способ для тестирования кода который обрабатывает результаты callouts - тупо воссоздаю его ручками (то что в else ниже в примере).
Согласен если скажете что мешать мух с котлетами плохо - зато просто и понятно :) 

[code]
if (!test.isRunningTest()) {
    res = http.send(req);
} else {
    res = new HttpResponse();
    res.setHeader('Content-Type', 'application/json');
    res.setBody('{"hash":"2217de39a332b843cb2ad93365eecad4","success":true}');
    res.setStatusCode(200);
}
[/code]

Gres
Хотя из условия все более менее понятно, есть триггер, есть воркфлоу, нужно написать тест на триггер.

А при чем здеть тогда воркфлов к задаче? Он какую роль тогда играет? И почему его менять нельзя?

[quote="Gres"]Хотя из условия все более менее понятно, есть триггер, есть воркфлоу, нужно написать тест на триггер.[/quote]
А при чем здеть тогда воркфлов к задаче? Он какую роль тогда играет? И почему его менять нельзя?

Dmitry Shnyrev
Я всегда использую очень простой и рабочий способ для тестирования кода который обрабатывает результаты callouts - тупо воссоздаю его ручками (то что в else ниже в примере).

А если запросов несколько и типы у них разные?

[quote="Dmitry Shnyrev"]Я всегда использую очень простой и рабочий способ для тестирования кода который обрабатывает результаты callouts - тупо воссоздаю его ручками (то что в else ниже в примере). [/quote]
А если запросов несколько и типы у них разные?

Dmitry Shnyrev
Согласен если скажете что мешать мух с котлетами плохо - зато просто и понятно

Плюс такого подхода - перед глазами форма ответа. Если делать много интеграций, то мозг имеет свойство забывать нюансы задачи - а так глянул на секцию и видишь что должно прийти и что реально приходит - но это нюансы

[quote="Dmitry Shnyrev"]Согласен если скажете что мешать мух с котлетами плохо - зато просто и понятно [/quote]
Плюс такого подхода - перед глазами форма ответа. Если делать много интеграций, то мозг имеет свойство забывать нюансы задачи - а так глянул на секцию и видишь что должно прийти и что реально приходит :D - но это нюансы

Dmitry Shnyrev
А при чем здеть тогда воркфлов к задаче? Он какую роль тогда играет? И почему его менять нельзя?

Тут задача "на подумать" или "на попробовать", если не получается подумать))

[quote="Dmitry Shnyrev"]А при чем здеть тогда воркфлов к задаче? Он какую роль тогда играет? И почему его менять нельзя?[/quote]
Тут задача "на подумать" или "на попробовать", если не получается подумать))

Gres
А если запросов несколько и типы у них разные?

Это немного усложняет код, но принцип тот же остается - ручки. А так если вариантов запросов несколько или надо протестировать несколько типов ответов, то я просто добавляю паблик переменную для хранения ответа (и использования в секции else) которую инициализирую в тестах - подсовываю разные responses и запускаю метод.

[quote="Gres"]А если запросов несколько и типы у них разные?[/quote]
Это немного усложняет код, но принцип тот же остается - ручки. А так если вариантов запросов несколько или надо протестировать несколько типов ответов, то я просто добавляю паблик переменную для хранения ответа (и использования в секции else) которую инициализирую в тестах - подсовываю разные responses и запускаю метод.

Gres
wilder
Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли

Не отменяли, а ты думаешь он сработает?

Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.

[quote="Gres"][quote="wilder"]Возможно я туплю, но вроде как HttpCalloutMock еще не отменяли[/quote]
Не отменяли, а ты думаешь он сработает?[/quote]

Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.

wilder
Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.

В данном случае предполагается использование @future

[quote="wilder"]Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.[/quote]
В данном случае предполагается использование @future

Gres
wilder
Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.

В данном случае предполагается использование @future

Это устаревшая технология :)

[quote="Gres"][quote="wilder"]Ну смотря что ты используешь, для колаута из тригера. Я например использую Queueable интерфейс. и у меня точно сработает.[/quote]
В данном случае предполагается использование @future[/quote]

Это устаревшая технология :)

Gres
В данном случае предполагается использование @future

wilder
Это устаревшая технология :)

А можно поподробнее?

[quote="Gres"]В данном случае предполагается использование @future[/quote]
[quote="wilder"]Это устаревшая технология :)[/quote]

А можно поподробнее?

wilder
Это устаревшая технология :)

Не спорю, вопрос то не про технологию)

[quote="wilder"]Это устаревшая технология :)[/quote]
Не спорю, вопрос то не про технологию)