User Management API - это веб-приложение, разработанное для централизованного управления пользователями в организации или для обслуживания клиентов. Оно предоставляет набор эндпоинтов REST API, которые позволяют различным клиентским приложениям выполнять операции по созданию, чтению, обновлению и удалению (CRUD) пользователей в базе данных.
- Регистрация пользователей: Приложение предлагает функциональность регистрации новых пользователей. При регистрации пользователя происходит валидация данных, хеширование пароля с помощью SHA-256 и сохранение пользователя в базу данных.
- Блокировка пользователей: Администраторы могут блокировать. Заблокированные пользователи не могут аутентифицироваться в системе и любое обращение к ней будет возвращать ошибку.
- Просмотр пользователей: Только администатор может просматривать список всех зарегистрированных пользователей. Помимо запроса конкретного пользователя по логину, реализована пагинация и администратор может запрашивать списки пользователей. Пароли пользователей в ответе не передаются в целях безопасности.
- Аутентификация: Приложение реализует Basic-авторизацию. Пользователи могут аутентифицироваться, предоставляя свои учетные данные (логин и пароль). При успешной аутентификации пользователи получают доступ к защищенным ресурсам.
- Роли пользователей: Пользователи могут быть назначены в одну из двух ролей: "User" и "Admin". Пользователи с ролью "Admin" имеют расширенные привилегии и могут выполнять дополнительные операции, такие как блокировка и получение пользователей.
- Entity Framework Core. ORM
- PostgreSQL. База данных
- AutoMapper. Библиотека для проецирования объектов
- FluentValidation. Библиотека для создания правил валидации входных данных
- Newtonsoft.Json. Библиотека для работы с данными в формате Json
Процесс тестирования для приложения был выполнен с использованием двух основных типов тестирования: интеграционного тестирования и модульного тестирования.
- Интеграционные тесты: Интеграционные тесты были написаны с целью проверки основного функционала API приложения, включая взаимодействие с базой данных и корректную обработку HTTP-запросов. Тестирование охватывает все основные функции API, включая регистрацию новых пользователей, блокировку пользователей и получение списка пользователей.
- Модульные тесты: С помощью фреймворков для модульного тестирования и мокирования (например, xUnit и FakeItEasy), были написаны тесты для различных классов, таких как репозитории, сервисы и валидаторы. Эти тесты помогают гарантировать, что каждый компонент системы работает должным образом в изолированных условиях.
- FakeItEasy. Библиотека для создания фейковых объектов
- FluentAssertions. Набор методов расширения для понятной и простой реализации ожиданий тестирования
- xUnit. Библиотека для создания модульных и интеграционных тестов
- Запуск WEB API прлиожения: Для успешного запуска приложения необходимо запустить сервер PostgreSQL и поменять строку подключения на актуальную в файле appsettings.json. Приложение самостоятельно создаст базу данных и заполнит её начальными данными.
Важно заметить, что приложение не реализует функционал добавления учетной записи администратора, так как при инициализации самостоятельно её добавляет. Такое поведение не позволит добавить еще одного администратора и обеспечит безопасность доступа к системе.
- Запуск интеграционных тестов: Интеграционные тесты находятся в папке Integration. На момент запуска тестов база данных должна хранить учетную запись администратора и дефолтного пользователя (добавляются автоматически при первом запуске приложения).
Тестирование проиходит следующим образом: сначала запускается WEB API приложение, а затем последовательно запускаются тесты. То есть на момент тестирование WEB API приложение должно быть запущено.
- Запуск модульных тестов: Интеграционные тесты находятся в папке Unit. Эти тесты не требуют подготовки и могут быть запущены в любой момент.