Skip to content

Commit

Permalink
fix data_source_keycloak_user panic when user doesn't exist (#460)
Browse files Browse the repository at this point in the history
  • Loading branch information
mrparkers authored Jan 12, 2021
1 parent e728de7 commit aaf94d4
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 2 deletions.
2 changes: 1 addition & 1 deletion keycloak/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ type FederatedIdentity struct {
UserName string `json:"userName"`
}

type FederatedIdentities []FederatedIdentity
type FederatedIdentities []*FederatedIdentity

type User struct {
Id string `json:"id,omitempty"`
Expand Down
4 changes: 4 additions & 0 deletions provider/data_source_keycloak_user.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package provider

import (
"fmt"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/mrparkers/terraform-provider-keycloak/keycloak"
)
Expand Down Expand Up @@ -66,6 +67,9 @@ func dataSourceKeycloakUserRead(data *schema.ResourceData, meta interface{}) err
if err != nil {
return err
}
if user == nil {
return fmt.Errorf("user with username %s not found", username)
}

mapFromUserToData(data, user)

Expand Down
31 changes: 31 additions & 0 deletions provider/data_source_keycloak_user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package provider

import (
"fmt"
"regexp"
"testing"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
Expand Down Expand Up @@ -32,6 +33,23 @@ func TestAccKeycloakDataSourceUser(t *testing.T) {
})
}

func TestAccKeycloakDataSourceUser_gracefulError(t *testing.T) {
t.Parallel()
username := acctest.RandomWithPrefix("tf-acc")

resource.Test(t, resource.TestCase{
ProviderFactories: testAccProviderFactories,
PreCheck: func() { testAccPreCheck(t) },
CheckDestroy: testAccCheckKeycloakUserDestroy(),
Steps: []resource.TestStep{
{
Config: testDataSourceKeycloakUser_NoUser(username),
ExpectError: regexp.MustCompile(fmt.Sprintf("user with username %s not found", username)),
},
},
})
}

func testAccCheckDataKeycloakUser(resourceName string) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[resourceName]
Expand Down Expand Up @@ -82,3 +100,16 @@ data "keycloak_user" "user" {
}
`, testAccRealm.Realm, username)
}

func testDataSourceKeycloakUser_NoUser(username string) string {
return fmt.Sprintf(`
data "keycloak_realm" "realm" {
realm = "%s"
}
data "keycloak_user" "user" {
realm_id = data.keycloak_realm.realm.id
username = "%s"
}
`, testAccRealm.Realm, username)
}
2 changes: 1 addition & 1 deletion provider/resource_keycloak_user.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ func getUserFederatedIdentitiesFromData(data []interface{}) *keycloak.FederatedI
var federatedIdentities keycloak.FederatedIdentities
for _, d := range data {
federatedIdentitiesData := d.(map[string]interface{})
federatedIdentity := keycloak.FederatedIdentity{
federatedIdentity := &keycloak.FederatedIdentity{
IdentityProvider: federatedIdentitiesData["identity_provider"].(string),
UserId: federatedIdentitiesData["user_id"].(string),
UserName: federatedIdentitiesData["user_name"].(string),
Expand Down

0 comments on commit aaf94d4

Please sign in to comment.