Files
filestash/server/model/share_test.go
2019-01-28 01:09:45 +11:00

160 lines
3.4 KiB
Go

package model
import (
"testing"
. "github.com/mickael-kerjean/filestash/server/common"
"github.com/stretchr/testify/assert"
)
var shareObj = Share{
Backend: "foo",
Id: "foo",
Path: "/var/www/",
Password: NewString("password"),
Users: nil,
CanRead: true,
CanManageOwn: true,
CanShare: true,
Expire: func() *int64{
a := int64(1537759505787)
return &a
}(),
}
//////////////////////////////////////////////
//// UPSERT
func TestShareSimpleUpsert(t *testing.T) {
err := ShareUpsert(&shareObj);
assert.NoError(t, err)
}
func TestShareMultipleUpsert(t *testing.T) {
err := ShareUpsert(&shareObj);
assert.NoError(t, err)
err = ShareUpsert(&shareObj);
assert.NoError(t, err)
_, err = ShareGet(shareObj.Id)
assert.NoError(t, err)
}
func TestShareUpsertIsProperlyInserted(t *testing.T) {
err := ShareUpsert(&shareObj);
assert.NoError(t, err)
var obj Share
obj.Id = "foo"
obj, err = ShareGet(obj.Id)
assert.NoError(t, err)
assert.NotNil(t, obj.Password)
}
//////////////////////////////////////////////
//// get
func TestShareGetNonExisting(t *testing.T) {
var s Share = shareObj
s.Id = "nothing"
_, err := ShareGet(s.Id);
assert.Error(t, err, "Shouldn't be able to get something that doesn't exist yet")
}
func TestShareGetExisting(t *testing.T) {
err := ShareUpsert(&shareObj);
assert.NoError(t, err, "Upsert issue")
_, err = ShareGet(shareObj.Id);
assert.NoError(t, err)
}
func TestShareGetExistingMakeSureDataIsOk(t *testing.T) {
err := ShareUpsert(&shareObj);
assert.NoError(t, err, "Upsert issue")
var obj Share
obj.Id = "foo"
obj.Backend = shareObj.Backend
obj, err = ShareGet(obj.Id);
assert.NoError(t, err)
assert.Equal(t, "foo", obj.Id)
assert.Equal(t, "/var/www/", obj.Path)
assert.Equal(t, true, obj.CanManageOwn)
assert.Equal(t, true, obj.CanShare)
assert.Equal(t, true, obj.CanRead)
assert.Equal(t, false, obj.CanWrite)
assert.Equal(t, false, obj.CanUpload)
assert.Equal(t, "foo", obj.Backend)
assert.Equal(t, shareObj.Expire, obj.Expire)
}
//////////////////////////////////////////////
//// LIST
func TestShareListAll(t *testing.T) {
// Initialise test
err := ShareUpsert(&shareObj);
assert.NoError(t, err, "Upsert issue")
// Actual test
list, err := ShareList(shareObj.Backend, shareObj.Path)
assert.NoError(t, err)
assert.Len(t, list, 1)
assert.NotNil(t, list[0].Password)
}
//////////////////////////////////////////////
//// DELETE
func TestShareDeleteShares(t *testing.T) {
// Initialise test
err := ShareUpsert(&shareObj);
assert.NoError(t, err, "Upsert issue")
shareObj, err = ShareGet(shareObj.Id)
assert.NoError(t, err)
// Actual Test
err = ShareDelete(shareObj.Id);
assert.NoError(t, err)
_, err = ShareGet(shareObj.Id)
assert.Error(t, err)
}
//////////////////////////////////////////////
//// PROOF
func TestShareVerifyEquivalence(t *testing.T) {
p1 := Proof {
Key: "password",
Value: "I'm something random",
}
p2 := Proof {
Key: p1.Key,
Id: "hash",
}
res := shareProofAreEquivalent(p1, p2)
assert.Equal(t, false, res)
p2.Id = Hash(p1.Key + "::" + p1.Value)
res = shareProofAreEquivalent(p1, p2)
assert.Equal(t, true, res)
p2.Key = "email"
res = shareProofAreEquivalent(p1, p2)
assert.Equal(t, false, res)
p1.Key = "email"
p1.Value = "test@gmail.com,polo@gmail.com,jean@gmail.com"
p2.Key = "email"
p2.Id = Hash(p1.Key + "::" + "polo@gmail.com")
res = shareProofAreEquivalent(p1, p2)
assert.Equal(t, true, res)
}