Improve test suite (#628)
Signed-off-by: Thomas Miceli <tho.miceli@gmail.com>
This commit is contained in:
102
internal/web/handlers/gist/fork_test.go
Normal file
102
internal/web/handlers/gist/fork_test.go
Normal file
@@ -0,0 +1,102 @@
|
||||
package gist_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/thomiceli/opengist/internal/db"
|
||||
webtest "github.com/thomiceli/opengist/internal/web/test"
|
||||
)
|
||||
|
||||
func TestFork(t *testing.T) {
|
||||
s := webtest.Setup(t)
|
||||
defer webtest.Teardown(t)
|
||||
|
||||
s.Register(t, "thomas")
|
||||
s.Register(t, "alice")
|
||||
|
||||
t.Run("Fork", func(t *testing.T) {
|
||||
_, gist, username, identifier := s.CreateGist(t, "0")
|
||||
s.Login(t, "alice")
|
||||
|
||||
resp := s.Request(t, "POST", "/"+username+"/"+identifier+"/fork", nil, 302)
|
||||
|
||||
forkedGist, err := db.GetGistByID("2")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, "alice", forkedGist.User.Username)
|
||||
require.Equal(t, gist.Title, forkedGist.Title)
|
||||
require.Equal(t, gist.Description, forkedGist.Description)
|
||||
require.Equal(t, gist.Private, forkedGist.Private)
|
||||
require.Equal(t, gist.ID, forkedGist.ForkedID)
|
||||
|
||||
forkedFiles, err := forkedGist.Files("HEAD", false)
|
||||
require.NoError(t, err)
|
||||
|
||||
gistFiles, err := gist.Files("HEAD", false)
|
||||
require.NoError(t, err)
|
||||
|
||||
for i, file := range gistFiles {
|
||||
require.Equal(t, file.Filename, forkedFiles[i].Filename)
|
||||
require.Equal(t, file.Content, forkedFiles[i].Content)
|
||||
}
|
||||
|
||||
require.Equal(t, "/alice/"+forkedGist.Identifier(), resp.Header.Get("Location"))
|
||||
|
||||
original, err := db.GetGistByID("1")
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 1, original.NbForks)
|
||||
|
||||
forks, err := original.GetForks(2, 0)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, forks, 1)
|
||||
require.Equal(t, forkedGist.ID, forks[0].ID)
|
||||
|
||||
forkedGists, err := db.GetAllGistsForkedByUser(2, 2, 0, "created", "asc")
|
||||
require.NoError(t, err)
|
||||
require.Len(t, forkedGists, 1)
|
||||
require.Equal(t, forkedGist.ID, forkedGists[0].ID)
|
||||
})
|
||||
|
||||
t.Run("OwnGist", func(t *testing.T) {
|
||||
_, _, username, identifier := s.CreateGist(t, "0")
|
||||
s.Login(t, "thomas")
|
||||
|
||||
s.Request(t, "POST", "/"+username+"/"+identifier+"/fork", nil, 302)
|
||||
|
||||
original, err := db.GetGist(username, identifier)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 0, original.NbForks)
|
||||
})
|
||||
|
||||
t.Run("AlreadyForked", func(t *testing.T) {
|
||||
_, _, username, identifier := s.CreateGist(t, "0")
|
||||
s.Login(t, "alice")
|
||||
|
||||
firstResp := s.Request(t, "POST", "/"+username+"/"+identifier+"/fork", nil, 302)
|
||||
forkLocation := firstResp.Header.Get("Location")
|
||||
|
||||
secondResp := s.Request(t, "POST", "/"+username+"/"+identifier+"/fork", nil, 302)
|
||||
require.Equal(t, forkLocation, secondResp.Header.Get("Location"))
|
||||
|
||||
original, err := db.GetGist(username, identifier)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 1, original.NbForks)
|
||||
})
|
||||
|
||||
t.Run("NoAuth", func(t *testing.T) {
|
||||
_, _, username, identifier := s.CreateGist(t, "0")
|
||||
|
||||
s.Request(t, "POST", "/"+username+"/"+identifier+"/fork", nil, 302)
|
||||
|
||||
original, err := db.GetGist(username, identifier)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 0, original.NbForks)
|
||||
})
|
||||
|
||||
t.Run("PrivateGist", func(t *testing.T) {
|
||||
_, _, username, identifier := s.CreateGist(t, "2")
|
||||
s.Login(t, "alice")
|
||||
|
||||
s.Request(t, "POST", "/"+username+"/"+identifier+"/fork", nil, 404)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user