web/editor/editor_test.go
Rama master · réplica de lectura del repositorio original.
package editor
import (
"testing"
"time"
"github.com/cozy/cozy-stack/model/instance"
"github.com/cozy/cozy-stack/model/permission"
"github.com/cozy/cozy-stack/model/vfs"
"github.com/cozy/cozy-stack/pkg/config/config"
"github.com/cozy/cozy-stack/pkg/consts"
"github.com/cozy/cozy-stack/tests/testutils"
"github.com/cozy/cozy-stack/web/errors"
"github.com/gavv/httpexpect/v2"
"github.com/labstack/echo/v4"
"github.com/stretchr/testify/require"
)
func TestReadOnlyForSharedOpen(t *testing.T) {
filesReadOnly := &permission.Permission{
Permissions: permission.Set{
{
Type: consts.Files,
Verbs: permission.VerbSet{permission.GET: struct{}{}},
},
},
}
filesWritable := &permission.Permission{
Permissions: permission.Set{
{
Type: consts.Files,
Verbs: permission.VerbSet{permission.GET: struct{}{}, permission.PATCH: struct{}{}},
},
},
}
filesAllVerbs := &permission.Permission{
Permissions: permission.Set{
{
Type: consts.Files,
},
},
}
require.True(t, readOnlyForSharedOpen(filesReadOnly, false))
require.False(t, readOnlyForSharedOpen(filesWritable, false))
require.False(t, readOnlyForSharedOpen(filesAllVerbs, false))
require.True(t, readOnlyForSharedOpen(filesWritable, true))
}
func TestEditor(t *testing.T) {
if testing.Short() {
t.Skip("an instance is required for this test: test skipped due to the use of --short flag")
}
config.UseTestFile(t)
testutils.NeedCouchdb(t)
setup := testutils.NewSetup(t, t.Name())
inst := setup.GetTestInstance()
_, token := setup.GetTestClient(consts.Files)
fileID := createEditorFile(t, inst, "drawing.excalidraw", "application/json", "application")
ts := setup.GetTestServer("/editor", Routes)
ts.Config.Handler.(*echo.Echo).HTTPErrorHandler = errors.ErrorHandler
t.Cleanup(ts.Close)
t.Run("OpenLocal", func(t *testing.T) {
e := testutils.CreateTestClient(t, ts.URL)
obj := e.GET("/editor/"+fileID+"/open").
WithHeader("Authorization", "Bearer "+token).
Expect().Status(200).
JSON(httpexpect.ContentOpts{MediaType: "application/vnd.api+json"}).
Object()
data := obj.Value("data").Object()
data.ValueEqual("type", consts.Files)
data.ValueEqual("id", fileID)
attrs := data.Value("attributes").Object()
attrs.ValueEqual("file_id", fileID)
attrs.ValueEqual("instance", inst.Domain)
attrs.Value("protocol").String().Contains("http")
attrs.Value("subdomain").String().NotEmpty()
attrs.Value("public_name").String().NotEmpty()
})
t.Run("OpenPlainFile", func(t *testing.T) {
e := testutils.CreateTestClient(t, ts.URL)
plainID := createEditorFile(t, inst, "notes.txt", "text/plain", "text")
obj := e.GET("/editor/"+plainID+"/open").
WithHeader("Authorization", "Bearer "+token).
Expect().Status(200).
JSON(httpexpect.ContentOpts{MediaType: "application/vnd.api+json"}).
Object()
obj.Path("$.data.attributes.file_id").String().IsEqual(plainID)
})
}
func createEditorFile(t *testing.T, inst *instance.Instance, name, mime, class string) string {
filedoc, err := vfs.NewFileDoc(name, consts.RootDirID, -1, nil,
mime, class, time.Now(), false, false, false, nil)
require.NoError(t, err)
f, err := inst.VFS().CreateFile(filedoc, nil)
require.NoError(t, err)
require.NoError(t, f.Close())
return filedoc.ID()
}