public void Invoke_EmptyGuid_ReturnsNull()
        {
            // prepare
            var mockedDomainRepository = new Mock <IDomainRepository>();
            var action = new GetDomainByUserId(mockedDomainRepository.Object);

            // action
            var user = action.Invoke(new Guid());

            // check
            Assert.Null(user);
            mockedDomainRepository.Verify(r => r.FindBy(It.IsAny <Expression <Func <DataAccess.Models.Domain, bool> > >()), Times.Never);
        }
        public void Invoke_ValidData_ReturnsCorrectModel()
        {
            var domainId = Guid.NewGuid();
            var userId   = Guid.NewGuid();

            var usersInDomain = new List <DataAccess.Models.User>
            {
                new DataAccess.Models.User
                {
                    Id   = userId,
                    Name = "TestUser"
                }
            };

            var domainFromDb = new DataAccess.Models.Domain
            {
                Id         = domainId,
                Name       = "Name",
                CreatedOn  = DateTime.MinValue,
                ModifiedOn = DateTime.MinValue,
                DeletedOn  = null,
                Users      = usersInDomain
            };

            // prepare
            var findByResult = new List <DataAccess.Models.Domain> {
                domainFromDb
            };

            var mockedDomainRepository = new Mock <IDomainRepository>();

            mockedDomainRepository.Setup(r => r.FindBy(It.IsAny <Expression <Func <DataAccess.Models.Domain, bool> > >()))
            .Returns(findByResult.AsQueryable());
            var action = new GetDomainByUserId(mockedDomainRepository.Object);

            // action
            var domain = action.Invoke(userId);

            // check
            Assert.Equal(domainId, domain.Id);
            Assert.Equal("Name", domain.Name);
            Assert.Contains(domain.Users, y => y.Id == userId);
            Assert.Contains(domain.Users, y => y.Name == "TestUser");
            Assert.Equal(DateTime.MinValue, domain.CreatedOn);
            Assert.Equal(DateTime.MinValue, domain.ModifiedOn);
            Assert.Null(domain.DeletedOn);
            mockedDomainRepository.Verify(r => r.FindBy(It.IsAny <Expression <Func <DataAccess.Models.Domain, bool> > >()), Times.Once);
        }