@@ -47,6 +47,8 @@ func TestCQRS(t *testing.T) {
4747 captureEventHandler .Reset ()
4848
4949 assert .NoError (t , router .Close ())
50+
51+ assert .Equal (t , cqrsFacade .CommandEventMarshaler (), ts .Marshaler )
5052}
5153
5254func createRouterAndFacade (ts TestServices , t * testing.T , commandHandler * CaptureCommandHandler , eventHandler * CaptureEventHandler ) (* message.Router , * cqrs.Facade ) {
@@ -224,3 +226,126 @@ func (p *publisherStub) Publish(topic string, messages ...*message.Message) erro
224226
225227 return nil
226228}
229+
230+ func TestFacadeConfig_Validate (t * testing.T ) {
231+ ts := NewTestServices ()
232+
233+ router , err := message .NewRouter (message.RouterConfig {}, ts .Logger )
234+ require .NoError (t , err )
235+
236+ validConfig := cqrs.FacadeConfig {
237+ GenerateCommandsTopic : func (commandName string ) string {
238+ return commandName
239+ },
240+ GenerateEventsTopic : func (eventName string ) string {
241+ return eventName
242+ },
243+ CommandHandlers : func (cb * cqrs.CommandBus , eb * cqrs.EventBus ) []cqrs.CommandHandler {
244+ return []cqrs.CommandHandler {}
245+ },
246+ EventHandlers : func (cb * cqrs.CommandBus , eb * cqrs.EventBus ) []cqrs.EventHandler {
247+ return []cqrs.EventHandler {}
248+ },
249+ Router : router ,
250+ CommandsPublisher : ts .CommandsPubSub ,
251+ CommandsSubscriberConstructor : func (handlerName string ) (message.Subscriber , error ) {
252+ return ts .CommandsPubSub , nil
253+ },
254+ EventsPublisher : ts .EventsPubSub ,
255+ EventsSubscriberConstructor : func (handlerName string ) (message.Subscriber , error ) {
256+ return ts .EventsPubSub , nil
257+ },
258+ Logger : ts .Logger ,
259+ CommandEventMarshaler : ts .Marshaler ,
260+ }
261+
262+ testCases := []struct {
263+ Name string
264+ Config cqrs.FacadeConfig
265+ Valid bool
266+ }{
267+ {
268+ Name : "valid" ,
269+ Config : validConfig ,
270+ Valid : true ,
271+ },
272+ {
273+ Name : "missing_GenerateCommandsTopic" ,
274+ Config : transformConfig (validConfig , func (config * cqrs.FacadeConfig ) {
275+ config .GenerateCommandsTopic = nil
276+ }),
277+ Valid : false ,
278+ },
279+ {
280+ Name : "missing_CommandsSubscriberConstructor" ,
281+ Config : transformConfig (validConfig , func (config * cqrs.FacadeConfig ) {
282+ config .CommandsSubscriberConstructor = nil
283+ }),
284+ Valid : false ,
285+ },
286+ {
287+ Name : "missing_CommandsPublisher" ,
288+ Config : transformConfig (validConfig , func (config * cqrs.FacadeConfig ) {
289+ config .CommandsPublisher = nil
290+ }),
291+ Valid : false ,
292+ },
293+ {
294+ Name : "missing_GenerateEventsTopic" ,
295+ Config : transformConfig (validConfig , func (config * cqrs.FacadeConfig ) {
296+ config .GenerateEventsTopic = nil
297+ }),
298+ Valid : false ,
299+ },
300+ {
301+ Name : "missing_GenerateEventsTopic" ,
302+ Config : transformConfig (validConfig , func (config * cqrs.FacadeConfig ) {
303+ config .EventsSubscriberConstructor = nil
304+ }),
305+ Valid : false ,
306+ },
307+ {
308+ Name : "missing_EventsPublisher" ,
309+ Config : transformConfig (validConfig , func (config * cqrs.FacadeConfig ) {
310+ config .EventsPublisher = nil
311+ }),
312+ Valid : false ,
313+ },
314+ {
315+ Name : "missing_Router" ,
316+ Config : transformConfig (validConfig , func (config * cqrs.FacadeConfig ) {
317+ config .Router = nil
318+ }),
319+ Valid : false ,
320+ },
321+ {
322+ Name : "missing_Logger" ,
323+ Config : transformConfig (validConfig , func (config * cqrs.FacadeConfig ) {
324+ config .Logger = nil
325+ }),
326+ Valid : false ,
327+ },
328+ {
329+ Name : "missing_CommandEventMarshaler" ,
330+ Config : transformConfig (validConfig , func (config * cqrs.FacadeConfig ) {
331+ config .CommandEventMarshaler = nil
332+ }),
333+ Valid : false ,
334+ },
335+ }
336+
337+ for _ , c := range testCases {
338+ t .Run (c .Name , func (t * testing.T ) {
339+ if c .Valid {
340+ assert .NoError (t , c .Config .Validate ())
341+ } else {
342+ assert .Error (t , c .Config .Validate ())
343+ }
344+ })
345+ }
346+ }
347+
348+ func transformConfig (config cqrs.FacadeConfig , transformFn func (config * cqrs.FacadeConfig )) cqrs.FacadeConfig {
349+ transformFn (& config )
350+ return config
351+ }
0 commit comments