Fody / Ionad

Replaces static method calls.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Doe this work for Static Method

antarr opened this issue · comments

Does Ionad work on static methods. My substitute isn't being called when running my spec.

Substitute

    [StaticReplacement(typeof(AppUtils))]
    public static class AppUtilsSubsitute
    {
        public static void LogException(string func, Exception ex) => Write("Exception", ex.ToJson());

        public static void LogError(string err) => Write("Error", err);

        public static void LogInfo(string info) => Write("Info", info);

        public static void LogWarning(string info) => Write("Warning", info);

        public static void LogCypherQuery(string func, ICypherFluentQuery query) => Write(func, query.ToJson());

        static void Write(string logType, string message)
        {
            var dictionary = new Dictionary<string, string> { { logType, message } };
            var assembly = Assembly.GetExecutingAssembly();
            using (var writer = new StreamWriter(assembly.Location + "Machine.Specifications.log"))
            {
                writer.Write(dictionary.ToJson());
            }
        }

        public static Dictionary<string, string> Log()
        {
            var assembly = Assembly.GetExecutingAssembly();
            Dictionary<string, string> content;
            using (var reader = new StreamReader(assembly.GetManifestResourceStream("Machine.Specifications.log")))
            {
                content = JsonConvert.DeserializeObject<Dictionary<string, string>>(reader.ReadToEnd());
            }
            return content;
        }
    }

Dependent Method

[AttributeUsage(AttributeTargets.Method)]
    public class EnsurePresencesOfAttribute : ActionFilterAttribute
    {
        internal virtual string Required { get; }
        internal virtual string Param { get; }
        public EnsurePresencesOfAttribute(string required = "", string param="request")
        {
            Required = required;
            Param = param;
        }

        public override void OnActionExecuting(HttpActionContext actionContext)
        {
            Dictionary<string, object> model = actionContext.ActionArguments;
            if (model == null || model.Count == 0 || !model.ContainsKey(Param))
            {
                ValueError(actionContext, $"{Param} parameter");
                return;
            }
            foreach (var requirement in Required.Split(',').Select(e => e.Trim()))
            {
                if (model[requirement] == null)
                {
                    ValueError(actionContext, requirement);
                    return;
                }
            }
            base.OnActionExecuting(actionContext);
        }

        public override Task OnActionExecutingAsync(HttpActionContext context, CancellationToken token)
        {
            Dictionary<string, object> model = context.ActionArguments;
            if(model == null || model.Count == 0 || !model.ContainsKey(Param))
            {
                ValueError(context, $"{Param} parameter");
                return Task.FromResult(0);
            }
            foreach (var requirement in Required.Split(',').Select(e => e.Trim()))
            {
                if (model[requirement] == null)
                {
                    ValueError(context, requirement);
                    Task.FromResult(0);
                }
            }
            return base.OnActionExecutingAsync(context, token);
        }

        private static void ValueError(HttpActionContext context, string requirement)
        {
            var action = context.ActionDescriptor.ActionName;
            AppUtils.LogError($"{action} Failed : Missing Required Attribute {requirement}. ");
            using (var controller = new BaseApiController { Request = new HttpRequestMessage() })
            {
                controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, new HttpConfiguration());
                context.Response = controller.InvalidInputResponse();
            }
        }
    }

yep it does support statics.