Это тестовое задание рассчитано как для полных новичков, желающих применить свои знания на задачах, встречающихся на реальных проектах, так и для тех, кто готовится к интервью на junior позицию.
В рамках этого тестового задания вам предстоит реализовать процесс регистрации и аутентификации пользователей для будущего веб-сайта. Эта логика часто встречается в реальных проектах и имеет ключевое значение для обеспечения безопасности и функциональности сайта. Хоть реальные тестовые задания включают в себя более обширные требования, это вариант может быть частью того, что вас попросят реализовать перед собеседованием.
При частичном завершении тестового задания вы можете реализовать либо frontend либо backend часть, в зависимости от вашей специализации. При этом, если вас интересует frontend, вы можете “мокнуть” бекенд, например с помощью пакета json-server-auth и заниматься только клиентской частью. В случае backend профиля вы можете реализовать только API и тестировать его через REST клиент, например Postman.
Для полного завершения тестового задания вам необходимо реализовать frontend и backend части приложения, которые должны взаимодействовать между собой посредством API. Фронтенд будет отправлять запросы на регистрацию и аутентификацию пользователей, а бэкенд должен обрабатывать эти запросы, проверять данные, взаимодействовать с БД и возвращать соответствующие ответы.
Так как тестовое задание рассчитано на начальный уровень, процесс регистрации будет включать в себя работу с электронной почтой и паролем без подтверждения имейл адреса. То есть электронная почта выступает в роли имени пользователя.
Требования к frontend части
- Страница регистрации:
- Форма с полями для ввода электронной почты и пароля.
- Кнопка «Зарегистрироваться».
- При успешной регистрации на экране появляется подтверждающее сообщение
- При неудачной регистрации на экране появляется сообщение об ошибке
- Страница аутентификации:
- Форма с полями для ввода электронной почты и пароля.
- Кнопка «Войти».
- При успешной аутентификации на экране появляется подтверждающее сообщение
- При неудачной аутентификации на экране появляется сообщение об ошибке
- Решение об использовании фреймворка остается за вами. Это зависит от этапа вашего обучения. Если вы в самом начале, то html страничек со скриптами будет достаточно, а вы тем временем поупражняйтесь с fetch API и DOM и познакомитесь с процессом аутентификации пользователей. В случае подготовки к интервью, использование фреймворка обязательно.
- Формы регистрации и аутентификации должны быть реализованы с использованием валидации данных.
- Необходимо написать unit-тесты для компонентов, осуществляющих валидацию данных.
Требования к backend части
- Бэкенд должен быть реализован на любом современном языке программирования (например, Node.js, Python, Java).
- Необходимо использовать безопасные методы хеширования паролей.
- Бэкенд должен взаимодействовать с базой данных для сохранения и чтения данных о пользователях. Выбор конкретной базы данных остается на ваше усмотрение, как вариант — используйте SQLite.
- Реализация эндпоинтов:
- Реализовать эндпоинты для регистрации и аутентификации пользователей, которые будут обрабатывать запросы от фронтенда и взаимодействовать с базой данных.
- Эндпоинт регистрации должен проверять уникальность электронной почты и сохранять нового пользователя в базе данных.
- Эндпоинт аутентификации должен проверять введенные учетные данные и возвращать токен аутентификации в случае успешной аутентификации.
- Бэкенд должен обеспечивать обработку возможных ошибок при работе с базой данных или при обработке запросов от фронтенда, возвращая соответствующие HTTP статусы и сообщения об ошибках.
- Необходимо написать unit-тесты для функций, обрабатывающих запросы на регистрацию и аутентификацию.
Тестовые сценарии
Frontend
- Проверка валидации данных при попытке регистрации с пустыми полями. Проверьте, что при попытке отправить форму регистрации с пустыми полями пользователю отображается сообщение об ошибке, указывающее на необходимость заполнения всех обязательных полей.
- Проверка валидации данных при вводе некорректного формата электронной почты. Убедитесь, что при вводе некорректного формата электронной почты (например, без символа «@») появляется сообщение об ошибке, указывающее на неправильный формат адреса электронной почты.
- Успешная регистрация пользователя после заполнения всех полей корректными данными. Убедитесь, что после заполнения всех обязательных полей формы регистрации корректными данными и нажатия кнопки «Зарегистрироваться» на экране отображается подтверждающее сообщение.
- Обработка ошибки при регистрации с ошибками. Убедитесь что при возникновении ошибки при регистрации, на экране появляется сообщение об ошибке.
- Проверка валидации данных при попытке аутентификации с неполными данными. Проверьте, что при попытке отправить форму аутентификации с неполными данными (например, только с электронной почтой или только с паролем) появляется сообщение об ошибке, указывающее на необходимость заполнения всех обязательных полей.
- Успешная аутентификация пользователя после ввода корректных данных. Убедитесь, что после ввода корректных данных в форму аутентификации (электронной почты и пароля) и нажатия кнопки «Войти» на экране отображается подтверждающее сообщение.
- Обработка ошибки при аутентификация с ошибками. Убедитесь что при возникновении ошибки при аутентификация, на экране появляется сообщение об ошибке.
Backend
- Проверка работы эндпоинта регистрации с корректными данными. Убедитесь, что запрос на регистрацию с корректными данными (валидная электронная почта, уникальное имя пользователя и безопасный пароль) приводит к успешному созданию нового пользователя в базе данных.
- Проверка работы эндпоинта регистрации с неполными данными. Проверьте, что запрос на регистрацию с неполными данными (например, без указания электронной почты или пароля) возвращает соответствующий статус ошибки и не создает нового пользователя.
- Проверка работы эндпоинта аутентификации с корректными данными. Убедитесь, что запрос на аутентификацию с корректными данными (существующая электронная почта и пароль, соответствующий сохраненному хешу) успешно аутентифицирует пользователя и возвращает токен доступа.
- Проверка работы эндпоинта аутентификации с неполными данными. Проверьте, что запрос на аутентификацию с неполными данными (например, без указания пароля) возвращает соответствующий статус ошибки и не аутентифицирует пользователя.
- Проверка безопасности методов хеширования паролей. Убедитесь, что пароли хешируются с использованием безопасного алгоритма хеширования (например, bcrypt) и что хешированные пароли сохраняются в базе данных.