public void GetRequest_GetAllTest_NoCategories()
        {
            FakeRepository<Category> categoryFakeRepository = new FakeRepository<Category>();
            FakeRepository<User> userFakeRepository = new FakeRepository<User>();
            FakeRepository<Thread> threadFakeRepository = new FakeRepository<Thread>();

            string sessionKey = "01234567890123456789012345678901234567890123456789";

            User user = new User()
            {
                SessionKey = sessionKey
            };

            userFakeRepository.Add(user);

            CategoriesController categoriesController = new CategoriesController(
                categoryFakeRepository, userFakeRepository, threadFakeRepository);

            SetupController(categoriesController);

            var allCategories = categoriesController.GetAll(sessionKey).ToList<string>();

            int expectedCategoryCount = 0;
            Assert.AreEqual(expectedCategoryCount, allCategories.Count);
        }
        public object GetService(Type serviceType)
        {
            var dbContext = new ForumDbContext();

            if (serviceType == typeof(UsersController))
            {
                var repository = new EfRepository<User>(dbContext);
                var userController = new UsersController(repository);

                return userController;
            }
            else if (serviceType == typeof(ThreadsController))
            {
                var categoryRepository = new EfRepository<Category>(dbContext);
                var threadRepository = new EfRepository<Thread>(dbContext);
                var userRepository = new EfRepository<User>(dbContext);

                var threadController = new ThreadsController(
                    categoryRepository, threadRepository, userRepository);

                return threadController;
            }
            else if (serviceType == typeof(PostsController))
            {
                var postRepository = new EfRepository<Post>(dbContext);
                var userRepository = new EfRepository<User>(dbContext);
                var threadRepository = new EfRepository<Thread>(dbContext);
                var voteRepository = new EfRepository<Vote>(dbContext);
                var commentRepository = new EfRepository<Comment>(dbContext);

                var postsController = new PostsController(
                    postRepository, userRepository, threadRepository, voteRepository, commentRepository);

                return postsController;
            }
            else if (serviceType == typeof(CategoriesController))
            {
                var categoryRepository = new EfRepository<Category>(dbContext);
                var userRepository = new EfRepository<User>(dbContext);
                var threadRepository = new EfRepository<Thread>(dbContext);

                var categoriesController = new CategoriesController(categoryRepository, userRepository, threadRepository);

                return categoriesController;
            }
            else
            {
                return null;
            }
        }
        public void GetRequest_GetAllTest_InvalidSessionKey_NoUserWithSuchKey()
        {
            FakeRepository<Category> categoryFakeRepository = new FakeRepository<Category>();
            FakeRepository<User> userFakeRepository = new FakeRepository<User>();
            FakeRepository<Thread> threadFakeRepository = new FakeRepository<Thread>();

            string sessionKey = "01234567890123456789012345678901234567890123456789";

            Category category = new Category()
            {
                Name = "Test category"
            };

            categoryFakeRepository.entities.Add(category);

            CategoriesController categoriesController = new CategoriesController(
                categoryFakeRepository, userFakeRepository, threadFakeRepository);

            SetupController(categoriesController);

            var allCategories = categoriesController.GetAll(sessionKey).ToList<string>();
        }
        public void PostRequest_CreateCategoryTest_SuccessfulCreation()
        {
            FakeRepository<Category> categoryFakeRepository = new FakeRepository<Category>();
            FakeRepository<User> userFakeRepository = new FakeRepository<User>();
            FakeRepository<Thread> threadFakeRepository = new FakeRepository<Thread>();

            string sessionKey = "01234567890123456789012345678901234567890123456789";

            CategoryModel categoryModel = new CategoryModel()
            {
                Name = "Test category"
            };

            User user = new User()
            {
                SessionKey = sessionKey
            };

            userFakeRepository.Add(user);

            CategoriesController categoriesController = new CategoriesController(
                categoryFakeRepository, userFakeRepository, threadFakeRepository);

            SetupController(categoriesController);

            var response = categoriesController.CreateCategory(categoryModel, sessionKey);

            int expectedCategoryCount = 1;
            Assert.AreEqual(response.StatusCode, HttpStatusCode.Created);
            Assert.AreEqual(expectedCategoryCount, categoryFakeRepository.entities.Count);
        }
        public void PostRequest_CreateCategoryTest_InvalidCreation_CannotAddNullCategory()
        {
            FakeRepository<Category> categoryFakeRepository = new FakeRepository<Category>();
            FakeRepository<User> userFakeRepository = new FakeRepository<User>();
            FakeRepository<Thread> threadFakeRepository = new FakeRepository<Thread>();

            string sessionKey = "01234567890123456789012345678901234567890123456789";

            User user = new User()
            {
                SessionKey = sessionKey
            };

            userFakeRepository.Add(user);

            CategoryModel categoryModel = null;

            CategoriesController categoriesController = new CategoriesController(
                categoryFakeRepository, userFakeRepository, threadFakeRepository);

            SetupController(categoriesController);

            categoriesController.CreateCategory(categoryModel, sessionKey);
        }