public void GetNotificationRoles_returns_full_list_with_all_roles()
        {
            // Given
            var expectedRoles = new List <int> {
                1, 2, 3, 4, 6, 7, 8
            };
            var adminRegistrationModel = new AdminRegistrationModel(
                "Test",
                "Name",
                "*****@*****.**",
                1,
                null,
                true,
                true,
                "PRN",
                0,
                true,
                true,
                true,
                true,
                true,
                true,
                true,
                true
                );

            // When
            var result = adminRegistrationModel.GetNotificationRoles();

            // Then
            result.Should().BeEquivalentTo(expectedRoles);
        }
        public async Task <IActionResult> Registration(AdminRegistrationModel model)
        {
            if (ModelState.IsValid)
            {
                var user = _user.GetByLogin(model.Login);
                if (user == null)
                {
                    user = _user.GetAll().FirstOrDefault(x => x.Email == model.Email);
                }

                if (user == null)
                {
                    _user.Registration(model.Login, model.Email, model.Password);
                    await AuthenticateAsync(model.Login); // аутентификация

                    return(RedirectToAction("Index", "Admin"));
                }
                else
                {
                    ModelState.AddModelError("", "Некорректные логин или почта");
                }
            }
            return(View(model));
        }
        public int RegisterAdmin(
            AdminRegistrationModel registrationModel,
            bool registerJourneyContainsTermsAndConditions
            )
        {
            var currentTime = clockService.UtcNow;
            var values      = new
            {
                forename            = registrationModel.FirstName,
                surname             = registrationModel.LastName,
                email               = registrationModel.Email,
                password            = registrationModel.PasswordHash,
                centreID            = registrationModel.Centre,
                categoryId          = registrationModel.CategoryId,
                centreAdmin         = registrationModel.IsCentreAdmin,
                isCentreManager     = registrationModel.IsCentreManager,
                approved            = registrationModel.Approved,
                active              = registrationModel.Active,
                contentCreator      = registrationModel.IsContentCreator,
                contentManager      = registrationModel.IsContentManager,
                importOnly          = registrationModel.ImportOnly,
                trainer             = registrationModel.IsTrainer,
                supervisor          = registrationModel.IsSupervisor,
                nominatedSupervisor = registrationModel.IsNominatedSupervisor,
                tcAgreed            = registerJourneyContainsTermsAndConditions ? currentTime : (DateTime?)null,
            };

            using var transaction = new TransactionScope();

            var adminUserId = connection.QuerySingle <int>(
                @"INSERT INTO AdminUsers
                    (
                        Forename,
                        Surname,
                        Email,
                        Password,
                        CentreId,
                        CategoryId,
                        CentreAdmin,
                        IsCentreManager,
                        Approved,
                        Active,
                        ContentCreator,
                        ContentManager,
                        ImportOnly,
                        Trainer,
                        Supervisor,
                        NominatedSupervisor,
                        TCAgreed
                    )
                    OUTPUT Inserted.AdminID
                    VALUES
                    (
                        @forename,
                        @surname,
                        @email,
                        @password,
                        @centreId,
                        @categoryId,
                        @centreAdmin,
                        @isCentreManager,
                        @approved,
                        @active,
                        @contentCreator,
                        @contentManager,
                        @importOnly,
                        @trainer,
                        @supervisor,
                        @nominatedSupervisor,
                        @tcAgreed
                    )",
                values
                );

            connection.Execute(
                @"INSERT INTO NotificationUsers (NotificationId, AdminUserId)
                SELECT N.NotificationId, @adminUserId
                FROM Notifications N INNER JOIN NotificationRoles NR 
                ON N.NotificationID = NR.NotificationID 
                WHERE RoleID IN @roles AND AutoOptIn = 1",
                new { adminUserId, roles = registrationModel.GetNotificationRoles() }
                );

            transaction.Complete();

            return(adminUserId);
        }