Впервые столкнулся с ситуацией, когда приходится что-то делать с правами доступа к записи в тестах.
Ситуация такая (полностью не разобрал, но вроде так):
СФ юзер создает запись, а Коммунити юзер создает вторую запись, связанную с первой.
Есть Шеринг рулс дающий КоммЮзеру доступ к родительской записи для того, чтобы к ней обратиться при создании связанной записи.
Ну так вот, в тестах можно создать обе записи, если ранить как СФ пользователь.
Но сценарий требует прогона под КоммЮзером, ок создаем его, но он не может создать первую запись (такого не предусмотрено с сценарии) и код падает где-то вдали на каком-то тригере и ВалРуле.
Хорошо, создаем первую запись, затем раним как КомЮзер и пытаемся создать вторую. Но у КомЮзера нет права обратиться к первой записи.
Тогда пытаемся воссоздать ситуацию, описанную в ШерингРулсе. Но ШерРулс работает с группой.
Хорошо, пробуем в тесте выкверить эту группу (SeeAllData=true нужно для этого?) и создать ГрупМембер запись.
Здесь код падает по знакомой причине: система не хочет создавать ГрупМембер запись вместе с создаваемым где-то вначале Эккаунтом. Нужно "отстреливать" создание ГрупМембер записи в асинхрон, но это тест...
Сталкивались ли вы с подобной ситуацией: воссоздание прав доступа к записи для КоммЮзера в тестах?
спасибо
Впервые столкнулся с ситуацией, когда приходится что-то делать с правами доступа к записи в тестах. Ситуация такая (полностью не разобрал, но вроде так): СФ юзер создает запись, а Коммунити юзер создает вторую запись, связанную с первой. Есть Шеринг рулс дающий КоммЮзеру доступ к родительской записи для того, чтобы к ней обратиться при создании связанной записи. Ну так вот, в тестах можно создать обе записи, если ранить как СФ пользователь. Но сценарий требует прогона под КоммЮзером, ок создаем его, но он не может создать первую запись (такого не предусмотрено с сценарии) и код падает где-то вдали на каком-то тригере и ВалРуле. Хорошо, создаем первую запись, затем раним как КомЮзер и пытаемся создать вторую. Но у КомЮзера нет права обратиться к первой записи. Тогда пытаемся воссоздать ситуацию, описанную в ШерингРулсе. Но ШерРулс работает с группой. Хорошо, пробуем в тесте выкверить эту группу (SeeAllData=true нужно для этого?) и создать ГрупМембер запись. Здесь код падает по знакомой причине: система не хочет создавать ГрупМембер запись вместе с создаваемым где-то вначале Эккаунтом. Нужно "отстреливать" создание ГрупМембер записи в асинхрон, но это тест... Сталкивались ли вы с подобной ситуацией: воссоздание прав доступа к записи для КоммЮзера в тестах? спасибо
собственно говоря, работая с этой сложной страницей, используемой в разных сценариях и разными людьми, пришел к пониманию того, каким должен быть тест и зачем он нужен.
тест не просто должен "покрывать" код и даже не только "проверять" результаты.
тест должен имитировать, восстанавливать реальную цепочку событий, происходящих при использовании приложения. Фактически - это имитация программными средствами реального использования приложения, с воссоздаем условий максимально приближенными к реальным (т.к. например, юзеры под определенными профайлами и правами!).
В идеале тест должен отрабатывать те сценарии использования, которые описаны в Use Stories, а если запись имеет определенный "жизненный цикл" включая принадлежность к Очереди - по прогонять запись по всему циклу.
При наличии таких тестов, достаточно просто нажать на одну кнопку - и ты знаешь ответ, работает или нет твое приложение как положено, и "где-что" упало.
собственно говоря, работая с этой сложной страницей, используемой в разных сценариях и разными людьми, пришел к пониманию того, каким должен быть тест и зачем он нужен. тест не просто должен "покрывать" код и даже не только "проверять" результаты. тест должен имитировать, восстанавливать реальную цепочку событий, происходящих при использовании приложения. Фактически - это имитация программными средствами реального использования приложения, с воссоздаем условий максимально приближенными к реальным (т.к. например, юзеры под определенными профайлами и правами!). В идеале тест должен отрабатывать те сценарии использования, которые описаны в Use Stories, а если запись имеет определенный "жизненный цикл" включая принадлежность к Очереди - по прогонять запись по всему циклу. При наличии таких тестов, достаточно просто нажать на одну кнопку - и ты знаешь ответ, работает или нет твое приложение как положено, и "где-что" упало.