mirror of
https://codeberg.org/crowci/crow.git
synced 2025-04-19 15:22:22 +03:00
- `mockery` can now be run in one call instead of multiple ones - Use the recommended "packages" approach which will be the new default moving forward - Enforce consistent naming of mock files - Remove warnings when invoking `mockery` - Get rid of *many* linter warnings 🎉️ Reviewed-on: https://codeberg.org/crowci/crow/pulls/38 Co-authored-by: pat-s <patrick.schratz@gmail.com> Co-committed-by: pat-s <patrick.schratz@gmail.com>
101 lines
3.6 KiB
Go
101 lines
3.6 KiB
Go
package api_test
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"testing"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/mock"
|
|
|
|
"codeberg.org/crowci/crow/v3/server"
|
|
"codeberg.org/crowci/crow/v3/server/api"
|
|
forge_mocks "codeberg.org/crowci/crow/v3/server/forge/mocks"
|
|
"codeberg.org/crowci/crow/v3/server/model"
|
|
mocks_config_service "codeberg.org/crowci/crow/v3/server/services/config/mocks"
|
|
mocks_services "codeberg.org/crowci/crow/v3/server/services/mocks"
|
|
"codeberg.org/crowci/crow/v3/server/services/permissions"
|
|
mocks_registry_service "codeberg.org/crowci/crow/v3/server/services/registry/mocks"
|
|
mocks_secret_service "codeberg.org/crowci/crow/v3/server/services/secret/mocks"
|
|
store_mocks "codeberg.org/crowci/crow/v3/server/store/mocks"
|
|
"codeberg.org/crowci/crow/v3/shared/token"
|
|
)
|
|
|
|
func TestHook(t *testing.T) {
|
|
gin.SetMode(gin.TestMode)
|
|
|
|
// _manager := new(mocks_services.MockManager)
|
|
_manager := new(mocks_services.MockManager)
|
|
_forge := new(forge_mocks.MockForge)
|
|
_store := new(store_mocks.MockStore)
|
|
// _configService := mocks_config_service.NewService(t)
|
|
_configService := new(mocks_config_service.MockService)
|
|
// _secretService := mocks_secret_service.NewService(t)
|
|
_secretService := new(mocks_secret_service.MockService)
|
|
// _registryService := mocks_registry_service.NewService(t)
|
|
_registryService := new(mocks_registry_service.MockService)
|
|
server.Config.Services.Manager = _manager
|
|
server.Config.Permissions.Open = true
|
|
server.Config.Permissions.Orgs = permissions.NewOrgs(nil)
|
|
server.Config.Permissions.Admins = permissions.NewAdmins(nil)
|
|
w := httptest.NewRecorder()
|
|
c, _ := gin.CreateTestContext(w)
|
|
c.Set("store", _store)
|
|
user := &model.User{
|
|
ID: 123,
|
|
}
|
|
repo := &model.Repo{
|
|
ID: 123,
|
|
ForgeRemoteID: "123",
|
|
Owner: "owner",
|
|
Name: "name",
|
|
IsActive: true,
|
|
UserID: user.ID,
|
|
Hash: "secret-123-this-is-a-secret",
|
|
}
|
|
pipeline := &model.Pipeline{
|
|
ID: 123,
|
|
RepoID: repo.ID,
|
|
Event: model.EventPush,
|
|
}
|
|
|
|
repoToken := token.New(token.HookToken)
|
|
repoToken.Set("repo-id", fmt.Sprintf("%d", repo.ID))
|
|
signedToken, err := repoToken.Sign("secret-123-this-is-a-secret")
|
|
assert.NoError(t, err)
|
|
|
|
header := http.Header{}
|
|
header.Set("Authorization", fmt.Sprintf("Bearer %s", signedToken))
|
|
c.Request = &http.Request{
|
|
Header: header,
|
|
URL: &url.URL{
|
|
Scheme: "https",
|
|
},
|
|
}
|
|
|
|
_manager.On("ForgeFromRepo", repo).Return(_forge, nil)
|
|
_forge.On("Hook", mock.Anything, mock.Anything).Return(repo, pipeline, nil)
|
|
_store.On("GetRepo", repo.ID).Return(repo, nil)
|
|
_store.On("GetUser", user.ID).Return(user, nil)
|
|
_store.On("UpdateRepo", repo).Return(nil)
|
|
_store.On("CreatePipeline", mock.Anything).Return(nil)
|
|
_manager.On("ConfigServiceFromRepo", repo).Return(_configService)
|
|
_configService.On("Fetch", mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything).Return(nil, nil)
|
|
_forge.On("Netrc", mock.Anything, mock.Anything).Return(&model.Netrc{}, nil)
|
|
_store.On("GetPipelineLastBefore", mock.Anything, mock.Anything, mock.Anything).Return(nil, nil)
|
|
_manager.On("SecretServiceFromRepo", repo).Return(_secretService)
|
|
_secretService.On("SecretListPipeline", repo, mock.Anything, mock.Anything).Return(nil, nil)
|
|
_manager.On("RegistryServiceFromRepo", repo).Return(_registryService)
|
|
_registryService.On("RegistryListPipeline", repo, mock.Anything).Return(nil, nil)
|
|
_manager.On("EnvironmentService").Return(nil)
|
|
_store.On("DeletePipeline", mock.Anything).Return(nil)
|
|
|
|
api.PostHook(c)
|
|
|
|
assert.Equal(t, http.StatusNoContent, c.Writer.Status())
|
|
assert.Equal(t, "true", w.Header().Get("Pipeline-Filtered"))
|
|
}
|