From 6498f3d56b64495cf559350d5f9bb8fc4c1dc210 Mon Sep 17 00:00:00 2001 From: Dan Jones Date: Fri, 13 Sep 2024 17:45:06 -0500 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20Test=20app?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.go | 16 ++++++- app_test.go | 89 +++++++++++++++++++++++++++++++++++++ config/config.go | 1 + internal/testmocks/store.go | 38 ++++++++++++++++ 4 files changed, 142 insertions(+), 2 deletions(-) create mode 100644 app_test.go create mode 100644 internal/testmocks/store.go diff --git a/app.go b/app.go index 2823557..c4b89ce 100644 --- a/app.go +++ b/app.go @@ -26,6 +26,7 @@ func NewApp(ver string, conf config.Config, db proc.Store) (*App, error) { } app := App{ version: ver, + conf: conf, } selfIRI := boxap.DefaultServiceIRI(conf.BaseURL) @@ -44,6 +45,10 @@ func (l *App) Config() config.Config { return l.conf } +func (l *App) Environment() config.Env { + return l.conf.Environment() +} + func (l *App) Storage() proc.Store { return l.storage } @@ -64,6 +69,13 @@ func (l *App) Version() string { return l.version } -func (l *App) String() string { - return fmt.Sprintf("Lenore (%s)", l.version) +func (l *App) Name() string { + if l.conf.Name == "" { + return "Lenore" + } + return l.conf.Name +} + +func (l *App) String() string { + return fmt.Sprintf("%s (%s)", l.Name(), l.version) } diff --git a/app_test.go b/app_test.go new file mode 100644 index 0000000..7bc0cac --- /dev/null +++ b/app_test.go @@ -0,0 +1,89 @@ +package lenore + +import ( + "fmt" + "testing" + + "codeberg.org/danjones000/lenore/config" + "codeberg.org/danjones000/lenore/internal/testmocks" + vocab "github.com/go-ap/activitypub" + "github.com/stretchr/testify/assert" +) + +func TestEmptyBaseURL(t *testing.T) { + c := config.Config{} + a, er := NewApp("0.0.0", c, testmocks.GetStore()) + assert.Nil(t, a) + assert.EqualError(t, er, "Missing BaseURL") +} + +func TestDefaultEnvironment(t *testing.T) { + c := config.Config{BaseURL: "http://localhost:1234/"} + a, er := NewApp("0.0.0", c, testmocks.GetStore()) + assert.NoError(t, er) + if assert.NotNil(t, a) { + assert.Equal(t, config.DEV, a.Environment()) + } +} + +func TestGivenEnvironment(t *testing.T) { + cases := [...]struct { + given config.Env + exp config.Env + }{ + {config.DEV, config.DEV}, + {config.PROD, config.PROD}, + {config.QA, config.QA}, + {config.Env("foo"), config.DEV}, + {config.Env("✨"), config.DEV}, + } + + for _, c := range cases { + t.Run(string(c.given), func(t *testing.T) { + conf := config.Config{BaseURL: "http://localhost:1234/", Env: c.given} + a, er := NewApp("0.0.0", conf, testmocks.GetStore()) + assert.NoError(t, er) + if assert.NotNil(t, a) { + assert.Equal(t, conf, a.Config()) + assert.Equal(t, c.exp, a.Environment()) + } + }) + } +} + +func TestService(t *testing.T) { + base := "http://localhost:1234/" + conf := config.Config{BaseURL: base} + a, er := NewApp("0.0.0.0", conf, testmocks.GetStore()) + assert.NoError(t, er) + if assert.NotNil(t, a) { + assert.Equal(t, vocab.IRI(base), a.ServiceIRI()) + assert.Equal(t, vocab.IRI(base), a.Service().ID) + } +} + +func TestStrings(t *testing.T) { + cases := [...]struct { + given string + exp string + }{ + {"", "Lenore"}, + {"Lenore", "Lenore"}, + {"Danny Ray", "Danny Ray"}, + {"✨👹", "✨👹"}, + } + + for _, c := range cases { + t.Run(c.given, func(t *testing.T) { + conf := config.Config{BaseURL: "http://localhost:1234/", Name: c.given} + expStr := fmt.Sprintf("%s (%s)", c.exp, "0.0.0.0") + a, er := NewApp("0.0.0.0", conf, testmocks.GetStore()) + assert.NoError(t, er) + if assert.NotNil(t, a) { + assert.Equal(t, c.exp, a.Name()) + assert.Equal(t, "0.0.0.0", a.Version()) + assert.Equal(t, expStr, a.String()) + } + }) + } +} diff --git a/config/config.go b/config/config.go index 33c2e54..a0125fb 100644 --- a/config/config.go +++ b/config/config.go @@ -1,6 +1,7 @@ package config type Config struct { + Name string Env Env BaseURL string } diff --git a/internal/testmocks/store.go b/internal/testmocks/store.go new file mode 100644 index 0000000..9cdccb7 --- /dev/null +++ b/internal/testmocks/store.go @@ -0,0 +1,38 @@ +package testmocks + +import ( + vocab "github.com/go-ap/activitypub" + "github.com/go-ap/filters" + proc "github.com/go-ap/processing" +) + +type st struct{} + +func (s *st) Load(iri vocab.IRI, filters ...filters.Check) (vocab.Item, error) { + i := vocab.ActorNew(iri, vocab.ActorType) + return i, nil +} + +func (s *st) Save(v vocab.Item) (vocab.Item, error) { + return v, nil +} + +func (s *st) Delete(v vocab.Item) error { + return nil +} + +func (s *st) Create(col vocab.CollectionInterface) (vocab.CollectionInterface, error) { + return col, nil +} + +func (s *st) AddTo(col vocab.IRI, it vocab.Item) error { + return nil +} + +func (s *st) RemoveFrom(col vocab.IRI, it vocab.Item) error { + return nil +} + +func GetStore() proc.Store { + return &st{} +}