module Scrivito module CmsTestRequest def for_cms_object(test_obj=nil) # prepare the env as if the given obj was loaded by CmsEnv env[Scrivito::CmsEnv::OBJ_ENV_KEY] = test_obj if test_obj class << self # This special behaviour is necessary for testing controllers that descend from DefaultCmsController. # These controllers do not have explicit routes by default. # Instead, they are reached via the CmsDispatchController. # The TestRequest must therefore use CmsDispatchController as a fallback route. def assign_parameters(routes, controller_path, action, parameters = {}) super(routes, controller_path, action, parameters) rescue ActionController::RoutingError, AbstractController::ActionNotFound => e begin super(routes, "scrivito/cms_dispatch", action, parameters) rescue ActionController::RoutingError, AbstractController::ActionNotFound raise e end end end end end end