3
0

Fix system integration tests

This commit is contained in:
Denis Arh
2020-09-08 14:51:27 +02:00
parent be76207e50
commit 875b08f1df
8 changed files with 457 additions and 411 deletions
+2 -2
View File
@@ -77,7 +77,7 @@ func (svc accessControl) CanCreateApplication(ctx context.Context) bool {
}
func (svc accessControl) CanAssignReminder(ctx context.Context) bool {
return svc.can(ctx, types.SystemPermissionResource, "store.assign")
return svc.can(ctx, types.SystemPermissionResource, "reminder.assign")
}
func (svc accessControl) CanReadRole(ctx context.Context, rl *types.Role) bool {
@@ -225,7 +225,7 @@ func (svc accessControl) Whitelist() permissions.Whitelist {
"role.create",
"user.create",
"application.create",
"store.assign",
"reminder.assign",
)
wl.Set(
+11 -3
View File
@@ -107,6 +107,11 @@ func (svc *application) Create(ctx context.Context, new *types.Application) (app
// Set new values after beforeCreate events are emitted
new.ID = nextID()
new.CreatedAt = now()
if new.Unify == nil {
new.Unify = &types.ApplicationUnify{}
}
if err = svc.store.CreateApplication(ctx, new); err != nil {
return
}
@@ -147,9 +152,12 @@ func (svc *application) Update(ctx context.Context, upd *types.Application) (app
// Assign changed values after afterUpdate events are emitted
app.Name = upd.Name
app.Enabled = upd.Enabled
app.Unify = upd.Unify
app.UpdatedAt = nowPtr()
if upd.Unify != nil {
app.Unify = upd.Unify
}
if err = svc.store.UpdateApplication(ctx, app); err != nil {
return err
}
@@ -187,7 +195,7 @@ func (svc *application) Delete(ctx context.Context, ID uint64) (err error) {
}
app.DeletedAt = nowPtr()
if err = svc.store.PartialApplicationUpdate(ctx, []string{"UpdatedAt"}, app); err != nil {
if err = svc.store.UpdateApplication(ctx, app); err != nil {
return
}
@@ -225,7 +233,7 @@ func (svc *application) Undelete(ctx context.Context, ID uint64) (err error) {
// }
app.DeletedAt = nil
if err = svc.store.PartialApplicationUpdate(ctx, []string{"UpdatedAt"}, app); err != nil {
if err = svc.store.UpdateApplication(ctx, app); err != nil {
return
}
+1 -1
View File
@@ -669,7 +669,7 @@ func (svc auth) SetPasswordCredentials(ctx context.Context, userID uint64, passw
})
// Do a partial update and soft-delete all
if err = svc.store.PartialCredentialsUpdate(ctx, []string{"deleted_at"}, cc...); err != nil {
if err = svc.store.UpdateCredentials(ctx, cc...); err != nil {
return
}
-3
View File
@@ -5,7 +5,6 @@ import (
"fmt"
"github.com/cortezaproject/corteza-server/pkg/id"
"github.com/cortezaproject/corteza-server/store/sqlite"
"github.com/davecgh/go-spew/spew"
"github.com/markbates/goth"
"github.com/stretchr/testify/require"
"go.uber.org/zap"
@@ -105,8 +104,6 @@ func TestAuth_External(t *testing.T) {
}
)
_ = spew.Dump
svc := makeMockAuthService()
svc.settings.Auth.External.Enabled = true
req.NoError(svc.store.TruncateUsers(ctx))
+183 -160
View File
@@ -1,162 +1,185 @@
package system
//
//import (
// "context"
// "fmt"
// "net/http"
// "testing"
//
// jsonpath "github.com/steinfletcher/apitest-jsonpath"
//
// "github.com/cortezaproject/corteza-server/system/repository"
// "github.com/cortezaproject/corteza-server/system/types"
// "github.com/cortezaproject/corteza-server/tests/helpers"
//)
//
//func (h helper) repoApplication() repository.ApplicationRepository {
// return repository.Application(context.Background(), db())
//}
//
//func (h helper) repoMakeApplication(name string) *types.Application {
// a, err := h.
// repoApplication().
// Create(&types.Application{Name: name})
// h.a.NoError(err)
//
// return a
//}
//
//func TestApplicationRead(t *testing.T) {
// h := newHelper(t)
//
// a := h.repoMakeApplication("one-app")
//
// h.apiInit().
// Get(fmt.Sprintf("/application/%d", a.ID)).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertNoErrors).
// Assert(jsonpath.Equal(`$.response.name`, a.Name)).
// Assert(jsonpath.Equal(`$.response.applicationID`, fmt.Sprintf("%d", a.ID))).
// End()
//}
//
//func TestApplicationList(t *testing.T) {
// h := newHelper(t)
//
// h.repoMakeApplication("app")
// h.repoMakeApplication("app")
//
// h.apiInit().
// Get("/application/").
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertNoErrors).
// End()
//}
//
//func TestApplicationList_filterForbiden(t *testing.T) {
// h := newHelper(t)
//
// h.repoMakeApplication("app")
// f := h.repoMakeApplication("app_forbiden")
//
// h.deny(types.ApplicationPermissionResource.AppendID(f.ID), "read")
//
// h.apiInit().
// Get("/application/").
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertNoErrors).
// Assert(jsonpath.NotPresent(`$.response.set[? @.name=="app_forbiden"]`)).
// End()
//}
//
//func TestApplicationCreateForbidden(t *testing.T) {
// h := newHelper(t)
//
// h.apiInit().
// Post("/application/").
// FormData("name", "my-app").
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertError("not allowed to create applications")).
// End()
//}
//
//func TestApplicationCreate(t *testing.T) {
// h := newHelper(t)
// h.allow(types.SystemPermissionResource, "application.create")
//
// h.apiInit().
// Post("/application/").
// FormData("name", "my-app").
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertNoErrors).
// End()
//}
//
//func TestApplicationUpdateForbidden(t *testing.T) {
// h := newHelper(t)
// a := h.repoMakeApplication("one-app")
//
// h.apiInit().
// Put(fmt.Sprintf("/application/%d", a.ID)).
// FormData("name", "changed-name").
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertError("not allowed to update this application")).
// End()
//}
//
//func TestApplicationUpdate(t *testing.T) {
// h := newHelper(t)
// a := h.repoMakeApplication("one-app")
// h.allow(types.ApplicationPermissionResource.AppendWildcard(), "update")
//
// h.apiInit().
// Put(fmt.Sprintf("/application/%d", a.ID)).
// FormData("name", "changed-name").
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertNoErrors).
// End()
//
// a, err := h.repoApplication().FindByID(a.ID)
// h.a.NoError(err)
// h.a.NotNil(a)
// h.a.Equal("changed-name", a.Name)
//}
//
//func TestApplicationDeleteForbidden(t *testing.T) {
// h := newHelper(t)
// a := h.repoMakeApplication("one-app")
//
// h.apiInit().
// Delete(fmt.Sprintf("/application/%d", a.ID)).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertError("not allowed to delete this application")).
// End()
//}
//
//func TestApplicationDelete(t *testing.T) {
// h := newHelper(t)
// h.allow(types.ApplicationPermissionResource.AppendWildcard(), "delete")
//
// a := h.repoMakeApplication("one-app")
//
// h.apiInit().
// Delete(fmt.Sprintf("/application/%d", a.ID)).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertNoErrors).
// End()
//
// a, err := h.repoApplication().FindByID(a.ID)
// h.a.NoError(err)
// h.a.NotNil(a)
// h.a.NotNil(a.DeletedAt)
//}
import (
"context"
"fmt"
"github.com/cortezaproject/corteza-server/pkg/id"
"github.com/cortezaproject/corteza-server/store"
"github.com/cortezaproject/corteza-server/system/service"
"github.com/cortezaproject/corteza-server/system/types"
"github.com/cortezaproject/corteza-server/tests/helpers"
"github.com/steinfletcher/apitest-jsonpath"
"net/http"
"testing"
"time"
)
func (h helper) clearApplications() {
h.noError(store.TruncateApplications(context.Background(), service.DefaultNgStore))
}
func (h helper) repoMakeApplication(ss ...string) *types.Application {
var res = &types.Application{
ID: id.Next(),
CreatedAt: time.Now(),
Unify: &types.ApplicationUnify{},
}
if len(ss) > 0 {
res.Name = ss[0]
} else {
res.Name = "n_" + rs()
}
h.a.NoError(store.CreateApplication(context.Background(), service.DefaultNgStore, res))
return res
}
func (h helper) lookupApplicationByID(ID uint64) *types.Application {
res, err := store.LookupApplicationByID(context.Background(), service.DefaultNgStore, ID)
h.noError(err)
return res
}
func TestApplicationRead(t *testing.T) {
h := newHelper(t)
u := h.repoMakeApplication()
h.apiInit().
Get(fmt.Sprintf("/application/%d", u.ID)).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
Assert(jsonpath.Equal(`$.response.name`, u.Name)).
Assert(jsonpath.Equal(`$.response.applicationID`, fmt.Sprintf("%d", u.ID))).
End()
}
func TestApplicationList(t *testing.T) {
h := newHelper(t)
h.repoMakeApplication(h.randEmail())
h.repoMakeApplication(h.randEmail())
h.apiInit().
Get("/application/").
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
End()
}
func TestApplicationList_filterForbidden(t *testing.T) {
h := newHelper(t)
// @todo this can be a problematic test because it leaves
// behind applications that are not denied this context
// db purge might be needed
h.repoMakeApplication("application")
f := h.repoMakeApplication()
h.deny(types.ApplicationPermissionResource.AppendID(f.ID), "read")
h.apiInit().
Get("/application/").
Query("name", f.Name).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
Assert(jsonpath.NotPresent(fmt.Sprintf(`$.response.set[? @.name=="%s"]`, f.Name))).
End()
}
func TestApplicationCreateForbidden(t *testing.T) {
h := newHelper(t)
h.apiInit().
Post("/application/").
FormData("name", rs()).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertError("not allowed to create applications")).
End()
}
func TestApplicationCreate(t *testing.T) {
h := newHelper(t)
h.allow(types.SystemPermissionResource, "application.create")
h.apiInit().
Post("/application/").
FormData("name", rs()).
FormData("handle", "handle_"+rs()).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
End()
}
func TestApplicationUpdateForbidden(t *testing.T) {
h := newHelper(t)
u := h.repoMakeApplication()
h.apiInit().
Put(fmt.Sprintf("/application/%d", u.ID)).
FormData("email", h.randEmail()).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertError("not allowed to update this application")).
End()
}
func TestApplicationUpdate(t *testing.T) {
h := newHelper(t)
res := h.repoMakeApplication()
h.allow(types.ApplicationPermissionResource.AppendWildcard(), "update")
newName := "updated-" + rs()
newHandle := "updated-" + rs()
h.apiInit().
Put(fmt.Sprintf("/application/%d", res.ID)).
FormData("name", newName).
FormData("handle", newHandle).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
End()
res = h.lookupApplicationByID(res.ID)
h.a.NotNil(res)
h.a.Equal(newName, res.Name)
}
func TestApplicationDeleteForbidden(t *testing.T) {
h := newHelper(t)
u := h.repoMakeApplication()
h.apiInit().
Delete(fmt.Sprintf("/application/%d", u.ID)).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertError("not allowed to delete this application")).
End()
}
func TestApplicationDelete(t *testing.T) {
h := newHelper(t)
h.allow(types.ApplicationPermissionResource.AppendWildcard(), "delete")
res := h.repoMakeApplication()
h.apiInit().
Delete(fmt.Sprintf("/application/%d", res.ID)).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
End()
res = h.lookupApplicationByID(res.ID)
h.a.NotNil(res)
h.a.NotNil(res.DeletedAt)
}
+10
View File
@@ -2,6 +2,7 @@ package system
import (
"context"
"errors"
"github.com/cortezaproject/corteza-server/app"
"github.com/cortezaproject/corteza-server/pkg/api"
"github.com/cortezaproject/corteza-server/pkg/auth"
@@ -156,3 +157,12 @@ func (h helper) allow(r permissions.Resource, o permissions.Operation) {
func (h helper) deny(r permissions.Resource, o permissions.Operation) {
h.mockPermissions(permissions.DenyRule(h.roleID, r, o))
}
// Unwraps error before it passes it to the tester
func (h helper) noError(err error) {
for errors.Unwrap(err) != nil {
err = errors.Unwrap(err)
}
h.a.NoError(err)
}
+214 -209
View File
@@ -1,211 +1,216 @@
package system
//
//import (
// "context"
// "fmt"
// "net/http"
// "testing"
//
// jsonpath "github.com/steinfletcher/apitest-jsonpath"
//
// "github.com/cortezaproject/corteza-server/system/repository"
// "github.com/cortezaproject/corteza-server/system/types"
// "github.com/cortezaproject/corteza-server/tests/helpers"
//)
//
//func (h helper) repoRole() repository.RoleRepository {
// return repository.Role(context.Background(), db())
//}
//
//func (h helper) repoMakeRole(ss ...string) *types.Role {
// var r = &types.Role{}
// if len(ss) > 1 {
// r.Handle = ss[1]
// } else {
// r.Handle = "h_" + rs()
//
// }
// if len(ss) > 0 {
// r.Name = ss[0]
// } else {
// r.Name = "n_" + rs()
// }
//
// r, err := h.
// repoRole().
// Create(r)
// h.a.NoError(err)
//
// return r
//}
//
//func TestRoleRead(t *testing.T) {
// h := newHelper(t)
//
// u := h.repoMakeRole()
//
// h.apiInit().
// Get(fmt.Sprintf("/roles/%d", u.ID)).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertNoErrors).
// Assert(jsonpath.Equal(`$.response.name`, u.Name)).
// Assert(jsonpath.Equal(`$.response.roleID`, fmt.Sprintf("%d", u.ID))).
// End()
//}
//
//func TestRoleList(t *testing.T) {
// h := newHelper(t)
//
// h.repoMakeRole(h.randEmail())
// h.repoMakeRole(h.randEmail())
//
// h.apiInit().
// Get("/roles/").
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertNoErrors).
// End()
//}
//
//func TestRoleList_filterForbidden(t *testing.T) {
// h := newHelper(t)
//
// // @todo this can be a problematic test because it leaves
// // behind roles that are not denied this context
// // db purge might be needed
//
// h.repoMakeRole("role")
// f := h.repoMakeRole()
//
// h.deny(types.RolePermissionResource.AppendID(f.ID), "read")
//
// h.apiInit().
// Get("/roles/").
// Query("handle", f.Handle).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertNoErrors).
// Assert(jsonpath.NotPresent(fmt.Sprintf(`$.response.set[? @.handle=="%s"]`, f.Handle))).
// End()
//}
//
//func TestRoleCreateForbidden(t *testing.T) {
// h := newHelper(t)
//
// h.apiInit().
// Post("/roles/").
// FormData("name", rs()).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertError("not allowed to create roles")).
// End()
//}
//
//func TestRoleCreateNotUnique(t *testing.T) {
// h := newHelper(t)
// h.allow(types.SystemPermissionResource, "role.create")
//
// role := h.repoMakeRole()
// h.apiInit().
// Post("/roles/").
// FormData("name", rs()).
// FormData("handle", role.Handle).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertError("role handle not unique")).
// End()
//
// h.apiInit().
// Post("/roles/").
// FormData("name", role.Name).
// FormData("handle", "handle_"+rs()).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertError("role name not unique")).
// End()
//
//}
//
//func TestRoleCreate(t *testing.T) {
// h := newHelper(t)
// h.allow(types.SystemPermissionResource, "role.create")
//
// h.apiInit().
// Post("/roles/").
// FormData("name", rs()).
// FormData("handle", "handle_"+rs()).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertNoErrors).
// End()
//}
//
//func TestRoleUpdateForbidden(t *testing.T) {
// h := newHelper(t)
// u := h.repoMakeRole()
//
// h.apiInit().
// Put(fmt.Sprintf("/roles/%d", u.ID)).
// FormData("email", h.randEmail()).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertError("not allowed to update this role")).
// End()
//}
//
//func TestRoleUpdate(t *testing.T) {
// h := newHelper(t)
// u := h.repoMakeRole()
// h.allow(types.RolePermissionResource.AppendWildcard(), "update")
//
// newName := "updated-" + rs()
// newHandle := "updated-" + rs()
//
// h.apiInit().
// Put(fmt.Sprintf("/roles/%d", u.ID)).
// FormData("name", newName).
// FormData("handle", newHandle).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertNoErrors).
// End()
//
// u, err := h.repoRole().FindByID(u.ID)
// h.a.NoError(err)
// h.a.NotNil(u)
// h.a.Equal(newName, u.Name)
// h.a.Equal(newHandle, u.Handle)
//}
//
//func TestRoleDeleteForbidden(t *testing.T) {
// h := newHelper(t)
// u := h.repoMakeRole()
//
// h.apiInit().
// Delete(fmt.Sprintf("/roles/%d", u.ID)).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertError("not allowed to delete this role")).
// End()
//}
//
//func TestRoleDelete(t *testing.T) {
// h := newHelper(t)
// h.allow(types.RolePermissionResource.AppendWildcard(), "delete")
//
// r := h.repoMakeRole()
//
// h.apiInit().
// Delete(fmt.Sprintf("/roles/%d", r.ID)).
// Expect(t).
// Status(http.StatusOK).
// Assert(helpers.AssertNoErrors).
// End()
//
// r, err := h.repoRole().FindByID(r.ID)
// h.a.NoError(err)
// h.a.NotNil(r)
// h.a.NotNil(r.DeletedAt)
//}
import (
"context"
"fmt"
"github.com/cortezaproject/corteza-server/pkg/id"
"github.com/cortezaproject/corteza-server/store"
"github.com/cortezaproject/corteza-server/system/service"
"github.com/cortezaproject/corteza-server/system/types"
"github.com/cortezaproject/corteza-server/tests/helpers"
"github.com/steinfletcher/apitest-jsonpath"
"net/http"
"testing"
"time"
)
func (h helper) clearRoles() {
h.noError(store.TruncateRoles(context.Background(), service.DefaultNgStore))
}
func (h helper) repoMakeRole(ss ...string) *types.Role {
var r = &types.Role{
ID: id.Next(),
CreatedAt: time.Now(),
}
if len(ss) > 1 {
r.Handle = ss[1]
} else {
r.Handle = "h_" + rs()
}
if len(ss) > 0 {
r.Name = ss[0]
} else {
r.Name = "n_" + rs()
}
h.a.NoError(store.CreateRole(context.Background(), service.DefaultNgStore, r))
return r
}
func (h helper) lookupRoleByID(ID uint64) *types.Role {
res, err := store.LookupRoleByID(context.Background(), service.DefaultNgStore, ID)
h.noError(err)
return res
}
func TestRoleRead(t *testing.T) {
h := newHelper(t)
u := h.repoMakeRole()
h.apiInit().
Get(fmt.Sprintf("/roles/%d", u.ID)).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
Assert(jsonpath.Equal(`$.response.name`, u.Name)).
Assert(jsonpath.Equal(`$.response.roleID`, fmt.Sprintf("%d", u.ID))).
End()
}
func TestRoleList(t *testing.T) {
h := newHelper(t)
h.repoMakeRole(h.randEmail())
h.repoMakeRole(h.randEmail())
h.apiInit().
Get("/roles/").
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
End()
}
func TestRoleList_filterForbidden(t *testing.T) {
h := newHelper(t)
// @todo this can be a problematic test because it leaves
// behind roles that are not denied this context
// db purge might be needed
h.repoMakeRole("role")
f := h.repoMakeRole()
h.deny(types.RolePermissionResource.AppendID(f.ID), "read")
h.apiInit().
Get("/roles/").
Query("handle", f.Handle).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
Assert(jsonpath.NotPresent(fmt.Sprintf(`$.response.set[? @.handle=="%s"]`, f.Handle))).
End()
}
func TestRoleCreateForbidden(t *testing.T) {
h := newHelper(t)
h.apiInit().
Post("/roles/").
FormData("name", rs()).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertError("not allowed to create roles")).
End()
}
func TestRoleCreateNotUnique(t *testing.T) {
h := newHelper(t)
h.allow(types.SystemPermissionResource, "role.create")
role := h.repoMakeRole()
h.apiInit().
Post("/roles/").
FormData("name", rs()).
FormData("handle", role.Handle).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertError("role handle not unique")).
End()
h.apiInit().
Post("/roles/").
FormData("name", role.Name).
FormData("handle", "handle_"+rs()).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertError("role name not unique")).
End()
}
func TestRoleCreate(t *testing.T) {
h := newHelper(t)
h.allow(types.SystemPermissionResource, "role.create")
h.apiInit().
Post("/roles/").
FormData("name", rs()).
FormData("handle", "handle_"+rs()).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
End()
}
func TestRoleUpdateForbidden(t *testing.T) {
h := newHelper(t)
u := h.repoMakeRole()
h.apiInit().
Put(fmt.Sprintf("/roles/%d", u.ID)).
FormData("email", h.randEmail()).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertError("not allowed to update this role")).
End()
}
func TestRoleUpdate(t *testing.T) {
h := newHelper(t)
res := h.repoMakeRole()
h.allow(types.RolePermissionResource.AppendWildcard(), "update")
newName := "updated-" + rs()
newHandle := "updated-" + rs()
h.apiInit().
Put(fmt.Sprintf("/roles/%d", res.ID)).
FormData("name", newName).
FormData("handle", newHandle).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
End()
res = h.lookupRoleByID(res.ID)
h.a.NotNil(res)
h.a.Equal(newName, res.Name)
h.a.Equal(newHandle, res.Handle)
}
func TestRoleDeleteForbidden(t *testing.T) {
h := newHelper(t)
u := h.repoMakeRole()
h.apiInit().
Delete(fmt.Sprintf("/roles/%d", u.ID)).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertError("not allowed to delete this role")).
End()
}
func TestRoleDelete(t *testing.T) {
h := newHelper(t)
h.allow(types.RolePermissionResource.AppendWildcard(), "delete")
res := h.repoMakeRole()
h.apiInit().
Delete(fmt.Sprintf("/roles/%d", res.ID)).
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
End()
res = h.lookupRoleByID(res.ID)
h.a.NotNil(res)
h.a.NotNil(res.DeletedAt)
}
+36 -33
View File
@@ -4,10 +4,11 @@ import (
"context"
"fmt"
"github.com/cortezaproject/corteza-server/pkg/id"
"github.com/cortezaproject/corteza-server/store"
"github.com/cortezaproject/corteza-server/system/service"
"github.com/cortezaproject/corteza-server/system/types"
"github.com/cortezaproject/corteza-server/tests/helpers"
jsonpath "github.com/steinfletcher/apitest-jsonpath"
"github.com/steinfletcher/apitest-jsonpath"
"net/http"
"testing"
"time"
@@ -34,8 +35,13 @@ func (h helper) createUser(user *types.User) *types.User {
return user
}
func (h helper) clearUsers() {
h.noError(store.TruncateUsers(context.Background(), service.DefaultNgStore))
}
func TestUserRead(t *testing.T) {
h := newHelper(t)
h.clearUsers()
u := h.createUserWithEmail(h.randEmail())
@@ -62,6 +68,7 @@ func TestUserRead(t *testing.T) {
func TestUserListAll(t *testing.T) {
h := newHelper(t)
h.clearUsers()
h.secCtx()
@@ -72,27 +79,21 @@ func TestUserListAll(t *testing.T) {
h.allow(types.UserPermissionResource.AppendWildcard(), "read")
aux := struct {
Response *struct{ Filter *types.UserFilter }
}{}
h.apiInit().
Get("/users/").
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
End().
JSON(&aux)
h.a.NotNil(aux.Response)
h.a.NotNil(aux.Response.Filter)
// we need to test with >= because we're not running this inside a transaction.
h.a.GreaterOrEqual(int(aux.Response.Filter.Count), seedCount)
Assert(jsonpath.Present(`$.response.filter`)).
Assert(jsonpath.Present(`$.response.set`)).
Assert(jsonpath.Len(`$.response.set`, seedCount)).
End()
}
func TestUserList_filterForbidden(t *testing.T) {
h := newHelper(t)
h.clearUsers()
h.allow(types.UserPermissionResource.AppendWildcard(), "read")
h.createUserWithEmail("usr")
@@ -111,17 +112,13 @@ func TestUserList_filterForbidden(t *testing.T) {
func TestUserListQuery(t *testing.T) {
h := newHelper(t)
h.clearUsers()
h.secCtx()
h.allow(types.UserPermissionResource.AppendWildcard(), "read")
aux := struct {
Response *struct{ Filter *types.UserFilter }
}{}
h.apiInit().
Debug().
Get("/users/").
Query("query", h.randEmail()).
Query("email", h.randEmail()).
@@ -131,16 +128,14 @@ func TestUserListQuery(t *testing.T) {
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
End().
JSON(&aux)
h.a.NotNil(aux.Response)
h.a.NotNil(aux.Response.Filter)
h.a.GreaterOrEqual(int(aux.Response.Filter.Count), 0)
Assert(jsonpath.Present(`$.response.filter`)).
Assert(jsonpath.Len(`$.response.set`, 0)).
End()
}
func TestUserListQueryEmail(t *testing.T) {
h := newHelper(t)
h.clearUsers()
h.secCtx()
h.allow(types.UserPermissionResource.AppendWildcard(), "read")
@@ -150,7 +145,6 @@ func TestUserListQueryEmail(t *testing.T) {
h.createUserWithEmail(ee)
h.apiInit().
Debug().
Get("/users/").
Query("email", ee).
Expect(t).
@@ -162,6 +156,7 @@ func TestUserListQueryEmail(t *testing.T) {
func TestUserListQueryUsername(t *testing.T) {
h := newHelper(t)
h.clearUsers()
h.secCtx()
h.allow(types.UserPermissionResource.AppendWildcard(), "read")
@@ -173,7 +168,6 @@ func TestUserListQueryUsername(t *testing.T) {
})
h.apiInit().
Debug().
Get("/users/").
Query("username", ee).
Expect(t).
@@ -185,6 +179,7 @@ func TestUserListQueryUsername(t *testing.T) {
func TestUserListQueryHandle(t *testing.T) {
h := newHelper(t)
h.clearUsers()
h.secCtx()
h.allow(types.UserPermissionResource.AppendWildcard(), "read")
@@ -195,7 +190,6 @@ func TestUserListQueryHandle(t *testing.T) {
})
h.apiInit().
Debug().
Get("/users/").
Query("handle", "johnDoe").
Expect(t).
@@ -207,6 +201,7 @@ func TestUserListQueryHandle(t *testing.T) {
func TestUserListWithOneAllowed(t *testing.T) {
h := newHelper(t)
h.clearUsers()
h.secCtx()
@@ -227,18 +222,16 @@ func TestUserListWithOneAllowed(t *testing.T) {
Expect(t).
Status(http.StatusOK).
Assert(helpers.AssertNoErrors).
Assert(jsonpath.Present(`$.response.filter`)).
Assert(jsonpath.Present(`$.response.set`)).
Assert(jsonpath.Len(`$.response.set`, 1)).
End().
JSON(&aux)
h.a.NotNil(aux.Response)
h.a.NotNil(aux.Response.Filter)
// we need to test with >= because we're not running this inside a transaction.
h.a.Equal(1, int(aux.Response.Filter.Count))
}
func TestUserCreateForbidden(t *testing.T) {
h := newHelper(t)
h.clearUsers()
h.apiInit().
Post("/users/").
@@ -251,6 +244,8 @@ func TestUserCreateForbidden(t *testing.T) {
func TestUserCreate(t *testing.T) {
h := newHelper(t)
h.clearUsers()
h.allow(types.SystemPermissionResource, "user.create")
email := h.randEmail()
@@ -266,6 +261,8 @@ func TestUserCreate(t *testing.T) {
func TestUserUpdateForbidden(t *testing.T) {
h := newHelper(t)
h.clearUsers()
u := h.createUserWithEmail(h.randEmail())
h.apiInit().
@@ -279,6 +276,8 @@ func TestUserUpdateForbidden(t *testing.T) {
func TestUserUpdate(t *testing.T) {
h := newHelper(t)
h.clearUsers()
u := h.createUserWithEmail(h.randEmail())
h.allow(types.UserPermissionResource.AppendWildcard(), "update")
@@ -295,6 +294,8 @@ func TestUserUpdate(t *testing.T) {
func TestUserDeleteForbidden(t *testing.T) {
h := newHelper(t)
h.clearUsers()
u := h.createUserWithEmail(h.randEmail())
h.apiInit().
@@ -307,6 +308,8 @@ func TestUserDeleteForbidden(t *testing.T) {
func TestUserDelete(t *testing.T) {
h := newHelper(t)
h.clearUsers()
h.allow(types.UserPermissionResource.AppendWildcard(), "delete")
u := h.createUserWithEmail(h.randEmail())