From 89e27c0f9602b0bab7e58fd16792067110ed3de1 Mon Sep 17 00:00:00 2001
From: Stephen Kirby <me@skirby.dev>
Date: Mon, 24 Jun 2024 19:25:24 +0000
Subject: [PATCH 01/11] moved coder_parameter

---
 examples/{resources => data-sources}/coder_parameter/resource.tf | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename examples/{resources => data-sources}/coder_parameter/resource.tf (100%)

diff --git a/examples/resources/coder_parameter/resource.tf b/examples/data-sources/coder_parameter/resource.tf
similarity index 100%
rename from examples/resources/coder_parameter/resource.tf
rename to examples/data-sources/coder_parameter/resource.tf

From a7e9d7e757b74eb527771e83ca1925270e7f735d Mon Sep 17 00:00:00 2001
From: Stephen Kirby <me@skirby.dev>
Date: Mon, 24 Jun 2024 19:30:26 +0000
Subject: [PATCH 02/11] swapped test target, renamed parameter example file

---
 .../coder_parameter/{resource.tf => data-source.tf}             | 0
 provider/examples_test.go                                       | 2 +-
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename examples/data-sources/coder_parameter/{resource.tf => data-source.tf} (100%)

diff --git a/examples/data-sources/coder_parameter/resource.tf b/examples/data-sources/coder_parameter/data-source.tf
similarity index 100%
rename from examples/data-sources/coder_parameter/resource.tf
rename to examples/data-sources/coder_parameter/data-source.tf
diff --git a/provider/examples_test.go b/provider/examples_test.go
index 6fa73d21..d516493e 100644
--- a/provider/examples_test.go
+++ b/provider/examples_test.go
@@ -15,7 +15,7 @@ func TestExamples(t *testing.T) {
 	t.Parallel()
 
 	for _, testDir := range []string{
-		"coder_parameter",
+		"coder_agent",
 		"coder_workspace_tags",
 	} {
 		t.Run(testDir, func(t *testing.T) {

From 22fcf243dc71a44abc7e6f4a8f1bfbcda0dce854 Mon Sep 17 00:00:00 2001
From: Stephen Kirby <me@skirby.dev>
Date: Mon, 24 Jun 2024 19:32:29 +0000
Subject: [PATCH 03/11] make gen

---
 docs/data-sources/parameter.md | 122 ++++++++++++++++++++++++++++++++-
 1 file changed, 121 insertions(+), 1 deletion(-)

diff --git a/docs/data-sources/parameter.md b/docs/data-sources/parameter.md
index 4bded2d3..9c6a11f5 100644
--- a/docs/data-sources/parameter.md
+++ b/docs/data-sources/parameter.md
@@ -10,7 +10,127 @@ description: |-
 
 Use this data source to configure editable options for workspaces.
 
-
+## Example Usage
+
+```terraform
+provider "coder" {}
+
+data "coder_parameter" "example" {
+  name        = "Region"
+  description = "Specify a region to place your workspace."
+  mutable     = false
+  type        = "string"
+  default     = "asia-central1-a"
+  option {
+    value = "us-central1-a"
+    name  = "US Central"
+    icon  = "/icon/usa.svg"
+  }
+  option {
+    value = "asia-central1-a"
+    name  = "Asia"
+    icon  = "/icon/asia.svg"
+  }
+}
+
+data "coder_parameter" "ami" {
+  name        = "Machine Image"
+  description = <<-EOT
+    # Provide the machine image
+    See the [registry](https://container.registry.blah/namespace) for options.
+    EOT
+  option {
+    value = "ami-xxxxxxxx"
+    name  = "Ubuntu"
+    icon  = "/icon/ubuntu.svg"
+  }
+}
+
+data "coder_parameter" "is_public_instance" {
+  name    = "Is public instance?"
+  type    = "bool"
+  icon    = "/icon/docker.svg"
+  default = false
+}
+
+data "coder_parameter" "cores" {
+  name    = "CPU Cores"
+  type    = "number"
+  icon    = "/icon/cpu.svg"
+  default = 3
+  order   = 10
+}
+
+data "coder_parameter" "disk_size" {
+  name    = "Disk Size"
+  type    = "number"
+  default = "5"
+  order   = 8
+  validation {
+    # This can apply to number.
+    min       = 0
+    max       = 10
+    monotonic = "increasing"
+  }
+}
+
+data "coder_parameter" "cat_lives" {
+  name    = "Cat Lives"
+  type    = "number"
+  default = "9"
+  validation {
+    # This can apply to number.
+    min       = 0
+    max       = 10
+    monotonic = "decreasing"
+  }
+}
+
+data "coder_parameter" "fairy_tale" {
+  name      = "Fairy Tale"
+  type      = "string"
+  mutable   = true
+  default   = "Hansel and Gretel"
+  ephemeral = true
+}
+
+data "coder_parameter" "users" {
+  name         = "system_users"
+  display_name = "System users"
+  type         = "list(string)"
+  default      = jsonencode(["root", "user1", "user2"])
+}
+
+data "coder_parameter" "home_volume_size" {
+  name        = "Home Volume Size"
+  description = <<-EOF
+  How large should your home volume be?
+  EOF
+  type        = "number"
+  default     = 30
+  mutable     = true
+  order       = 3
+
+  option {
+    name  = "30GB"
+    value = 30
+  }
+
+  option {
+    name  = "60GB"
+    value = 60
+  }
+
+  option {
+    name  = "100GB"
+    value = 100
+  }
+
+  validation {
+    monotonic = "increasing"
+  }
+}
+```
 
 <!-- schema generated by tfplugindocs -->
 ## Schema

From 0c57de0ca53be2f993e6b1bf02ef6323296ad6d1 Mon Sep 17 00:00:00 2001
From: Stephen Kirby <me@skirby.dev>
Date: Mon, 24 Jun 2024 20:02:47 +0000
Subject: [PATCH 04/11] removed coder agent examples from test

---
 provider/examples_test.go | 1 -
 1 file changed, 1 deletion(-)

diff --git a/provider/examples_test.go b/provider/examples_test.go
index d516493e..8923e14b 100644
--- a/provider/examples_test.go
+++ b/provider/examples_test.go
@@ -15,7 +15,6 @@ func TestExamples(t *testing.T) {
 	t.Parallel()
 
 	for _, testDir := range []string{
-		"coder_agent",
 		"coder_workspace_tags",
 	} {
 		t.Run(testDir, func(t *testing.T) {

From 3a98b58efe3edcd5a6fbe2a346cc64ca9e98121f Mon Sep 17 00:00:00 2001
From: Stephen Kirby <me@skirby.dev>
Date: Mon, 24 Jun 2024 20:28:08 +0000
Subject: [PATCH 05/11] attempting data source testing

---
 provider/examples_test.go | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/provider/examples_test.go b/provider/examples_test.go
index 8923e14b..68a7c3ea 100644
--- a/provider/examples_test.go
+++ b/provider/examples_test.go
@@ -14,6 +14,7 @@ import (
 func TestExamples(t *testing.T) {
 	t.Parallel()
 
+	// Resource examples
 	for _, testDir := range []string{
 		"coder_workspace_tags",
 	} {
@@ -32,6 +33,26 @@ func TestExamples(t *testing.T) {
 			})
 		})
 	}
+
+	// Data source examples
+	for _, testDir := range []string{
+		"coder_parameter",
+	} {
+		t.Run(testDir, func(t *testing.T) {
+			testDir := testDir
+			t.Parallel()
+
+			resource.Test(t, resource.TestCase{
+				Providers: map[string]*schema.Provider{
+					"coder": provider.New(),
+				},
+				IsUnitTest: true,
+				Steps: []resource.TestStep{{
+					Config: mustReadFile(t, "../examples/data-sources/"+testDir+"/data-source.tf"),
+				}},
+			})
+		})
+	}
 }
 
 func mustReadFile(t *testing.T, path string) string {

From 92f94d7e89baaaf02c5ac8ba6c41317e71c0efff Mon Sep 17 00:00:00 2001
From: Stephen Kirby <me@skirby.dev>
Date: Mon, 24 Jun 2024 21:02:59 +0000
Subject: [PATCH 06/11] added git auth to test

---
 examples/data-sources/coder_git_auth/data-source.tf | 3 +--
 provider/examples_test.go                           | 1 +
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/examples/data-sources/coder_git_auth/data-source.tf b/examples/data-sources/coder_git_auth/data-source.tf
index eeed89aa..488554f2 100644
--- a/examples/data-sources/coder_git_auth/data-source.tf
+++ b/examples/data-sources/coder_git_auth/data-source.tf
@@ -1,5 +1,4 @@
-provider "coder" {
-}
+provider "coder" {}
 
 data "coder_git_auth" "github" {
   # Matches the ID of the git auth provider in Coder.
diff --git a/provider/examples_test.go b/provider/examples_test.go
index 68a7c3ea..be72f60a 100644
--- a/provider/examples_test.go
+++ b/provider/examples_test.go
@@ -37,6 +37,7 @@ func TestExamples(t *testing.T) {
 	// Data source examples
 	for _, testDir := range []string{
 		"coder_parameter",
+		"coder_git_auth"
 	} {
 		t.Run(testDir, func(t *testing.T) {
 			testDir := testDir

From 9f4971de07c8ae4576e33f576cfd1f9120405ef5 Mon Sep 17 00:00:00 2001
From: Stephen Kirby <me@skirby.dev>
Date: Mon, 24 Jun 2024 21:15:16 +0000
Subject: [PATCH 07/11] reverted git auth test

---
 provider/examples_test.go | 1 -
 1 file changed, 1 deletion(-)

diff --git a/provider/examples_test.go b/provider/examples_test.go
index be72f60a..68a7c3ea 100644
--- a/provider/examples_test.go
+++ b/provider/examples_test.go
@@ -37,7 +37,6 @@ func TestExamples(t *testing.T) {
 	// Data source examples
 	for _, testDir := range []string{
 		"coder_parameter",
-		"coder_git_auth"
 	} {
 		t.Run(testDir, func(t *testing.T) {
 			testDir := testDir

From 763827465384276e24770410e113033107849679 Mon Sep 17 00:00:00 2001
From: Marcin Tojek <marcin@coder.com>
Date: Tue, 25 Jun 2024 08:54:33 +0200
Subject: [PATCH 08/11] Refactor examples_test.go

---
 docs/data-sources/git_auth.md                 |  3 +-
 docs/data-sources/workspace_tags.md           | 53 +++++++++++++++++++
 .../coder_workspace_tags/data-source.tf}      |  0
 provider/examples_test.go                     | 43 +++++----------
 4 files changed, 68 insertions(+), 31 deletions(-)
 rename examples/{resources/coder_workspace_tags/resource.tf => data-sources/coder_workspace_tags/data-source.tf} (100%)

diff --git a/docs/data-sources/git_auth.md b/docs/data-sources/git_auth.md
index 53e01981..fe64805e 100644
--- a/docs/data-sources/git_auth.md
+++ b/docs/data-sources/git_auth.md
@@ -13,8 +13,7 @@ Use this data source to require users to authenticate with a Git provider prior
 ## Example Usage
 
 ```terraform
-provider "coder" {
-}
+provider "coder" {}
 
 data "coder_git_auth" "github" {
   # Matches the ID of the git auth provider in Coder.
diff --git a/docs/data-sources/workspace_tags.md b/docs/data-sources/workspace_tags.md
index 62f72b0f..010adfe3 100644
--- a/docs/data-sources/workspace_tags.md
+++ b/docs/data-sources/workspace_tags.md
@@ -10,7 +10,60 @@ description: |-
 
 Use this data source to configure workspace tags to select provisioners.
 
+## Example Usage
 
+```terraform
+provider "coder" {}
+
+data "coder_parameter" "os_selector" {
+  name         = "os_selector"
+  display_name = "Operating System"
+  mutable      = false
+
+  default = "osx"
+
+  option {
+    icon  = "/icons/linux.png"
+    name  = "Linux"
+    value = "linux"
+  }
+  option {
+    icon  = "/icons/osx.png"
+    name  = "OSX"
+    value = "osx"
+  }
+  option {
+    icon  = "/icons/windows.png"
+    name  = "Windows"
+    value = "windows"
+  }
+}
+
+data "coder_parameter" "feature_cache_enabled" {
+  name         = "feature_cache_enabled"
+  display_name = "Enable cache?"
+  type         = "bool"
+
+  default = false
+}
+
+data "coder_parameter" "feature_debug_enabled" {
+  name         = "feature_debug_enabled"
+  display_name = "Enable debug?"
+  type         = "bool"
+
+  default = true
+}
+
+data "coder_workspace_tags" "custom_workspace_tags" {
+  tags = {
+    "cluster" = "developers"
+    "os"      = data.coder_parameter.os_selector.value
+    "debug"   = "${data.coder_parameter.feature_debug_enabled.value}+12345"
+    "cache"   = data.coder_parameter.feature_cache_enabled.value == "true" ? "nix-with-cache" : "no-cache"
+  }
+}
+```
 
 <!-- schema generated by tfplugindocs -->
 ## Schema
diff --git a/examples/resources/coder_workspace_tags/resource.tf b/examples/data-sources/coder_workspace_tags/data-source.tf
similarity index 100%
rename from examples/resources/coder_workspace_tags/resource.tf
rename to examples/data-sources/coder_workspace_tags/data-source.tf
diff --git a/provider/examples_test.go b/provider/examples_test.go
index 68a7c3ea..ad9691d2 100644
--- a/provider/examples_test.go
+++ b/provider/examples_test.go
@@ -1,6 +1,7 @@
 package provider_test
 
 import (
+	"fmt"
 	"os"
 	"testing"
 
@@ -14,45 +15,29 @@ import (
 func TestExamples(t *testing.T) {
 	t.Parallel()
 
-	// Resource examples
 	for _, testDir := range []string{
+		"coder_parameter",
 		"coder_workspace_tags",
 	} {
 		t.Run(testDir, func(t *testing.T) {
 			testDir := testDir
 			t.Parallel()
 
-			resource.Test(t, resource.TestCase{
-				Providers: map[string]*schema.Provider{
-					"coder": provider.New(),
-				},
-				IsUnitTest: true,
-				Steps: []resource.TestStep{{
-					Config: mustReadFile(t, "../examples/resources/"+testDir+"/resource.tf"),
-				}},
-			})
+			resourceTest(t, testDir)
 		})
 	}
+}
 
-	// Data source examples
-	for _, testDir := range []string{
-		"coder_parameter",
-	} {
-		t.Run(testDir, func(t *testing.T) {
-			testDir := testDir
-			t.Parallel()
-
-			resource.Test(t, resource.TestCase{
-				Providers: map[string]*schema.Provider{
-					"coder": provider.New(),
-				},
-				IsUnitTest: true,
-				Steps: []resource.TestStep{{
-					Config: mustReadFile(t, "../examples/data-sources/"+testDir+"/data-source.tf"),
-				}},
-			})
-		})
-	}
+func resourceTest(t *testing.T, testDir string) {
+	resource.Test(t, resource.TestCase{
+		Providers: map[string]*schema.Provider{
+			"coder": provider.New(),
+		},
+		IsUnitTest: true,
+		Steps: []resource.TestStep{{
+			Config: mustReadFile(t, fmt.Sprintf("../examples/data-sources/%s/data-source.tf", testDir)),
+		}},
+	})
 }
 
 func mustReadFile(t *testing.T, path string) string {

From 6849c9dd84e5eb5dff9760f85446f88cd3fbd362 Mon Sep 17 00:00:00 2001
From: Stephen Kirby <me@skirby.dev>
Date: Tue, 25 Jun 2024 16:57:03 +0000
Subject: [PATCH 09/11] took a stab at expanding example test

---
 provider/examples_test.go | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/provider/examples_test.go b/provider/examples_test.go
index ad9691d2..275923c6 100644
--- a/provider/examples_test.go
+++ b/provider/examples_test.go
@@ -12,30 +12,36 @@ import (
 	"github.com/coder/terraform-provider-coder/provider"
 )
 
+type ResourceTestData struct {
+	Name         string
+	ResourceType string
+}
+
 func TestExamples(t *testing.T) {
 	t.Parallel()
 
-	for _, testDir := range []string{
-		"coder_parameter",
-		"coder_workspace_tags",
+	for _, resourceTestData := range []ResourceTestData{
+		{"coder_parameter", "data-source"},
+		{"coder_workspace_tags", "data-source"},
+		{"coder_app", "resource"}
 	} {
-		t.Run(testDir, func(t *testing.T) {
-			testDir := testDir
+		t.Run(resourceTestData.Name, func(t *testing.T) {
+			resourceTestData := resourceTestData
 			t.Parallel()
 
-			resourceTest(t, testDir)
+			resourceTest(t, resourceTestData)
 		})
 	}
 }
 
-func resourceTest(t *testing.T, testDir string) {
+func resourceTest(t *testing.T, testData ResourceTestData) {
 	resource.Test(t, resource.TestCase{
 		Providers: map[string]*schema.Provider{
 			"coder": provider.New(),
 		},
 		IsUnitTest: true,
 		Steps: []resource.TestStep{{
-			Config: mustReadFile(t, fmt.Sprintf("../examples/data-sources/%s/data-source.tf", testDir)),
+			Config: mustReadFile(t, fmt.Sprintf("../examples/%ss/%s/%s.tf", testData.ResourceType, testData.Name, testData.ResourceType)),
 		}},
 	})
 }

From e8c7f5d020444245315cd9a159906a6409bd032c Mon Sep 17 00:00:00 2001
From: Stephen Kirby <me@skirby.dev>
Date: Tue, 25 Jun 2024 16:58:52 +0000
Subject: [PATCH 10/11] added provider to coder_ap

---
 examples/resources/coder_app/resource.tf | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/examples/resources/coder_app/resource.tf b/examples/resources/coder_app/resource.tf
index 9345dfc5..bd9a7d11 100644
--- a/examples/resources/coder_app/resource.tf
+++ b/examples/resources/coder_app/resource.tf
@@ -1,3 +1,5 @@
+provider "coder" {}
+
 data "coder_workspace" "me" {}
 
 resource "coder_agent" "dev" {

From 2b60300c0cc9297932ac3e0f340ad8bd14c4577b Mon Sep 17 00:00:00 2001
From: Stephen Kirby <me@skirby.dev>
Date: Tue, 25 Jun 2024 17:05:56 +0000
Subject: [PATCH 11/11] manually reverted test changes

---
 examples/resources/coder_app/resource.tf |  2 --
 provider/examples_test.go                | 23 ++++++++---------------
 2 files changed, 8 insertions(+), 17 deletions(-)

diff --git a/examples/resources/coder_app/resource.tf b/examples/resources/coder_app/resource.tf
index bd9a7d11..9345dfc5 100644
--- a/examples/resources/coder_app/resource.tf
+++ b/examples/resources/coder_app/resource.tf
@@ -1,5 +1,3 @@
-provider "coder" {}
-
 data "coder_workspace" "me" {}
 
 resource "coder_agent" "dev" {
diff --git a/provider/examples_test.go b/provider/examples_test.go
index 275923c6..ab68954b 100644
--- a/provider/examples_test.go
+++ b/provider/examples_test.go
@@ -8,40 +8,33 @@ import (
 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
 	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
 	"github.com/stretchr/testify/require"
-
 	"github.com/coder/terraform-provider-coder/provider"
 )
 
-type ResourceTestData struct {
-	Name         string
-	ResourceType string
-}
-
 func TestExamples(t *testing.T) {
 	t.Parallel()
 
-	for _, resourceTestData := range []ResourceTestData{
-		{"coder_parameter", "data-source"},
-		{"coder_workspace_tags", "data-source"},
-		{"coder_app", "resource"}
+	for _, testDir := range []string{
+		"coder_parameter",
+		"coder_workspace_tags",
 	} {
-		t.Run(resourceTestData.Name, func(t *testing.T) {
-			resourceTestData := resourceTestData
+		t.Run(testDir, func(t *testing.T) {
+			testDir := testDir
 			t.Parallel()
 
-			resourceTest(t, resourceTestData)
+			resourceTest(t, testDir)
 		})
 	}
 }
 
-func resourceTest(t *testing.T, testData ResourceTestData) {
+func resourceTest(t *testing.T, testDir string) {
 	resource.Test(t, resource.TestCase{
 		Providers: map[string]*schema.Provider{
 			"coder": provider.New(),
 		},
 		IsUnitTest: true,
 		Steps: []resource.TestStep{{
-			Config: mustReadFile(t, fmt.Sprintf("../examples/%ss/%s/%s.tf", testData.ResourceType, testData.Name, testData.ResourceType)),
+			Config: mustReadFile(t, fmt.Sprintf("../examples/data-sources/%s/data-source.tf", testDir)),
 		}},
 	})
 }