public async Task GivenUnverifiedEmail_ThrowsConflictException()
        {
            // Arrange
            _currentUserMock.Setup(m => m.UserId).Returns("NEWPROFILE");
            _currentUserMock.Setup(m => m.Username).Returns("New User");
            _currentUserMock.Setup(m => m.Email).Returns("*****@*****.**");
            _userManagerMock.Setup(m => m.GetUserAsync(_currentUserMock.Object.UserId)).ReturnsAsync((Result.Success(), new ShowcaseUser {
                EmailVerified = false
            }));
            var command = new RegisterNewAccountCommand
            {
                PublicProfileUsername    = "******",
                PublicProfileDescription = "New profile guy's description"
            };

            // Act
            await _sut.Handle(command, CancellationToken.None);

            // Assert
            _userManagerMock.Verify(m => m.GetUserAsync(It.Is <string>(c => c == _currentUserMock.Object.UserId)), Times.Once);
            //_userManagerMock.Verify(m => m.EditUserAsync(It.Is<string>(c => c == _currentUserMock.Object.UserId), It.Is<string>(c => c == command.PublicProfileUsername)
            //    , It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()
            //    , It.IsAny<Dictionary<string, object>>(), It.IsAny<Dictionary<string, object>>()
            //    , It.IsAny<bool>())
            //, Times.Never);

            await Assert.ThrowsAsync <ResourceConflictException>(() => _sut.Handle(command, CancellationToken.None));
        }
        public async Task GivenNonUniqueId_ThrowsResourceConflictException()
        {
            // Arrange
            _currentUserMock.Setup(m => m.UserId).Returns("HAMZA");
            var command = new RegisterNewAccountCommand();

            // Assert
            await Assert.ThrowsAsync <ResourceConflictException>(() => _sut.Handle(command, CancellationToken.None));
        }
        public async Task GivenNonUniqueUsername_ThrowsResourceConflictException()
        {
            // Arrange
            var command = new RegisterNewAccountCommand
            {
                PublicProfileUsername    = "******",
                PublicProfileDescription = "dummy description"
            };

            // Assert
            await Assert.ThrowsAsync <ResourceConflictException>(() => _sut.Handle(command, CancellationToken.None));
        }
        public async Task GivenNonUniqueEmail_ProfileIsntAdded()
        {
            // Arrange
            _currentUserMock.Setup(m => m.Email).Returns("*****@*****.**");
            var command = new RegisterNewAccountCommand();

            // Act
            await _sut.Handle(command, CancellationToken.None);

            // Assert
            var profiles = await _context.Profiles
                           .Where(e => e.Email == _currentUserMock.Object.Email)
                           .ToListAsync();

            Assert.Single <ShowcaseProfile>(profiles);
        }
        public async Task GivenNonUniqueUsername_ProfileIsntAdded()
        {
            // Arrange
            var command = new RegisterNewAccountCommand
            {
                PublicProfileUsername    = "******",
                PublicProfileDescription = "dummy description"
            };

            // Act
            await _sut.Handle(command, CancellationToken.None);

            // Assert
            var profiles = await _context.Profiles
                           .Where(e => e.Username == command.PublicProfileUsername)
                           .ToListAsync();

            Assert.Single <ShowcaseProfile>(profiles);
        }
        public async Task GivenValidRequest_ProfileIsAdded()
        {
            // Arrange
            _currentUserMock.Setup(m => m.UserId).Returns("NEWPROFILE");
            _currentUserMock.Setup(m => m.Username).Returns("New User");
            _currentUserMock.Setup(m => m.Email).Returns("*****@*****.**");
            var command = new RegisterNewAccountCommand
            {
                PublicProfileUsername    = "******",
                PublicProfileDescription = "New profile guy's description"
            };

            // Act
            await _sut.Handle(command, CancellationToken.None);

            // Assert
            var profile = await _context.Profiles.FindAsync(_currentUserMock.Object.UserId);

            Assert.NotNull(profile);

            var notes = await _context.ActivityNotes.Where(e => e.ShowcaseProfileId == _currentUserMock.Object.UserId && e.CreatedOn == profile.CreatedOn).ToListAsync();

            Assert.True(notes.Count >= 1);

            Assert.Equal(_currentUserMock.Object.Username, profile.Name);
            Assert.Equal(_currentUserMock.Object.Email, profile.Email);
            Assert.Equal(_currentUserMock.Object.UserId, profile.ProfileId);

            Assert.Equal(command.PublicProfileUsername, profile.Username);
            Assert.Equal(profile.CreatedOn, DateTime.Now);
            Assert.Equal(profile.CreatedBy, _currentUserMock.Object.UserId);

            //_userManagerMock.Verify(m => m.EditUserAsync(It.Is<string>(c => c == _currentUserMock.Object.UserId), It.Is<string>(c => c == command.PublicProfileUsername)
            //    , It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()
            //    , It.IsAny<Dictionary<string, object>>(), It.IsAny<Dictionary<string, object>>()
            //    , It.IsAny<bool>())
            //, Times.Once);
        }
        public async Task GivenUnverifiedEmail_DoesNotAddProfile()
        {
            // Arrange
            _currentUserMock.Setup(m => m.UserId).Returns("NEWPROFILE");
            _currentUserMock.Setup(m => m.Username).Returns("New User");
            _currentUserMock.Setup(m => m.Email).Returns("*****@*****.**");
            _userManagerMock.Setup(m => m.GetUserAsync(_currentUserMock.Object.UserId)).ReturnsAsync((Result.Success(), new ShowcaseUser {
                EmailVerified = false
            }));
            var command = new RegisterNewAccountCommand
            {
                PublicProfileUsername    = "******",
                PublicProfileDescription = "New profile guy's description"
            };

            // Act
            await _sut.Handle(command, CancellationToken.None);

            // Assert
            var profile = await _context.Profiles.FindAsync(_currentUserMock.Object.UserId);

            Assert.Null(profile);
        }