Це тестове завдання розраховане як на повних новачків, які бажають застосувати свої знання на завданнях, що зустрічаються на реальних проектах, так і для тих, хто готується до інтерв'ю на 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) і що хешовані паролі зберігаються в базі даних.