Skip to content

Commit

Permalink
[feature] add extra properties to users
Browse files Browse the repository at this point in the history
Closes #92

Note, I didn't add middle_name, since this is not returned by the SHOW USER DDL. We will need to make more significant changes and use DESCRIBE USER if we want support for middle_name.
  • Loading branch information
ryanking committed Aug 24, 2020
1 parent 09df481 commit 49d7cab
Show file tree
Hide file tree
Showing 4 changed files with 74 additions and 1 deletion.
45 changes: 45 additions & 0 deletions pkg/resources/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ var userProperties = []string{
"rsa_public_key",
"rsa_public_key_2",
"must_change_password",
"email",
"display_name",
"first_name",
"last_name",
}

var diffCaseInsensitive = func(k, old, new string, d *schema.ResourceData) bool {
Expand Down Expand Up @@ -92,6 +96,27 @@ var userSchema = map[string]*schema.Schema{
Optional: true,
Description: "Specifies whether the user is forced to change their password on next login (including their first/initial login) into the system.",
},
"email": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Description: "Email address for the user.",
},
"display_name": &schema.Schema{
Type: schema.TypeString,
Computed: true,
Optional: true,
Description: "Name displayed for the user in the Snowflake web interface.",
},
"first_name": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Description: "First name of the user.",
},
"last_name": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Description: "Last name of the user.",
},

// DISPLAY_NAME = <string>
// FIRST_NAME = <string>
Expand Down Expand Up @@ -195,6 +220,26 @@ func ReadUser(data *schema.ResourceData, meta interface{}) error {
}

err = data.Set("has_rsa_public_key", u.HasRsaPublicKey)
if err != nil {
return err
}

err = data.Set("email", u.Email.String)
if err != nil {
return err
}

err = data.Set("display_name", u.DisplayName.String)
if err != nil {
return err
}

err = data.Set("first_name", u.FirstName.String)
if err != nil {
return err
}

err = data.Set("last_name", u.LastName.String)

return err
}
Expand Down
20 changes: 20 additions & 0 deletions pkg/resources/user_acceptance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ func TestAccUser(t *testing.T) {
resource.TestCheckResourceAttr("snowflake_user.w", "name", prefix),
resource.TestCheckResourceAttr("snowflake_user.w", "comment", "test comment"),
resource.TestCheckResourceAttr("snowflake_user.w", "login_name", strings.ToUpper(fmt.Sprintf("%s_login", prefix))),
resource.TestCheckResourceAttr("snowflake_user.w", "display_name", "Display Name"),
resource.TestCheckResourceAttr("snowflake_user.w", "first_name", "Marcin"),
resource.TestCheckResourceAttr("snowflake_user.w", "last_name", "Zukowski"),
resource.TestCheckResourceAttr("snowflake_user.w", "email", "fake@email.com"),
checkBool("snowflake_user.w", "disabled", false),
resource.TestCheckResourceAttr("snowflake_user.w", "default_warehouse", "foo"),
resource.TestCheckResourceAttr("snowflake_user.w", "default_role", "foo"),
Expand All @@ -63,6 +67,10 @@ func TestAccUser(t *testing.T) {
resource.TestCheckResourceAttr("snowflake_user.w", "name", prefix2),
resource.TestCheckResourceAttr("snowflake_user.w", "comment", "test comment"),
resource.TestCheckResourceAttr("snowflake_user.w", "login_name", strings.ToUpper(fmt.Sprintf("%s_login", prefix2))),
resource.TestCheckResourceAttr("snowflake_user.w", "display_name", "Display Name"),
resource.TestCheckResourceAttr("snowflake_user.w", "first_name", "Marcin"),
resource.TestCheckResourceAttr("snowflake_user.w", "last_name", "Zukowski"),
resource.TestCheckResourceAttr("snowflake_user.w", "email", "fake@email.com"),
checkBool("snowflake_user.w", "disabled", false),
resource.TestCheckResourceAttr("snowflake_user.w", "default_warehouse", "foo"),
resource.TestCheckResourceAttr("snowflake_user.w", "default_role", "foo"),
Expand All @@ -77,6 +85,10 @@ func TestAccUser(t *testing.T) {
resource.TestCheckResourceAttr("snowflake_user.w", "comment", "test comment 2"),
resource.TestCheckResourceAttr("snowflake_user.w", "password", "best password"),
resource.TestCheckResourceAttr("snowflake_user.w", "login_name", strings.ToUpper(fmt.Sprintf("%s_login", prefix2))),
resource.TestCheckResourceAttr("snowflake_user.w", "display_name", "New Name"),
resource.TestCheckResourceAttr("snowflake_user.w", "first_name", "Benoit"),
resource.TestCheckResourceAttr("snowflake_user.w", "last_name", "Dageville"),
resource.TestCheckResourceAttr("snowflake_user.w", "email", "fake@email.net"),
checkBool("snowflake_user.w", "disabled", true),
resource.TestCheckResourceAttr("snowflake_user.w", "default_warehouse", "bar"),
resource.TestCheckResourceAttr("snowflake_user.w", "default_role", "bar"),
Expand All @@ -101,6 +113,10 @@ resource "snowflake_user" "w" {
name = "%s"
comment = "test comment"
login_name = "%s_login"
display_name = "Display Name"
first_name = "Marcin"
last_name = "Zukowski"
email = "fake@email.com"
disabled = false
default_warehouse="foo"
default_role="foo"
Expand All @@ -126,6 +142,10 @@ resource "snowflake_user" "w" {
comment = "test comment 2"
password = "best password"
login_name = "%s_login"
display_name = "New Name"
first_name = "Benoit"
last_name = "Dageville"
email = "fake@email.net"
disabled = true
default_warehouse="bar"
default_role="bar"
Expand Down
6 changes: 5 additions & 1 deletion pkg/resources/user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ func TestUserCreate(t *testing.T) {
"comment": "great comment",
"password": "awesomepassword",
"login_name": "gname",
"display_name": "Display Name",
"first_name": "Marcin",
"last_name": "Zukowski",
"email": "fake@email.com",
"disabled": true,
"default_warehouse": "mywarehouse",
"default_namespace": "mynamespace",
Expand All @@ -38,7 +42,7 @@ func TestUserCreate(t *testing.T) {
r.NotNil(d)

WithMockDb(t, func(db *sql.DB, mock sqlmock.Sqlmock) {
mock.ExpectExec(`^CREATE USER "good_name" COMMENT='great comment' DEFAULT_NAMESPACE='mynamespace' DEFAULT_ROLE='bestrole' DEFAULT_WAREHOUSE='mywarehouse' LOGIN_NAME='gname' PASSWORD='awesomepassword' RSA_PUBLIC_KEY='asdf' RSA_PUBLIC_KEY_2='asdf2' DISABLED=true MUST_CHANGE_PASSWORD=true$`).WillReturnResult(sqlmock.NewResult(1, 1))
mock.ExpectExec(`^CREATE USER "good_name" COMMENT='great comment' DEFAULT_NAMESPACE='mynamespace' DEFAULT_ROLE='bestrole' DEFAULT_WAREHOUSE='mywarehouse' DISPLAY_NAME='Display Name' EMAIL='fake@email.com' FIRST_NAME='Marcin' LAST_NAME='Zukowski' LOGIN_NAME='gname' PASSWORD='awesomepassword' RSA_PUBLIC_KEY='asdf' RSA_PUBLIC_KEY_2='asdf2' DISABLED=true MUST_CHANGE_PASSWORD=true$`).WillReturnResult(sqlmock.NewResult(1, 1))
expectReadUser(mock)
err := resources.CreateUser(d, db)
r.NoError(err)
Expand Down
4 changes: 4 additions & 0 deletions pkg/snowflake/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,11 @@ type user struct {
DefaultRole sql.NullString `db:"default_role"`
DefaultWarehouse sql.NullString `db:"default_warehouse"`
Disabled bool `db:"disabled"`
DisplayName sql.NullString `db:"display_name"`
Email sql.NullString `db:"email"`
FirstName sql.NullString `db:"first_name"`
HasRsaPublicKey bool `db:"has_rsa_public_key"`
LastName sql.NullString `db:"last_name"`
LoginName sql.NullString `db:"login_name"`
Name sql.NullString `db:"name"`
}
Expand Down

0 comments on commit 49d7cab

Please sign in to comment.