@@ -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",
|
||||
},
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
|
||||
@@ -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 := `
|
||||
|
||||
@@ -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 := `
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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",
|
||||
},
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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",
|
||||
},
|
||||
|
||||
@@ -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()}
|
||||
},
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
2
e2e/console/testdata/config.yaml
vendored
2
e2e/console/testdata/config.yaml
vendored
@@ -57,7 +57,7 @@ probod:
|
||||
smtp:
|
||||
addr: "localhost:1025"
|
||||
tls-required: false
|
||||
mailer-interval: 60
|
||||
mailer-interval: 1
|
||||
slack:
|
||||
sender-interval: 60
|
||||
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user