Skip to content

Commit 155d4f4

Browse files
committed
Add example 1 test
Signed-off-by: Ben McDonald <ben.mcdonald@hpe.com>
1 parent 6757129 commit 155d4f4

File tree

1 file changed

+93
-1
lines changed

1 file changed

+93
-1
lines changed

test/integration/clean_test.go

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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
228320
func TestFabricaTestSuite(t *testing.T) {
229321
suite.Run(t, new(FabricaTestSuite))
230322
}

0 commit comments

Comments
 (0)