github.com/rclone/rclone@v1.66.1-0.20240517100346-7b89735ae726/fs/rc/webgui/rc_test.go (about)

     1  package webgui
     2  
     3  import (
     4  	"context"
     5  	"path/filepath"
     6  	"strings"
     7  	"testing"
     8  
     9  	"github.com/rclone/rclone/fs/rc"
    10  	"github.com/rclone/rclone/fs/rc/rcflags"
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  )
    14  
    15  const testPluginName = "rclone-test-plugin"
    16  const testPluginAuthor = "rclone"
    17  const testPluginKey = testPluginAuthor + "/" + testPluginName
    18  const testPluginURL = "https://github.com/" + testPluginAuthor + "/" + testPluginName + "/"
    19  
    20  func init() {
    21  	rcflags.Opt.WebUI = true
    22  }
    23  
    24  func setCacheDir(t *testing.T) {
    25  	cacheDir := t.TempDir()
    26  	PluginsPath = filepath.Join(cacheDir, "plugins")
    27  	pluginsConfigPath = filepath.Join(cacheDir, "config")
    28  
    29  	loadedPlugins = newPlugins(availablePluginsJSONPath)
    30  	err := loadedPlugins.readFromFile()
    31  	assert.Nil(t, err)
    32  }
    33  
    34  func addPlugin(t *testing.T) {
    35  	addPlugin := rc.Calls.Get("pluginsctl/addPlugin")
    36  	assert.NotNil(t, addPlugin)
    37  	in := rc.Params{
    38  		"url": testPluginURL,
    39  	}
    40  	out, err := addPlugin.Fn(context.Background(), in)
    41  	if err != nil && strings.Contains(err.Error(), "bad HTTP status") {
    42  		t.Skipf("skipping test as plugin download failed: %v", err)
    43  	}
    44  	require.Nil(t, err)
    45  	assert.Nil(t, out)
    46  
    47  }
    48  
    49  func removePlugin(t *testing.T) {
    50  	addPlugin := rc.Calls.Get("pluginsctl/removePlugin")
    51  	assert.NotNil(t, addPlugin)
    52  
    53  	in := rc.Params{
    54  		"name": testPluginKey,
    55  	}
    56  	out, err := addPlugin.Fn(context.Background(), in)
    57  	assert.NotNil(t, err)
    58  	assert.Nil(t, out)
    59  }
    60  
    61  //func TestListTestPlugins(t *testing.T) {
    62  //	addPlugin := rc.Calls.Get("pluginsctl/listTestPlugins")
    63  //	assert.NotNil(t, addPlugin)
    64  //	in := rc.Params{}
    65  //	out, err := addPlugin.Fn(context.Background(), in)
    66  //	assert.Nil(t, err)
    67  //	expected := rc.Params{
    68  //		"loadedTestPlugins": map[string]PackageJSON{},
    69  //	}
    70  //	assert.Equal(t, expected, out)
    71  //}
    72  
    73  //func TestRemoveTestPlugin(t *testing.T) {
    74  //	addPlugin := rc.Calls.Get("pluginsctl/removeTestPlugin")
    75  //	assert.NotNil(t, addPlugin)
    76  //	in := rc.Params{
    77  //		"name": "",
    78  //	}
    79  //	out, err := addPlugin.Fn(context.Background(), in)
    80  //	assert.NotNil(t, err)
    81  //	assert.Nil(t, out)
    82  //}
    83  
    84  func TestAddPlugin(t *testing.T) {
    85  	setCacheDir(t)
    86  
    87  	addPlugin(t)
    88  	_, ok := loadedPlugins.LoadedPlugins[testPluginKey]
    89  	assert.True(t, ok)
    90  
    91  	//removePlugin(t)
    92  	//_, ok = loadedPlugins.LoadedPlugins[testPluginKey]
    93  	//assert.False(t, ok)
    94  }
    95  
    96  func TestListPlugins(t *testing.T) {
    97  	setCacheDir(t)
    98  
    99  	addPlugin := rc.Calls.Get("pluginsctl/listPlugins")
   100  	assert.NotNil(t, addPlugin)
   101  	in := rc.Params{}
   102  	out, err := addPlugin.Fn(context.Background(), in)
   103  	assert.Nil(t, err)
   104  	expected := rc.Params{
   105  		"loadedPlugins":     map[string]PackageJSON{},
   106  		"loadedTestPlugins": map[string]PackageJSON{},
   107  	}
   108  	assert.Equal(t, expected, out)
   109  }
   110  
   111  func TestRemovePlugin(t *testing.T) {
   112  	setCacheDir(t)
   113  
   114  	addPlugin(t)
   115  	removePluginCall := rc.Calls.Get("pluginsctl/removePlugin")
   116  	assert.NotNil(t, removePlugin)
   117  
   118  	in := rc.Params{
   119  		"name": testPluginKey,
   120  	}
   121  	out, err := removePluginCall.Fn(context.Background(), in)
   122  	assert.Nil(t, err)
   123  	assert.Nil(t, out)
   124  	removePlugin(t)
   125  	assert.Equal(t, len(loadedPlugins.LoadedPlugins), 0)
   126  
   127  }
   128  
   129  func TestPluginsForType(t *testing.T) {
   130  	addPlugin := rc.Calls.Get("pluginsctl/getPluginsForType")
   131  	assert.NotNil(t, addPlugin)
   132  	in := rc.Params{
   133  		"type":       "",
   134  		"pluginType": "FileHandler",
   135  	}
   136  	out, err := addPlugin.Fn(context.Background(), in)
   137  	assert.Nil(t, err)
   138  	assert.NotNil(t, out)
   139  
   140  	in = rc.Params{
   141  		"type":       "video/mp4",
   142  		"pluginType": "",
   143  	}
   144  	_, err = addPlugin.Fn(context.Background(), in)
   145  	assert.Nil(t, err)
   146  	assert.NotNil(t, out)
   147  }