mirror of
https://github.com/thomiceli/opengist.git
synced 2025-01-10 18:12:39 +00:00
262 lines
6.3 KiB
Go
262 lines
6.3 KiB
Go
|
package test
|
||
|
|
||
|
import (
|
||
|
"github.com/stretchr/testify/require"
|
||
|
"github.com/thomiceli/opengist/internal/config"
|
||
|
"github.com/thomiceli/opengist/internal/db"
|
||
|
"github.com/thomiceli/opengist/internal/git"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"strconv"
|
||
|
"testing"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func TestAdminPages(t *testing.T) {
|
||
|
s := Setup(t)
|
||
|
defer Teardown(t, s)
|
||
|
urls := []string{
|
||
|
"/admin-panel",
|
||
|
"/admin-panel/users",
|
||
|
"/admin-panel/gists",
|
||
|
"/admin-panel/invitations",
|
||
|
"/admin-panel/configuration",
|
||
|
}
|
||
|
|
||
|
for _, url := range urls {
|
||
|
err := s.Request("GET", url, nil, 404)
|
||
|
require.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
user1 := db.UserDTO{Username: "admin", Password: "admin"}
|
||
|
register(t, s, user1)
|
||
|
login(t, s, user1)
|
||
|
for _, url := range urls {
|
||
|
err := s.Request("GET", url, nil, 200)
|
||
|
require.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
user2 := db.UserDTO{Username: "nonadmin", Password: "nonadmin"}
|
||
|
register(t, s, user2)
|
||
|
login(t, s, user2)
|
||
|
for _, url := range urls {
|
||
|
err := s.Request("GET", url, nil, 404)
|
||
|
require.NoError(t, err)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestSetConfig(t *testing.T) {
|
||
|
s := Setup(t)
|
||
|
defer Teardown(t, s)
|
||
|
settings := []string{
|
||
|
db.SettingDisableSignup,
|
||
|
db.SettingRequireLogin,
|
||
|
db.SettingAllowGistsWithoutLogin,
|
||
|
db.SettingDisableLoginForm,
|
||
|
db.SettingDisableGravatar,
|
||
|
}
|
||
|
|
||
|
user1 := db.UserDTO{Username: "admin", Password: "admin"}
|
||
|
register(t, s, user1)
|
||
|
login(t, s, user1)
|
||
|
|
||
|
for _, setting := range settings {
|
||
|
val, err := db.GetSetting(setting)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, "0", val)
|
||
|
|
||
|
err = s.Request("PUT", "/admin-panel/set-config", settingSet{setting, "1"}, 200)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
val, err = db.GetSetting(setting)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, "1", val)
|
||
|
|
||
|
err = s.Request("PUT", "/admin-panel/set-config", settingSet{setting, "0"}, 200)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
val, err = db.GetSetting(setting)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, "0", val)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestPagination(t *testing.T) {
|
||
|
s := Setup(t)
|
||
|
defer Teardown(t, s)
|
||
|
|
||
|
user1 := db.UserDTO{Username: "admin", Password: "admin"}
|
||
|
register(t, s, user1)
|
||
|
for i := 0; i < 11; i++ {
|
||
|
user := db.UserDTO{Username: "user" + strconv.Itoa(i), Password: "user" + strconv.Itoa(i)}
|
||
|
register(t, s, user)
|
||
|
}
|
||
|
|
||
|
login(t, s, user1)
|
||
|
|
||
|
err := s.Request("GET", "/admin-panel/users", nil, 200)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
err = s.Request("GET", "/admin-panel/users?page=2", nil, 200)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
err = s.Request("GET", "/admin-panel/users?page=3", nil, 404)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
err = s.Request("GET", "/admin-panel/users?page=0", nil, 200)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
err = s.Request("GET", "/admin-panel/users?page=-1", nil, 200)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
err = s.Request("GET", "/admin-panel/users?page=a", nil, 200)
|
||
|
require.NoError(t, err)
|
||
|
}
|
||
|
|
||
|
func TestAdminUser(t *testing.T) {
|
||
|
s := Setup(t)
|
||
|
defer Teardown(t, s)
|
||
|
|
||
|
user1 := db.UserDTO{Username: "admin", Password: "admin"}
|
||
|
user2 := db.UserDTO{Username: "nonadmin", Password: "nonadmin"}
|
||
|
register(t, s, user1)
|
||
|
register(t, s, user2)
|
||
|
|
||
|
login(t, s, user2)
|
||
|
|
||
|
gist1 := db.GistDTO{
|
||
|
Title: "gist",
|
||
|
VisibilityDTO: db.VisibilityDTO{
|
||
|
Private: 0,
|
||
|
},
|
||
|
Name: []string{"gist1.txt"},
|
||
|
Content: []string{"yeah"},
|
||
|
}
|
||
|
err := s.Request("POST", "/", gist1, 302)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
_, err = os.Stat(filepath.Join(config.GetHomeDir(), git.ReposDirectory, user2.Username))
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
count, err := db.CountAll(db.User{})
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, int64(2), count)
|
||
|
|
||
|
login(t, s, user1)
|
||
|
|
||
|
err = s.Request("POST", "/admin-panel/users/2/delete", nil, 302)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
count, err = db.CountAll(db.User{})
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, int64(1), count)
|
||
|
|
||
|
_, err = os.Stat(filepath.Join(config.GetHomeDir(), git.ReposDirectory, user2.Username))
|
||
|
require.Error(t, err)
|
||
|
}
|
||
|
|
||
|
func TestAdminGist(t *testing.T) {
|
||
|
s := Setup(t)
|
||
|
defer Teardown(t, s)
|
||
|
|
||
|
user1 := db.UserDTO{Username: "admin", Password: "admin"}
|
||
|
register(t, s, user1)
|
||
|
login(t, s, user1)
|
||
|
|
||
|
gist1 := db.GistDTO{
|
||
|
Title: "gist",
|
||
|
VisibilityDTO: db.VisibilityDTO{
|
||
|
Private: 0,
|
||
|
},
|
||
|
Name: []string{"gist1.txt"},
|
||
|
Content: []string{"yeah"},
|
||
|
}
|
||
|
err := s.Request("POST", "/", gist1, 302)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
count, err := db.CountAll(db.Gist{})
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, int64(1), count)
|
||
|
|
||
|
gist1Db, err := db.GetGistByID("1")
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
_, err = os.Stat(filepath.Join(config.GetHomeDir(), git.ReposDirectory, user1.Username, gist1Db.Identifier()))
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
err = s.Request("POST", "/admin-panel/gists/1/delete", nil, 302)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
count, err = db.CountAll(db.Gist{})
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, int64(0), count)
|
||
|
|
||
|
_, err = os.Stat(filepath.Join(config.GetHomeDir(), git.ReposDirectory, user1.Username, gist1Db.Identifier()))
|
||
|
require.Error(t, err)
|
||
|
}
|
||
|
|
||
|
func TestAdminInvitation(t *testing.T) {
|
||
|
s := Setup(t)
|
||
|
defer Teardown(t, s)
|
||
|
|
||
|
user1 := db.UserDTO{Username: "admin", Password: "admin"}
|
||
|
register(t, s, user1)
|
||
|
login(t, s, user1)
|
||
|
|
||
|
err := s.Request("POST", "/admin-panel/invitations", invitationAdmin{
|
||
|
nbMax: "",
|
||
|
expiredAtUnix: "",
|
||
|
}, 302)
|
||
|
require.NoError(t, err)
|
||
|
invitation1, err := db.GetInvitationByID(1)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, invitation1, &db.Invitation{
|
||
|
ID: 1,
|
||
|
Code: invitation1.Code,
|
||
|
ExpiresAt: time.Now().Unix() + 604800,
|
||
|
NbUsed: 0,
|
||
|
NbMax: 10,
|
||
|
})
|
||
|
|
||
|
err = s.Request("POST", "/admin-panel/invitations", invitationAdmin{
|
||
|
nbMax: "aa",
|
||
|
expiredAtUnix: "1735722000",
|
||
|
}, 302)
|
||
|
require.NoError(t, err)
|
||
|
invitation2, err := db.GetInvitationByID(2)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, invitation2, &db.Invitation{
|
||
|
ID: 2,
|
||
|
Code: invitation2.Code,
|
||
|
ExpiresAt: time.Unix(1735722000, 0).Unix(),
|
||
|
NbUsed: 0,
|
||
|
NbMax: 10,
|
||
|
})
|
||
|
|
||
|
err = s.Request("POST", "/admin-panel/invitations", invitationAdmin{
|
||
|
nbMax: "20",
|
||
|
expiredAtUnix: "1735722000",
|
||
|
}, 302)
|
||
|
require.NoError(t, err)
|
||
|
invitation3, err := db.GetInvitationByID(3)
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, invitation3, &db.Invitation{
|
||
|
ID: 3,
|
||
|
Code: invitation3.Code,
|
||
|
ExpiresAt: time.Unix(1735722000, 0).Unix(),
|
||
|
NbUsed: 0,
|
||
|
NbMax: 20,
|
||
|
})
|
||
|
|
||
|
count, err := db.CountAll(db.Invitation{})
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, int64(3), count)
|
||
|
|
||
|
err = s.Request("POST", "/admin-panel/invitations/1/delete", nil, 302)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
count, err = db.CountAll(db.Invitation{})
|
||
|
require.NoError(t, err)
|
||
|
require.Equal(t, int64(2), count)
|
||
|
}
|