BukkitTestUtils.java

package it.fulminazzo.yagl.utils;

import lombok.NoArgsConstructor;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.mockito.MockedStatic;

import java.util.function.Consumer;

import static org.mockito.Mockito.*;

/**
 * A collection of utilities used to test the module
 */
@NoArgsConstructor
public final class BukkitTestUtils {

    /**
     * Mocks the returned value of {@link JavaPlugin#getProvidingPlugin(Class)} and executes the given function.
     *
     * @param function the function
     */
    public static void mockPlugin(final @NotNull Consumer<Plugin> function) {
        try (MockedStatic<JavaPlugin> ignored = mockStatic(JavaPlugin.class)) {
            JavaPlugin plugin = mock(JavaPlugin.class);
            when(JavaPlugin.getProvidingPlugin(any())).thenAnswer(a -> plugin);
            when(Bukkit.getPluginManager()).thenReturn(mock(PluginManager.class));

            function.accept(plugin);
        }
    }

}