public async Task CreateFriendshipAsync_CreateFriendshipWithYourSelf_ThrowException()
        {
            // Arrange
            var mockRepository    = new Mock <IFriendshipRepository>();
            var friendshipService = new FriendshipService(mockRepository.Object, mockUserService.Object);

            // Act and Assert
            Assert.ThrowsAsync(typeof(BadRequestExceptions),
                               () => friendshipService.CreateFriendshipAsync(user1.Id));

            // Act
            Exception expectedExcetpion = null;

            try
            {
                var result = await friendshipService.CreateFriendshipAsync(user1.Id);
            }
            catch (Exception ex)
            {
                expectedExcetpion = ex;
            }

            // Assert
            Assert.IsNotNull(expectedExcetpion);
            Assert.IsInstanceOf <BadRequestExceptions>(expectedExcetpion);
            Assert.AreEqual(expectedExcetpion.Message, "you can't send Friendship request to yourself");
        }
        public async Task CreateFriendshipAsync_CreateFriendshipWithSomeoneWhoRejectedYouRecently_ThrowException()
        {
            // Arrange
            var friendship = new Friendship
            {
                FromUserId = user1.Id,
                ToUserId   = user2.Id,
                State      = FriendshipState.Rejected,
            };
            var mockRepository = new Mock <IFriendshipRepository>();

            mockRepository.Setup(repository => repository.GetByFromUserAndToUserAsync(user1.Id, user2.Id))
            .ReturnsAsync(friendship);
            var friendshipService = new FriendshipService(mockRepository.Object, mockUserService.Object);

            // Act
            Exception expectedExcetpion = null;

            try
            {
                var result = await friendshipService.CreateFriendshipAsync(user2.Id);
            }
            catch (Exception ex)
            {
                expectedExcetpion = ex;
            }

            // Assert
            Assert.IsNotNull(expectedExcetpion);
            Assert.IsInstanceOf <BadRequestExceptions>(expectedExcetpion);
            Assert.AreEqual(expectedExcetpion.Message, "your previous Friendship request rejected by this user");
        }
        /// <inheritdoc />
        public async Task Handle(FriendshipRequestAcceptedDomainEvent notification, CancellationToken cancellationToken)
        {
            var friendshipService = new FriendshipService(_userRepository, _friendshipRepository);

            await friendshipService.CreateFriendshipAsync(notification.FriendshipRequest);

            await _unitOfWork.SaveChangesAsync(cancellationToken);
        }
        public async Task CreateFriendshipAsync_CreateNewFriendship_ReturnOne()
        {
            // Arrange
            var mockRepository = new Mock <IFriendshipRepository>();

            mockRepository.Setup(repository => repository.InsertAsync(
                                     It.Is <Friendship>(x => x.FromUserId == user1.Id && x.ToUserId == user2.Id &&
                                                        x.State == FriendshipState.Requested)))
            .ReturnsAsync(1);
            var friendshipService = new FriendshipService(mockRepository.Object, mockUserService.Object);

            // Act
            var result = await friendshipService.CreateFriendshipAsync(user2.Id);

            // Assert
            Assert.AreEqual(result, 1);
        }