44 "context"
55 "fmt"
66 "regexp"
7+ "strings"
78 "testing"
89
910 "github.com/digitalocean/godo"
@@ -13,37 +14,10 @@ import (
1314 "github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
1415)
1516
16- func TestAccDataSourceDigitalOceanAgent_BasicByAgentID (t * testing.T ) {
17- var agent godo.Agent
18- agentName := acceptance .RandomTestName ()
19- resourceConfig := testAccCheckDataSourceDigitalOceanAgentConfig_basic (agentName )
20- dataSourceConfig := `
21- data "digitalocean_agent" "foobar" {
22- agent_id = digitalocean_agent.foo.agent_id
23- }`
24-
25- resource .ParallelTest (t , resource.TestCase {
26- PreCheck : func () { acceptance .TestAccPreCheck (t ) },
27- ProviderFactories : acceptance .TestAccProviderFactories ,
28- Steps : []resource.TestStep {
29- {
30- Config : resourceConfig ,
31- },
32- {
33- Config : resourceConfig + dataSourceConfig ,
34- Check : resource .ComposeTestCheckFunc (
35- testAccCheckDataSourceDigitalOceanAgentExists ("data.digitalocean_agent.foobar" , & agent ),
36- resource .TestCheckResourceAttr (
37- "data.digitalocean_agent.foobar" , "name" , agentName ),
38- resource .TestCheckResourceAttrSet ("data.digitalocean_agent.foobar" , "agent_id" ),
39- resource .TestCheckResourceAttrSet ("data.digitalocean_agent.foobar" , "uuid" ),
40- resource .TestCheckResourceAttrSet ("data.digitalocean_agent.foobar" , "created_at" ),
41- resource .TestCheckResourceAttrSet ("data.digitalocean_agent.foobar" , "updated_at" ),
42- ),
43- },
44- },
45- })
46- }
17+ const (
18+ initialInstr = "You are a helpful AI assistant."
19+ updatedInstr = "You are an even more helpful AI assistant (v2)."
20+ )
4721
4822func TestAccDataSourceDigitalOceanAgent_CompleteConfiguration (t * testing.T ) {
4923 var agent godo.Agent
@@ -56,8 +30,8 @@ func TestAccDataSourceDigitalOceanAgent_CompleteConfiguration(t *testing.T) {
5630
5731 resourceConfig := testAccCheckDataSourceDigitalOceanAgentConfig_complete (name , description , instruction , model_uuid , project_id , region )
5832 dataSourceConfig := `
59- data "digitalocean_agent " "foobar" {
60- agent_id = digitalocean_agent .foo.agent_id
33+ data "digitalocean_genai_agent " "foobar" {
34+ agent_id = digitalocean_genai_agent .foo.agent_id
6135}`
6236
6337 resource .ParallelTest (t , resource.TestCase {
@@ -70,19 +44,19 @@ data "digitalocean_agent" "foobar" {
7044 {
7145 Config : resourceConfig + dataSourceConfig ,
7246 Check : resource .ComposeTestCheckFunc (
73- testAccCheckDataSourceDigitalOceanAgentExists ("data.digitalocean_agent .foobar" , & agent ),
47+ testAccCheckDataSourceDigitalOceanAgentExists ("data.digitalocean_genai_agent .foobar" , & agent ),
7448 resource .TestCheckResourceAttr (
75- "data.digitalocean_agent .foobar" , "name" , name ),
49+ "data.digitalocean_genai_agent .foobar" , "name" , name ),
7650 resource .TestCheckResourceAttr (
77- "data.digitalocean_agent .foobar" , "description" , description ),
51+ "data.digitalocean_genai_agent .foobar" , "description" , description ),
7852 resource .TestCheckResourceAttr (
79- "data.digitalocean_agent .foobar" , "instruction" , instruction ),
53+ "data.digitalocean_genai_agent .foobar" , "instruction" , instruction ),
8054 resource .TestCheckResourceAttr (
81- "data.digitalocean_agent .foobar" , "model_uuid" , model_uuid ),
82- resource .TestCheckResourceAttrSet ("data.digitalocean_agent .foobar" , "agent_id" ),
83- resource .TestCheckResourceAttrSet ("data.digitalocean_agent .foobar" , "uuid" ),
84- resource .TestCheckResourceAttrSet ("data.digitalocean_agent .foobar" , "created_at" ),
85- resource .TestCheckResourceAttrSet ("data.digitalocean_agent .foobar" , "updated_at" ),
55+ "data.digitalocean_genai_agent .foobar" , "model_uuid" , model_uuid ),
56+ resource .TestCheckResourceAttrSet ("data.digitalocean_genai_agent .foobar" , "agent_id" ),
57+ resource .TestCheckResourceAttrSet ("data.digitalocean_genai_agent .foobar" , "uuid" ),
58+ resource .TestCheckResourceAttrSet ("data.digitalocean_genai_agent .foobar" , "created_at" ),
59+ resource .TestCheckResourceAttrSet ("data.digitalocean_genai_agent .foobar" , "updated_at" ),
8660 ),
8761 },
8862 },
@@ -96,8 +70,8 @@ func TestAccDataSourceDigitalOceanAgent_WithTags(t *testing.T) {
9670
9771 resourceConfig := testAccCheckDataSourceDigitalOceanAgentConfig_withTags (agentName , tagName )
9872 dataSourceConfig := `
99- data "digitalocean_agent " "foobar" {
100- agent_id = digitalocean_agent .foo.agent_id
73+ data "digitalocean_genai_agent " "foobar" {
74+ agent_id = digitalocean_genai_agent .foo.agent_id
10175}`
10276
10377 resource .ParallelTest (t , resource.TestCase {
@@ -110,15 +84,15 @@ data "digitalocean_agent" "foobar" {
11084 {
11185 Config : resourceConfig + dataSourceConfig ,
11286 Check : resource .ComposeTestCheckFunc (
113- testAccCheckDataSourceDigitalOceanAgentExists ("data.digitalocean_agent .foobar" , & agent ),
87+ testAccCheckDataSourceDigitalOceanAgentExists ("data.digitalocean_genai_agent .foobar" , & agent ),
11488 resource .TestCheckResourceAttr (
115- "data.digitalocean_agent .foobar" , "name" , agentName ),
89+ "data.digitalocean_genai_agent .foobar" , "name" , agentName ),
11690 resource .TestCheckResourceAttr (
117- "data.digitalocean_agent .foobar" , "tags.#" , "1" ),
118- resource .TestCheckResourceAttrSet ("data.digitalocean_agent .foobar" , "agent_id" ),
119- resource .TestCheckResourceAttrSet ("data.digitalocean_agent .foobar" , "uuid" ),
120- resource .TestCheckResourceAttrSet ("data.digitalocean_agent .foobar" , "created_at" ),
121- resource .TestCheckResourceAttrSet ("data.digitalocean_agent .foobar" , "updated_at" ),
91+ "data.digitalocean_genai_agent .foobar" , "tags.#" , "1" ),
92+ resource .TestCheckResourceAttrSet ("data.digitalocean_genai_agent .foobar" , "agent_id" ),
93+ resource .TestCheckResourceAttrSet ("data.digitalocean_genai_agent .foobar" , "uuid" ),
94+ resource .TestCheckResourceAttrSet ("data.digitalocean_genai_agent .foobar" , "created_at" ),
95+ resource .TestCheckResourceAttrSet ("data.digitalocean_genai_agent .foobar" , "updated_at" ),
12296 ),
12397 },
12498 },
@@ -172,95 +146,109 @@ func testAccCheckDataSourceDigitalOceanAgentExists(n string, agent *godo.Agent)
172146 }
173147}
174148
175- func testAccCheckDataSourceDigitalOceanAgentConfig_basic (name string ) string {
176- return fmt .Sprintf (`
177- resource "digitalocean_agent" "foo" {
178- name = "%s"
179- description = "Basic test agent"
180- instruction = "You are a test assistant."
181- model_uuid = "%s"
182- }` , name , defaultModelUUID )
183- }
184-
185149func testAccCheckDataSourceDigitalOceanAgentConfig_complete (name , description , instruction , model_uuid , project_id , region string ) string {
186150 return fmt .Sprintf (`
187- resource "digitalocean_agent " "foo" {
151+ resource "digitalocean_genai_agent " "foo" {
188152 name = "%s"
189- description = "%s"
190153 instruction = "%s"
191- model = "%s"
154+ description = "%s"
192155 model_uuid = "%s"
193156 project_id = "%s"
194157 region = "tor1"
195158
196- }` , name , description , instruction , model_uuid , project_id , region )
159+ }` , name , instruction , description , model_uuid , project_id )
197160}
198161
199162func testAccCheckDataSourceDigitalOceanAgentConfig_withTags (name , tagName string ) string {
200163 return fmt .Sprintf (`
201- resource "digitalocean_tag" "foo" {
202- name = "%s"
203- }
204-
205- resource "digitalocean_agent" "foo" {
164+ resource "digitalocean_genai_agent" "foo" {
206165 name = "%s"
207- description = "Test agent with tags"
208166 instruction = "You are a tagged test assistant."
167+ description = "Test agent with tags"
209168 model_uuid = "%s"
210- tags = [digitalocean_tag.foo.id]
211- }` , tagName , name , defaultModelUUID )
169+ project_id = "%s"
170+ region = "tor1"
171+ tags = ["%s"]
172+ }` , name , defaultProjecID , defaultModelUUID , tagName )
212173}
213174
214175func testAccCheckDataSourceDigitalOceanAgentConfig_nonExistent () string {
215176 return `
216- data "digitalocean_agent " "foobar" {
177+ data "digitalocean_genai_agent " "foobar" {
217178 agent_id = "non-existent-agent-id-12345"
218179}`
219180}
220181
221- func TestAccDataSourceDigitalOceanAgent_WithKnowledgeBase (t * testing.T ) {
222- var agent godo.Agent
223- agentName := acceptance .RandomTestName ()
224- resourceConfig := testAccCheckDataSourceDigitalOceanAgentConfig_withKnowledgeBase (agentName )
225- dataSourceConfig := `
226- data "digitalocean_agent" "foobar" {
227- agent_id = digitalocean_agent.foo.agent_id
182+ func TestAccDataSourceDigitalOceanAgentVersions_Lifecycle (t * testing.T ) {
183+ name := acceptance .RandomTestName () + "-agent"
184+
185+ createCfg := testAccAgentConfig (name , initialInstr )
186+ updateCfg := testAccAgentConfig (name , updatedInstr )
187+
188+ const dsCfg = `
189+ data "digitalocean_genai_agent_versions" "versions" {
190+ agent_id = digitalocean_genai_agent.foo.id
228191}`
229192
230193 resource .ParallelTest (t , resource.TestCase {
231194 PreCheck : func () { acceptance .TestAccPreCheck (t ) },
232195 ProviderFactories : acceptance .TestAccProviderFactories ,
196+
233197 Steps : []resource.TestStep {
198+ {Config : createCfg },
199+
234200 {
235- Config : resourceConfig ,
201+ Config : createCfg + dsCfg ,
202+ Check : resource .ComposeTestCheckFunc (
203+ resource .TestCheckResourceAttr ("data.digitalocean_genai_agent_versions.versions" ,
204+ "agent_versions.#" , "1" ),
205+ checkExactlyOneApplied ("data.digitalocean_genai_agent_versions.versions" ),
206+ ),
236207 },
237208 {
238- Config : resourceConfig + dataSourceConfig ,
209+ Config : updateCfg + dsCfg ,
239210 Check : resource .ComposeTestCheckFunc (
240- testAccCheckDataSourceDigitalOceanAgentExists ("data.digitalocean_agent.foobar" , & agent ) ,
241- resource . TestCheckResourceAttr (
242- "data.digitalocean_agent.foobar" , "name" , agentName ),
211+ resource . TestCheckResourceAttr ("data.digitalocean_genai_agent_versions.versions" ,
212+ "agent_versions.#" , "2" ),
213+ checkExactlyOneApplied ( "data.digitalocean_genai_agent_versions.versions" ),
243214 resource .TestCheckResourceAttr (
244- "data.digitalocean_agent.foobar" , "knowledge_base.#" , "1" ),
245- resource .TestCheckResourceAttrSet ("data.digitalocean_agent.foobar" , "agent_id" ),
246- resource .TestCheckResourceAttrSet ("data.digitalocean_agent.foobar" , "uuid" ),
215+ "data.digitalocean_genai_agent_versions.versions" ,
216+ "agent_versions.0.instruction" , updatedInstr ),
247217 ),
248218 },
219+ {Config : updateCfg },
249220 },
250221 })
251222}
252223
253- func testAccCheckDataSourceDigitalOceanAgentConfig_withKnowledgeBase (name string ) string {
224+ func testAccAgentConfig (name , instruction string ) string {
254225 return fmt .Sprintf (`
255- resource "digitalocean_agent" "foo" {
226+
227+ resource "digitalocean_genai_agent" "foo" {
256228 name = "%s"
257- description = "Test agent with knowledge base"
258- instruction = "You are an assistant with access to a knowledge base."
229+ instruction = "%s"
259230 model_uuid = "%s"
231+ project_id = "%s"
232+ region = "tor1"
233+
234+ }` , name , instruction , defaultModelUUID , defaultProjecID )
235+ }
260236
261- knowledge_base {
262- name = "test-kb"
263- description = "Test knowledge base"
264- }
265- }` , name , defaultModelUUID )
237+ func checkExactlyOneApplied (resName string ) resource.TestCheckFunc {
238+ return func (s * terraform.State ) error {
239+ rs , ok := s .RootModule ().Resources [resName ]
240+ if ! ok {
241+ return fmt .Errorf ("resource %s not found in state" , resName )
242+ }
243+ applied := 0
244+ for k , v := range rs .Primary .Attributes {
245+ if strings .HasSuffix (k , ".currently_applied" ) && v == "true" {
246+ applied ++
247+ }
248+ }
249+ if applied != 1 {
250+ return fmt .Errorf ("expected exactly 1 currently_applied=true, got %d" , applied )
251+ }
252+ return nil
253+ }
266254}
0 commit comments