public void UpdateIsFollowingProperty_ReturnsNullReferenceException_WhenUsernameIsNull()
        {
            // Act & Assert
            var ex = Assert.Throws <ArgumentNullException>(() => UserNetworkHelpers.UpdateIsFollowingProperty(null, new List <Network>()));

            Assert.Equal("The requestingUsername is null (Parameter 'requestingUsername')", ex.Message);
        }
        public void UpdateIsFollowingProperty_ReturnsNullReferenceException_WhenFollowingCollectionIsNull()
        {
            // Arrange
            var viewModel = new NetworkUserViewModel()
            {
                UserName = "******"
            };

            // Act & Assert
            var ex = Assert.Throws <ArgumentNullException>(() => UserNetworkHelpers.UpdateIsFollowingProperty(viewModel.UserName, null));

            Assert.Equal("The followers collection is null (Parameter 'requestedUsersFollowers')", ex.Message);
        }
    public async Task <IActionResult> GetUserProfileAsync(string requestedUsername)
    {
        // add properties for no. of species / observations
        // build new query object
        if (string.IsNullOrEmpty(requestedUsername))
        {
            _logger.LogError(LoggingEvents.GetItem, "requestedUsername argument is null or empty at GetUserProfileAsync action");
            return(BadRequest($"{nameof(requestedUsername)} argument is null or empty"));
        }

        try
        {
            var requestedUser = await _userManager.GetUserWithNetworkAsync(requestedUsername);

            if (requestedUser is null)
            {
                _logger.LogError(LoggingEvents.GetItem, $"Username '{requestedUsername}' not found at GetUserProfileAsync action");
                return(StatusCode(500, "userManager returned null"));
            }

            var requestedUserProfileViewModel = _mapper.Map <ApplicationUser, UserProfileViewModel>(requestedUser);

            requestedUserProfileViewModel.FollowersCount = requestedUser.Followers.Count;

            requestedUserProfileViewModel.FollowingCount = requestedUser.Following.Count;

            if (requestedUsername.Equals(User.Identity.Name))
            {
                // Own profile requested...
                requestedUserProfileViewModel.IsOwnProfile = true;
            }
            else
            {
                // Other user's profile requested...
                requestedUserProfileViewModel.IsFollowing = UserNetworkHelpers.UpdateIsFollowingProperty(User.Identity.Name, requestedUser.Followers);
            }

            return(Ok(requestedUserProfileViewModel));
        }
        catch (Exception ex)
        {
            _logger.LogError(LoggingEvents.Exception, ex, "Error at GetUserProfileAsync");
            return(StatusCode(500, "There was an error getting the user profile"));
        }
    }
        public void UpdateIsFollowingProperty_ReturnsIsFollowEqualsFalse_WhenViewModelUserIsNotInFollowingCollection(int length)
        {
            // Arrange
            var viewModel = new NetworkUserViewModel()
            {
                UserName = "******"
            };
            var followers = GetDynamicNetworkCollection(length);

            // Act
            var result = UserNetworkHelpers.UpdateIsFollowingProperty(viewModel.UserName, followers);

            // Assert
            var returnModel = Assert.IsType <bool>(result);

            //Assert.Equal(viewModel.UserName, returnModel.UserName);
            Assert.False(result);
        }