@@ -67,50 +67,91 @@ var _ = Describe("Component Name", func() {
6767## Key Files & Their Purpose
6868
6969### Critical Controller Files
70- - ` internal/controller/olsconfig_controller.go ` - Main reconciler
71- - ` internal/controller/ols_app_server_reconciliator.go ` - App server components (12 tasks)
72- - ` internal/controller/constants.go ` - All constant definitions
73- - ` internal/controller/utils.go ` - Utility functions
70+ - ` internal/controller/olsconfig_controller.go ` - Main reconciler orchestrator
71+ - ` internal/controller/appserver/reconciler.go ` - App server components
72+ - ` internal/controller/postgres/reconciler.go ` - PostgreSQL database components
73+ - ` internal/controller/console/reconciler.go ` - Console UI plugin components
74+ - ` internal/controller/utils/utils.go ` - Shared utilities and constants
7475
7576### API & Types
7677- ` api/v1alpha1/olsconfig_types.go ` - Main CRD struct definitions
7778- Includes: ` LLMSpec ` , ` OLSSpec ` , ` DeploymentConfig ` , etc.
7879
7980### Tests to Check
80- - Unit: ` internal/controller/*_test.go `
81- - E2E: ` test/e2e/reconciliation_test.go ` , ` test/e2e/upgrade_test.go `
81+ - ** Unit Tests** (co-located with source):
82+ - ` internal/controller/*_test.go ` - Main controller tests
83+ - ` internal/controller/appserver/*_test.go ` - App server component tests
84+ - ` internal/controller/postgres/*_test.go ` - PostgreSQL component tests
85+ - ` internal/controller/console/*_test.go ` - Console UI component tests
86+ - ` internal/controller/utils/*_test.go ` - Utility function tests
87+ - ** E2E Tests** : ` test/e2e/reconciliation_test.go ` , ` test/e2e/upgrade_test.go `
88+ - ** Test Infrastructure** :
89+ - ` internal/controller/utils/testing.go ` - Test reconciler and utilities
90+ - ` internal/controller/utils/test_fixtures.go ` - CR fixtures and resource helpers
8291
8392## Common Tasks & Patterns
8493
8594### Adding New Reconciliation Step
86- 1 . Add to ` ReconcileTask ` slice in ` reconcileAppServer() `
87- 2 . Implement ` reconcile<NewComponent>() ` method
88- 3 . Add constants to ` constants.go `
95+
96+ ** For App Server Components:**
97+ 1 . Add to ` ReconcileTask ` slice in ` internal/controller/appserver/reconciler.go `
98+ 2 . Implement ` reconcile<NewComponent>() ` function in appropriate file
99+ 3 . Add constants to ` internal/controller/utils/utils.go `
891004 . Add error constants with ` Err<Action><Component> ` pattern
90- 5 . Write unit tests in ` *_test.go `
101+ 5 . Write unit tests in ` internal/controller/appserver/*_test.go `
102+
103+ ** For New Top-Level Components:**
104+ 1 . Create new package under ` internal/controller/<component>/ `
105+ 2 . Implement ` Reconcile<Component>() ` function accepting ` reconciler.Reconciler `
106+ 3 . Add reconciliation step to ` olsconfig_controller.go `
107+ 4 . Create test suite with ` suite_test.go ` and component tests
108+ 5 . Use shared test helpers from ` utils/testing.go ` and ` utils/test_fixtures.go `
91109
92110### Resource Generation Pattern
93111``` go
94- func ( r * OLSConfigReconciler ) reconcile <Resource >(ctx context.Context, cr *olsv1alpha1.OLSConfig) error {
95- resource , err := r. generate <Resource>(cr)
112+ func reconcile<Resource>(r reconciler. Reconciler , ctx context.Context , cr *olsv1alpha1.OLSConfig ) error {
113+ resource , err := generate<Resource>(r, cr)
96114 if err != nil {
97- return fmt.Errorf (" %s : % w" , Err<Action><Resource>, err)
115+ return fmt.Errorf (" %s : % w" , utils. Err <Action><Resource>, err)
98116 }
99117
100118 found := &<ResourceType>{}
101- err = r.Get (ctx, client.ObjectKey {Name: <name>, Namespace: r.Options . Namespace }, found)
119+ err = r.Get (ctx, client.ObjectKey {Name: <name>, Namespace: r.GetNamespace () }, found)
102120 if err != nil && errors.IsNotFound (err) {
103- r.logger .Info (" creating new <resource>" , " <resource>" , resource.Name )
121+ r.GetLogger () .Info (" creating new <resource>" , " <resource>" , resource.Name )
104122 return r.Create (ctx, resource)
105123 } else if err != nil {
106- return fmt.Errorf (" %s : % w" , ErrGet<Resource>, err)
124+ return fmt.Errorf (" %s : % w" , utils. ErrGet <Resource>, err)
107125 }
108126
109127 // Update logic if needed
110128 return nil
111129}
112130```
113131
132+ ### Testing Pattern
133+ ``` go
134+ // In suite_test.go
135+ var _ = Describe (" <Component> Name" , func () {
136+ It (" should describe expected behavior" , func () {
137+ // Arrange - Create test resources
138+ cr := utils.GetDefaultOLSConfigCR ()
139+
140+ // Act - Call reconciliation function
141+ err := Reconcile<Component>(testReconcilerInstance, ctx, cr)
142+
143+ // Assert with Gomega matchers
144+ Expect (err).NotTo (HaveOccurred ())
145+
146+ // Verify resource was created
147+ resource := &<ResourceType>{}
148+ err = testReconcilerInstance.Get (ctx, client.ObjectKey {...}, resource)
149+ Expect (err).NotTo (HaveOccurred ())
150+ Expect (resource.Spec .Field ).To (Equal (expectedValue))
151+ })
152+ })
153+ ```
154+
114155## Dependencies & Tools
115156
116157### Core Dependencies
0 commit comments