From 016f1fc6e9639717d2e2f259e67f3b1c88025223 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan=20Cie=C5=9Blak?= <jan.cieslak@snowflake.com>
Date: Mon, 24 Jun 2024 13:26:39 +0200
Subject: [PATCH] Changes after review

---
 docs/data-sources/databases.md     | 202 +++++++++++++++++++++++++++++
 pkg/schemas/database_parameters.go |   5 +-
 pkg/sdk/common_types_test.go       | 145 ++++++---------------
 3 files changed, 242 insertions(+), 110 deletions(-)

diff --git a/docs/data-sources/databases.md b/docs/data-sources/databases.md
index 991f8741fcc..d933362a52f 100644
--- a/docs/data-sources/databases.md
+++ b/docs/data-sources/databases.md
@@ -151,6 +151,208 @@ Read-Only:
 
 Read-Only:
 
+- `catalog` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--catalog))
+- `data_retention_time_in_days` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--data_retention_time_in_days))
+- `default_ddl_collation` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--default_ddl_collation))
+- `enable_console_output` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--enable_console_output))
+- `external_volume` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--external_volume))
+- `log_level` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--log_level))
+- `max_data_extension_time_in_days` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--max_data_extension_time_in_days))
+- `quoted_identifiers_ignore_case` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--quoted_identifiers_ignore_case))
+- `replace_invalid_characters` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--replace_invalid_characters))
+- `storage_serialization_policy` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--storage_serialization_policy))
+- `suspend_task_after_num_failures` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--suspend_task_after_num_failures))
+- `task_auto_retry_attempts` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--task_auto_retry_attempts))
+- `trace_level` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--trace_level))
+- `user_task_managed_initial_warehouse_size` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--user_task_managed_initial_warehouse_size))
+- `user_task_minimum_trigger_interval_in_seconds` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--user_task_minimum_trigger_interval_in_seconds))
+- `user_task_timeout_ms` (List of Object) (see [below for nested schema](#nestedobjatt--databases--parameters--user_task_timeout_ms))
+
+<a id="nestedobjatt--databases--parameters--catalog"></a>
+### Nested Schema for `databases.parameters.catalog`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--data_retention_time_in_days"></a>
+### Nested Schema for `databases.parameters.data_retention_time_in_days`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--default_ddl_collation"></a>
+### Nested Schema for `databases.parameters.default_ddl_collation`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--enable_console_output"></a>
+### Nested Schema for `databases.parameters.enable_console_output`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--external_volume"></a>
+### Nested Schema for `databases.parameters.external_volume`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--log_level"></a>
+### Nested Schema for `databases.parameters.log_level`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--max_data_extension_time_in_days"></a>
+### Nested Schema for `databases.parameters.max_data_extension_time_in_days`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--quoted_identifiers_ignore_case"></a>
+### Nested Schema for `databases.parameters.quoted_identifiers_ignore_case`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--replace_invalid_characters"></a>
+### Nested Schema for `databases.parameters.replace_invalid_characters`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--storage_serialization_policy"></a>
+### Nested Schema for `databases.parameters.storage_serialization_policy`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--suspend_task_after_num_failures"></a>
+### Nested Schema for `databases.parameters.suspend_task_after_num_failures`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--task_auto_retry_attempts"></a>
+### Nested Schema for `databases.parameters.task_auto_retry_attempts`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--trace_level"></a>
+### Nested Schema for `databases.parameters.trace_level`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--user_task_managed_initial_warehouse_size"></a>
+### Nested Schema for `databases.parameters.user_task_managed_initial_warehouse_size`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--user_task_minimum_trigger_interval_in_seconds"></a>
+### Nested Schema for `databases.parameters.user_task_minimum_trigger_interval_in_seconds`
+
+Read-Only:
+
+- `default` (String)
+- `description` (String)
+- `key` (String)
+- `level` (String)
+- `value` (String)
+
+
+<a id="nestedobjatt--databases--parameters--user_task_timeout_ms"></a>
+### Nested Schema for `databases.parameters.user_task_timeout_ms`
+
+Read-Only:
+
 - `default` (String)
 - `description` (String)
 - `key` (String)
diff --git a/pkg/schemas/database_parameters.go b/pkg/schemas/database_parameters.go
index 5042a6b4493..79fa3e7fdcc 100644
--- a/pkg/schemas/database_parameters.go
+++ b/pkg/schemas/database_parameters.go
@@ -1,10 +1,11 @@
 package schemas
 
 import (
-	"github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk"
-	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
 	"slices"
 	"strings"
+
+	"github.com/Snowflake-Labs/terraform-provider-snowflake/pkg/sdk"
+	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
 )
 
 var (
diff --git a/pkg/sdk/common_types_test.go b/pkg/sdk/common_types_test.go
index 15c96b72c7e..3029d81e10e 100644
--- a/pkg/sdk/common_types_test.go
+++ b/pkg/sdk/common_types_test.go
@@ -1,6 +1,7 @@
 package sdk
 
 import (
+	"fmt"
 	"testing"
 
 	"github.com/stretchr/testify/assert"
@@ -115,35 +116,19 @@ func TestToStorageSerializationPolicy(t *testing.T) {
 		Expected StorageSerializationPolicy
 		Error    string
 	}{
-		{
-			Name:     "optimized storage serialization policy",
-			Input:    string(StorageSerializationPolicyOptimized),
-			Expected: StorageSerializationPolicyOptimized,
-		},
-		{
-			Name:     "compatible storage serialization policy",
-			Input:    string(StorageSerializationPolicyCompatible),
-			Expected: StorageSerializationPolicyCompatible,
-		},
-		{
-			Name:  "validation: incorrect storage serialization policy",
-			Input: "incorrect",
-			Error: "unknown storage serialization policy: incorrect",
-		},
-		{
-			Name:  "validation: empty input",
-			Input: "",
-			Error: "unknown storage serialization policy: ",
-		},
-		{
-			Name:     "validation: lower case input",
-			Input:    "optimized",
-			Expected: StorageSerializationPolicyOptimized,
-		},
+		{Input: string(StorageSerializationPolicyOptimized), Expected: StorageSerializationPolicyOptimized},
+		{Input: string(StorageSerializationPolicyCompatible), Expected: StorageSerializationPolicyCompatible},
+		{Name: "validation: incorrect storage serialization policy", Input: "incorrect", Error: "unknown storage serialization policy: incorrect"},
+		{Name: "validation: empty input", Input: "", Error: "unknown storage serialization policy: "},
+		{Name: "validation: lower case input", Input: "optimized", Expected: StorageSerializationPolicyOptimized},
 	}
 
 	for _, testCase := range testCases {
-		t.Run(testCase.Name, func(t *testing.T) {
+		name := testCase.Name
+		if name == "" {
+			name = fmt.Sprintf("%v storage serialization policy", testCase.Input)
+		}
+		t.Run(name, func(t *testing.T) {
 			value, err := ToStorageSerializationPolicy(testCase.Input)
 			if testCase.Error != "" {
 				assert.Empty(t, value)
@@ -163,60 +148,24 @@ func TestToLogLevel(t *testing.T) {
 		Expected LogLevel
 		Error    string
 	}{
-		{
-			Name:     "trace log level",
-			Input:    string(LogLevelTrace),
-			Expected: LogLevelTrace,
-		},
-		{
-			Name:     "debug log level",
-			Input:    string(LogLevelDebug),
-			Expected: LogLevelDebug,
-		},
-		{
-			Name:     "info log level",
-			Input:    string(LogLevelInfo),
-			Expected: LogLevelInfo,
-		},
-		{
-			Name:     "warn log level",
-			Input:    string(LogLevelWarn),
-			Expected: LogLevelWarn,
-		},
-		{
-			Name:     "error log level",
-			Input:    string(LogLevelError),
-			Expected: LogLevelError,
-		},
-		{
-			Name:     "fatal log level",
-			Input:    string(LogLevelFatal),
-			Expected: LogLevelFatal,
-		},
-		{
-			Name:     "off log level",
-			Input:    string(LogLevelOff),
-			Expected: LogLevelOff,
-		},
-		{
-			Name:  "validation: incorrect log level",
-			Input: "incorrect",
-			Error: "unknown log level: incorrect",
-		},
-		{
-			Name:  "validation: empty input",
-			Input: "",
-			Error: "unknown log level: ",
-		},
-		{
-			Name:     "validation: lower case input",
-			Input:    "info",
-			Expected: LogLevelInfo,
-		},
+		{Input: string(LogLevelTrace), Expected: LogLevelTrace},
+		{Input: string(LogLevelDebug), Expected: LogLevelDebug},
+		{Input: string(LogLevelInfo), Expected: LogLevelInfo},
+		{Input: string(LogLevelWarn), Expected: LogLevelWarn},
+		{Input: string(LogLevelError), Expected: LogLevelError},
+		{Input: string(LogLevelFatal), Expected: LogLevelFatal},
+		{Input: string(LogLevelOff), Expected: LogLevelOff},
+		{Name: "validation: incorrect log level", Input: "incorrect", Error: "unknown log level: incorrect"},
+		{Name: "validation: empty input", Input: "", Error: "unknown log level: "},
+		{Name: "validation: lower case input", Input: "info", Expected: LogLevelInfo},
 	}
 
 	for _, testCase := range testCases {
-		t.Run(testCase.Name, func(t *testing.T) {
+		name := testCase.Name
+		if name == "" {
+			name = fmt.Sprintf("%v log level", testCase.Input)
+		}
+		t.Run(name, func(t *testing.T) {
 			value, err := ToLogLevel(testCase.Input)
 			if testCase.Error != "" {
 				assert.Empty(t, value)
@@ -236,40 +185,20 @@ func TestToTraceLevel(t *testing.T) {
 		Expected TraceLevel
 		Error    string
 	}{
-		{
-			Name:     "always trace level",
-			Input:    string(TraceLevelAlways),
-			Expected: TraceLevelAlways,
-		},
-		{
-			Name:     "on event trace level",
-			Input:    string(TraceLevelOnEvent),
-			Expected: TraceLevelOnEvent,
-		},
-		{
-			Name:     "off trace level",
-			Input:    string(TraceLevelOff),
-			Expected: TraceLevelOff,
-		},
-		{
-			Name:  "validation: incorrect trace level",
-			Input: "incorrect",
-			Error: "unknown trace level: incorrect",
-		},
-		{
-			Name:  "validation: empty input",
-			Input: "",
-			Error: "unknown trace level: ",
-		},
-		{
-			Name:     "validation: lower case input",
-			Input:    "always",
-			Expected: TraceLevelAlways,
-		},
+		{Input: string(TraceLevelAlways), Expected: TraceLevelAlways},
+		{Input: string(TraceLevelOnEvent), Expected: TraceLevelOnEvent},
+		{Input: string(TraceLevelOff), Expected: TraceLevelOff},
+		{Name: "validation: incorrect trace level", Input: "incorrect", Error: "unknown trace level: incorrect"},
+		{Name: "validation: empty input", Input: "", Error: "unknown trace level: "},
+		{Name: "validation: lower case input", Input: "always", Expected: TraceLevelAlways},
 	}
 
 	for _, testCase := range testCases {
-		t.Run(testCase.Name, func(t *testing.T) {
+		name := testCase.Name
+		if name == "" {
+			name = fmt.Sprintf("%v trace level", testCase.Input)
+		}
+		t.Run(name, func(t *testing.T) {
 			value, err := ToTraceLevel(testCase.Input)
 			if testCase.Error != "" {
 				assert.Empty(t, value)