export const getKey = (name) => `$_gl_jest_${name}`;

export const getBinding = (el, name) => el[getKey(name)];

const writeBindingToElement = (el, name, { value, arg, modifiers }) => {
  el[getKey(name)] = {
    value,
    arg,
    modifiers,
  };
};

export const createMockDirective = (name) => {
  if (!name) {
    throw new Error(
      'Vue 3 no longer passes the name of the directive to its hooks, an explicit name is required',
    );
  }

  return {
    bind(el, binding) {
      writeBindingToElement(el, name, binding);
    },

    update(el, binding) {
      writeBindingToElement(el, name, binding);
    },

    unbind(el) {
      delete el[getKey(name)];
    },
  };
};