Skip to content

Commit 7290e8d

Browse files
committed
adding support for sets in relationships
1 parent c750cbf commit 7290e8d

File tree

3 files changed

+66
-78
lines changed

3 files changed

+66
-78
lines changed

examples/resources/powerplatform_data_record/resource.tf

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ resource "powerplatform_data_record" "data_record_accounts" {
7070
data_record_id = powerplatform_data_record.data_record_sample_contact1.id
7171
}
7272

73-
contact_customer_accounts = [
73+
contact_customer_accounts = toset([
7474
{
7575
entity_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
7676
data_record_id = powerplatform_data_record.data_record_sample_contact1.id
@@ -79,9 +79,9 @@ resource "powerplatform_data_record" "data_record_accounts" {
7979
entity_logical_name = powerplatform_data_record.data_record_sample_contact2.table_logical_name
8080
data_record_id = powerplatform_data_record.data_record_sample_contact2.id
8181
}
82-
]
82+
])
8383

84-
# new_Account_Contact_Contact = [
84+
# new_Account_Contact_Contact = toset([
8585
# {
8686
# entity_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
8787
# data_record_id = powerplatform_data_record.data_record_sample_contact1.id
@@ -90,6 +90,6 @@ resource "powerplatform_data_record" "data_record_accounts" {
9090
# # entity_logical_name = powerplatform_data_record.data_record_sample_contact2.table_logical_name
9191
# # data_record_id = powerplatform_data_record.data_record_sample_contact2.id
9292
# # }
93-
# ]
93+
# ])
9494
}
9595
}

internal/powerplatform/resource_data_record_test.go

Lines changed: 52 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
)
1818

1919
func TestAccDataRecordResource_Validate_Create(t *testing.T) {
20+
2021
resource.Test(t, resource.TestCase{
2122
PreCheck: func() { TestAccPreCheck_Basic(t) },
2223
ProtoV6ProviderFactories: TestAccProtoV6ProviderFactories,
@@ -55,22 +56,22 @@ func TestAccDataRecordResource_Validate_Create(t *testing.T) {
5556
columns = {
5657
name = "Sample Account"
5758
creditonhold = false
58-
address1_latitude = 47.639583
59+
address1_latitude = 47.63
5960
description = "This is the description of the sample account"
6061
revenue = 5000000
6162
accountcategorycode = 1
6263
6364
primarycontactid = {
64-
entity_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
65+
table_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
6566
data_record_id = powerplatform_data_record.data_record_sample_contact1.id
6667
}
6768
68-
contact_customer_accounts = [
69+
contact_customer_accounts = toset([
6970
{
70-
entity_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
71+
table_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
7172
data_record_id = powerplatform_data_record.data_record_sample_contact1.id
7273
}
73-
]
74+
])
7475
}
7576
}
7677
`,
@@ -91,18 +92,18 @@ func TestAccDataRecordResource_Validate_Create(t *testing.T) {
9192
knownvalue.MapExact(map[string]knownvalue.Check{
9293
"name": knownvalue.StringExact("Sample Account"),
9394
"creditonhold": knownvalue.Bool(false),
94-
"address1_latitude": knownvalue.Float64Exact(47.639583),
95+
"address1_latitude": knownvalue.Float64Exact(47.63),
9596
"description": knownvalue.StringExact("This is the description of the sample account"),
9697
"revenue": knownvalue.Float64Exact(5000000),
9798
"accountcategorycode": knownvalue.Int64Exact(1),
9899
"primarycontactid": knownvalue.MapExact(map[string]knownvalue.Check{
99-
"entity_logical_name": knownvalue.StringExact("contact"),
100-
"data_record_id": knownvalue.StringRegexp(regexp.MustCompile(powerplatform_helpers.GuidRegex)),
100+
"table_logical_name": knownvalue.StringExact("contact"),
101+
"data_record_id": knownvalue.StringRegexp(regexp.MustCompile(powerplatform_helpers.GuidRegex)),
101102
}),
102-
"contact_customer_accounts": knownvalue.ListExact([]knownvalue.Check{
103+
"contact_customer_accounts": knownvalue.SetExact([]knownvalue.Check{
103104
0: knownvalue.MapExact(map[string]knownvalue.Check{
104-
"entity_logical_name": knownvalue.StringExact("contact"),
105-
"data_record_id": knownvalue.StringRegexp(regexp.MustCompile(powerplatform_helpers.GuidRegex)),
105+
"table_logical_name": knownvalue.StringExact("contact"),
106+
"data_record_id": knownvalue.StringRegexp(regexp.MustCompile(powerplatform_helpers.GuidRegex)),
106107
}),
107108
}),
108109
})),
@@ -254,16 +255,16 @@ func TestAccDataRecordResource_Validate_Delete_Relationships(t *testing.T) {
254255
name = "Sample Account"
255256
256257
primarycontactid = {
257-
entity_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
258+
table_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
258259
data_record_id = powerplatform_data_record.data_record_sample_contact1.id
259260
}
260261
261-
contact_customer_accounts = [
262+
contact_customer_accounts = toset([
262263
{
263-
entity_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
264+
table_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
264265
data_record_id = powerplatform_data_record.data_record_sample_contact1.id
265266
}
266-
]
267+
])
267268
}
268269
}
269270
`,
@@ -274,13 +275,13 @@ func TestAccDataRecordResource_Validate_Delete_Relationships(t *testing.T) {
274275
knownvalue.MapExact(map[string]knownvalue.Check{
275276
"name": knownvalue.StringExact("Sample Account"),
276277
"primarycontactid": knownvalue.MapExact(map[string]knownvalue.Check{
277-
"entity_logical_name": knownvalue.StringExact("contact"),
278-
"data_record_id": knownvalue.StringRegexp(regexp.MustCompile(powerplatform_helpers.GuidRegex)),
278+
"table_logical_name": knownvalue.StringExact("contact"),
279+
"data_record_id": knownvalue.StringRegexp(regexp.MustCompile(powerplatform_helpers.GuidRegex)),
279280
}),
280-
"contact_customer_accounts": knownvalue.ListExact([]knownvalue.Check{
281+
"contact_customer_accounts": knownvalue.SetExact([]knownvalue.Check{
281282
0: knownvalue.MapExact(map[string]knownvalue.Check{
282-
"entity_logical_name": knownvalue.StringExact("contact"),
283-
"data_record_id": knownvalue.StringRegexp(regexp.MustCompile(powerplatform_helpers.GuidRegex)),
283+
"table_logical_name": knownvalue.StringExact("contact"),
284+
"data_record_id": knownvalue.StringRegexp(regexp.MustCompile(powerplatform_helpers.GuidRegex)),
284285
}),
285286
}),
286287
})),
@@ -332,8 +333,6 @@ func TestAccDataRecordResource_Validate_Delete_Relationships(t *testing.T) {
332333

333334
func TestAccDataRecordResource_Validate_Update_Relationships(t *testing.T) {
334335

335-
t.Setenv("TF_ACC", "1")
336-
337336
var primarycontactidStep1 = &mock_helpers.StateValue{}
338337
var primarycontactidStep2 = &mock_helpers.StateValue{}
339338

@@ -395,20 +394,20 @@ func TestAccDataRecordResource_Validate_Update_Relationships(t *testing.T) {
395394
name = "Sample Account"
396395
397396
primarycontactid = {
398-
entity_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
397+
table_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
399398
data_record_id = powerplatform_data_record.data_record_sample_contact1.id
400399
}
401400
402-
contact_customer_accounts = [
401+
contact_customer_accounts = toset([
403402
{
404-
entity_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
403+
table_logical_name = powerplatform_data_record.data_record_sample_contact1.table_logical_name
405404
data_record_id = powerplatform_data_record.data_record_sample_contact1.id
406405
},
407406
{
408-
entity_logical_name = powerplatform_data_record.data_record_sample_contact2.table_logical_name
407+
table_logical_name = powerplatform_data_record.data_record_sample_contact2.table_logical_name
409408
data_record_id = powerplatform_data_record.data_record_sample_contact2.id
410409
}
411-
]
410+
])
412411
}
413412
}
414413
`,
@@ -420,17 +419,17 @@ func TestAccDataRecordResource_Validate_Update_Relationships(t *testing.T) {
420419
statecheck.ExpectKnownValue("powerplatform_data_record.data_record_account", tfjsonpath.New("columns"),
421420
knownvalue.MapPartial(map[string]knownvalue.Check{
422421
"primarycontactid": knownvalue.MapExact(map[string]knownvalue.Check{
423-
"entity_logical_name": knownvalue.StringExact("contact"),
424-
"data_record_id": mock_helpers.GetStateValue(primarycontactidStep1),
422+
"table_logical_name": knownvalue.StringExact("contact"),
423+
"data_record_id": mock_helpers.GetStateValue(primarycontactidStep1),
425424
}),
426-
"contact_customer_accounts": knownvalue.ListExact([]knownvalue.Check{
425+
"contact_customer_accounts": knownvalue.SetExact([]knownvalue.Check{
427426
0: knownvalue.MapExact(map[string]knownvalue.Check{
428-
"entity_logical_name": knownvalue.StringExact("contact"),
429-
"data_record_id": mock_helpers.GetStateValue(contactAtIndex1Step1),
427+
"table_logical_name": knownvalue.StringExact("contact"),
428+
"data_record_id": mock_helpers.GetStateValue(contactAtIndex1Step1),
430429
}),
431430
1: knownvalue.MapExact(map[string]knownvalue.Check{
432-
"entity_logical_name": knownvalue.StringExact("contact"),
433-
"data_record_id": mock_helpers.GetStateValue(contactAtIndex2Step1),
431+
"table_logical_name": knownvalue.StringExact("contact"),
432+
"data_record_id": mock_helpers.GetStateValue(contactAtIndex2Step1),
434433
}),
435434
}),
436435
})),
@@ -465,7 +464,6 @@ func TestAccDataRecordResource_Validate_Update_Relationships(t *testing.T) {
465464
}
466465
}
467466
468-
469467
resource "powerplatform_data_record" "data_record_sample_contact3" {
470468
environment_id = powerplatform_environment.test_env.id
471469
table_logical_name = "contact"
@@ -474,28 +472,27 @@ func TestAccDataRecordResource_Validate_Update_Relationships(t *testing.T) {
474472
}
475473
}
476474
477-
478475
resource "powerplatform_data_record" "data_record_account" {
479476
environment_id = powerplatform_environment.test_env.id
480477
table_logical_name = "account"
481478
columns = {
482479
name = "Sample Account"
483-
480+
484481
primarycontactid = {
485-
entity_logical_name = powerplatform_data_record.data_record_sample_contact2.table_logical_name
482+
table_logical_name = powerplatform_data_record.data_record_sample_contact2.table_logical_name
486483
data_record_id = powerplatform_data_record.data_record_sample_contact2.id
487484
}
488485
489-
contact_customer_accounts = [
486+
contact_customer_accounts = toset([
490487
{
491-
entity_logical_name = powerplatform_data_record.data_record_sample_contact2.table_logical_name
488+
table_logical_name = powerplatform_data_record.data_record_sample_contact2.table_logical_name
492489
data_record_id = powerplatform_data_record.data_record_sample_contact2.id
493490
},
494491
{
495-
entity_logical_name = powerplatform_data_record.data_record_sample_contact3.table_logical_name
492+
table_logical_name = powerplatform_data_record.data_record_sample_contact3.table_logical_name
496493
data_record_id = powerplatform_data_record.data_record_sample_contact3.id
497494
}
498-
]
495+
])
499496
}
500497
}
501498
`,
@@ -504,17 +501,17 @@ func TestAccDataRecordResource_Validate_Update_Relationships(t *testing.T) {
504501
statecheck.ExpectKnownValue("powerplatform_data_record.data_record_account", tfjsonpath.New("columns"),
505502
knownvalue.MapPartial(map[string]knownvalue.Check{
506503
"primarycontactid": knownvalue.MapExact(map[string]knownvalue.Check{
507-
"entity_logical_name": knownvalue.StringExact("contact"),
508-
"data_record_id": mock_helpers.GetStateValue(primarycontactidStep2),
504+
"table_logical_name": knownvalue.StringExact("contact"),
505+
"data_record_id": mock_helpers.GetStateValue(primarycontactidStep2),
509506
}),
510-
"contact_customer_accounts": knownvalue.ListExact([]knownvalue.Check{
507+
"contact_customer_accounts": knownvalue.SetExact([]knownvalue.Check{
511508
0: knownvalue.MapExact(map[string]knownvalue.Check{
512-
"entity_logical_name": knownvalue.StringExact("contact"),
513-
"data_record_id": mock_helpers.GetStateValue(contactAtIndex1Step2),
509+
"table_logical_name": knownvalue.StringExact("contact"),
510+
"data_record_id": mock_helpers.GetStateValue(contactAtIndex1Step2),
514511
}),
515512
1: knownvalue.MapExact(map[string]knownvalue.Check{
516-
"entity_logical_name": knownvalue.StringExact("contact"),
517-
"data_record_id": mock_helpers.GetStateValue(contactAtIndex2Step2),
513+
"table_logical_name": knownvalue.StringExact("contact"),
514+
"data_record_id": mock_helpers.GetStateValue(contactAtIndex2Step2),
518515
}),
519516
}),
520517
})),
@@ -549,7 +546,6 @@ func TestAccDataRecordResource_Validate_Update_Relationships(t *testing.T) {
549546
}
550547
}
551548
552-
553549
resource "powerplatform_data_record" "data_record_sample_contact3" {
554550
environment_id = powerplatform_environment.test_env.id
555551
table_logical_name = "contact"
@@ -558,28 +554,27 @@ func TestAccDataRecordResource_Validate_Update_Relationships(t *testing.T) {
558554
}
559555
}
560556
561-
562557
resource "powerplatform_data_record" "data_record_account" {
563558
environment_id = powerplatform_environment.test_env.id
564559
table_logical_name = "account"
565560
columns = {
566561
name = "Sample Account"
567-
562+
568563
primarycontactid = {
569-
entity_logical_name = powerplatform_data_record.data_record_sample_contact2.table_logical_name
564+
table_logical_name = powerplatform_data_record.data_record_sample_contact2.table_logical_name
570565
data_record_id = powerplatform_data_record.data_record_sample_contact2.id
571566
}
572567
573-
contact_customer_accounts = [
568+
contact_customer_accounts = toset([
574569
{
575-
entity_logical_name = powerplatform_data_record.data_record_sample_contact2.table_logical_name
570+
table_logical_name = powerplatform_data_record.data_record_sample_contact2.table_logical_name
576571
data_record_id = powerplatform_data_record.data_record_sample_contact2.id
577572
},
578573
{
579-
entity_logical_name = powerplatform_data_record.data_record_sample_contact3.table_logical_name
574+
table_logical_name = powerplatform_data_record.data_record_sample_contact3.table_logical_name
580575
data_record_id = powerplatform_data_record.data_record_sample_contact3.id
581576
}
582-
]
577+
])
583578
}
584579
}
585580
`,

internal/powerplatform/services/data_record/resource_data_record.go

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -292,12 +292,10 @@ func convertColumnsToState(ctx context.Context, apiClient *DataRecordClient, cur
292292
attributes[key] = nestedObjectValue
293293
}
294294
case []interface{}:
295-
var listTypes []attr.Type
296-
var listValues []attr.Value
297-
tupleElementType := types.ObjectType{
295+
setObjectValues := []attr.Value{}
296+
var setObjectType = types.ObjectType{
298297
AttrTypes: objectType,
299298
}
300-
301299
relationMap, _ := apiClient.GetRelationData(ctx, currentState.Id.ValueString(), environmentId, tableLogicalName, key)
302300

303301
for _, rawItem := range relationMap {
@@ -312,21 +310,16 @@ func convertColumnsToState(ctx context.Context, apiClient *DataRecordClient, cur
312310
}
313311
}
314312

315-
v, _ := types.ObjectValue(objectType, map[string]attr.Value{
316-
"table_logical_name": types.StringValue(relationTableLogicalName),
317-
"data_record_id": types.StringValue(dataRecordId),
318-
})
319-
listValues = append(listValues, v)
320-
listTypes = append(listTypes, tupleElementType)
321-
}
322-
323-
nestedObjectType := types.TupleType{
324-
ElemTypes: listTypes,
313+
setObjectValues = append(setObjectValues, types.ObjectValueMust(objectType,
314+
map[string]attr.Value{
315+
"table_logical_name": types.StringValue(relationTableLogicalName),
316+
"data_record_id": types.StringValue(dataRecordId),
317+
}))
325318
}
326-
nestedObjectValue, _ := types.TupleValue(listTypes, listValues)
327319

328-
attributes[key] = nestedObjectValue
329-
attributeTypes[key] = nestedObjectType
320+
setValue, _ := types.SetValue(setObjectType, setObjectValues)
321+
attributes[key] = setValue
322+
attributeTypes[key] = types.SetType{ElemType: setObjectType}
330323
}
331324
}
332325

0 commit comments

Comments
 (0)