Skip to content

Commit

Permalink
Add Sorting to screen_partials Flattening Logic to Resolve Indexing…
Browse files Browse the repository at this point in the history
… Issues with Prompt Screen Partials (#1019)

* Change screen_partials to TypeSet for consistent ordering in prompt screen partials

* Add Sorting to screen_partials Flattening Logic to Resolve Indexing Issues
  • Loading branch information
developerkunal authored Sep 6, 2024
1 parent e12f8b4 commit b41136d
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 14 deletions.
19 changes: 15 additions & 4 deletions internal/auth0/prompt/flatten.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"bytes"
"encoding/json"
"fmt"
"sort"
"strings"

"github.com/auth0/go-auth0/management"
Expand Down Expand Up @@ -44,7 +45,9 @@ func flattenPromptScreenPartials(data *schema.ResourceData, screenPartials *mana
}

func flattenPromptScreenPartial(data *schema.ResourceData, partial *management.PromptScreenPartials) error {
promptName, screenName := strings.Split(data.Id(), ":")[0], strings.Split(data.Id(), ":")[1]
idComponents := strings.Split(data.Id(), ":")
promptName, screenName := idComponents[0], idComponents[1]

var insertionPoints interface{}
if partial == nil || (*partial)[management.ScreenName(screenName)] == nil {
insertionPoints = nil
Expand All @@ -64,14 +67,22 @@ func flattenPromptScreenPartialsList(screenPartials *management.PromptScreenPart
return nil
}

screenNames := make([]string, 0, len(*screenPartials))
for screenName := range *screenPartials {
screenNames = append(screenNames, string(screenName))
}

sort.Strings(screenNames)

var screenPartialsList []map[string]interface{}

for screenName, insertionPoints := range *screenPartials {
for _, screenName := range screenNames {
insertionPoints := (*screenPartials)[management.ScreenName(screenName)]
flattenedInsertionPoints := flattenInsertionPoints(insertionPoints)

screenPartialsList = append(screenPartialsList, map[string]interface{}{
"screen_name": string(screenName),
"insertion_points": flattenedInsertionPoints, // This should now be a []map[string]interface{}.
"screen_name": screenName,
"insertion_points": flattenedInsertionPoints,
})
}
return screenPartialsList
Expand Down
4 changes: 2 additions & 2 deletions internal/auth0/prompt/resource_screen_partial.go
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,8 @@ func updatePromptScreenPartial(ctx context.Context, data *schema.ResourceData, m

func deletePromptScreenPartial(ctx context.Context, data *schema.ResourceData, meta any) diag.Diagnostics {
api := meta.(*config.Config).GetAPI()

promptName, screenName := strings.Split(data.Id(), ":")[0], strings.Split(data.Id(), ":")[1]
idComponents := strings.Split(data.Id(), ":")
promptName, screenName := idComponents[0], idComponents[1]

prompt := management.PromptType(promptName)

Expand Down
11 changes: 3 additions & 8 deletions internal/auth0/prompt/resource_screen_partials_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,22 +35,21 @@ const testAccPromptScreenPartialsCreate = testAccPromptScreenPartialWithoutScree
resource "auth0_prompt_screen_partials" "prompt_screen_partials" {
depends_on = [ auth0_branding.my_brand ]
prompt_type = "login-passwordless"
screen_partials {
screen_name = "login-passwordless-email-code"
insertion_points {
form_content_start = "<div>Form Content Start</div>"
form_content_end = "<div>Form Content End</div>"
}
}
screen_partials {
screen_name = "login-passwordless-sms-otp"
insertion_points {
form_content_start = "<div>Form Content Start</div>"
form_content_end = "<div>Form Content End</div>"
}
}
}
`

Expand Down Expand Up @@ -90,14 +89,10 @@ func TestAccPromptScreenPartials(t *testing.T) {
Config: testAccPromptScreenPartialsCreate,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("auth0_prompt_screen_partials.prompt_screen_partials", "prompt_type", "login-passwordless"),
resource.TestCheckTypeSetElemNestedAttrs("auth0_prompt_screen_partials.prompt_screen_partials", "screen_partials.*", map[string]string{
"screen_name": "login-passwordless-email-code",
}),
resource.TestCheckResourceAttr("auth0_prompt_screen_partials.prompt_screen_partials", "screen_partials.0.screen_name", "login-passwordless-email-code"),
resource.TestCheckResourceAttr("auth0_prompt_screen_partials.prompt_screen_partials", "screen_partials.0.insertion_points.0.form_content_start", "<div>Form Content Start</div>"),
resource.TestCheckResourceAttr("auth0_prompt_screen_partials.prompt_screen_partials", "screen_partials.0.insertion_points.0.form_content_end", "<div>Form Content End</div>"),
resource.TestCheckTypeSetElemNestedAttrs("auth0_prompt_screen_partials.prompt_screen_partials", "screen_partials.*", map[string]string{
"screen_name": "login-passwordless-sms-otp",
}),
resource.TestCheckResourceAttr("auth0_prompt_screen_partials.prompt_screen_partials", "screen_partials.1.screen_name", "login-passwordless-sms-otp"),
resource.TestCheckResourceAttr("auth0_prompt_screen_partials.prompt_screen_partials", "screen_partials.1.insertion_points.0.form_content_start", "<div>Form Content Start</div>"),
resource.TestCheckResourceAttr("auth0_prompt_screen_partials.prompt_screen_partials", "screen_partials.1.insertion_points.0.form_content_end", "<div>Form Content End</div>"),
),
Expand Down

0 comments on commit b41136d

Please sign in to comment.