Fix setops not used in block set renderer (#1950)

Signed-off-by: buraksenn <buraksenb@gmail.com>
This commit is contained in:
Burak Şen 2024-09-17 16:36:35 +03:00 committed by GitHub
parent bb63574f09
commit 2091c96984
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 51 additions and 6 deletions

View File

@ -79,7 +79,6 @@ func (renderer blockRenderer) RenderHuman(diff computed.Diff, indent int, opts c
for _, key := range attributeKeys {
attribute := renderer.attributes[key]
if importantAttribute(key) {
// Always display the important attributes.
for _, warning := range attribute.WarningsHuman(indent+1, importantAttributeOpts) {
buf.WriteString(fmt.Sprintf("%s%s\n", formatIndent(indent+1), warning))
@ -104,10 +103,8 @@ func (renderer blockRenderer) RenderHuman(diff computed.Diff, indent int, opts c
blockKeys := renderer.blocks.GetAllKeys()
for _, key := range blockKeys {
foundChangedBlock := false
renderBlock := func(diff computed.Diff, mapKey string, opts computed.RenderHumanOpts) {
creatingSensitiveValue := diff.Action == plans.Create && renderer.blocks.AfterSensitiveBlocks[key]
deletingSensitiveValue := diff.Action == plans.Delete && renderer.blocks.BeforeSensitiveBlocks[key]
modifyingSensitiveValue := (diff.Action == plans.Update || diff.Action == plans.NoOp) && (renderer.blocks.AfterSensitiveBlocks[key] || renderer.blocks.BeforeSensitiveBlocks[key])
@ -146,7 +143,6 @@ func (renderer blockRenderer) RenderHuman(diff computed.Diff, indent int, opts c
buf.WriteString(fmt.Sprintf("%s%s\n", formatIndent(indent+1), warning))
}
buf.WriteString(fmt.Sprintf("%s%s%s%s %s\n", formatIndent(indent+1), writeDiffActionSymbol(diff.Action, blockOpts), EnsureValidAttributeName(key), mapKey, diff.RenderHuman(indent+1, blockOpts)))
}
switch {
@ -163,12 +159,11 @@ func (renderer blockRenderer) RenderHuman(diff computed.Diff, indent int, opts c
renderBlock(renderer.blocks.MapBlocks[key][innerKey], fmt.Sprintf(" %q", innerKey), opts)
}
case renderer.blocks.IsSetBlock(key):
setOpts := opts.Clone()
setOpts.OverrideForcesReplacement = diff.Replace
for _, block := range renderer.blocks.SetBlocks[key] {
renderBlock(block, "", opts)
renderBlock(block, "", setOpts)
}
case renderer.blocks.IsListBlock(key):
for _, block := range renderer.blocks.ListBlocks[key] {

View File

@ -1987,6 +1987,56 @@ jsonencode(
- number = 1 -> null
~ string = "old" -> "new"
}
}`,
},
"set_block_override_replacement": {
diff: computed.Diff{
Renderer: Block(
nil,
Blocks{
SetBlocks: map[string][]computed.Diff{
"set_blocks": {
{
Renderer: Block(map[string]computed.Diff{
"number": {
Renderer: Primitive(json.Number("1"), json.Number("2"), cty.Number),
Action: plans.Update,
},
"string": {
Renderer: Primitive(nil, "new", cty.String),
Action: plans.Create,
},
}, Blocks{}),
Action: plans.Update,
},
{
Renderer: Block(map[string]computed.Diff{
"number": {
Renderer: Primitive(json.Number("1"), nil, cty.Number),
Action: plans.Delete,
},
"string": {
Renderer: Primitive("old", "new", cty.String),
Action: plans.Update,
},
}, Blocks{}),
Action: plans.Update,
},
},
},
}),
Replace: true,
},
expected: `
{ # forces replacement
~ set_blocks {
~ number = 1 -> 2
+ string = "new"
}
~ set_blocks {
- number = 1 -> null
~ string = "old" -> "new"
}
}`,
},
"map_block_update": {