private DestinationService SetupGetDetailsSut()
        {
            var usersRepoBuilder = new GoUserRepositoryBuilder();
            var usersRepo        = usersRepoBuilder
                                   .WithAll()
                                   .Build();

            var commentsRepoBuilder = new CommentsRepositoryBuilder();
            var commentsRepo        = commentsRepoBuilder
                                      .WithAll()
                                      .Build();

            var storiesRepoBuilder = new StoriesRepositoryBuilder();
            var storiesRepo        = storiesRepoBuilder
                                     .WithAll()
                                     .Build();

            var peopleStoriesRepoBuilder = new PeopleStoriesRepositoryBuilder();
            var peopleStoriesRepo        = peopleStoriesRepoBuilder
                                           .WithAll()
                                           .Build();

            var destUsersRepoBuilder = new DestinationsUsersRepositoryBuilder();
            var destUserRepo         = destUsersRepoBuilder
                                       .WithAll()
                                       .Build();

            var destRepoBuilder = new DestinationsRepositoryBuilder();
            var destRepo        = destRepoBuilder
                                  .WithAll()
                                  .Build();

            return(new DestinationService(destRepo, destUserRepo, peopleStoriesRepo, commentsRepo, storiesRepo, usersRepo, null, Mapper));
        }
        public void FindMyDestinations_ShouldReturn_CorrectCountOf_DestViewModels()
        {
            var user = new GoUser {
                Id = "1"
            };

            var destUserRepoBuilder = new DestinationsUsersRepositoryBuilder();
            var destUserRepo        = destUserRepoBuilder
                                      .WithAll()
                                      .Build();

            var sut = new DestinationService(null, destUserRepo, null, null, null, null, null, this.Mapper);

            var actual = sut.FindMyDestinations(user);

            var expected = new List <DestViewModel>
            {
                new DestViewModel {
                    Id = "1"
                }
            }.AsQueryable();

            Assert.Equal(expected.Count(), actual.Count());

            destUserRepoBuilder.DestUsersRepoMock.Verify();
            destUserRepoBuilder.DestUsersRepoMock.Verify(d => d.AddAsync(It.IsAny <DestinationsUsers>()), Times.Never);
            destUserRepoBuilder.DestUsersRepoMock.Verify(d => d.SaveChangesAsync(), Times.Never);
        }
        public async Task DeleteDestinationsUsers_ShouldDeleteDestinationsUsersCorrectly()
        {
            List <DestinationsUsers> deletedDestUsers = new List <DestinationsUsers>();

            var destUserRepoBuilder = new DestinationsUsersRepositoryBuilder();

            destUserRepoBuilder.DestUsersRepoMock.Setup(r => r.Delete(It.IsAny <DestinationsUsers>()))
            .Callback <DestinationsUsers>(du => deletedDestUsers.Add(du));

            var destRepo = destUserRepoBuilder
                           .WithAll()
                           .Build();

            var sut = new DestinationService(null, destRepo, null, null, null, null, null, Mapper);

            await sut.DeleteDestinationsUsers("2");

            Assert.Equal(5, deletedDestUsers.Count());
            destUserRepoBuilder.DestUsersRepoMock.Verify();
            deletedDestUsers.ForEach(c => Assert.Equal("2", c.DestinationId));

            destUserRepoBuilder.DestUsersRepoMock.Verify(d => d.Delete(It.IsAny <DestinationsUsers>()), Times.Exactly(5));
            destUserRepoBuilder.DestUsersRepoMock.Verify(d => d.SaveChangesAsync(), Times.Once);
        }
        public async Task AddUserToDestination_ShouldThrowIfEnddateToJoinIsPassed()
        {
            var destRepoBuilder = new DestinationsRepositoryBuilder();
            var destRepo        = destRepoBuilder
                                  .WithAll()
                                  .Build();

            var destUsersRepoBuilder = new DestinationsUsersRepositoryBuilder();
            var destUserRepo         = destUsersRepoBuilder
                                       .WithAll()
                                       .Build();

            var sut = new DestinationService(destRepo, destUserRepo, null, null, null, null, null, null);

            var ex = await Assert.ThrowsAsync <ArgumentException>(async() => await sut.AddUserToDestination(new GoUser()
            {
                Id = "3"
            }, "3"));

            ex.Message.ShouldBe("The end date to join is passed");
            destUsersRepoBuilder.DestUsersRepoMock.Verify();
            destUsersRepoBuilder.DestUsersRepoMock.Verify(d => d.AddAsync(It.IsAny <DestinationsUsers>()), Times.Never);
            destUsersRepoBuilder.DestUsersRepoMock.Verify(d => d.SaveChangesAsync(), Times.Never);
        }
        public async Task AddUserToDestination_ShouldThrowIfDestinationsUserAureadyExist()
        {
            var destRepoBuilder = new DestinationsRepositoryBuilder();
            var destRepo        = destRepoBuilder
                                  .WithAll()
                                  .Build();

            var destUsersRepoBuilder = new DestinationsUsersRepositoryBuilder();
            var destUserRepo         = destUsersRepoBuilder
                                       .WithAll()
                                       .Build();

            var sut = new DestinationService(destRepo, destUserRepo, null, null, null, null, null, null);

            var ex = await Assert.ThrowsAsync <ArgumentException>(async() => await sut.AddUserToDestination(new GoUser()
            {
                Id = "3"
            }, "1"));

            ex.Message.ShouldBe("You are auready in this group.");
            destUsersRepoBuilder.DestUsersRepoMock.Verify();
            destUsersRepoBuilder.DestUsersRepoMock.Verify(d => d.AddAsync(It.IsAny <DestinationsUsers>()), Times.Never);
            destUsersRepoBuilder.DestUsersRepoMock.Verify(d => d.SaveChangesAsync(), Times.Never);
        }