@@ -224,7 +224,99 @@ func (s *FabricaTestSuite) TestCreateFRUApplication() {
224224
225225 // For file storage, check storage file instead of Ent schema
226226 project .AssertFileExists ("internal/storage/storage_generated.go" )
227- } // Run the test suite
227+ }
228+
229+ func (s * FabricaTestSuite ) TestExample1_EndToEnd () {
230+ // Create project
231+ project := s .createProject ("example1-crud" , "github.com/test/example1" , "file" )
232+
233+ // 1. Initialize project
234+ err := project .Initialize (s .fabricaBinary )
235+ s .Require ().NoError (err , "project initialization should succeed" )
236+
237+ // 2. Add resource
238+ err = project .AddResource (s .fabricaBinary , "Device" )
239+ s .Require ().NoError (err , "adding resource should succeed" )
240+
241+ // 3. Customize resource (New Step)
242+ err = project .Example1_CustomizeResource ()
243+ s .Require ().NoError (err , "customizing resource should succeed" )
244+
245+ // 4. Generate code
246+ err = project .Generate (s .fabricaBinary )
247+ s .Require ().NoError (err , "code generation should succeed" )
248+
249+ // 5. Configure server (New Step)
250+ err = project .Example1_ConfigureServer ()
251+ s .Require ().NoError (err , "configuring server main.go should succeed" )
252+
253+ // 6. Build project
254+ err = project .Build ()
255+ s .Require ().NoError (err , "project should build successfully" )
256+
257+ // 7. Start server
258+ err = project .StartServer ()
259+ s .Require ().NoError (err , "server should start successfully" )
260+ // Ensure server is stopped when test finishes
261+ s .T ().Cleanup (func () {
262+ project .StopServer ()
263+ })
264+
265+ // 8. Run Client Tests (Full CRUD)
266+
267+ // CREATE
268+ createSpec := map [string ]interface {}{
269+ "description" : "Core network switch" ,
270+ "ipAddress" : "192.168.1.10" ,
271+ "location" : "DataCenter A" ,
272+ "rack" : "R42" ,
273+ }
274+ created , err := project .CreateResource ("device" , createSpec )
275+ s .Require ().NoError (err , "client create should succeed" )
276+ s .Require ().NotNil (created , "created resource should not be nil" )
277+
278+ // Verify metadata and spec
279+ uid , ok := created ["metadata" ].(map [string ]interface {})["uid" ].(string )
280+ s .Require ().True (ok , "should get uid from metadata" )
281+ s .Require ().NotEmpty (uid , "uid should not be empty" )
282+ project .AssertResourceHasSpec (s .T (), created , createSpec )
283+
284+ // LIST
285+ listed , err := project .ListResources ("device" )
286+ s .Require ().NoError (err , "client list should succeed" )
287+ s .Require ().Len (listed , 1 , "list should return one device" )
288+ s .Require ().Equal (uid , listed [0 ]["metadata" ].(map [string ]interface {})["uid" ].(string ))
289+
290+ // GET
291+ got , err := project .GetResource ("device" , uid )
292+ s .Require ().NoError (err , "client get should succeed" )
293+ project .AssertResourceHasSpec (s .T (), got , createSpec )
294+
295+ // PATCH (Example 1 doesn't test this, but we can use the helper)
296+ patchSpec := map [string ]interface {}{
297+ "location" : "DataCenter B" ,
298+ }
299+ patched , err := project .PatchResource ("device" , uid , patchSpec )
300+ s .Require ().NoError (err , "client patch should succeed" )
301+
302+ // Verify patch
303+ s .Require ().Equal ("DataCenter B" , patched ["spec" ].(map [string ]interface {})["location" ], "location should be updated" )
304+ s .Require ().Equal ("192.168.1.10" , patched ["spec" ].(map [string ]interface {})["ipAddress" ], "ipAddress should be unchanged" )
305+
306+ // DELETE
307+ err = project .DeleteResource ("device" , uid )
308+ s .Require ().NoError (err , "client delete should succeed" )
309+
310+ // VERIFY DELETE
311+ listedAfterDelete , err := project .ListResources ("device" )
312+ s .Require ().NoError (err , "client list after delete should succeed" )
313+ s .Require ().Len (listedAfterDelete , 0 , "list should be empty after delete" )
314+
315+ _ , err = project .GetResource ("device" , uid )
316+ s .Require ().Error (err , "client get after delete should fail" )
317+ }
318+
319+ // Run the test suite
228320func TestFabricaTestSuite (t * testing.T ) {
229321 suite .Run (t , new (FabricaTestSuite ))
230322}
0 commit comments