Fix e2e tests

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-02-18 12:05:53 +04:00
parent b49747f3ba
commit ab5fe8e5e2
30 changed files with 874 additions and 715 deletions

View File

@@ -20,15 +20,14 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.probo.inc/probo/e2e/internal/factory"
"go.probo.inc/probo/e2e/internal/testutil"
)
func TestAsset_Create(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
const query = `
mutation($input: CreateAssetInput!) {
@@ -71,7 +70,7 @@ func TestAsset_Create(t *testing.T) {
"organizationId": owner.GetOrganizationID().String(),
"name": "Production Database Server",
"amount": 5,
"ownerId": profileID.String(),
"ownerId": profileID,
"assetType": "VIRTUAL",
"dataTypesStored": "Customer PII, Financial Records",
},
@@ -84,15 +83,14 @@ func TestAsset_Create(t *testing.T) {
assert.Equal(t, 5, asset.Amount)
assert.Equal(t, "VIRTUAL", asset.AssetType)
assert.Equal(t, "Customer PII, Financial Records", asset.DataTypesStored)
assert.Equal(t, profileID.String(), asset.Owner.ID)
assert.Equal(t, profileID, asset.Owner.ID)
}
func TestAsset_Update(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
const createQuery = `
mutation($input: CreateAssetInput!) {
@@ -121,7 +119,7 @@ func TestAsset_Update(t *testing.T) {
"organizationId": owner.GetOrganizationID().String(),
"name": "Test Asset",
"amount": 10,
"ownerId": profileID.String(),
"ownerId": profileID,
"assetType": "VIRTUAL",
"dataTypesStored": "Test data",
},
@@ -172,8 +170,7 @@ func TestAsset_Delete(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
const createQuery = `
mutation($input: CreateAssetInput!) {
@@ -202,7 +199,7 @@ func TestAsset_Delete(t *testing.T) {
"organizationId": owner.GetOrganizationID().String(),
"name": "Asset to delete",
"amount": 1,
"ownerId": profileID.String(),
"ownerId": profileID,
"assetType": "VIRTUAL",
"dataTypesStored": "None",
},
@@ -237,8 +234,7 @@ func TestAsset_List(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
// Create multiple assets
for i := 0; i < 3; i++ {
@@ -269,7 +265,7 @@ func TestAsset_List(t *testing.T) {
"organizationId": owner.GetOrganizationID().String(),
"name": fmt.Sprintf("Asset %c", 'A'+i),
"amount": i + 1,
"ownerId": profileID.String(),
"ownerId": profileID,
"assetType": "VIRTUAL",
"dataTypesStored": "Test data",
},
@@ -324,8 +320,7 @@ func TestAsset_Types(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
assetTypes := []string{"PHYSICAL", "VIRTUAL"}
@@ -360,7 +355,7 @@ func TestAsset_Types(t *testing.T) {
"organizationId": owner.GetOrganizationID().String(),
"name": "Asset " + assetType,
"amount": 1,
"ownerId": profileID.String(),
"ownerId": profileID,
"assetType": assetType,
"dataTypesStored": "Test data",
},

View File

@@ -21,14 +21,14 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.probo.inc/probo/e2e/internal/factory"
"go.probo.inc/probo/e2e/internal/testutil"
)
func TestContinualImprovement_Create(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
query := `
mutation CreateContinualImprovement($input: CreateContinualImprovementInput!) {
@@ -68,7 +68,7 @@ func TestContinualImprovement_Create(t *testing.T) {
"referenceId": fmt.Sprintf("CI-%d", time.Now().UnixNano()),
"description": "Improve security training program",
"source": "Internal Audit",
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "OPEN",
"priority": "HIGH",
},
@@ -86,8 +86,7 @@ func TestContinualImprovement_Create(t *testing.T) {
func TestContinualImprovement_Update(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
createQuery := `
mutation CreateContinualImprovement($input: CreateContinualImprovementInput!) {
@@ -116,7 +115,7 @@ func TestContinualImprovement_Update(t *testing.T) {
"organizationId": owner.GetOrganizationID().String(),
"referenceId": fmt.Sprintf("CI-UPDATE-%d", time.Now().UnixNano()),
"description": "Original description",
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "OPEN",
"priority": "LOW",
},
@@ -167,8 +166,7 @@ func TestContinualImprovement_Update(t *testing.T) {
func TestContinualImprovement_Delete(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
createQuery := `
mutation CreateContinualImprovement($input: CreateContinualImprovementInput!) {
@@ -196,7 +194,7 @@ func TestContinualImprovement_Delete(t *testing.T) {
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"referenceId": fmt.Sprintf("CI-DELETE-%d", time.Now().UnixNano()),
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "OPEN",
"priority": "LOW",
},
@@ -230,8 +228,7 @@ func TestContinualImprovement_Delete(t *testing.T) {
func TestContinualImprovement_List(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
createQuery := `
mutation CreateContinualImprovement($input: CreateContinualImprovementInput!) {
@@ -251,7 +248,7 @@ func TestContinualImprovement_List(t *testing.T) {
"organizationId": owner.GetOrganizationID().String(),
"referenceId": fmt.Sprintf("CI-LIST-%d-%d", i, time.Now().UnixNano()),
"description": fmt.Sprintf("Improvement %d", i),
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "OPEN",
"priority": "MEDIUM",
},
@@ -305,8 +302,7 @@ func TestContinualImprovement_List(t *testing.T) {
func TestContinualImprovement_StatusAndPriorityValues(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
t.Run("status values", func(t *testing.T) {
statuses := []string{"OPEN", "IN_PROGRESS", "CLOSED"}
@@ -341,7 +337,7 @@ func TestContinualImprovement_StatusAndPriorityValues(t *testing.T) {
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"referenceId": fmt.Sprintf("CI-STATUS-%s-%d", status, time.Now().UnixNano()),
"ownerId": profileID.String(),
"ownerId": profileID,
"status": status,
"priority": "LOW",
},
@@ -385,7 +381,7 @@ func TestContinualImprovement_StatusAndPriorityValues(t *testing.T) {
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"referenceId": fmt.Sprintf("CI-PRIORITY-%s-%d", priority, time.Now().UnixNano()),
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "OPEN",
"priority": priority,
},

View File

@@ -29,8 +29,7 @@ import (
func TestDatum_Create(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
tests := []struct {
name string
@@ -103,7 +102,7 @@ func TestDatum_Create(t *testing.T) {
input := map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"ownerId": profileID.String(),
"ownerId": profileID,
}
for k, v := range tt.input {
input[k] = v
@@ -140,8 +139,7 @@ func TestDatum_Create(t *testing.T) {
func TestDatum_Create_Validation(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
tests := []struct {
name string
@@ -277,8 +275,7 @@ func TestDatum_Create_Validation(t *testing.T) {
func TestDatum_Update(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
tests := []struct {
name string
@@ -290,7 +287,7 @@ func TestDatum_Update(t *testing.T) {
{
name: "update name",
setup: func() string {
return factory.NewDatum(owner, profileID.String()).
return factory.NewDatum(owner, profileID).
WithName("Datum to Update").
Create()
},
@@ -306,7 +303,7 @@ func TestDatum_Update(t *testing.T) {
{
name: "update to PUBLIC classification",
setup: func() string {
return factory.NewDatum(owner, profileID.String()).
return factory.NewDatum(owner, profileID).
WithName("Classification Test").
WithDataClassification("INTERNAL").
Create()
@@ -320,7 +317,7 @@ func TestDatum_Update(t *testing.T) {
{
name: "update to SECRET classification",
setup: func() string {
return factory.NewDatum(owner, profileID.String()).
return factory.NewDatum(owner, profileID).
WithName("Classification Test").
Create()
},
@@ -375,9 +372,8 @@ func TestDatum_Update(t *testing.T) {
func TestDatum_Update_Validation(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
baseDatumID := factory.NewDatum(owner, profileID.String()).WithName("Validation Test Datum").Create()
profileID := factory.CreateUser(owner)
baseDatumID := factory.NewDatum(owner, profileID).WithName("Validation Test Datum").Create()
tests := []struct {
name string
@@ -491,11 +487,10 @@ func TestDatum_Update_Validation(t *testing.T) {
func TestDatum_Delete(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
t.Run("delete existing datum", func(t *testing.T) {
datumID := factory.NewDatum(owner, profileID.String()).WithName("Datum to Delete").Create()
datumID := factory.NewDatum(owner, profileID).WithName("Datum to Delete").Create()
query := `
mutation DeleteDatum($input: DeleteDatumInput!) {
@@ -557,12 +552,11 @@ func TestDatum_Delete_Validation(t *testing.T) {
func TestDatum_List(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
datumNames := []string{"Datum A", "Datum B", "Datum C"}
for _, name := range datumNames {
factory.NewDatum(owner, profileID.String()).WithName(name).Create()
factory.NewDatum(owner, profileID).WithName(name).Create()
}
query := `
@@ -630,8 +624,7 @@ func TestDatum_Query(t *testing.T) {
func TestDatum_Timestamps(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
t.Run("createdAt and updatedAt are set on create", func(t *testing.T) {
beforeCreate := time.Now().Add(-time.Second)
@@ -665,7 +658,7 @@ func TestDatum_Timestamps(t *testing.T) {
err := owner.Execute(query, map[string]any{
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"ownerId": profileID.String(),
"ownerId": profileID,
"name": "Timestamp Test Datum",
"dataClassification": "INTERNAL",
},
@@ -677,7 +670,7 @@ func TestDatum_Timestamps(t *testing.T) {
})
t.Run("updatedAt changes on update", func(t *testing.T) {
datumID := factory.NewDatum(owner, profileID.String()).WithName("Timestamp Update Test").Create()
datumID := factory.NewDatum(owner, profileID).WithName("Timestamp Update Test").Create()
getQuery := `
query($id: ID!) {
@@ -741,9 +734,8 @@ func TestDatum_Timestamps(t *testing.T) {
func TestDatum_SubResolvers(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
datumID := factory.NewDatum(owner, profileID.String()).WithName("SubResolver Test Datum").Create()
profileID := factory.CreateUser(owner)
datumID := factory.NewDatum(owner, profileID).WithName("SubResolver Test Datum").Create()
t.Run("owner sub-resolver", func(t *testing.T) {
query := `
@@ -772,7 +764,7 @@ func TestDatum_SubResolvers(t *testing.T) {
err := owner.Execute(query, map[string]any{"id": datumID}, &result)
require.NoError(t, err)
assert.Equal(t, profileID.String(), result.Node.Owner.ID)
assert.Equal(t, profileID, result.Node.Owner.ID)
})
t.Run("organization sub-resolver", func(t *testing.T) {
@@ -813,8 +805,7 @@ func TestDatum_RBAC(t *testing.T) {
t.Run("create", func(t *testing.T) {
t.Run("owner can create", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
_, err := owner.Do(`
mutation CreateDatum($input: CreateDatumInput!) {
@@ -825,7 +816,7 @@ func TestDatum_RBAC(t *testing.T) {
`, map[string]any{
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"ownerId": profileID.String(),
"ownerId": profileID,
"name": "RBAC Test Datum",
"dataClassification": "INTERNAL",
},
@@ -836,8 +827,7 @@ func TestDatum_RBAC(t *testing.T) {
t.Run("admin can create", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
admin := testutil.NewClientInOrg(t, testutil.RoleAdmin, owner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
_, err := admin.Do(`
mutation CreateDatum($input: CreateDatumInput!) {
@@ -848,7 +838,7 @@ func TestDatum_RBAC(t *testing.T) {
`, map[string]any{
"input": map[string]any{
"organizationId": admin.GetOrganizationID().String(),
"ownerId": profileID.String(),
"ownerId": profileID,
"name": "RBAC Test Datum",
"dataClassification": "INTERNAL",
},
@@ -859,8 +849,7 @@ func TestDatum_RBAC(t *testing.T) {
t.Run("viewer cannot create", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
viewer := testutil.NewClientInOrg(t, testutil.RoleViewer, owner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
_, err := viewer.Do(`
mutation CreateDatum($input: CreateDatumInput!) {
@@ -871,7 +860,7 @@ func TestDatum_RBAC(t *testing.T) {
`, map[string]any{
"input": map[string]any{
"organizationId": viewer.GetOrganizationID().String(),
"ownerId": profileID.String(),
"ownerId": profileID,
"name": "RBAC Test Datum",
"dataClassification": "INTERNAL",
},
@@ -883,9 +872,8 @@ func TestDatum_RBAC(t *testing.T) {
t.Run("update", func(t *testing.T) {
t.Run("owner can update", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
datumID := factory.NewDatum(owner, profileID.String()).WithName("RBAC Update Test").Create()
profileID := factory.CreateUser(owner)
datumID := factory.NewDatum(owner, profileID).WithName("RBAC Update Test").Create()
_, err := owner.Do(`
mutation UpdateDatum($input: UpdateDatumInput!) {
@@ -905,9 +893,8 @@ func TestDatum_RBAC(t *testing.T) {
t.Run("admin can update", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
admin := testutil.NewClientInOrg(t, testutil.RoleAdmin, owner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
datumID := factory.NewDatum(owner, profileID.String()).WithName("RBAC Update Test").Create()
profileID := factory.CreateUser(owner)
datumID := factory.NewDatum(owner, profileID).WithName("RBAC Update Test").Create()
_, err := admin.Do(`
mutation UpdateDatum($input: UpdateDatumInput!) {
@@ -927,9 +914,8 @@ func TestDatum_RBAC(t *testing.T) {
t.Run("viewer cannot update", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
viewer := testutil.NewClientInOrg(t, testutil.RoleViewer, owner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
datumID := factory.NewDatum(owner, profileID.String()).WithName("RBAC Update Test").Create()
profileID := factory.CreateUser(owner)
datumID := factory.NewDatum(owner, profileID).WithName("RBAC Update Test").Create()
_, err := viewer.Do(`
mutation UpdateDatum($input: UpdateDatumInput!) {
@@ -950,9 +936,8 @@ func TestDatum_RBAC(t *testing.T) {
t.Run("delete", func(t *testing.T) {
t.Run("owner can delete", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
datumID := factory.NewDatum(owner, profileID.String()).WithName("RBAC Delete Test").Create()
profileID := factory.CreateUser(owner)
datumID := factory.NewDatum(owner, profileID).WithName("RBAC Delete Test").Create()
_, err := owner.Do(`
mutation DeleteDatum($input: DeleteDatumInput!) {
@@ -969,9 +954,8 @@ func TestDatum_RBAC(t *testing.T) {
t.Run("admin can delete", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
admin := testutil.NewClientInOrg(t, testutil.RoleAdmin, owner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
datumID := factory.NewDatum(owner, profileID.String()).WithName("RBAC Delete Test").Create()
profileID := factory.CreateUser(owner)
datumID := factory.NewDatum(owner, profileID).WithName("RBAC Delete Test").Create()
_, err := admin.Do(`
mutation DeleteDatum($input: DeleteDatumInput!) {
@@ -988,9 +972,8 @@ func TestDatum_RBAC(t *testing.T) {
t.Run("viewer cannot delete", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
viewer := testutil.NewClientInOrg(t, testutil.RoleViewer, owner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
datumID := factory.NewDatum(owner, profileID.String()).WithName("RBAC Delete Test").Create()
profileID := factory.CreateUser(owner)
datumID := factory.NewDatum(owner, profileID).WithName("RBAC Delete Test").Create()
_, err := viewer.Do(`
mutation DeleteDatum($input: DeleteDatumInput!) {
@@ -1008,9 +991,8 @@ func TestDatum_RBAC(t *testing.T) {
t.Run("read", func(t *testing.T) {
t.Run("owner can read", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
datumID := factory.NewDatum(owner, profileID.String()).WithName("RBAC Read Test").Create()
profileID := factory.CreateUser(owner)
datumID := factory.NewDatum(owner, profileID).WithName("RBAC Read Test").Create()
var result struct {
Node *struct {
@@ -1033,9 +1015,8 @@ func TestDatum_RBAC(t *testing.T) {
t.Run("admin can read", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
admin := testutil.NewClientInOrg(t, testutil.RoleAdmin, owner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
datumID := factory.NewDatum(owner, profileID.String()).WithName("RBAC Read Test").Create()
profileID := factory.CreateUser(owner)
datumID := factory.NewDatum(owner, profileID).WithName("RBAC Read Test").Create()
var result struct {
Node *struct {
@@ -1058,9 +1039,8 @@ func TestDatum_RBAC(t *testing.T) {
t.Run("viewer can read", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
viewer := testutil.NewClientInOrg(t, testutil.RoleViewer, owner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
datumID := factory.NewDatum(owner, profileID.String()).WithName("RBAC Read Test").Create()
profileID := factory.CreateUser(owner)
datumID := factory.NewDatum(owner, profileID).WithName("RBAC Read Test").Create()
var result struct {
Node *struct {
@@ -1085,8 +1065,7 @@ func TestDatum_RBAC(t *testing.T) {
func TestDatum_MaxLength_Validation(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
longName := strings.Repeat("a", 1001)
@@ -1104,7 +1083,7 @@ func TestDatum_MaxLength_Validation(t *testing.T) {
_, err := owner.Do(query, map[string]any{
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"ownerId": profileID.String(),
"ownerId": profileID,
"name": longName,
"dataClassification": "INTERNAL",
},
@@ -1114,7 +1093,7 @@ func TestDatum_MaxLength_Validation(t *testing.T) {
})
t.Run("update", func(t *testing.T) {
datumID := factory.NewDatum(owner, profileID.String()).WithName("Max Length Test").Create()
datumID := factory.NewDatum(owner, profileID).WithName("Max Length Test").Create()
query := `
mutation UpdateDatum($input: UpdateDatumInput!) {
@@ -1138,11 +1117,10 @@ func TestDatum_MaxLength_Validation(t *testing.T) {
func TestDatum_Pagination(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
for i := 0; i < 5; i++ {
factory.NewDatum(owner, profileID.String()).
factory.NewDatum(owner, profileID).
WithName(fmt.Sprintf("Pagination Datum %d", i)).
Create()
}
@@ -1288,9 +1266,8 @@ func TestDatum_TenantIsolation(t *testing.T) {
org1Owner := testutil.NewClient(t, testutil.RoleOwner)
org2Owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, org1Owner).GetProfileID()
datumID := factory.NewDatum(org1Owner, profileID.String()).WithName("Org1 Datum").Create()
profileID := factory.CreateUser(org1Owner)
datumID := factory.NewDatum(org1Owner, profileID).WithName("Org1 Datum").Create()
t.Run("cannot read datum from another organization", func(t *testing.T) {
query := `
@@ -1396,11 +1373,10 @@ func TestDatum_TenantIsolation(t *testing.T) {
func TestDatum_Ordering(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// TODO: right now we need to invite and accept invite to get new profile.
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
factory.NewDatum(owner, profileID.String()).WithName("AAA Order Test").Create()
factory.NewDatum(owner, profileID.String()).WithName("ZZZ Order Test").Create()
factory.NewDatum(owner, profileID).WithName("AAA Order Test").Create()
factory.NewDatum(owner, profileID).WithName("ZZZ Order Test").Create()
t.Run("order by created_at descending", func(t *testing.T) {
query := `

View File

@@ -29,7 +29,7 @@ import (
func TestDocument_Create(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
approverProfileID := factory.CreateUser(owner)
tests := []struct {
name string
@@ -113,7 +113,7 @@ func TestDocument_Create(t *testing.T) {
input := map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"approverIds": []string{approverProfileID.String()},
"approverIds": []string{approverProfileID},
}
for k, v := range tt.input {
input[k] = v
@@ -151,7 +151,7 @@ func TestDocument_Create(t *testing.T) {
func TestDocument_Create_Validation(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
approverProfileID := factory.CreateUser(owner)
tests := []struct {
name string
@@ -293,7 +293,7 @@ func TestDocument_Create_Validation(t *testing.T) {
input["organizationId"] = owner.GetOrganizationID().String()
}
if !tt.skipApprover {
input["approverIds"] = []string{approverProfileID.String()}
input["approverIds"] = []string{approverProfileID}
}
for k, v := range tt.input {
input[k] = v
@@ -309,7 +309,7 @@ func TestDocument_Create_Validation(t *testing.T) {
func TestDocument_Update(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
approverProfileID := factory.CreateUser(owner)
tests := []struct {
name string
@@ -321,7 +321,7 @@ func TestDocument_Update(t *testing.T) {
{
name: "update title",
setup: func() string {
return factory.NewDocument(owner, approverProfileID.String()).
return factory.NewDocument(owner, approverProfileID).
WithTitle("Document to Update").
Create()
},
@@ -337,7 +337,7 @@ func TestDocument_Update(t *testing.T) {
{
name: "update document type",
setup: func() string {
return factory.NewDocument(owner, approverProfileID.String()).
return factory.NewDocument(owner, approverProfileID).
WithTitle("Type Test").
WithDocumentType("POLICY").
Create()
@@ -393,8 +393,8 @@ func TestDocument_Update(t *testing.T) {
func TestDocument_Update_Validation(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
baseDocumentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("Validation Test Document").Create()
approverProfileID := factory.CreateUser(owner)
baseDocumentID := factory.NewDocument(owner, approverProfileID).WithTitle("Validation Test Document").Create()
tests := []struct {
name string
@@ -484,10 +484,10 @@ func TestDocument_Update_Validation(t *testing.T) {
func TestDocument_Delete(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
approverProfileID := factory.CreateUser(owner)
t.Run("delete existing document", func(t *testing.T) {
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("Document to Delete").Create()
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("Document to Delete").Create()
query := `
mutation DeleteDocument($input: DeleteDocumentInput!) {
@@ -549,11 +549,11 @@ func TestDocument_Delete_Validation(t *testing.T) {
func TestDocument_List(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
approverProfileID := factory.CreateUser(owner)
documentTitles := []string{"Document A", "Document B", "Document C"}
for _, title := range documentTitles {
factory.NewDocument(owner, approverProfileID.String()).WithTitle(title).Create()
factory.NewDocument(owner, approverProfileID).WithTitle(title).Create()
}
query := `
@@ -621,7 +621,7 @@ func TestDocument_Query(t *testing.T) {
func TestDocument_Timestamps(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
approverProfileID := factory.CreateUser(owner)
t.Run("createdAt and updatedAt are set on create", func(t *testing.T) {
beforeCreate := time.Now().Add(-time.Second)
@@ -655,7 +655,7 @@ func TestDocument_Timestamps(t *testing.T) {
err := owner.Execute(query, map[string]any{
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"approverIds": []string{approverProfileID.String()},
"approverIds": []string{approverProfileID},
"title": "Timestamp Test Document",
"content": "Test content",
"documentType": "POLICY",
@@ -669,7 +669,7 @@ func TestDocument_Timestamps(t *testing.T) {
})
t.Run("updatedAt changes on update", func(t *testing.T) {
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("Timestamp Update Test").Create()
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("Timestamp Update Test").Create()
getQuery := `
query($id: ID!) {
@@ -733,8 +733,8 @@ func TestDocument_Timestamps(t *testing.T) {
func TestDocument_SubResolvers(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("SubResolver Test Document").Create()
approverProfileID := factory.CreateUser(owner)
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("SubResolver Test Document").Create()
t.Run("approvers sub-resolver", func(t *testing.T) {
query := `
@@ -775,7 +775,7 @@ func TestDocument_SubResolvers(t *testing.T) {
require.NoError(t, err)
assert.Equal(t, 1, result.Node.Approvers.TotalCount)
require.Len(t, result.Node.Approvers.Edges, 1)
assert.Equal(t, approverProfileID.String(), result.Node.Approvers.Edges[0].Node.ID)
assert.Equal(t, approverProfileID, result.Node.Approvers.Edges[0].Node.ID)
})
t.Run("organization sub-resolver", func(t *testing.T) {
@@ -816,7 +816,7 @@ func TestDocument_RBAC(t *testing.T) {
t.Run("create", func(t *testing.T) {
t.Run("owner can create", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
approverProfileID := factory.CreateUser(owner)
_, err := owner.Do(`
mutation CreateDocument($input: CreateDocumentInput!) {
@@ -827,7 +827,7 @@ func TestDocument_RBAC(t *testing.T) {
`, map[string]any{
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"approverIds": []string{approverProfileID.String()},
"approverIds": []string{approverProfileID},
"title": "RBAC Test Document",
"content": "Test content",
"documentType": "POLICY",
@@ -840,7 +840,7 @@ func TestDocument_RBAC(t *testing.T) {
t.Run("admin can create", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
admin := testutil.NewClientInOrg(t, testutil.RoleAdmin, owner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
approverProfileID := factory.CreateUser(owner)
_, err := admin.Do(`
mutation CreateDocument($input: CreateDocumentInput!) {
@@ -851,7 +851,7 @@ func TestDocument_RBAC(t *testing.T) {
`, map[string]any{
"input": map[string]any{
"organizationId": admin.GetOrganizationID().String(),
"approverIds": []string{approverProfileID.String()},
"approverIds": []string{approverProfileID},
"title": "RBAC Test Document",
"content": "Test content",
"documentType": "POLICY",
@@ -864,7 +864,7 @@ func TestDocument_RBAC(t *testing.T) {
t.Run("viewer cannot create", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
viewer := testutil.NewClientInOrg(t, testutil.RoleViewer, owner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
approverProfileID := factory.CreateUser(owner)
_, err := viewer.Do(`
mutation CreateDocument($input: CreateDocumentInput!) {
@@ -875,7 +875,7 @@ func TestDocument_RBAC(t *testing.T) {
`, map[string]any{
"input": map[string]any{
"organizationId": viewer.GetOrganizationID().String(),
"approverIds": []string{approverProfileID.String()},
"approverIds": []string{approverProfileID},
"title": "RBAC Test Document",
"content": "Test content",
"documentType": "POLICY",
@@ -889,8 +889,8 @@ func TestDocument_RBAC(t *testing.T) {
t.Run("update", func(t *testing.T) {
t.Run("owner can update", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("RBAC Update Test").Create()
approverProfileID := factory.CreateUser(owner)
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("RBAC Update Test").Create()
_, err := owner.Do(`
mutation UpdateDocument($input: UpdateDocumentInput!) {
@@ -910,8 +910,8 @@ func TestDocument_RBAC(t *testing.T) {
t.Run("admin can update", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
admin := testutil.NewClientInOrg(t, testutil.RoleAdmin, owner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("RBAC Update Test").Create()
approverProfileID := factory.CreateUser(owner)
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("RBAC Update Test").Create()
_, err := admin.Do(`
mutation UpdateDocument($input: UpdateDocumentInput!) {
@@ -931,8 +931,8 @@ func TestDocument_RBAC(t *testing.T) {
t.Run("viewer cannot update", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
viewer := testutil.NewClientInOrg(t, testutil.RoleViewer, owner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("RBAC Update Test").Create()
approverProfileID := factory.CreateUser(owner)
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("RBAC Update Test").Create()
_, err := viewer.Do(`
mutation UpdateDocument($input: UpdateDocumentInput!) {
@@ -953,8 +953,8 @@ func TestDocument_RBAC(t *testing.T) {
t.Run("delete", func(t *testing.T) {
t.Run("owner can delete", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("RBAC Delete Test").Create()
approverProfileID := factory.CreateUser(owner)
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("RBAC Delete Test").Create()
_, err := owner.Do(`
mutation DeleteDocument($input: DeleteDocumentInput!) {
@@ -971,8 +971,8 @@ func TestDocument_RBAC(t *testing.T) {
t.Run("admin can delete", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
admin := testutil.NewClientInOrg(t, testutil.RoleAdmin, owner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("RBAC Delete Test").Create()
approverProfileID := factory.CreateUser(owner)
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("RBAC Delete Test").Create()
_, err := admin.Do(`
mutation DeleteDocument($input: DeleteDocumentInput!) {
@@ -989,8 +989,8 @@ func TestDocument_RBAC(t *testing.T) {
t.Run("viewer cannot delete", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
viewer := testutil.NewClientInOrg(t, testutil.RoleViewer, owner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("RBAC Delete Test").Create()
approverProfileID := factory.CreateUser(owner)
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("RBAC Delete Test").Create()
_, err := viewer.Do(`
mutation DeleteDocument($input: DeleteDocumentInput!) {
@@ -1008,8 +1008,8 @@ func TestDocument_RBAC(t *testing.T) {
t.Run("read", func(t *testing.T) {
t.Run("owner can read", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("RBAC Read Test").Create()
approverProfileID := factory.CreateUser(owner)
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("RBAC Read Test").Create()
var result struct {
Node *struct {
@@ -1032,8 +1032,8 @@ func TestDocument_RBAC(t *testing.T) {
t.Run("admin can read", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
admin := testutil.NewClientInOrg(t, testutil.RoleAdmin, owner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("RBAC Read Test").Create()
approverProfileID := factory.CreateUser(owner)
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("RBAC Read Test").Create()
var result struct {
Node *struct {
@@ -1056,8 +1056,8 @@ func TestDocument_RBAC(t *testing.T) {
t.Run("viewer can read", func(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
viewer := testutil.NewClientInOrg(t, testutil.RoleViewer, owner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("RBAC Read Test").Create()
approverProfileID := factory.CreateUser(owner)
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("RBAC Read Test").Create()
var result struct {
Node *struct {
@@ -1082,7 +1082,7 @@ func TestDocument_RBAC(t *testing.T) {
func TestDocument_MaxLength_Validation(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
approverProfileID := factory.CreateUser(owner)
longTitle := strings.Repeat("a", 1001)
@@ -1100,7 +1100,7 @@ func TestDocument_MaxLength_Validation(t *testing.T) {
_, err := owner.Do(query, map[string]any{
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"approverIds": []string{approverProfileID.String()},
"approverIds": []string{approverProfileID},
"title": longTitle,
"content": "Test content",
"documentType": "POLICY",
@@ -1112,7 +1112,7 @@ func TestDocument_MaxLength_Validation(t *testing.T) {
})
t.Run("update", func(t *testing.T) {
documentID := factory.NewDocument(owner, approverProfileID.String()).WithTitle("Max Length Test").Create()
documentID := factory.NewDocument(owner, approverProfileID).WithTitle("Max Length Test").Create()
query := `
mutation UpdateDocument($input: UpdateDocumentInput!) {
@@ -1136,10 +1136,10 @@ func TestDocument_MaxLength_Validation(t *testing.T) {
func TestDocument_Pagination(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
approverProfileID := factory.CreateUser(owner)
for i := 0; i < 5; i++ {
factory.NewDocument(owner, approverProfileID.String()).
factory.NewDocument(owner, approverProfileID).
WithTitle(fmt.Sprintf("Pagination Document %d", i)).
Create()
}
@@ -1285,8 +1285,8 @@ func TestDocument_TenantIsolation(t *testing.T) {
org1Owner := testutil.NewClient(t, testutil.RoleOwner)
org2Owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, org1Owner).GetProfileID()
documentID := factory.NewDocument(org1Owner, approverProfileID.String()).WithTitle("Org1 Document").Create()
approverProfileID := factory.CreateUser(org1Owner)
documentID := factory.NewDocument(org1Owner, approverProfileID).WithTitle("Org1 Document").Create()
t.Run("cannot read document from another organization", func(t *testing.T) {
query := `
@@ -1392,10 +1392,10 @@ func TestDocument_TenantIsolation(t *testing.T) {
func TestDocument_Ordering(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
approverProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
approverProfileID := factory.CreateUser(owner)
factory.NewDocument(owner, approverProfileID.String()).WithTitle("AAA Order Test").Create()
factory.NewDocument(owner, approverProfileID.String()).WithTitle("ZZZ Order Test").Create()
factory.NewDocument(owner, approverProfileID).WithTitle("AAA Order Test").Create()
factory.NewDocument(owner, approverProfileID).WithTitle("ZZZ Order Test").Create()
t.Run("order by created_at descending", func(t *testing.T) {
query := `

View File

@@ -19,13 +19,14 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.probo.inc/probo/e2e/internal/factory"
"go.probo.inc/probo/e2e/internal/testutil"
)
// createTestDocument creates a document and returns its ID and the document version ID
func createTestDocument(t *testing.T, owner *testutil.Client) (docID string, docVersionID string) {
t.Helper()
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
query := `
mutation CreateDocument($input: CreateDocumentInput!) {
@@ -68,7 +69,7 @@ func createTestDocument(t *testing.T, owner *testutil.Client) (docID string, doc
"organizationId": owner.GetOrganizationID().String(),
"title": "Test Document",
"content": "Initial content",
"approverIds": []string{profileID.String()},
"approverIds": []string{profileID},
"documentType": "POLICY",
"classification": "INTERNAL",
},
@@ -263,7 +264,7 @@ func TestDocumentVersion_RequestSignature(t *testing.T) {
publishedVersionID := publishResult.PublishDocumentVersion.DocumentVersion.ID
// Create a person to sign
signerProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
signerProfileID := factory.CreateUser(owner)
query := `
mutation RequestSignature($input: RequestSignatureInput!) {
@@ -300,14 +301,14 @@ func TestDocumentVersion_RequestSignature(t *testing.T) {
err = owner.Execute(query, map[string]any{
"input": map[string]any{
"documentVersionId": publishedVersionID,
"signatoryId": signerProfileID.String(),
"signatoryId": signerProfileID,
},
}, &result)
require.NoError(t, err)
assert.NotEmpty(t, result.RequestSignature.DocumentVersionSignatureEdge.Node.ID)
assert.Equal(t, "REQUESTED", result.RequestSignature.DocumentVersionSignatureEdge.Node.State)
assert.Equal(t, signerProfileID.String(), result.RequestSignature.DocumentVersionSignatureEdge.Node.SignedBy.ID)
assert.Equal(t, signerProfileID, result.RequestSignature.DocumentVersionSignatureEdge.Node.SignedBy.ID)
}
func TestDocumentVersion_BulkPublish(t *testing.T) {
@@ -382,8 +383,8 @@ func TestDocumentVersion_BulkRequestSignatures(t *testing.T) {
require.NoError(t, err)
// Create multiple signers
signer1ProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
signer2ProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
signer1ProfileID := factory.CreateUser(owner)
signer2ProfileID := factory.CreateUser(owner)
query := `
mutation BulkRequestSignatures($input: BulkRequestSignaturesInput!) {
@@ -412,7 +413,7 @@ func TestDocumentVersion_BulkRequestSignatures(t *testing.T) {
err = owner.Execute(query, map[string]any{
"input": map[string]any{
"documentIds": []string{docID},
"signatoryIds": []string{signer1ProfileID.String(), signer2ProfileID.String()},
"signatoryIds": []string{signer1ProfileID, signer2ProfileID},
},
}, &result)
require.NoError(t, err)

View File

@@ -19,6 +19,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.probo.inc/probo/e2e/internal/factory"
"go.probo.inc/probo/e2e/internal/testutil"
)
@@ -367,7 +368,7 @@ func TestControlDocumentMapping_CreateDelete(t *testing.T) {
controlID := createControlResult.CreateControl.ControlEdge.Node.ID
// Create a document
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
var createDocumentResult struct {
CreateDocument struct {
DocumentEdge struct {
@@ -392,7 +393,7 @@ func TestControlDocumentMapping_CreateDelete(t *testing.T) {
"organizationId": owner.GetOrganizationID().String(),
"title": "Document for Control Mapping",
"content": "Document content",
"approverIds": []string{profileID.String()},
"approverIds": []string{profileID},
"documentType": "POLICY",
"classification": "INTERNAL",
},
@@ -755,7 +756,7 @@ func TestRiskDocumentMapping_CreateDelete(t *testing.T) {
riskID := createRiskResult.CreateRisk.RiskEdge.Node.ID
// Create a document
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
var createDocumentResult struct {
CreateDocument struct {
DocumentEdge struct {
@@ -780,7 +781,7 @@ func TestRiskDocumentMapping_CreateDelete(t *testing.T) {
"organizationId": owner.GetOrganizationID().String(),
"title": "Document for Risk Mapping",
"content": "Document content",
"approverIds": []string{profileID.String()},
"approverIds": []string{profileID},
"documentType": "POLICY",
"classification": "INTERNAL",
},
@@ -869,7 +870,7 @@ func TestRiskObligationMapping_CreateDelete(t *testing.T) {
riskID := createRiskResult.CreateRisk.RiskEdge.Node.ID
// Create an obligation
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
var createObligationResult struct {
CreateObligation struct {
ObligationEdge struct {
@@ -894,7 +895,7 @@ func TestRiskObligationMapping_CreateDelete(t *testing.T) {
"organizationId": owner.GetOrganizationID().String(),
"area": "Risk Management",
"requirement": "Obligation for Risk Mapping",
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "NON_COMPLIANT",
"type": "LEGAL",
},

View File

@@ -690,8 +690,8 @@ func TestMeeting_SubResolvers_WithData(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
attendee1ProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
attendee2ProfileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
attendee1ProfileID := factory.CreateUser(owner)
attendee2ProfileID := factory.CreateUser(owner)
var result struct {
CreateMeeting struct {
@@ -730,7 +730,7 @@ func TestMeeting_SubResolvers_WithData(t *testing.T) {
"organizationId": owner.GetOrganizationID().String(),
"name": "Meeting With Attendees",
"date": time.Now().Format(time.RFC3339Nano),
"attendeeIds": []string{attendee1ProfileID.String(), attendee2ProfileID.String()},
"attendeeIds": []string{attendee1ProfileID, attendee2ProfileID},
},
}, &result)
require.NoError(t, err)

View File

@@ -21,6 +21,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.probo.inc/probo/e2e/internal/factory"
"go.probo.inc/probo/e2e/internal/testutil"
)
@@ -99,7 +100,7 @@ func createAuditForNC(t *testing.T, owner *testutil.Client, name string) string
func TestNonconformity_Create(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
auditID := createAuditForNC(t, owner, "NC Test Audit")
query := `
@@ -142,7 +143,7 @@ func TestNonconformity_Create(t *testing.T) {
"auditId": auditID,
"rootCause": "Insufficient access controls",
"correctiveAction": "Implement MFA",
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "OPEN",
},
}, &result)
@@ -158,7 +159,7 @@ func TestNonconformity_Create(t *testing.T) {
func TestNonconformity_Update(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
auditID := createAuditForNC(t, owner, "NC Update Test Audit")
// Create a nonconformity to update
@@ -190,7 +191,7 @@ func TestNonconformity_Update(t *testing.T) {
"referenceId": fmt.Sprintf("NC-UPDATE-%d", time.Now().UnixNano()),
"auditId": auditID,
"rootCause": "Original root cause",
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "OPEN",
},
}, &createResult)
@@ -241,7 +242,7 @@ func TestNonconformity_Update(t *testing.T) {
func TestNonconformity_Delete(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
auditID := createAuditForNC(t, owner, "NC Delete Test Audit")
// Create a nonconformity to delete
@@ -273,7 +274,7 @@ func TestNonconformity_Delete(t *testing.T) {
"referenceId": fmt.Sprintf("NC-DELETE-%d", time.Now().UnixNano()),
"auditId": auditID,
"rootCause": "Test root cause",
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "OPEN",
},
}, &createResult)
@@ -306,7 +307,7 @@ func TestNonconformity_Delete(t *testing.T) {
func TestNonconformity_List(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
auditID := createAuditForNC(t, owner, "NC List Test Audit")
// Create multiple nonconformities
@@ -339,7 +340,7 @@ func TestNonconformity_List(t *testing.T) {
"referenceId": fmt.Sprintf("NC-LIST-%d-%d", i, time.Now().UnixNano()),
"auditId": auditID,
"rootCause": fmt.Sprintf("Root cause %d", i),
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "OPEN",
},
}, &createResult)
@@ -390,7 +391,7 @@ func TestNonconformity_List(t *testing.T) {
func TestNonconformity_StatusValues(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
auditID := createAuditForNC(t, owner, "NC Status Test Audit")
statuses := []string{"OPEN", "IN_PROGRESS", "CLOSED"}
@@ -427,7 +428,7 @@ func TestNonconformity_StatusValues(t *testing.T) {
"referenceId": fmt.Sprintf("NC-STATUS-%s-%d", status, time.Now().UnixNano()),
"auditId": auditID,
"rootCause": "Test root cause",
"ownerId": profileID.String(),
"ownerId": profileID,
"status": status,
},
}, &result)

View File

@@ -19,13 +19,14 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.probo.inc/probo/e2e/internal/factory"
"go.probo.inc/probo/e2e/internal/testutil"
)
func TestObligation_Create(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
query := `
mutation CreateObligation($input: CreateObligationInput!) {
@@ -66,7 +67,7 @@ func TestObligation_Create(t *testing.T) {
"source": "GDPR Article 5",
"requirement": "Data must be processed lawfully",
"regulator": "ICO",
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "NON_COMPLIANT",
"type": "LEGAL",
},
@@ -84,7 +85,7 @@ func TestObligation_Create(t *testing.T) {
func TestObligation_Update(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
// Create an obligation to update
createQuery := `
@@ -113,7 +114,7 @@ func TestObligation_Update(t *testing.T) {
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"area": "Original Area",
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "NON_COMPLIANT",
"type": "LEGAL",
},
@@ -161,7 +162,7 @@ func TestObligation_Update(t *testing.T) {
func TestObligation_Delete(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
// Create an obligation to delete
createQuery := `
@@ -190,7 +191,7 @@ func TestObligation_Delete(t *testing.T) {
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"area": "Obligation to Delete",
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "NON_COMPLIANT",
"type": "LEGAL",
},
@@ -225,7 +226,7 @@ func TestObligation_Delete(t *testing.T) {
func TestObligation_List(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
// Create multiple obligations
areas := []string{"Area A", "Area B", "Area C"}
@@ -256,7 +257,7 @@ func TestObligation_List(t *testing.T) {
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"area": area,
"ownerId": profileID.String(),
"ownerId": profileID,
"status": "NON_COMPLIANT",
"type": "LEGAL",
},
@@ -309,7 +310,7 @@ func TestObligation_List(t *testing.T) {
func TestObligation_StatusValues(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
statuses := []string{"NON_COMPLIANT", "PARTIALLY_COMPLIANT", "COMPLIANT"}
@@ -343,7 +344,7 @@ func TestObligation_StatusValues(t *testing.T) {
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"area": "Status Test " + status,
"ownerId": profileID.String(),
"ownerId": profileID,
"status": status,
"type": "LEGAL",
},

View File

@@ -221,11 +221,11 @@ const (
}
}`
listMembersQuery = `
query GetMembers($id: ID!) {
listUsersQuery = `
query GetProfiles($id: ID!) {
node(id: $id) {
... on Organization {
members(first: 10) { totalCount }
profiles(first: 10) { totalCount }
}
}
}`
@@ -1063,10 +1063,10 @@ func TestRBAC(t *testing.T) {
useConnect: true,
},
{
name: "owner can list members",
name: "owner can list users",
role: "owner",
client: owner,
query: listMembersQuery,
query: listUsersQuery,
variables: func() map[string]any {
return map[string]any{"id": owner.GetOrganizationID().String()}
},
@@ -1074,10 +1074,10 @@ func TestRBAC(t *testing.T) {
useConnect: true,
},
{
name: "admin can list members",
name: "admin can list users",
role: "admin",
client: admin,
query: listMembersQuery,
query: listUsersQuery,
variables: func() map[string]any {
return map[string]any{"id": owner.GetOrganizationID().String()}
},
@@ -1085,10 +1085,10 @@ func TestRBAC(t *testing.T) {
useConnect: true,
},
{
name: "viewer can list members",
name: "viewer can list users",
role: "viewer",
client: viewer,
query: listMembersQuery,
query: listUsersQuery,
variables: func() map[string]any {
return map[string]any{"id": owner.GetOrganizationID().String()}
},

View File

@@ -881,7 +881,7 @@ func TestRisk_OmittableOwner(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
// Create a people for owner assignment
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
riskID := factory.NewRisk(owner).WithName("Owner Test Risk").Create()
t.Run("set owner", func(t *testing.T) {
@@ -914,11 +914,11 @@ func TestRisk_OmittableOwner(t *testing.T) {
err := owner.Execute(query, map[string]any{
"input": map[string]any{
"id": riskID,
"ownerId": profileID.String(),
"ownerId": profileID,
},
}, &result)
require.NoError(t, err)
assert.Equal(t, profileID.String(), result.UpdateRisk.Risk.Owner.ID)
assert.Equal(t, profileID, result.UpdateRisk.Risk.Owner.ID)
})
t.Run("clear owner with null", func(t *testing.T) {

View File

@@ -30,7 +30,7 @@ func TestTask_Assign(t *testing.T) {
// Create measure and task
measureID := factory.NewMeasure(owner).Create()
taskID := factory.NewTask(owner, measureID).Create()
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
query := `
mutation UpdateTask($input: UpdateTaskInput!) {
@@ -61,13 +61,13 @@ func TestTask_Assign(t *testing.T) {
err := owner.Execute(query, map[string]any{
"input": map[string]any{
"taskId": taskID,
"assignedToId": profileID.String(),
"assignedToId": profileID,
},
}, &result)
require.NoError(t, err)
assert.Equal(t, taskID, result.UpdateTask.Task.ID)
assert.Equal(t, profileID.String(), result.UpdateTask.Task.AssignedTo.ID)
assert.Equal(t, profileID, result.UpdateTask.Task.AssignedTo.ID)
}
func TestTask_Unassign(t *testing.T) {
@@ -77,7 +77,7 @@ func TestTask_Unassign(t *testing.T) {
// Create measure, task, people and assign
measureID := factory.NewMeasure(owner).Create()
taskID := factory.NewTask(owner, measureID).Create()
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
// First assign the task
assignQuery := `
@@ -93,7 +93,7 @@ func TestTask_Unassign(t *testing.T) {
_, err := owner.Do(assignQuery, map[string]any{
"input": map[string]any{
"taskId": taskID,
"assignedToId": profileID.String(),
"assignedToId": profileID,
},
})
require.NoError(t, err)

View File

@@ -650,7 +650,7 @@ func TestTask_OmittableAssignee(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
// Create a profile for assignee
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
measureID := factory.NewMeasure(owner).
WithName("Task Assignee Test").
Create()
@@ -689,11 +689,11 @@ func TestTask_OmittableAssignee(t *testing.T) {
err := owner.Execute(query, map[string]any{
"input": map[string]any{
"taskId": taskID,
"assignedToId": profileID.String(),
"assignedToId": profileID,
},
}, &result)
require.NoError(t, err)
assert.Equal(t, profileID.String(), result.UpdateTask.Task.AssignedTo.ID)
assert.Equal(t, profileID, result.UpdateTask.Task.AssignedTo.ID)
})
t.Run("clear assignee", func(t *testing.T) {

View File

@@ -57,7 +57,7 @@ probod:
smtp:
addr: "localhost:1025"
tls-required: false
mailer-interval: 60
mailer-interval: 1
slack:
sender-interval: 60

View File

@@ -15,32 +15,32 @@
package console_test
import (
"fmt"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.probo.inc/probo/e2e/internal/testutil"
)
func TestMember_UpdateMembership(t *testing.T) {
func TestUser_UpdateMembership(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// Create an admin to update
_ = testutil.NewClientInOrg(t, testutil.RoleAdmin, owner)
// Get the member ID of the admin
// Get the user ID of the admin
query := `
query($id: ID!) {
node(id: $id) {
... on Organization {
members(first: 10) {
profiles(first: 10) {
edges {
node {
id
role
membership {
id
role
}
}
}
}
@@ -51,14 +51,16 @@ func TestMember_UpdateMembership(t *testing.T) {
var result struct {
Node struct {
Members struct {
Profiles struct {
Edges []struct {
Node struct {
ID string `json:"id"`
Role string `json:"role"`
Membership struct {
ID string `json:"id"`
Role string `json:"role"`
} `json:"membership"`
} `json:"node"`
} `json:"edges"`
} `json:"members"`
} `json:"profiles"`
} `json:"node"`
}
@@ -67,15 +69,15 @@ func TestMember_UpdateMembership(t *testing.T) {
}, &result)
require.NoError(t, err)
// Find the admin member
var adminMemberID string
for _, edge := range result.Node.Members.Edges {
if edge.Node.Role == "ADMIN" {
adminMemberID = edge.Node.ID
// Find the admin
var adminMembershipID string
for _, edge := range result.Node.Profiles.Edges {
if edge.Node.Membership.Role == "ADMIN" {
adminMembershipID = edge.Node.Membership.ID
break
}
}
require.NotEmpty(t, adminMemberID, "Should find admin member")
require.NotEmpty(t, adminMembershipID, "Should find admin member")
// Update the member role to VIEWER
mutation := `
@@ -101,7 +103,7 @@ func TestMember_UpdateMembership(t *testing.T) {
err = owner.ExecuteConnect(mutation, map[string]any{
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"membershipId": adminMemberID,
"membershipId": adminMembershipID,
"role": "VIEWER",
},
}, &mutationResult)
@@ -110,24 +112,26 @@ func TestMember_UpdateMembership(t *testing.T) {
assert.Equal(t, "VIEWER", mutationResult.UpdateMembership.Membership.Role)
}
func TestMember_RemoveMember(t *testing.T) {
func TestUser_RemoveUser(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// Create a member to remove
memberToRemove := testutil.NewClientInOrg(t, testutil.RoleViewer, owner)
_ = memberToRemove
// Create a user to remove
userToRemove := testutil.NewClientInOrg(t, testutil.RoleViewer, owner)
_ = userToRemove
// Get the member ID
// Get the user ID
query := `
query($id: ID!) {
node(id: $id) {
... on Organization {
members(first: 50) {
profiles(first: 50) {
edges {
node {
id
role
membership {
role
}
}
}
}
@@ -138,14 +142,16 @@ func TestMember_RemoveMember(t *testing.T) {
var result struct {
Node struct {
Members struct {
Profiles struct {
Edges []struct {
Node struct {
ID string `json:"id"`
Role string `json:"role"`
ID string `json:"id"`
Membership struct {
Role string `json:"role"`
} `json:"membership"`
} `json:"node"`
} `json:"edges"`
} `json:"members"`
} `json:"profiles"`
} `json:"node"`
}
@@ -154,113 +160,43 @@ func TestMember_RemoveMember(t *testing.T) {
}, &result)
require.NoError(t, err)
// Find a viewer member to remove
var memberID string
for _, edge := range result.Node.Members.Edges {
if edge.Node.Role == "VIEWER" {
memberID = edge.Node.ID
// Find a viewer user to remove
var userID string
for _, edge := range result.Node.Profiles.Edges {
if edge.Node.Membership.Role == "VIEWER" {
userID = edge.Node.ID
break
}
}
assert.NotEmpty(t, memberID, "Should find viewer member")
assert.NotEmpty(t, userID, "Should find viewer member")
// Remove the member
mutation := `
mutation($input: RemoveMemberInput!) {
removeMember(input: $input) {
deletedMembershipId
mutation($input: RemoveUserInput!) {
removeUser(input: $input) {
deletedProfileId
}
}
`
var mutationResult struct {
RemoveMember struct {
DeletedMembershipID string `json:"deletedMembershipId"`
} `json:"removeMember"`
RemoveUser struct {
DeletedProfileID string `json:"deletedProfileId"`
} `json:"removeUser"`
}
err = owner.ExecuteConnect(mutation, map[string]any{
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"membershipId": memberID,
"profileId": userID,
},
}, &mutationResult)
require.NoError(t, err)
assert.Equal(t, memberID, mutationResult.RemoveMember.DeletedMembershipID)
assert.Equal(t, userID, mutationResult.RemoveUser.DeletedProfileID)
}
func TestInvitation_Delete(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
// Create an invitation
inviteMutation := `
mutation($input: InviteMemberInput!) {
inviteMember(input: $input) {
invitationEdge {
node {
id
email
status
}
}
}
}
`
var inviteResult struct {
InviteMember struct {
InvitationEdge struct {
Node struct {
ID string `json:"id"`
Email string `json:"email"`
Status string `json:"status"`
} `json:"node"`
} `json:"invitationEdge"`
} `json:"inviteMember"`
}
err := owner.ExecuteConnect(inviteMutation, map[string]any{
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"email": fmt.Sprintf("invite.delete.%d@example.com", time.Now().UnixNano()),
"fullName": "Test User",
"role": "VIEWER",
},
}, &inviteResult)
require.NoError(t, err)
invitationID := inviteResult.InviteMember.InvitationEdge.Node.ID
assert.NotEmpty(t, invitationID)
// Delete the invitation
deleteMutation := `
mutation($input: DeleteInvitationInput!) {
deleteInvitation(input: $input) {
deletedInvitationId
}
}
`
var deleteResult struct {
DeleteInvitation struct {
DeletedInvitationID string `json:"deletedInvitationId"`
} `json:"deleteInvitation"`
}
err = owner.ExecuteConnect(deleteMutation, map[string]any{
"input": map[string]any{
"organizationId": owner.GetOrganizationID().String(),
"invitationId": invitationID,
},
}, &deleteResult)
require.NoError(t, err)
assert.Equal(t, invitationID, deleteResult.DeleteInvitation.DeletedInvitationID)
}
func TestMember_List(t *testing.T) {
func TestUser_List(t *testing.T) {
t.Parallel()
owner := testutil.NewClient(t, testutil.RoleOwner)
@@ -272,11 +208,13 @@ func TestMember_List(t *testing.T) {
query($id: ID!) {
node(id: $id) {
... on Organization {
members(first: 10) {
profiles(first: 10) {
edges {
node {
id
role
membership {
role
}
}
}
totalCount
@@ -288,15 +226,17 @@ func TestMember_List(t *testing.T) {
var result struct {
Node struct {
Members struct {
Profiles struct {
Edges []struct {
Node struct {
ID string `json:"id"`
Role string `json:"role"`
ID string `json:"id"`
Membership struct {
Role string `json:"role"`
} `json:"membership"`
} `json:"node"`
} `json:"edges"`
TotalCount int `json:"totalCount"`
} `json:"members"`
} `json:"profiles"`
} `json:"node"`
}
@@ -305,5 +245,5 @@ func TestMember_List(t *testing.T) {
}, &result)
require.NoError(t, err)
assert.GreaterOrEqual(t, result.Node.Members.TotalCount, 3, "Should have at least 3 members")
assert.GreaterOrEqual(t, result.Node.Profiles.TotalCount, 3, "Should have at least 3 members")
}

View File

@@ -755,7 +755,7 @@ func TestVendor_OmittableBusinessOwner(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
// Create a profile for owner assignment
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
vendorID := factory.NewVendor(owner).
WithName("BusinessOwner Test Vendor").
Create()
@@ -790,11 +790,11 @@ func TestVendor_OmittableBusinessOwner(t *testing.T) {
err := owner.Execute(query, map[string]any{
"input": map[string]any{
"id": vendorID,
"businessOwnerId": profileID.String(),
"businessOwnerId": profileID,
},
}, &result)
require.NoError(t, err)
assert.Equal(t, profileID.String(), result.UpdateVendor.Vendor.BusinessOwner.ID)
assert.Equal(t, profileID, result.UpdateVendor.Vendor.BusinessOwner.ID)
})
t.Run("clear business owner with null", func(t *testing.T) {
@@ -838,7 +838,7 @@ func TestVendor_OmittableSecurityOwner(t *testing.T) {
owner := testutil.NewClient(t, testutil.RoleOwner)
// Create a profile for owner assignment
profileID := testutil.NewClientInOrg(t, testutil.RoleViewer, owner).GetProfileID()
profileID := factory.CreateUser(owner)
vendorID := factory.NewVendor(owner).WithName("SecurityOwner Test Vendor").Create()
t.Run("set security owner", func(t *testing.T) {
@@ -871,11 +871,11 @@ func TestVendor_OmittableSecurityOwner(t *testing.T) {
err := owner.Execute(query, map[string]any{
"input": map[string]any{
"id": vendorID,
"securityOwnerId": profileID.String(),
"securityOwnerId": profileID,
},
}, &result)
require.NoError(t, err)
assert.Equal(t, profileID.String(), result.UpdateVendor.Vendor.SecurityOwner.ID)
assert.Equal(t, profileID, result.UpdateVendor.Vendor.SecurityOwner.ID)
})
t.Run("clear security owner with null", func(t *testing.T) {