diff --git a/store.go b/store.go index 5195f28..9ab9a7f 100644 --- a/store.go +++ b/store.go @@ -32,12 +32,6 @@ const ( // is already known as a struct literal. type StoreOption func(*StoreConfig) -type journalConfiguration struct { - endpointURL string - organisation string - bucketName string -} - // Usage example: `config := store.StoreConfig{DatabasePath: ":memory:", PurgeInterval: 30 * time.Second}` type StoreConfig struct { // Usage example: `config := store.StoreConfig{DatabasePath: "/tmp/go-store.db"}` @@ -58,6 +52,24 @@ type JournalConfiguration struct { BucketName string } +func (journalConfig JournalConfiguration) isConfigured() bool { + return journalConfig.EndpointURL != "" && + journalConfig.Organisation != "" && + journalConfig.BucketName != "" +} + +type journalConfiguration struct { + endpointURL string + organisation string + bucketName string +} + +func (journalConfig journalConfiguration) isConfigured() bool { + return journalConfig.endpointURL != "" && + journalConfig.organisation != "" && + journalConfig.bucketName != "" +} + // Usage example: `storeInstance, err := store.New(":memory:")` type Store struct { sqliteDatabase *sql.DB @@ -125,12 +137,12 @@ func (storeInstance *Store) JournalConfiguration() JournalConfiguration { } } -// Usage example: `if storeInstance.JournalConfigured() { fmt.Println("journal is enabled") }` +// Usage example: `if storeInstance.JournalConfigured() { fmt.Println("journal is fully configured") }` func (storeInstance *Store) JournalConfigured() bool { if storeInstance == nil { return false } - return storeInstance.journalConfiguration != (journalConfiguration{}) + return storeInstance.journalConfiguration.isConfigured() } // Usage example: `config := storeInstance.Config(); fmt.Println(config.DatabasePath, config.PurgeInterval)` @@ -189,6 +201,9 @@ func openConfiguredStore(operation string, config StoreConfig) (*Store, error) { } if config.Journal != (JournalConfiguration{}) { + if !config.Journal.isConfigured() { + return nil, core.E(operation, "journal configuration must include endpoint URL, organisation, and bucket name", nil) + } storeInstance.journalConfiguration = journalConfiguration{ endpointURL: config.Journal.EndpointURL, organisation: config.Journal.Organisation, diff --git a/store_test.go b/store_test.go index 76a3284..eeffe5b 100644 --- a/store_test.go +++ b/store_test.go @@ -136,6 +136,18 @@ func TestStore_JournalConfigured_Good(t *testing.T) { assert.False(t, unconfiguredStore.JournalConfigured()) } +func TestStore_NewConfigured_Bad_PartialJournalConfiguration(t *testing.T) { + _, err := NewConfigured(StoreConfig{ + DatabasePath: ":memory:", + Journal: JournalConfiguration{ + EndpointURL: "http://127.0.0.1:8086", + Organisation: "core", + }, + }) + require.Error(t, err) + assert.Contains(t, err.Error(), "journal configuration must include endpoint URL, organisation, and bucket name") +} + func TestStore_Config_Good(t *testing.T) { storeInstance, err := NewConfigured(StoreConfig{ DatabasePath: ":memory:",