public async Task TestHandle_UserIsAuthenticatedAndIsFollowing_ShouldSetDtoFollowingToFalse(string username)
        {
            // Arrange
            var currentUserEmail   = "currentUserEmail";
            var currentUserProfile = new UserProfile(Guid.NewGuid().ToString(), currentUserEmail, "currentUsername");
            var profile            = new UserProfile(Guid.NewGuid().ToString(), "email", username);

            Context.UserProfiles.Add(currentUserProfile);
            Context.UserProfiles.Add(profile);
            await Context.SaveChangesAsync();

            Context.UserFollowers.Add(new UserFollower(profile.Id, currentUserProfile.Id));
            await Context.SaveChangesAsync();

            var query = new ProfileByUsernameQuery {
                Username = username
            };

            var currentUser = Mock.Of <ICurrentUserService>(s => s.UserId == currentUserProfile.Id &&
                                                            s.IsAuthenticated == true);

            var sut = new ProfileByUsernameQuery.Handler(context: Context, mapper: Mapper, currentUser);

            // Act
            var actualResult = await sut.Handle(query, CancellationToken.None);

            // Assert
            actualResult.Following.Should().BeTrue();
        }
        public void TestHandle_ProfileDoesntExist_ShouldThrowEntityNotFoundExceptionWithCorrectMessage(string username)
        {
            // Arrange
            var query = new ProfileByUsernameQuery {
                Username = username
            };

            var currentUserServiceMock = new Mock <ICurrentUserService>();

            var sut = new ProfileByUsernameQuery.Handler(context: Context, mapper: Mapper, currentUserServiceMock.Object);

            // Act
            var action = new Func <Task <ProfileDto> >(async() => await sut.Handle(query, CancellationToken.None));

            // Assert
            action.Should().Throw <EntityNotFoundException <UserProfile> >().And.Message.Should().Contain(username);
        }
        public async Task TestHandle_UserIsAuthenticatedAndIsNotFollowing_ShouldSetDtoFollowingToFalse(string username)
        {
            // Arrange
            var profile = new UserProfile(Guid.NewGuid().ToString(), "email", username);

            Context.UserProfiles.Add(profile);
            await Context.SaveChangesAsync();

            var query = new ProfileByUsernameQuery {
                Username = username
            };

            var currentUserServiceMock = new Mock <ICurrentUserService>();

            var sut = new ProfileByUsernameQuery.Handler(context: Context, mapper: Mapper, currentUserServiceMock.Object);

            // Act
            var actualResult = await sut.Handle(query, CancellationToken.None);

            // Assert
            actualResult.Following.Should().BeFalse();
        }
        public async Task TestHandle_ProfileExists_ShouldReturnCorrectly(string username)
        {
            // Arrange
            var profile = new UserProfile(Guid.NewGuid().ToString(), "email", username);

            Context.UserProfiles.Add(profile);
            await Context.SaveChangesAsync();

            var query = new ProfileByUsernameQuery {
                Username = username
            };

            var currentUserServiceMock = new Mock <ICurrentUserService>();

            var sut = new ProfileByUsernameQuery.Handler(context: Context, mapper: Mapper, currentUserServiceMock.Object);

            var expectedResult = Mapper.Map <ProfileDto>(profile);

            // Act
            var actualResult = await sut.Handle(query, CancellationToken.None);

            // Assert
            actualResult.Should().BeEquivalentTo(expectedResult);
        }