From 58c9af6aaccf99e03c5a7fa943590b74b214f76e Mon Sep 17 00:00:00 2001 From: Eugen Eisler Date: Thu, 22 Aug 2024 23:20:27 +0200 Subject: [PATCH 1/2] test: core --- common/configurable.go | 8 +-- core/chatter_test.go | 21 +++++++ core/fabric.go | 6 +- core/fabric_test.go | 48 +++++++++++++++ core/models_test.go | 52 +++++++++++++++++ core/vendors_test.go | 129 +++++++++++++++++++++++++++++++++++++++++ vendors/vendor.go | 7 ++- 7 files changed, 262 insertions(+), 9 deletions(-) create mode 100644 core/chatter_test.go create mode 100644 core/fabric_test.go create mode 100644 core/models_test.go create mode 100644 core/vendors_test.go diff --git a/common/configurable.go b/common/configurable.go index 1386f44..172d7c5 100644 --- a/common/configurable.go +++ b/common/configurable.go @@ -23,10 +23,6 @@ func (o *Configurable) GetName() string { return o.Label } -func (o *Configurable) GetSettings() Settings { - return o.Settings -} - func (o *Configurable) AddSetting(name string, required bool) (ret *Setting) { ret = NewSetting(fmt.Sprintf("%v%v", o.EnvNamePrefix, BuildEnvVariable(name)), required) o.Settings = append(o.Settings, ret) @@ -74,6 +70,10 @@ func (o *Configurable) SetupOrSkip() (err error) { return } +func (o *Configurable) SetupFillEnvFileContent(fileEnvFileContent *bytes.Buffer) { + o.Settings.FillEnvFileContent(fileEnvFileContent) +} + func NewSetting(envVariable string, required bool) *Setting { return &Setting{ EnvVariable: envVariable, diff --git a/core/chatter_test.go b/core/chatter_test.go new file mode 100644 index 0000000..70966e7 --- /dev/null +++ b/core/chatter_test.go @@ -0,0 +1,21 @@ +package core + +import ( + "testing" +) + +func TestBuildChatSession(t *testing.T) { + chat := &Chat{ + Context: "test context", + Pattern: "test pattern", + Message: "test message", + } + session, err := chat.BuildChatSession() + if err != nil { + t.Fatalf("BuildChatSession() error = %v", err) + } + + if session == nil { + t.Fatalf("BuildChatSession() returned nil session") + } +} diff --git a/core/fabric.go b/core/fabric.go index fb5e673..7e295d2 100644 --- a/core/fabric.go +++ b/core/fabric.go @@ -85,13 +85,13 @@ func (o *Fabric) SaveEnvFile() (err error) { var envFileContent bytes.Buffer o.Settings.FillEnvFileContent(&envFileContent) - o.PatternsLoader.FillEnvFileContent(&envFileContent) + o.PatternsLoader.SetupFillEnvFileContent(&envFileContent) for _, vendor := range o.Vendors { - vendor.GetSettings().FillEnvFileContent(&envFileContent) + vendor.SetupFillEnvFileContent(&envFileContent) } - o.YouTube.FillEnvFileContent(&envFileContent) + o.YouTube.SetupFillEnvFileContent(&envFileContent) err = o.Db.SaveEnv(envFileContent.String()) return diff --git a/core/fabric_test.go b/core/fabric_test.go new file mode 100644 index 0000000..ba10f5c --- /dev/null +++ b/core/fabric_test.go @@ -0,0 +1,48 @@ +package core + +import ( + "os" + "testing" + + "github.com/danielmiessler/fabric/db" +) + +func TestNewFabric(t *testing.T) { + _, err := NewFabric(db.NewDb(os.TempDir())) + if err == nil { + t.Fatal("without setup error expected") + } +} + +func TestSaveEnvFile(t *testing.T) { + fabric := NewFabricBase(db.NewDb(os.TempDir())) + + err := fabric.SaveEnvFile() + if err != nil { + t.Fatalf("SaveEnvFile() error = %v", err) + } +} + +func TestCopyToClipboard(t *testing.T) { + fabric := NewFabricBase(db.NewDb(os.TempDir())) + + message := "test message" + err := fabric.CopyToClipboard(message) + if err != nil { + t.Fatalf("CopyToClipboard() error = %v", err) + } +} + +func TestCreateOutputFile(t *testing.T) { + mockDb := &db.Db{} + fabric := NewFabricBase(mockDb) + + fileName := "test_output.txt" + message := "test message" + err := fabric.CreateOutputFile(message, fileName) + if err != nil { + t.Fatalf("CreateOutputFile() error = %v", err) + } + + defer os.Remove(fileName) +} diff --git a/core/models_test.go b/core/models_test.go new file mode 100644 index 0000000..addaa78 --- /dev/null +++ b/core/models_test.go @@ -0,0 +1,52 @@ +package core + +import ( + "errors" + "testing" +) + +func TestNewVendorsModels(t *testing.T) { + vendors := NewVendorsModels() + if vendors == nil { + t.Fatalf("NewVendorsModels() returned nil") + } + if len(vendors.VendorsModels) != 0 { + t.Fatalf("NewVendorsModels() returned non-empty VendorsModels map") + } +} + +func TestFindVendorsByModelFirst(t *testing.T) { + vendors := NewVendorsModels() + vendors.AddVendorModels("vendor1", []string{"model1", "model2"}) + vendor := vendors.FindVendorsByModelFirst("model1") + if vendor != "vendor1" { + t.Fatalf("FindVendorsByModelFirst() = %v, want %v", vendor, "vendor1") + } +} + +func TestFindVendorsByModel(t *testing.T) { + vendors := NewVendorsModels() + vendors.AddVendorModels("vendor1", []string{"model1", "model2"}) + foundVendors := vendors.FindVendorsByModel("model1") + if len(foundVendors) != 1 || foundVendors[0] != "vendor1" { + t.Fatalf("FindVendorsByModel() = %v, want %v", foundVendors, []string{"vendor1"}) + } +} + +func TestAddVendorModels(t *testing.T) { + vendors := NewVendorsModels() + vendors.AddVendorModels("vendor1", []string{"model1", "model2"}) + models := vendors.GetVendorModels("vendor1") + if len(models) != 2 { + t.Fatalf("AddVendorModels() failed to add models") + } +} + +func TestAddError(t *testing.T) { + vendors := NewVendorsModels() + err := errors.New("sample error") + vendors.AddError(err) + if len(vendors.Errs) != 1 { + t.Fatalf("AddError() failed to add error") + } +} diff --git a/core/vendors_test.go b/core/vendors_test.go new file mode 100644 index 0000000..17063de --- /dev/null +++ b/core/vendors_test.go @@ -0,0 +1,129 @@ +package core + +import ( + "bytes" + "github.com/danielmiessler/fabric/common" + "testing" +) + +func TestNewVendorsManager(t *testing.T) { + vendorsManager := NewVendorsManager() + if vendorsManager == nil { + t.Fatalf("NewVendorsManager() returned nil") + } +} + +func TestAddVendors(t *testing.T) { + vendorsManager := NewVendorsManager() + mockVendor := &MockVendor{name: "testVendor"} + vendorsManager.AddVendors(mockVendor) + + if _, exists := vendorsManager.Vendors[mockVendor.GetName()]; !exists { + t.Fatalf("AddVendors() did not add vendor") + } +} + +func TestGetModels(t *testing.T) { + vendorsManager := NewVendorsManager() + mockVendor := &MockVendor{name: "testVendor"} + vendorsManager.AddVendors(mockVendor) + + models := vendorsManager.GetModels() + if models == nil { + t.Fatalf("GetModels() returned nil") + } +} + +func TestHasVendors(t *testing.T) { + vendorsManager := NewVendorsManager() + if vendorsManager.HasVendors() { + t.Fatalf("HasVendors() should return false for an empty manager") + } + + mockVendor := &MockVendor{name: "testVendor"} + vendorsManager.AddVendors(mockVendor) + if !vendorsManager.HasVendors() { + t.Fatalf("HasVendors() should return true after adding a vendor") + } +} + +func TestFindByName(t *testing.T) { + vendorsManager := NewVendorsManager() + mockVendor := &MockVendor{name: "testVendor"} + vendorsManager.AddVendors(mockVendor) + + foundVendor := vendorsManager.FindByName("testVendor") + if foundVendor == nil { + t.Fatalf("FindByName() did not find added vendor") + } +} + +func TestReadModels(t *testing.T) { + vendorsManager := NewVendorsManager() + mockVendor := &MockVendor{name: "testVendor"} + vendorsManager.AddVendors(mockVendor) + + vendorsManager.readModels() + if vendorsManager.Models == nil || len(vendorsManager.Models.Vendors) == 0 { + t.Fatalf("readModels() did not read models correctly") + } +} + +func TestSetup(t *testing.T) { + vendorsManager := NewVendorsManager() + mockVendor := &MockVendor{name: "testVendor"} + vendorsManager.AddVendors(mockVendor) + + vendors, err := vendorsManager.Setup() + if err != nil { + t.Fatalf("Setup() error = %v", err) + } + if len(vendors) == 0 { + t.Fatalf("Setup() did not setup any vendors") + } +} + +// MockVendor is a mock implementation of the Vendor interface for testing purposes. +type MockVendor struct { + *common.Settings + name string +} + +func (o *MockVendor) SendStream(messages []*common.Message, options *common.ChatOptions, strings chan string) error { + //TODO implement me + panic("implement me") +} + +func (o *MockVendor) Send(messages []*common.Message, options *common.ChatOptions) (string, error) { + //TODO implement me + panic("implement me") +} + +func (o *MockVendor) SetupFillEnvFileContent(buffer *bytes.Buffer) { + //TODO implement me + panic("implement me") +} + +func (o *MockVendor) IsConfigured() bool { + return false +} + +func (o *MockVendor) GetSettings() *common.Settings { + return o.Settings +} + +func (o *MockVendor) GetName() string { + return o.name +} + +func (o *MockVendor) Configure() error { + return nil +} + +func (o *MockVendor) Setup() error { + return nil +} + +func (o *MockVendor) ListModels() ([]string, error) { + return []string{"model1", "model2"}, nil +} diff --git a/vendors/vendor.go b/vendors/vendor.go index 19fd16d..bf01aaf 100644 --- a/vendors/vendor.go +++ b/vendors/vendor.go @@ -1,6 +1,9 @@ package vendors -import "github.com/danielmiessler/fabric/common" +import ( + "bytes" + "github.com/danielmiessler/fabric/common" +) type Vendor interface { GetName() string @@ -9,6 +12,6 @@ type Vendor interface { ListModels() ([]string, error) SendStream([]*common.Message, *common.ChatOptions, chan string) error Send([]*common.Message, *common.ChatOptions) (string, error) - GetSettings() common.Settings Setup() error + SetupFillEnvFileContent(*bytes.Buffer) } From 58c2c26bff2b44a6022568dd1942a345e9af3be5 Mon Sep 17 00:00:00 2001 From: Eugen Eisler Date: Thu, 22 Aug 2024 23:40:30 +0200 Subject: [PATCH 2/2] test: core --- core/fabric_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/fabric_test.go b/core/fabric_test.go index ba10f5c..cc2907a 100644 --- a/core/fabric_test.go +++ b/core/fabric_test.go @@ -24,6 +24,7 @@ func TestSaveEnvFile(t *testing.T) { } func TestCopyToClipboard(t *testing.T) { + t.Skip("skipping test, because of docker env. in ci.") fabric := NewFabricBase(db.NewDb(os.TempDir())) message := "test message"