/// <summary>
        /// Creates article controller
        /// </summary>
        /// <param name="blogPostRepository">blogpost repository to use, leave null to use default mocked implementation</param>
        /// <param name="shouldBlogPostRepositoryAlwayReturnPost">if using default blogpost repository, if set to true then repository will always return BlogPost regardless of input. If however it is false posts titles are 0 to 19 and published date is current day</param>
        /// <param name="lookupRepository">repository to look things up, leave null for default mocked implementation</param>
        /// <param name="configurationReader">configuration reader to use, leave null for default mocked implementation</param>
        /// <param name="waneTransform">wane transform, leave null for default mocked implementaion</param>
        /// <param name="logger">Logger, leave null for default implementation</param>
        /// <param name="principal">principal used for security, leave null for default implementation</param>
        /// <returns></returns>
        public static BlogPostController CreateBlogPostController(IBlogPostRepository blogPostRepository = null, bool shouldBlogPostRepositoryAlwayReturnPost = true,
            ILookupRepository lookupRepository = null, IConfigurationReader configurationReader = null, IWaneTransform waneTransform = null, IJumbleblocksLogger logger = null,
            IJumbleblocksPrincipal principal = null)
        {
            if (blogPostRepository == null)
                blogPostRepository = CreateMockedBlogPostRepository(shouldBlogPostRepositoryAlwayReturnPost).Object;

            if (lookupRepository == null)
                lookupRepository = CreateMockedLookupRepository().Object;

            if (configurationReader == null)
                configurationReader = CreateMockedConfigurationReader().Object;

            if (waneTransform == null)
                waneTransform = CreateMockedWaneTransform().Object;

            if (logger == null)
                logger = new Mock<IJumbleblocksLogger>().Object;

            if (principal == null)
                principal = CreateMockedPrincipalAndAddBlogUserToLookUp(Mock.Get<ILookupRepository>(lookupRepository)).Object;

            var controller = new BlogPostController(blogPostRepository, lookupRepository, configurationReader, waneTransform, logger);
            controller.SetMockedControllerContext();
            controller.SetPrincipal(principal);

            return controller;
        }
        public ImageController(IImageReferenceRepository imageReferenceRepository, IJumbleblocksLogger logger)
        {
            if (imageReferenceRepository == null)
                throw new ArgumentNullException("imageReferenceRepository");

            if (logger == null)
                throw new ArgumentNullException("logger");

            ImageReferenceRepository = imageReferenceRepository;
            Logger = logger;
        }
        public BlogPostController(IBlogPostRepository blogPostSummaryRepository, ILookupRepository lookupRepository, IConfigurationReader configurationReader, IWaneTransform waneTransformer, IJumbleblocksLogger logger)
        {
            if (blogPostSummaryRepository == null)
                throw new ArgumentNullException("blogPostSummaryRepository");

            if (lookupRepository == null)
                throw new ArgumentNullException("lookupRepository");

            if (configurationReader == null)
                throw new ArgumentNullException("configurationReader");

            if (waneTransformer == null)
                throw new ArgumentNullException("waneTransformer");

            if (logger == null)
                throw new ArgumentNullException("logger");

            BlogPostRepository = blogPostSummaryRepository;
            LookupRepository = lookupRepository;
            ConfigurationReader = configurationReader;
            WaneTransformer = waneTransformer;
            Logger = logger;
        }