add Lifecycle.RequireUnique methods for load-once deps

This commit is contained in:
Elijah Duffy
2025-06-03 16:58:59 -07:00
parent b290bc0f7e
commit 6f9e3731ac
2 changed files with 80 additions and 0 deletions

View File

@@ -222,6 +222,14 @@ func TestLifecycle_Require(t *testing.T) {
assert.Equal(t, lc.logger, mod.logger, "expected module logger to match lifecycle logger")
}
func TestLifecycle_RequireUnique(t *testing.T) {
lc := NewLifecycle()
mod := NewModule("module1", ModuleOpts{})
err := lc.RequireUnique(mod)
assert.NoError(t, err, "expected RequireL to succeed")
assert.Equal(t, lc.logger, mod.logger, "expected module logger to match lifecycle logger")
}
func TestLifecycle_RequireL(t *testing.T) {
cases := []struct {
name string
@@ -324,7 +332,56 @@ func TestLifecycle_RequireL(t *testing.T) {
}
})
}
}
func TestLifecycle_RequireUniqueL(t *testing.T) {
cases := []struct {
name string
modules []*Module
existingModules []string
expectedErr string
}{
{
name: "no existing modules",
modules: []*Module{
NewModule("module1", ModuleOpts{}),
},
},
{
name: "module already set up",
modules: []*Module{
NewModule("module1", ModuleOpts{}),
NewModule("module2", ModuleOpts{}),
},
existingModules: []string{"module1"},
expectedErr: "module 'module1' is already set up, cannot require it again",
},
{
name: "nil module",
modules: []*Module{nil},
expectedErr: "module is nil",
},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
assert := assert.New(t)
lc := NewLifecycle()
// Fake existing modules
for _, modName := range tc.existingModules {
lc.setupTracker[modName] = 0 // Mark as set up
}
err := lc.RequireUniqueL(lc.logger, tc.modules...)
if tc.expectedErr == "" {
assert.NoError(err, "expected RequireUniqueL to succeed")
} else {
assert.Error(err, "expected RequireUniqueL to fail")
assert.Contains(err.Error(), tc.expectedErr, "expected error message to match")
}
})
}
}
func TestLifecycle_setupSingle(t *testing.T) {