@@ -67,50 +67,89 @@ 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 Helpers** : ` internal/controller/utils/test_helpers.go `
8289
8390## Common Tasks & Patterns
8491
8592### 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 `
93+
94+ ** For App Server Components:**
95+ 1 . Add to ` ReconcileTask ` slice in ` internal/controller/appserver/reconciler.go `
96+ 2 . Implement ` reconcile<NewComponent>() ` function in appropriate file
97+ 3 . Add constants to ` internal/controller/utils/utils.go `
89984 . Add error constants with ` Err<Action><Component> ` pattern
90- 5 . Write unit tests in ` *_test.go `
99+ 5 . Write unit tests in ` internal/controller/appserver/*_test.go `
100+
101+ ** For New Top-Level Components:**
102+ 1 . Create new package under ` internal/controller/<component>/ `
103+ 2 . Implement ` Reconcile<Component>() ` function accepting ` reconciler.Reconciler `
104+ 3 . Add reconciliation step to ` olsconfig_controller.go `
105+ 4 . Create test suite with ` suite_test.go ` and component tests
106+ 5 . Use shared test helpers from ` utils/test_helpers.go `
91107
92108### Resource Generation Pattern
93109``` go
94- func ( r * OLSConfigReconciler ) reconcile <Resource >(ctx context.Context, cr *olsv1alpha1.OLSConfig) error {
95- resource , err := r. generate <Resource>(cr)
110+ func reconcile<Resource>(r reconciler. Reconciler , ctx context.Context , cr *olsv1alpha1.OLSConfig ) error {
111+ resource , err := generate<Resource>(r, cr)
96112 if err != nil {
97- return fmt.Errorf (" %s : % w" , Err<Action><Resource>, err)
113+ return fmt.Errorf (" %s : % w" , utils. Err <Action><Resource>, err)
98114 }
99115
100116 found := &<ResourceType>{}
101- err = r.Get (ctx, client.ObjectKey {Name: <name>, Namespace: r.Options . Namespace }, found)
117+ err = r.Get (ctx, client.ObjectKey {Name: <name>, Namespace: r.GetNamespace () }, found)
102118 if err != nil && errors.IsNotFound (err) {
103- r.logger .Info (" creating new <resource>" , " <resource>" , resource.Name )
119+ r.GetLogger () .Info (" creating new <resource>" , " <resource>" , resource.Name )
104120 return r.Create (ctx, resource)
105121 } else if err != nil {
106- return fmt.Errorf (" %s : % w" , ErrGet<Resource>, err)
122+ return fmt.Errorf (" %s : % w" , utils. ErrGet <Resource>, err)
107123 }
108124
109125 // Update logic if needed
110126 return nil
111127}
112128```
113129
130+ ### Testing Pattern
131+ ``` go
132+ // In suite_test.go
133+ var _ = Describe (" <Component> Name" , func () {
134+ It (" should describe expected behavior" , func () {
135+ // Arrange - Create test resources
136+ cr := utils.GetDefaultOLSConfigCR ()
137+
138+ // Act - Call reconciliation function
139+ err := Reconcile<Component>(testReconcilerInstance, ctx, cr)
140+
141+ // Assert with Gomega matchers
142+ Expect (err).NotTo (HaveOccurred ())
143+
144+ // Verify resource was created
145+ resource := &<ResourceType>{}
146+ err = testReconcilerInstance.Get (ctx, client.ObjectKey {...}, resource)
147+ Expect (err).NotTo (HaveOccurred ())
148+ Expect (resource.Spec .Field ).To (Equal (expectedValue))
149+ })
150+ })
151+ ```
152+
114153## Dependencies & Tools
115154
116155### Core Dependencies
0 commit comments