@@ -18,6 +18,7 @@ import (
1818 "github.com/linuxfoundation/lfx-v2-committee-service/internal/domain/model"
1919 "github.com/linuxfoundation/lfx-v2-committee-service/internal/domain/port"
2020 "github.com/linuxfoundation/lfx-v2-committee-service/internal/infrastructure/mock"
21+ committeeapi "github.com/linuxfoundation/lfx-v2-committee-service/pkg/api"
2122 "github.com/linuxfoundation/lfx-v2-committee-service/pkg/constants"
2223 errs "github.com/linuxfoundation/lfx-v2-committee-service/pkg/errors"
2324 emailapi "github.com/linuxfoundation/lfx-v2-email-service/pkg/api"
@@ -2515,3 +2516,114 @@ func TestHandleInviteAccepted(t *testing.T) {
25152516 })
25162517 }
25172518}
2519+
2520+ func TestMessageHandlerOrchestratorHandleCommitteeGetProject (t * testing.T ) {
2521+ ctx := context .Background ()
2522+
2523+ testCommitteeUID := uuid .New ().String ()
2524+ testProjectUID := "test-project-uid"
2525+ testCommittee := & model.Committee {
2526+ CommitteeBase : model.CommitteeBase {
2527+ UID : testCommitteeUID ,
2528+ ProjectUID : testProjectUID ,
2529+ Name : "Test Committee" ,
2530+ },
2531+ }
2532+
2533+ tests := []struct {
2534+ name string
2535+ setupMock func (mockRepo * mock.MockRepository )
2536+ messageData []byte
2537+ expectedError bool
2538+ errorType interface {}
2539+ validateResponse func (* testing.T , []byte )
2540+ }{
2541+ {
2542+ name : "success - returns project UID" ,
2543+ setupMock : func (mockRepo * mock.MockRepository ) {
2544+ mockRepo .ClearAll ()
2545+ mockRepo .AddCommittee (testCommittee )
2546+ },
2547+ messageData : mustMarshalGetProjectJSON (t , committeeapi.GetCommitteeProjectRequest {CommitteeUID : testCommitteeUID }),
2548+ expectedError : false ,
2549+ validateResponse : func (t * testing.T , response []byte ) {
2550+ var resp committeeapi.GetCommitteeProjectResponse
2551+ require .NoError (t , json .Unmarshal (response , & resp ))
2552+ assert .Equal (t , testProjectUID , resp .ProjectUID )
2553+ assert .Empty (t , resp .Error )
2554+ },
2555+ },
2556+ {
2557+ name : "not found - returns error envelope" ,
2558+ setupMock : func (mockRepo * mock.MockRepository ) {
2559+ mockRepo .ClearAll ()
2560+ },
2561+ messageData : mustMarshalGetProjectJSON (t , committeeapi.GetCommitteeProjectRequest {CommitteeUID : uuid .New ().String ()}),
2562+ expectedError : false ,
2563+ validateResponse : func (t * testing.T , response []byte ) {
2564+ var resp committeeapi.GetCommitteeProjectResponse
2565+ require .NoError (t , json .Unmarshal (response , & resp ))
2566+ assert .Equal (t , "not found" , resp .Error )
2567+ assert .Empty (t , resp .ProjectUID )
2568+ },
2569+ },
2570+ {
2571+ name : "malformed JSON payload - returns validation error" ,
2572+ setupMock : func (mockRepo * mock.MockRepository ) {},
2573+ messageData : []byte (`not-json` ),
2574+ expectedError : true ,
2575+ errorType : errs.Validation {},
2576+ validateResponse : func (t * testing.T , response []byte ) {
2577+ assert .Nil (t , response )
2578+ },
2579+ },
2580+ {
2581+ name : "invalid UUID in payload - returns validation error" ,
2582+ setupMock : func (mockRepo * mock.MockRepository ) {},
2583+ messageData : mustMarshalGetProjectJSON (t , committeeapi.GetCommitteeProjectRequest {CommitteeUID : "not-a-uuid" }),
2584+ expectedError : true ,
2585+ errorType : errs.Validation {},
2586+ validateResponse : func (t * testing.T , response []byte ) {
2587+ assert .Nil (t , response )
2588+ },
2589+ },
2590+ }
2591+
2592+ for _ , tt := range tests {
2593+ t .Run (tt .name , func (t * testing.T ) {
2594+ mockRepo := mock .NewMockRepository ()
2595+ tt .setupMock (mockRepo )
2596+
2597+ handler := NewMessageHandlerOrchestrator (
2598+ WithCommitteeReaderForMessageHandler (
2599+ NewCommitteeReaderOrchestrator (
2600+ WithCommitteeReader (mockRepo ),
2601+ ),
2602+ ),
2603+ )
2604+
2605+ mockMsg := newMockTransportMessenger (constants .CommitteeGetProjectSubject , tt .messageData )
2606+
2607+ response , err := handler .HandleCommitteeGetProject (ctx , mockMsg )
2608+
2609+ if tt .expectedError {
2610+ require .Error (t , err )
2611+ if tt .errorType != nil {
2612+ assert .IsType (t , tt .errorType , err )
2613+ }
2614+ } else {
2615+ require .NoError (t , err )
2616+ }
2617+
2618+ tt .validateResponse (t , response )
2619+ })
2620+ }
2621+ }
2622+
2623+ // mustMarshalGetProjectJSON marshals v to JSON and fails the test on error.
2624+ func mustMarshalGetProjectJSON (t * testing.T , v interface {}) []byte {
2625+ t .Helper ()
2626+ b , err := json .Marshal (v )
2627+ require .NoError (t , err )
2628+ return b
2629+ }
0 commit comments