95shuma / crm

3 stars 0 forks source link

Работа над недочетами #91

Closed urmat-mederbekov closed 4 years ago

urmat-mederbekov commented 4 years ago
  1. Использовать константы вместо цифр во фримаркере, и где сочтете нужным
  2. При создании доктора изменить язык ролей на русский
  3. Оптимизировать if' ы
  4. Вместо ошибки 403 сделать ридайрект на назад, c флеш сообшением в виде alert что у него нету доступу
  5. В случае ридайректа назад при ввода неверных данных сохранять правильно введенные данные, чтобы не нужно было вводить обратно
  6. При создании доктора/пациента админом лпу hospital должен быть как у админа лпу. Надо автоматизировать
  7. Так как админ лпу тоже может лечить пациентов во фримаркерах не надо ограничивать их
    • Для чего это нужно?

Для удобство пользователя

Создать тесты на измененные методы

10 часов

kempl95 commented 4 years ago

Прошу перенести на следующий спринт, так как не все пункты выполнены. Выполнены пункты 1, 2 и 3 в Спринте 6. Фактическое время выполнения пунктов 1, 2 и 3 - 6 часов 25 мин. Создание тестов заняло большую часть времени, особенно checkUserPresence

kempl95 commented 4 years ago

При работе над DoctorControllerTest для Senior_Doctor возникли проблемы: Изучал создание теста для @Controller методов. Делал на основе: https://www.petrikainulainen.net/programming/spring-framework/unit-testing-of-spring-mvc-controllers-normal-controllers/ сделанный вариант ожидал статус 200, а получал 302. Решил что дело в csrf token, поэтому нашел как его добавить https://stackoverflow.com/questions/21749781/why-i-received-an-error-403-with-mockmvc-and-junit

Это не дало результата, но в случае необходимости можно добавить token в тестовый запрос: image

Далее пришел к выводу что redirect 302 происходит из-за spring security http.authorizeRequests() защиты. Изучал более подробно реализацию авторизации. Для теста нашел примеры: https://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/test-mockmvc.html

kempl95 commented 4 years ago

В Spring Security есть возможность настройки ролей и доступов. Может пригодиться: https://www.baeldung.com/role-and-privilege-for-spring-security-registration https://www.baeldung.com/spring-security-granted-authority-vs-role https://stackoverflow.com/questions/15203485/spring-test-security-how-to-mock-authentication

kempl95 commented 4 years ago

После обсуждения с наставником, пробовал переделать имеющийся тест через Mock, в ходе чего столкнулся с тем, что когда для тестового класса DoctorControllerTest подключается @RunWith(MockitoJUnitRunner.class) необходимо инициализировать MockMVC (иначе выдает ошибку NullPointerException - так как MockMVC = null) В ходе изучения обнаружил полезную информацию: https://habr.com/ru/post/433958/

f6c930f2d4ae8a6068696ace34e9566e или PyramidOfTesting_S

Итог:

Для контроллеров лучше использовать @WebMvcTest - что и предлагают другие различные источники: https://reflectoring.io/spring-boot-web-controller-test/ https://www.baeldung.com/spring-boot-testing - 6. Unit Testing With @WebMvcTest

В итоге, так как для интеграционных тестов необходимо использовать @SpringBootTest, то я решил создать еще один тест, но для проверки добавления элемента в БД. DoctorController.createDoctor и посмотреть как можно настроить SpringBootTest, чтобы он не сохранял при тестировании в основную БД. image

После чего столкнулся с ошибкой 403 при попытке теста. Использовал решение из https://github.com/95shuma/crm/issues/91#issuecomment-656297416 , но оно не помогло, так как данный пример создает новый токен, вместо использования созданного при тестировании через @SpringBootTest Решением оказалось добавление в mockMvc.perform(post(url)) .with(csrf()) - https://stackoverflow.com/questions/25605373/unit-testing-controllers-with-csrf-protection-enabled-in-spring-security

kempl95 commented 4 years ago

Фактическое время для Sprint 7: 18 часов. Основное время было уделено изучению тестов для @Controller чтобы написать DoctorControllerTest. Изученный материал описан в комментариях выше.

kempl95 commented 4 years ago

Прошу перенести тикет на следующий спринт и пересмотреть тикет на обсуждении. Считаю необходимым закрыть текущий тикет (необходимо обсудить с командой) и перенести пункты 4, 5, 6, 7 в отдельные тикеты, так как каждый пункт требует отдельного подробного изучения материала и написания необходимых тестов.

kempl95 commented 4 years ago

После обсуждений с командой было решено пункту №4 и №5 выделить по отдельному тикету, в связи с большим объемом работ.

kempl95 commented 4 years ago

ApplicationContext нашего приложения: image

Можно нажать и увидеть на символ рядом с наименованием тестового класса: image

kempl95 commented 4 years ago
kempl95 commented 4 years ago

Фактическое время выполнения в Sprint 8 -> 30 мин Итог: Выполненные пункты: 1, 2, 3, 6 Не выполнены в данном тикете -> 4, 5, 7. Причины указаны выше. https://github.com/95shuma/crm/issues/91#issuecomment-659473408 ; https://github.com/95shuma/crm/issues/91#issuecomment-660665523