Implement ConfigAPI service layer
parent
54ff87a130
commit
353880bc22
@ -0,0 +1 @@
|
||||
package configapi
|
@ -0,0 +1,9 @@
|
||||
package database
|
||||
|
||||
//go:generate mockgen -destination=../database_mock/database_mock.go -package=database_mock . Database
|
||||
|
||||
// Database is the underlying storage for the ConfigAPI
|
||||
type Database interface {
|
||||
Get(key string) ([]byte, error)
|
||||
Set(key string, value []byte) error
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/creekorful/trandoshan/internal/configapi/database"
|
||||
"github.com/creekorful/trandoshan/internal/event"
|
||||
)
|
||||
|
||||
// Service is the functionality layer provided by the ConfigAPI
|
||||
type Service struct {
|
||||
db database.Database
|
||||
pub event.Publisher
|
||||
}
|
||||
|
||||
// Get config using his key
|
||||
func (s *Service) Get(key string) ([]byte, error) {
|
||||
return s.db.Get(key)
|
||||
}
|
||||
|
||||
// Set config value
|
||||
func (s *Service) Set(key string, value []byte) error {
|
||||
if err := s.db.Set(key, value); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// publish event to notify config changed
|
||||
return s.pub.PublishJSON(fmt.Sprintf("config.%s", key), value)
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"github.com/creekorful/trandoshan/internal/configapi/database_mock"
|
||||
"github.com/creekorful/trandoshan/internal/event_mock"
|
||||
"github.com/golang/mock/gomock"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestService_Get(t *testing.T) {
|
||||
mockCtrl := gomock.NewController(t)
|
||||
defer mockCtrl.Finish()
|
||||
|
||||
dbMock := database_mock.NewMockDatabase(mockCtrl)
|
||||
dbMock.EXPECT().Get("test").Return([]byte("hello"), nil)
|
||||
|
||||
s := Service{
|
||||
db: dbMock,
|
||||
}
|
||||
|
||||
val, err := s.Get("test")
|
||||
if err != nil {
|
||||
t.FailNow()
|
||||
}
|
||||
if string(val) != "hello" {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestService_Set(t *testing.T) {
|
||||
mockCtrl := gomock.NewController(t)
|
||||
defer mockCtrl.Finish()
|
||||
|
||||
dbMock := database_mock.NewMockDatabase(mockCtrl)
|
||||
pubMock := event_mock.NewMockPublisher(mockCtrl)
|
||||
|
||||
dbMock.EXPECT().Set("test-key", []byte("hello")).Return(nil)
|
||||
pubMock.EXPECT().PublishJSON("config.test-key", []byte("hello")).Return(nil)
|
||||
|
||||
s := Service{
|
||||
db: dbMock,
|
||||
pub: pubMock,
|
||||
}
|
||||
|
||||
if err := s.Set("test-key", []byte("hello")); err != nil {
|
||||
t.Fail()
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue