Skip to content

Commit

Permalink
Merge pull request #1928 from dedis/work-be1-stuart-replace-some-switch
Browse files Browse the repository at this point in the history
[BE1] Increase usability of module with handlers
  • Loading branch information
sgueissa authored Jun 14, 2024
2 parents 27b7943 + 61aa18f commit 688f4a1
Show file tree
Hide file tree
Showing 11 changed files with 309 additions and 250 deletions.
40 changes: 9 additions & 31 deletions be1-go/internal/handler/message/hmessage/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package hmessage
import (
"github.com/rs/zerolog"
"popstellar/internal/errors"
"popstellar/internal/handler/channel"
"popstellar/internal/handler/message/mmessage"
)

Expand All @@ -16,27 +15,19 @@ type Repository interface {
GetChannelType(channel string) (string, error)
}

type DataHandler interface {
type ChannelHandler interface {
Handle(channelPath string, msg mmessage.Message) error
}

type DataHandlers struct {
Root DataHandler
Lao DataHandler
Election DataHandler
Chirp DataHandler
Reaction DataHandler
Coin DataHandler
Federation DataHandler
}
type ChannelHandlers map[string]ChannelHandler

type Handler struct {
db Repository
handlers DataHandlers
handlers ChannelHandlers
log zerolog.Logger
}

func New(db Repository, handlers DataHandlers, log zerolog.Logger) *Handler {
func New(db Repository, handlers ChannelHandlers, log zerolog.Logger) *Handler {
return &Handler{
db: db,
handlers: handlers,
Expand Down Expand Up @@ -66,23 +57,10 @@ func (h *Handler) Handle(channelPath string, msg mmessage.Message, fromRumor boo
return err
}

switch channelType {
case channel.RootObject:
err = h.handlers.Root.Handle(channelPath, msg)
case channel.LAOObject:
err = h.handlers.Lao.Handle(channelPath, msg)
case channel.ElectionObject:
err = h.handlers.Election.Handle(channelPath, msg)
case channel.ChirpObject:
err = h.handlers.Chirp.Handle(channelPath, msg)
case channel.ReactionObject:
err = h.handlers.Reaction.Handle(channelPath, msg)
case channel.CoinObject:
err = h.handlers.Coin.Handle(channelPath, msg)
case channel.FederationObject:
err = h.handlers.Federation.Handle(channelPath, msg)
default:
err = errors.NewInvalidResourceError("unknown channelPath type for %s", channelPath)
handler, ok := h.handlers[channelType]
if !ok {
return errors.NewInvalidResourceError("unknown channelPath type for %s", channelPath)
}
return err

return handler.Handle(channelPath, msg)
}
125 changes: 13 additions & 112 deletions be1-go/internal/handler/message/hmessage/message_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,18 @@ import (
"time"
)

func Test_New(t *testing.T) {

}

func Test_handleChannel(t *testing.T) {
db := mocks.NewRepository(t)
dataHandler := mocks.NewDataHandler(t)

subHandlers := DataHandlers{
Root: dataHandler,
Lao: dataHandler,
Election: dataHandler,
Chirp: dataHandler,
Reaction: dataHandler,
Coin: dataHandler,
Federation: dataHandler,
}
channelHandler := mocks.NewChannelHandler(t)

channelHandlers := make(ChannelHandlers)
channelHandlers[channel.Root] = channelHandler

msgHandler := New(db, subHandlers, zerolog.New(io.Discard))
msgHandler := New(db, channelHandlers, zerolog.New(io.Discard))

_, publicBuf, private, _ := generator.GenerateKeyPair(t)
sender := base64.URLEncoding.EncodeToString(publicBuf)
Expand Down Expand Up @@ -189,12 +186,12 @@ func Test_handleChannel(t *testing.T) {

// Test 12: success to handled message for channel root

channelPath = "rootMsg"
msg = generator.NewChirpAddMsg(t, sender, private, time.Now().Unix())
channelPath = "/root"
msg = generator.NewLaoCreateMsg(t, sender, "laoID", "laoName", time.Now().Unix(), sender, private)

db.On("HasMessage", msg.MessageID).Return(false, nil)
db.On("GetChannelType", channelPath).Return(channel.RootObject, nil)
dataHandler.On("Handle", channelPath, msg).Return(nil)
db.On("GetChannelType", channelPath).Return(channel.Root, nil).Once()
channelHandler.On("Handle", channelPath, msg).Return(nil)

args = append(args, input{
name: "Test 12",
Expand All @@ -203,102 +200,6 @@ func Test_handleChannel(t *testing.T) {
isError: false,
})

// Test 13: success to handled message for channel lao

channelPath = "laoMsg"
msg = generator.NewChirpAddMsg(t, sender, private, time.Now().Unix())

db.On("HasMessage", msg.MessageID).Return(false, nil)
db.On("GetChannelType", channelPath).Return(channel.LAOObject, nil)
dataHandler.On("Handle", channelPath, msg).Return(nil)

args = append(args, input{
name: "Test 13",
channelPath: channelPath,
message: msg,
isError: false,
})

// Test 14: success to handled message for channel election

channelPath = "electionMsg"
msg = generator.NewChirpAddMsg(t, sender, private, time.Now().Unix())

db.On("HasMessage", msg.MessageID).Return(false, nil)
db.On("GetChannelType", channelPath).Return(channel.ElectionObject, nil)
dataHandler.On("Handle", channelPath, msg).Return(nil)

args = append(args, input{
name: "Test 14",
channelPath: channelPath,
message: msg,
isError: false,
})

// Test 15: success to handled message for channel chirp

channelPath = "chirpMsg"
msg = generator.NewChirpAddMsg(t, sender, private, time.Now().Unix())

db.On("HasMessage", msg.MessageID).Return(false, nil)
db.On("GetChannelType", channelPath).Return(channel.ChirpObject, nil)
dataHandler.On("Handle", channelPath, msg).Return(nil)

args = append(args, input{
name: "Test 15",
channelPath: channelPath,
message: msg,
isError: false,
})

// Test 16: success to handled message for channel reaction

channelPath = "reaction"
msg = generator.NewChirpAddMsg(t, sender, private, time.Now().Unix())

db.On("HasMessage", msg.MessageID).Return(false, nil)
db.On("GetChannelType", channelPath).Return(channel.ReactionObject, nil)
dataHandler.On("Handle", channelPath, msg).Return(nil)

args = append(args, input{
name: "Test 16",
channelPath: channelPath,
message: msg,
isError: false,
})

// Test 17: success to handled message for channel coin

channelPath = "coinMsg"
msg = generator.NewChirpAddMsg(t, sender, private, time.Now().Unix())

db.On("HasMessage", msg.MessageID).Return(false, nil)
db.On("GetChannelType", channelPath).Return(channel.CoinObject, nil)
dataHandler.On("Handle", channelPath, msg).Return(nil)

args = append(args, input{
name: "Test 17",
channelPath: channelPath,
message: msg,
isError: false,
})

// Test 18: success to handled message for channel coin

channelPath = "coinMsg"
msg = generator.NewChirpAddMsg(t, sender, private, time.Now().Unix())

db.On("HasMessage", msg.MessageID).Return(false, nil)
db.On("GetChannelType", channelPath).Return(channel.FederationObject, nil)
dataHandler.On("Handle", channelPath, msg).Return(nil)

args = append(args, input{
name: "Test 18",
channelPath: channelPath,
message: msg,
isError: false,
})

for _, arg := range args {
t.Run(arg.name, func(t *testing.T) {
err := msgHandler.Handle(arg.channelPath, arg.message, false)
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

42 changes: 42 additions & 0 deletions be1-go/internal/handler/method/publish/hpublish/mocks/hub.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 688f4a1

Please sign in to comment.