Merge branch 'main' of github.com:danielmiessler/fabric
This commit is contained in:
commit
e915c93885
@ -23,10 +23,6 @@ func (o *Configurable) GetName() string {
|
|||||||
return o.Label
|
return o.Label
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *Configurable) GetSettings() Settings {
|
|
||||||
return o.Settings
|
|
||||||
}
|
|
||||||
|
|
||||||
func (o *Configurable) AddSetting(name string, required bool) (ret *Setting) {
|
func (o *Configurable) AddSetting(name string, required bool) (ret *Setting) {
|
||||||
ret = NewSetting(fmt.Sprintf("%v%v", o.EnvNamePrefix, BuildEnvVariable(name)), required)
|
ret = NewSetting(fmt.Sprintf("%v%v", o.EnvNamePrefix, BuildEnvVariable(name)), required)
|
||||||
o.Settings = append(o.Settings, ret)
|
o.Settings = append(o.Settings, ret)
|
||||||
@ -74,6 +70,10 @@ func (o *Configurable) SetupOrSkip() (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (o *Configurable) SetupFillEnvFileContent(fileEnvFileContent *bytes.Buffer) {
|
||||||
|
o.Settings.FillEnvFileContent(fileEnvFileContent)
|
||||||
|
}
|
||||||
|
|
||||||
func NewSetting(envVariable string, required bool) *Setting {
|
func NewSetting(envVariable string, required bool) *Setting {
|
||||||
return &Setting{
|
return &Setting{
|
||||||
EnvVariable: envVariable,
|
EnvVariable: envVariable,
|
||||||
|
21
core/chatter_test.go
Normal file
21
core/chatter_test.go
Normal file
@ -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")
|
||||||
|
}
|
||||||
|
}
|
@ -85,13 +85,13 @@ func (o *Fabric) SaveEnvFile() (err error) {
|
|||||||
var envFileContent bytes.Buffer
|
var envFileContent bytes.Buffer
|
||||||
|
|
||||||
o.Settings.FillEnvFileContent(&envFileContent)
|
o.Settings.FillEnvFileContent(&envFileContent)
|
||||||
o.PatternsLoader.FillEnvFileContent(&envFileContent)
|
o.PatternsLoader.SetupFillEnvFileContent(&envFileContent)
|
||||||
|
|
||||||
for _, vendor := range o.Vendors {
|
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())
|
err = o.Db.SaveEnv(envFileContent.String())
|
||||||
return
|
return
|
||||||
|
49
core/fabric_test.go
Normal file
49
core/fabric_test.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
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) {
|
||||||
|
t.Skip("skipping test, because of docker env. in ci.")
|
||||||
|
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)
|
||||||
|
}
|
52
core/models_test.go
Normal file
52
core/models_test.go
Normal file
@ -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")
|
||||||
|
}
|
||||||
|
}
|
129
core/vendors_test.go
Normal file
129
core/vendors_test.go
Normal file
@ -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
|
||||||
|
}
|
7
vendors/vendor.go
vendored
7
vendors/vendor.go
vendored
@ -1,6 +1,9 @@
|
|||||||
package vendors
|
package vendors
|
||||||
|
|
||||||
import "github.com/danielmiessler/fabric/common"
|
import (
|
||||||
|
"bytes"
|
||||||
|
"github.com/danielmiessler/fabric/common"
|
||||||
|
)
|
||||||
|
|
||||||
type Vendor interface {
|
type Vendor interface {
|
||||||
GetName() string
|
GetName() string
|
||||||
@ -9,6 +12,6 @@ type Vendor interface {
|
|||||||
ListModels() ([]string, error)
|
ListModels() ([]string, error)
|
||||||
SendStream([]*common.Message, *common.ChatOptions, chan string) error
|
SendStream([]*common.Message, *common.ChatOptions, chan string) error
|
||||||
Send([]*common.Message, *common.ChatOptions) (string, error)
|
Send([]*common.Message, *common.ChatOptions) (string, error)
|
||||||
GetSettings() common.Settings
|
|
||||||
Setup() error
|
Setup() error
|
||||||
|
SetupFillEnvFileContent(*bytes.Buffer)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user