From 3d2029d2786fb30269cd009eb1e6c1f7a5b0cfd9 Mon Sep 17 00:00:00 2001 From: maxwellgithinji Date: Thu, 29 Jul 2021 12:14:49 +0300 Subject: [PATCH] chore: move chargemaster --- go.sum | 6 + .../application/exceptions/custom_errors.go | 9 - .../exceptions/custom_errors_test.go | 2 - .../application/exceptions/error_messages.go | 3 - .../database/fb/firebase_integration_test.go | 27 +- .../chargemaster/mock/service_mock.go | 42 - .../services/chargemaster/service.go | 273 ---- .../services/chargemaster/service_test.go | 399 ------ pkg/onboarding/presentation/config.go | 6 +- .../presentation/graph/generated/generated.go | 60 +- .../presentation/graph/profile.graphql | 2 +- .../presentation/graph/profile.resolvers.go | 42 +- .../presentation/interactor/interactor.go | 80 +- .../presentation/rest/handlers_test.go | 7 +- pkg/onboarding/usecases/login_test.go | 40 +- .../usecases/profile_integration_test.go | 7 +- .../usecases/signup_integration_test.go | 4 + pkg/onboarding/usecases/supplier.go | 228 +-- .../usecases/supplier_integration_test.go | 124 -- .../usecases/supplier_internal_test.go | 14 +- pkg/onboarding/usecases/supplier_unit_test.go | 1239 ++++++----------- .../usecases/ussd/main_integration_test.go | 43 +- tests/config_test.go | 32 +- tests/supplier_acceptance_test.go | 973 ++++++------- 24 files changed, 996 insertions(+), 2666 deletions(-) delete mode 100644 pkg/onboarding/infrastructure/services/chargemaster/mock/service_mock.go delete mode 100644 pkg/onboarding/infrastructure/services/chargemaster/service.go delete mode 100644 pkg/onboarding/infrastructure/services/chargemaster/service_test.go diff --git a/go.sum b/go.sum index 6398e6ff..125c9dd4 100644 --- a/go.sum +++ b/go.sum @@ -118,8 +118,10 @@ github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcju github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -363,7 +365,9 @@ github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.3.0 h1:6NjYksEUlhurdVehpc7S7dk6DAmcKv8V9gG0FsVN2U4= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/savannahghi/converterandformatter v0.0.3/go.mod h1:0o7yieYU10WabPqKuqj+5QL52eTL1eGElxjb+A68bbA= @@ -410,6 +414,7 @@ github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNX github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/shurcooL/vfsgen v0.0.0-20180121065927-ffb13db8def0/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= @@ -443,6 +448,7 @@ github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGr github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/urfave/cli/v2 v2.1.1 h1:Qt8FeAtxE/vfdrLmR3rxR6JRE0RoVmbXu8+6kZtYU4k= github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= diff --git a/pkg/onboarding/application/exceptions/custom_errors.go b/pkg/onboarding/application/exceptions/custom_errors.go index a8a16968..7a66a4e1 100644 --- a/pkg/onboarding/application/exceptions/custom_errors.go +++ b/pkg/onboarding/application/exceptions/custom_errors.go @@ -315,15 +315,6 @@ func SupplierKYCAlreadySubmittedNotFoundError() error { } } -// FindProviderError returns an error message when a provider is not found -func FindProviderError(err error) error { - return &errorcodeutil.CustomError{ - Err: err, - Message: FindProviderErrMsg, - Code: int(errorcodeutil.UnableToFindProvider), - } -} - // PublishKYCNudgeError returns an error message when there's a failure in // creating a KYC nudge func PublishKYCNudgeError(err error) error { diff --git a/pkg/onboarding/application/exceptions/custom_errors_test.go b/pkg/onboarding/application/exceptions/custom_errors_test.go index c39c22ba..8de214ea 100644 --- a/pkg/onboarding/application/exceptions/custom_errors_test.go +++ b/pkg/onboarding/application/exceptions/custom_errors_test.go @@ -74,8 +74,6 @@ func TestCustomErrors(t *testing.T) { assert.NotNil(t, err) err = exceptions.SupplierKYCAlreadySubmittedNotFoundError() assert.NotNil(t, err) - err = exceptions.FindProviderError(fmt.Errorf("error")) - assert.NotNil(t, err) err = exceptions.PublishKYCNudgeError(fmt.Errorf("error")) assert.NotNil(t, err) err = exceptions.InvalidCredentialsError() diff --git a/pkg/onboarding/application/exceptions/error_messages.go b/pkg/onboarding/application/exceptions/error_messages.go index 26bdfc1b..f42d2d9b 100644 --- a/pkg/onboarding/application/exceptions/error_messages.go +++ b/pkg/onboarding/application/exceptions/error_messages.go @@ -126,9 +126,6 @@ const ( // A supplier should have only one kyc SupplierKYCAlreadySubmittedErrMsg = "kyc already exists for supplier" - // FindProviderErrMsg is displayed if a provider is not found - FindProviderErrMsg = "unable to fetch provider from chargemaster" - // PublishKYCNudgeErrMsg is displayed if we are unable to publish a kyc nudge PublishKYCNudgeErrMsg = "unable to publish kyc nudge" diff --git a/pkg/onboarding/infrastructure/database/fb/firebase_integration_test.go b/pkg/onboarding/infrastructure/database/fb/firebase_integration_test.go index 875d1ca3..a49c99b3 100644 --- a/pkg/onboarding/infrastructure/database/fb/firebase_integration_test.go +++ b/pkg/onboarding/infrastructure/database/fb/firebase_integration_test.go @@ -35,7 +35,6 @@ import ( "cloud.google.com/go/pubsub" "firebase.google.com/go/auth" - "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/chargemaster" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/edi" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/engagement" erp "gitlab.slade360emr.com/go/commontools/accounting/pkg/usecases" @@ -147,7 +146,6 @@ func InitializeTestService(ctx context.Context) (*interactor.Interactor, error) engagementClient := utils.NewInterServiceClient(engagementService, ext) ediClient := utils.NewInterServiceClient(ediService, ext) - chrg := chargemaster.NewChargeMasterUseCasesImpl() firestoreExtension := fb.NewFirestoreClientExtension(fsc) fr := fb.NewFirebaseRepository(firestoreExtension, fbc) erp := erp.NewAccounting() @@ -175,25 +173,24 @@ func InitializeTestService(ctx context.Context) (*interactor.Interactor, error) mes := messaging.NewServiceMessagingImpl(ext) pinExt := extension.NewPINExtensionImpl() profile := usecases.NewProfileUseCase(fr, ext, engage, ps, crmExt) - supplier := usecases.NewSupplierUseCases(fr, profile, erp, chrg, engage, mes, ext, ps) + supplier := usecases.NewSupplierUseCases(fr, profile, erp, engage, mes, ext, ps) login := usecases.NewLoginUseCases(fr, profile, ext, pinExt) survey := usecases.NewSurveyUseCases(fr, ext) userpin := usecases.NewUserPinUseCase(fr, profile, ext, pinExt, engage) su := usecases.NewSignUpUseCases(fr, profile, userpin, supplier, ext, engage, ps, edi) return &interactor.Interactor{ - Onboarding: profile, - Signup: su, - Supplier: supplier, - Login: login, - Survey: survey, - UserPIN: userpin, - ERP: erp, - ChargeMaster: chrg, - Engagement: engage, - PubSub: ps, - EDI: edi, - CrmExt: crmExt, + Onboarding: profile, + Signup: su, + Supplier: supplier, + Login: login, + Survey: survey, + UserPIN: userpin, + ERP: erp, + Engagement: engage, + PubSub: ps, + EDI: edi, + CrmExt: crmExt, }, nil } diff --git a/pkg/onboarding/infrastructure/services/chargemaster/mock/service_mock.go b/pkg/onboarding/infrastructure/services/chargemaster/mock/service_mock.go deleted file mode 100644 index 2a598095..00000000 --- a/pkg/onboarding/infrastructure/services/chargemaster/mock/service_mock.go +++ /dev/null @@ -1,42 +0,0 @@ -package mock - -import ( - "context" - - "github.com/savannahghi/firebasetools" - "github.com/savannahghi/onboarding/pkg/onboarding/application/dto" - "github.com/savannahghi/onboarding/pkg/onboarding/domain" - "gitlab.slade360emr.com/go/apiclient" -) - -// FakeServiceChargeMaster is an `Chargemaster` service mock . -type FakeServiceChargeMaster struct { - FetchChargeMasterClientFn func() *apiclient.ServerClient - FetchProviderByIDFn func(ctx context.Context, id string) (*domain.BusinessPartner, error) - FindProviderFn func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BusinessPartnerFilterInput, - sort []*dto.BusinessPartnerSortInput) (*dto.BusinessPartnerConnection, error) - FindBranchFn func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, - sort []*dto.BranchSortInput) (*dto.BranchConnection, error) -} - -// FetchChargeMasterClient ... -func (f *FakeServiceChargeMaster) FetchChargeMasterClient() *apiclient.ServerClient { - return f.FetchChargeMasterClientFn() -} - -// FindProvider ... -func (f *FakeServiceChargeMaster) FindProvider(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BusinessPartnerFilterInput, - sort []*dto.BusinessPartnerSortInput) (*dto.BusinessPartnerConnection, error) { - return f.FindProviderFn(ctx, pagination, filter, sort) -} - -// FindBranch ... -func (f *FakeServiceChargeMaster) FindBranch(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, - sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { - return f.FindBranchFn(ctx, pagination, filter, sort) -} - -// FetchProviderByID ... -func (f *FakeServiceChargeMaster) FetchProviderByID(ctx context.Context, id string) (*domain.BusinessPartner, error) { - return f.FetchProviderByIDFn(ctx, id) -} diff --git a/pkg/onboarding/infrastructure/services/chargemaster/service.go b/pkg/onboarding/infrastructure/services/chargemaster/service.go deleted file mode 100644 index 3ca1acf3..00000000 --- a/pkg/onboarding/infrastructure/services/chargemaster/service.go +++ /dev/null @@ -1,273 +0,0 @@ -package chargemaster - -import ( - "context" - "fmt" - "net/url" - "os" - "strings" - - "github.com/savannahghi/firebasetools" - "github.com/savannahghi/onboarding/pkg/onboarding/application/dto" - "github.com/savannahghi/onboarding/pkg/onboarding/domain" - "github.com/savannahghi/serverutils" - log "github.com/sirupsen/logrus" - "gitlab.slade360emr.com/go/apiclient" -) - -const ( - // ChargeMasterHostEnvVarName is the name of an environment variable that - //points at the API root e.g "https://base.chargemaster.slade360emr.com/v1" - ChargeMasterHostEnvVarName = "CHARGE_MASTER_API_HOST" - - // ChargeMasterAPISchemeEnvVarName points at an environment variable that - // indicates whether the API is "http" or "https". It is used when our code - // needs to construct custom API paths from scratch. - ChargeMasterAPISchemeEnvVarName = "CHARGE_MASTER_API_SCHEME" - - // ChargeMasterTokenURLEnvVarName is an environment variable that contains - // the path to the OAuth 2 token URL for the charge master base. This URL - // could be the same as that used by other Slade 360 products e.g EDI. - // It could also be different. - ChargeMasterTokenURLEnvVarName = "CHARGE_MASTER_TOKEN_URL" - - // ChargeMasterClientIDEnvVarName is the name of an environment variable that holds - // the OAuth2 client ID for a charge master API application. - ChargeMasterClientIDEnvVarName = "CHARGE_MASTER_CLIENT_ID" - - // ChargeMasterClientSecretEnvVarName is the name of an environment variable that holds - // the OAuth2 client secret for a charge master API application. - ChargeMasterClientSecretEnvVarName = "CHARGE_MASTER_CLIENT_SECRET" - - // ChargeMasterUsernameEnvVarName is the name of an environment variable that holds the - // username of a charge master API user. - ChargeMasterUsernameEnvVarName = "CHARGE_MASTER_USERNAME" - - // ChargeMasterPasswordEnvVarName is the name of an environment variable that holds the - // password of the charge master API user referred to by `ChargeMasterUsernameEnvVarName`. - ChargeMasterPasswordEnvVarName = "CHARGE_MASTER_PASSWORD" - - // ChargeMasterGrantTypeEnvVarName should be "password" i.e the only type of OAuth 2 - // "application" that will work for this client is a confidential one that supports - // password authentication. - ChargeMasterGrantTypeEnvVarName = "CHARGE_MASTER_GRANT_TYPE" - - // ChargeMasterBusinessPartnerPath endpoint for business partners on charge master - ChargeMasterBusinessPartnerPath = "/v1/business_partners/" -) - -// ServiceChargeMaster represents logic required to communicate with chargemaster -type ServiceChargeMaster interface { - FetchChargeMasterClient() *apiclient.ServerClient - FindProvider(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BusinessPartnerFilterInput, - sort []*dto.BusinessPartnerSortInput) (*dto.BusinessPartnerConnection, error) - FindBranch(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, - sort []*dto.BranchSortInput) (*dto.BranchConnection, error) - FetchProviderByID(ctx context.Context, id string) (*domain.BusinessPartner, error) -} - -// ServiceChargeMasterImpl .. -type ServiceChargeMasterImpl struct { - ChargeMasterClient *apiclient.ServerClient -} - -// NewChargeMasterUseCasesImpl ... -func NewChargeMasterUseCasesImpl() ServiceChargeMaster { - - clientID := serverutils.MustGetEnvVar(ChargeMasterClientIDEnvVarName) - clientSecret := serverutils.MustGetEnvVar(ChargeMasterClientSecretEnvVarName) - apiTokenURL := serverutils.MustGetEnvVar(ChargeMasterTokenURLEnvVarName) - apiHost := serverutils.MustGetEnvVar(ChargeMasterHostEnvVarName) - apiScheme := serverutils.MustGetEnvVar(ChargeMasterAPISchemeEnvVarName) - grantType := serverutils.MustGetEnvVar(ChargeMasterGrantTypeEnvVarName) - username := serverutils.MustGetEnvVar(ChargeMasterUsernameEnvVarName) - password := serverutils.MustGetEnvVar(ChargeMasterPasswordEnvVarName) - extraHeaders := make(map[string]string) - client, err := apiclient.NewServerClient( - clientID, clientSecret, apiTokenURL, apiHost, apiScheme, grantType, username, password, extraHeaders) - if err != nil { - log.Panicf("unable to initialize Chargemaster client for profile service: %s", err) - os.Exit(1) - } - - return &ServiceChargeMasterImpl{ChargeMasterClient: client} -} - -// FetchChargeMasterClient ... -func (chr ServiceChargeMasterImpl) FetchChargeMasterClient() *apiclient.ServerClient { - return chr.ChargeMasterClient -} - -// FindProvider search for a provider in chargemaster using their name -// -// Example https://base.chargemaster.slade360emr.com/v1/business_partners/?bp_type=PROVIDER&search={name} -func (chr ServiceChargeMasterImpl) FindProvider(ctx context.Context, pagination *firebasetools.PaginationInput, - filter []*dto.BusinessPartnerFilterInput, sort []*dto.BusinessPartnerSortInput) (*dto.BusinessPartnerConnection, error) { - - paginationParams, err := firebasetools.GetAPIPaginationParams(pagination) - if err != nil { - return nil, err - } - - defaultParams := url.Values{} - defaultParams.Add("fields", "id,name,slade_code,parent") - defaultParams.Add("is_active", "True") - defaultParams.Add("bp_type", "PROVIDER") - - queryParams := []url.Values{defaultParams, paginationParams} - for _, fp := range filter { - queryParams = append(queryParams, fp.ToURLValues()) - } - for _, fp := range sort { - queryParams = append(queryParams, fp.ToURLValues()) - } - - mergedParams := apiclient.MergeURLValues(queryParams...) - queryFragment := mergedParams.Encode() - - type apiResp struct { - apiclient.SladeAPIListRespBase - - Results []*domain.BusinessPartner `json:"results,omitempty"` - } - - r := apiResp{} - err = apiclient.ReadRequestToTarget(chr.FetchChargeMasterClient(), "GET", ChargeMasterBusinessPartnerPath, queryFragment, nil, &r) - if err != nil { - return nil, err - } - - startOffset := firebasetools.CreateAndEncodeCursor(r.StartIndex) - endOffset := firebasetools.CreateAndEncodeCursor(r.EndIndex) - hasNextPage := r.Next != "" - hasPreviousPage := r.Previous != "" - - edges := []*dto.BusinessPartnerEdge{} - for pos, org := range r.Results { - edge := &dto.BusinessPartnerEdge{ - Node: &domain.BusinessPartner{ - ID: org.ID, - Name: org.Name, - SladeCode: org.SladeCode, - Parent: org.Parent, - }, - Cursor: firebasetools.CreateAndEncodeCursor(pos + 1), - } - edges = append(edges, edge) - } - pageInfo := &firebasetools.PageInfo{ - HasNextPage: hasNextPage, - HasPreviousPage: hasPreviousPage, - StartCursor: startOffset, - EndCursor: endOffset, - } - connection := &dto.BusinessPartnerConnection{ - Edges: edges, - PageInfo: pageInfo, - } - return connection, nil -} - -// FetchProviderByID returns details of a specific provider given the ID -func (chr ServiceChargeMasterImpl) FetchProviderByID(ctx context.Context, id string) (*domain.BusinessPartner, error) { - - partner := &domain.BusinessPartner{} - BusinessPartnerPath := fmt.Sprintf("%v%v/", ChargeMasterBusinessPartnerPath, id) - - err := apiclient.ReadRequestToTarget(chr.FetchChargeMasterClient(), "GET", BusinessPartnerPath, "", nil, partner) - if err != nil { - return nil, err - } - - // check if partner is empty - if (*partner == domain.BusinessPartner{}) { - return nil, fmt.Errorf("business partner not found. invalid id: %v", id) - } - - return partner, nil -} - -// FindBranch lists all locations known to Slade 360 Charge Master -// Example URL: https://base.chargemaster.slade360emr.com/v1/business_partners/?format=json&page_size=100&parent=6ba48d97-93d2-4815-a447-f51240cbcab8&fields=id,name,slade_code -func (chr ServiceChargeMasterImpl) FindBranch(ctx context.Context, pagination *firebasetools.PaginationInput, - filter []*dto.BranchFilterInput, sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { - - paginationParams, err := firebasetools.GetAPIPaginationParams(pagination) - if err != nil { - return nil, err - } - defaultParams := url.Values{} - defaultParams.Add("fields", "id,name,slade_code") - defaultParams.Add("is_active", "True") - defaultParams.Add("is_branch", "True") - - queryParams := []url.Values{defaultParams, paginationParams} - for _, fp := range filter { - queryParams = append(queryParams, fp.ToURLValues()) - } - for _, fp := range sort { - queryParams = append(queryParams, fp.ToURLValues()) - } - mergedParams := apiclient.MergeURLValues(queryParams...) - queryFragment := mergedParams.Encode() - - type apiResp struct { - apiclient.SladeAPIListRespBase - - Results []*domain.BusinessPartner `json:"results,omitempty"` - } - - r := apiResp{} - err = apiclient.ReadRequestToTarget(chr.FetchChargeMasterClient(), "GET", ChargeMasterBusinessPartnerPath, queryFragment, nil, &r) - if err != nil { - return nil, err - } - startOffset := firebasetools.CreateAndEncodeCursor(r.StartIndex) - endOffset := firebasetools.CreateAndEncodeCursor(r.EndIndex) - hasNextPage := r.Next != "" - hasPreviousPage := r.Previous != "" - - edges := []*dto.BranchEdge{} - for pos, branch := range r.Results { - orgSladeCode, err := parentOrgSladeCodeFromBranch(branch) - if err != nil { - return nil, err - } - - edge := &dto.BranchEdge{ - Node: &domain.Branch{ - ID: branch.ID, - Name: branch.Name, - BranchSladeCode: branch.SladeCode, - OrganizationSladeCode: orgSladeCode, - }, - Cursor: firebasetools.CreateAndEncodeCursor(pos + 1), - } - edges = append(edges, edge) - } - pageInfo := &firebasetools.PageInfo{ - HasNextPage: hasNextPage, - HasPreviousPage: hasPreviousPage, - StartCursor: startOffset, - EndCursor: endOffset, - } - connection := &dto.BranchConnection{ - Edges: edges, - PageInfo: pageInfo, - } - return connection, nil -} - -func parentOrgSladeCodeFromBranch(branch *domain.BusinessPartner) (string, error) { - if !strings.HasPrefix(branch.SladeCode, "BRA-") { - return "", fmt.Errorf("%s is not a valid branch Slade Code; expected a BRA- prefix", branch.SladeCode) - } - trunc := strings.TrimPrefix(branch.SladeCode, "BRA-") - split := strings.Split(trunc, "-") - if len(split) != 3 { - return "", fmt.Errorf("expected the branch Slade Code to split into 3 parts on -; got %s", split) - } - orgParts := split[0:2] - orgSladeCode := strings.Join(orgParts, "-") - return orgSladeCode, nil -} diff --git a/pkg/onboarding/infrastructure/services/chargemaster/service_test.go b/pkg/onboarding/infrastructure/services/chargemaster/service_test.go deleted file mode 100644 index 41fa610f..00000000 --- a/pkg/onboarding/infrastructure/services/chargemaster/service_test.go +++ /dev/null @@ -1,399 +0,0 @@ -package chargemaster - -import ( - "context" - "errors" - "reflect" - "testing" - - "github.com/savannahghi/enumutils" - "github.com/savannahghi/firebasetools" - "github.com/savannahghi/onboarding/pkg/onboarding/application/dto" - "github.com/savannahghi/onboarding/pkg/onboarding/domain" - "github.com/stretchr/testify/assert" -) - -func TestServiceChargeMasterImpl_FindProvider(t *testing.T) { - cm := NewChargeMasterUseCasesImpl() - assert.NotNil(t, cm) - type args struct { - ctx context.Context - pagination *firebasetools.PaginationInput - filter []*dto.BusinessPartnerFilterInput - sort []*dto.BusinessPartnerSortInput - } - first := 10 - after := "0" - last := 10 - before := "20" - testSladeCode := "PRO-50" - ascSort := enumutils.SortOrderAsc - invalidPage := "invalidpage" - - tests := []struct { - name string - args args - wantErr bool - expectNonNilConnection bool - expectedErr error - }{ - { - name: "happy case - query params only no pagination filter or sort params", - expectNonNilConnection: true, - expectedErr: nil, - wantErr: false, - args: args{ - ctx: context.Background(), - pagination: &firebasetools.PaginationInput{}, - filter: []*dto.BusinessPartnerFilterInput{}, - sort: []*dto.BusinessPartnerSortInput{}, - }, - }, - { - name: "happy case - with forward pagination", - expectNonNilConnection: true, - expectedErr: nil, - wantErr: false, - args: args{ - ctx: context.Background(), - pagination: &firebasetools.PaginationInput{ - First: first, - After: after, - }, - filter: []*dto.BusinessPartnerFilterInput{}, - sort: []*dto.BusinessPartnerSortInput{}, - }, - }, - { - name: "happy case - with backward pagination", - expectNonNilConnection: true, - expectedErr: nil, - wantErr: false, - args: args{ - ctx: context.Background(), - pagination: &firebasetools.PaginationInput{ - Last: last, - Before: before, - }, - filter: []*dto.BusinessPartnerFilterInput{}, - sort: []*dto.BusinessPartnerSortInput{}, - }, - }, - { - name: "happy case - with filter", - expectNonNilConnection: true, - expectedErr: nil, - wantErr: false, - args: args{ - ctx: context.Background(), - pagination: &firebasetools.PaginationInput{}, - filter: []*dto.BusinessPartnerFilterInput{ - { - SladeCode: &testSladeCode, - }, - }, - sort: []*dto.BusinessPartnerSortInput{}, - }, - }, - { - name: "happy case - with sort", - expectNonNilConnection: true, - expectedErr: nil, - wantErr: false, - args: args{ - ctx: context.Background(), - pagination: &firebasetools.PaginationInput{}, - filter: []*dto.BusinessPartnerFilterInput{}, - sort: []*dto.BusinessPartnerSortInput{ - { - Name: &ascSort, - SladeCode: &ascSort, - }, - }, - }, - }, - { - name: "sad case - with invalid pagination", - expectNonNilConnection: false, - expectedErr: errors.New("expected `after` to be parseable as an int; got invalidpage"), - wantErr: true, - args: args{ - ctx: context.Background(), - pagination: &firebasetools.PaginationInput{ - After: invalidPage, - }, - filter: []*dto.BusinessPartnerFilterInput{}, - sort: []*dto.BusinessPartnerSortInput{}, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := cm.FindProvider(tt.args.ctx, tt.args.pagination, tt.args.filter, tt.args.sort) - if (err != nil) != tt.wantErr { - t.Errorf("ServiceChargeMasterImpl.FindProvider() error = %v, wantErr %v", err, tt.wantErr) - return - } - if tt.expectNonNilConnection { - assert.NotNil(t, got) - } - if tt.expectedErr != nil { - assert.NotNil(t, err) - assert.Contains(t, err.Error(), tt.expectedErr.Error()) - } - }) - } -} - -func TestServiceChargeMasterImpl_FindBranch(t *testing.T) { - cm := NewChargeMasterUseCasesImpl() - assert.NotNil(t, cm) - type args struct { - ctx context.Context - pagination *firebasetools.PaginationInput - filter []*dto.BranchFilterInput - sort []*dto.BranchSortInput - } - first := 10 - after := "0" - last := 10 - before := "20" - testSladeCode := "PRO-50" - ascSort := enumutils.SortOrderAsc - invalidPage := "invalidpage" - - tests := []struct { - name string - args args - wantErr bool - expectNonNilConnection bool - expectedErr error - }{ - { - name: "happy case - query params only no pagination filter or sort params", - expectNonNilConnection: true, - expectedErr: nil, - wantErr: false, - args: args{ - ctx: context.Background(), - pagination: &firebasetools.PaginationInput{}, - filter: []*dto.BranchFilterInput{}, - sort: []*dto.BranchSortInput{}, - }, - }, - { - name: "happy case - with forward pagination", - expectNonNilConnection: true, - expectedErr: nil, - wantErr: false, - args: args{ - ctx: context.Background(), - pagination: &firebasetools.PaginationInput{ - First: first, - After: after, - }, - filter: []*dto.BranchFilterInput{}, - sort: []*dto.BranchSortInput{}, - }, - }, - { - name: "happy case - with backward pagination", - expectNonNilConnection: true, - expectedErr: nil, - wantErr: false, - args: args{ - ctx: context.Background(), - pagination: &firebasetools.PaginationInput{ - Last: last, - Before: before, - }, - filter: []*dto.BranchFilterInput{}, - sort: []*dto.BranchSortInput{}, - }, - }, - { - name: "happy case -with filter", - expectNonNilConnection: true, - expectedErr: nil, - wantErr: false, - args: args{ - ctx: context.Background(), - pagination: &firebasetools.PaginationInput{}, - filter: []*dto.BranchFilterInput{ - { - SladeCode: &testSladeCode, - }, - }, - sort: []*dto.BranchSortInput{}, - }, - }, - { - name: "happy case - with sort", - expectNonNilConnection: true, - expectedErr: nil, - wantErr: false, - args: args{ - ctx: context.Background(), - pagination: &firebasetools.PaginationInput{}, - filter: []*dto.BranchFilterInput{}, - sort: []*dto.BranchSortInput{ - { - Name: &ascSort, - SladeCode: &ascSort, - }, - }, - }, - }, - { - name: "sad case - with invalid pagination", - expectNonNilConnection: false, - expectedErr: errors.New("expected `after` to be parseable as an int; got invalidpage"), - wantErr: true, - args: args{ - ctx: context.Background(), - pagination: &firebasetools.PaginationInput{ - After: invalidPage, - }, - filter: []*dto.BranchFilterInput{}, - sort: []*dto.BranchSortInput{}, - }, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := cm.FindBranch(tt.args.ctx, tt.args.pagination, tt.args.filter, tt.args.sort) - if (err != nil) != tt.wantErr { - t.Errorf("ServiceChargeMasterImpl.FindBranch() error = %v, wantErr %v", err, tt.wantErr) - return - } - if tt.expectNonNilConnection { - assert.NotNil(t, got) - } - if tt.expectedErr != nil { - assert.NotNil(t, err) - assert.Contains(t, err.Error(), tt.expectedErr.Error()) - } - }) - } -} - -func Test_parentOrgSladeCodeFromBranch(t *testing.T) { - type args struct { - branch *domain.BusinessPartner - } - tests := []struct { - name string - args args - want string - wantErr bool - }{ - { - name: "happy case", - args: args{ - branch: &domain.BusinessPartner{ - SladeCode: "BRA-PRO-4313-1", - }, - }, - want: "PRO-4313", - wantErr: false, - }, - { - name: "no BRA prefix", - args: args{ - branch: &domain.BusinessPartner{ - SladeCode: "PRO-4313-1", - }, - }, - want: "", - wantErr: true, - }, - { - name: "sad case (long branch slade code)", - args: args{ - branch: &domain.BusinessPartner{ - SladeCode: "BRA-PRO-4313-1-9393030", - }, - }, - want: "", - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := parentOrgSladeCodeFromBranch(tt.args.branch) - if (err != nil) != tt.wantErr { - t.Errorf("parentOrgSladeCodeFromBranch() error = %v, wantErr %v", err, tt.wantErr) - return - } - if got != tt.want { - t.Errorf("parentOrgSladeCodeFromBranch() = %v, want %v", got, tt.want) - } - }) - } -} - -func TestServiceChargeMasterImpl_FetchProviderByID(t *testing.T) { - ctx := context.Background() - cm := NewChargeMasterUseCasesImpl() - - pagination := &firebasetools.PaginationInput{} - filter := []*dto.BusinessPartnerFilterInput{} - sort := []*dto.BusinessPartnerSortInput{} - - partners, err := cm.FindProvider(ctx, pagination, filter, sort) - if err != nil { - t.Errorf("can't find provider: %w", err) - return - } - - partner := partners.Edges[0].Node - - type args struct { - ctx context.Context - id string - } - tests := []struct { - name string - args args - want *domain.BusinessPartner - wantErr bool - }{ - { - name: "happy case: valid", - args: args{ - ctx: ctx, - id: partner.ID, - }, - want: partner, - wantErr: false, - }, - { - name: "sad case: invalid ID", - args: args{ - ctx: ctx, - id: "InvalidID", - }, - wantErr: true, - }, - { - name: "sad case: empty ID", - args: args{ - ctx: ctx, - id: "", - }, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - got, err := cm.FetchProviderByID(tt.args.ctx, tt.args.id) - if (err != nil) != tt.wantErr { - t.Errorf("ServiceChargeMasterImpl.FetchProviderByID() error = %v, wantErr %v", err, tt.wantErr) - return - } - if !reflect.DeepEqual(got, tt.want) { - t.Errorf("ServiceChargeMasterImpl.FetchProviderByID() = %v, want %v", got, tt.want) - } - }) - } -} diff --git a/pkg/onboarding/presentation/config.go b/pkg/onboarding/presentation/config.go index d1cad15e..e1741529 100644 --- a/pkg/onboarding/presentation/config.go +++ b/pkg/onboarding/presentation/config.go @@ -18,7 +18,6 @@ import ( "github.com/savannahghi/onboarding/pkg/onboarding/application/utils" "github.com/savannahghi/onboarding/pkg/onboarding/domain" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/database/fb" - "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/chargemaster" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/edi" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/engagement" erp "gitlab.slade360emr.com/go/commontools/accounting/pkg/usecases" @@ -115,7 +114,6 @@ func Router(ctx context.Context) (*mux.Router, error) { // Initialize new instance of our infrastructure services erp := erp.NewAccounting() - chrg := chargemaster.NewChargeMasterUseCasesImpl() engage := engagement.NewServiceEngagementImpl(engagementClient, baseExt) edi := edi.NewEdiService(ediClient, repo) mes := messaging.NewServiceMessagingImpl(baseExt) @@ -143,7 +141,7 @@ func Router(ctx context.Context) (*mux.Router, error) { // Initialize the usecases profile := usecases.NewProfileUseCase(repo, baseExt, engage, pubSub, crmExt) - supplier := usecases.NewSupplierUseCases(repo, profile, erp, chrg, engage, mes, baseExt, pubSub) + supplier := usecases.NewSupplierUseCases(repo, profile, erp, engage, mes, baseExt, pubSub) login := usecases.NewLoginUseCases(repo, profile, baseExt, pinExt) survey := usecases.NewSurveyUseCases(repo, baseExt) userpin := usecases.NewUserPinUseCase(repo, profile, baseExt, pinExt, engage) @@ -158,7 +156,7 @@ func Router(ctx context.Context) (*mux.Router, error) { i, err := interactor.NewOnboardingInteractor( repo, profile, su, supplier, login, survey, - userpin, erp, chrg, engage, mes, nhif, pubSub, + userpin, erp, engage, mes, nhif, pubSub, sms, aitUssd, agent, admin, edi, adminSrv, crmExt, role, ) diff --git a/pkg/onboarding/presentation/graph/generated/generated.go b/pkg/onboarding/presentation/graph/generated/generated.go index 4be37f0d..125c4323 100644 --- a/pkg/onboarding/presentation/graph/generated/generated.go +++ b/pkg/onboarding/presentation/graph/generated/generated.go @@ -441,7 +441,6 @@ type ComplexityRoot struct { FetchAdmins func(childComplexity int) int FetchAgents func(childComplexity int) int FetchKYCProcessingRequests func(childComplexity int) int - FetchSupplierAllowedLocations func(childComplexity int) int FetchUserNavigationActions func(childComplexity int) int FindAgentbyPhone func(childComplexity int, phoneNumber *string) int FindBranch func(childComplexity int, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, sort []*dto.BranchSortInput) int @@ -624,7 +623,6 @@ type QueryResolver interface { ResumeWithPin(ctx context.Context, pin string) (bool, error) FindProvider(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BusinessPartnerFilterInput, sort []*dto.BusinessPartnerSortInput) (*dto.BusinessPartnerConnection, error) FindBranch(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, sort []*dto.BranchSortInput) (*dto.BranchConnection, error) - FetchSupplierAllowedLocations(ctx context.Context) (*dto.BranchConnection, error) FetchKYCProcessingRequests(ctx context.Context) ([]*domain.KYCRequest, error) GetAddresses(ctx context.Context) (*domain.UserAddresses, error) NHIFDetails(ctx context.Context) (*domain.NHIFDetails, error) @@ -2794,13 +2792,6 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in return e.complexity.Query.FetchKYCProcessingRequests(childComplexity), true - case "Query.fetchSupplierAllowedLocations": - if e.complexity.Query.FetchSupplierAllowedLocations == nil { - break - } - - return e.complexity.Query.FetchSupplierAllowedLocations(childComplexity), true - case "Query.fetchUserNavigationActions": if e.complexity.Query.FetchUserNavigationActions == nil { break @@ -4115,7 +4106,7 @@ input RolePermissionInput { sort: [BranchSortInput] ): BranchConnection! - fetchSupplierAllowedLocations: BranchConnection! + fetchKYCProcessingRequests: [KYCRequest] @@ -15398,41 +15389,6 @@ func (ec *executionContext) _Query_findBranch(ctx context.Context, field graphql return ec.marshalNBranchConnection2ᚖgithubᚗcomᚋsavannahghiᚋonboardingᚋpkgᚋonboardingᚋapplicationᚋdtoᚐBranchConnection(ctx, field.Selections, res) } -func (ec *executionContext) _Query_fetchSupplierAllowedLocations(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - ret = graphql.Null - } - }() - fc := &graphql.FieldContext{ - Object: "Query", - Field: field, - Args: nil, - IsMethod: true, - IsResolver: true, - } - - ctx = graphql.WithFieldContext(ctx, fc) - resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) { - ctx = rctx // use context from middleware stack in children - return ec.resolvers.Query().FetchSupplierAllowedLocations(rctx) - }) - if err != nil { - ec.Error(ctx, err) - return graphql.Null - } - if resTmp == nil { - if !graphql.HasFieldError(ctx, fc) { - ec.Errorf(ctx, "must not be null") - } - return graphql.Null - } - res := resTmp.(*dto.BranchConnection) - fc.Result = res - return ec.marshalNBranchConnection2ᚖgithubᚗcomᚋsavannahghiᚋonboardingᚋpkgᚋonboardingᚋapplicationᚋdtoᚐBranchConnection(ctx, field.Selections, res) -} - func (ec *executionContext) _Query_fetchKYCProcessingRequests(ctx context.Context, field graphql.CollectedField) (ret graphql.Marshaler) { defer func() { if r := recover(); r != nil { @@ -23271,20 +23227,6 @@ func (ec *executionContext) _Query(ctx context.Context, sel ast.SelectionSet) gr } return res }) - case "fetchSupplierAllowedLocations": - field := field - out.Concurrently(i, func() (res graphql.Marshaler) { - defer func() { - if r := recover(); r != nil { - ec.Error(ctx, ec.Recover(ctx, r)) - } - }() - res = ec._Query_fetchSupplierAllowedLocations(ctx, field) - if res == graphql.Null { - atomic.AddUint32(&invalids, 1) - } - return res - }) case "fetchKYCProcessingRequests": field := field out.Concurrently(i, func() (res graphql.Marshaler) { diff --git a/pkg/onboarding/presentation/graph/profile.graphql b/pkg/onboarding/presentation/graph/profile.graphql index 03cf6a50..237171fd 100644 --- a/pkg/onboarding/presentation/graph/profile.graphql +++ b/pkg/onboarding/presentation/graph/profile.graphql @@ -20,7 +20,7 @@ extend type Query { sort: [BranchSortInput] ): BranchConnection! - fetchSupplierAllowedLocations: BranchConnection! + fetchKYCProcessingRequests: [KYCRequest] diff --git a/pkg/onboarding/presentation/graph/profile.resolvers.go b/pkg/onboarding/presentation/graph/profile.resolvers.go index d331cd81..685c938a 100644 --- a/pkg/onboarding/presentation/graph/profile.resolvers.go +++ b/pkg/onboarding/presentation/graph/profile.resolvers.go @@ -5,6 +5,7 @@ package graph import ( "context" + "fmt" "time" "github.com/savannahghi/enumutils" @@ -654,38 +655,23 @@ func (r *queryResolver) ResumeWithPin(ctx context.Context, pin string) (bool, er } func (r *queryResolver) FindProvider(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BusinessPartnerFilterInput, sort []*dto.BusinessPartnerSortInput) (*dto.BusinessPartnerConnection, error) { - startTime := time.Now() + // startTime := time.Now() - provider, err := r.interactor.ChargeMaster.FindProvider(ctx, pagination, filter, sort) + // provider, err := r.interactor.ChargeMaster.FindProvider(ctx, pagination, filter, sort) - defer serverutils.RecordGraphqlResolverMetrics(ctx, startTime, "findProvider", err) + // defer serverutils.RecordGraphqlResolverMetrics(ctx, startTime, "findProvider", err) - return provider, err + return nil, nil } func (r *queryResolver) FindBranch(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { - startTime := time.Now() + // startTime := time.Now() - branch, err := r.interactor.ChargeMaster.FindBranch(ctx, pagination, filter, sort) + // branch, err := r.interactor.ChargeMaster.FindBranch(ctx, pagination, filter, sort) - defer serverutils.RecordGraphqlResolverMetrics(ctx, startTime, "findBranch", err) + // defer serverutils.RecordGraphqlResolverMetrics(ctx, startTime, "findBranch", err) - return branch, err -} - -func (r *queryResolver) FetchSupplierAllowedLocations(ctx context.Context) (*dto.BranchConnection, error) { - startTime := time.Now() - - supplierAllowedLocations, err := r.interactor.Supplier.FetchSupplierAllowedLocations(ctx) - - defer serverutils.RecordGraphqlResolverMetrics( - ctx, - startTime, - "fetchSupplierAllowedLocations", - err, - ) - - return supplierAllowedLocations, err + return nil, nil } func (r *queryResolver) FetchKYCProcessingRequests(ctx context.Context) ([]*domain.KYCRequest, error) { @@ -828,3 +814,13 @@ func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} } type mutationResolver struct{ *Resolver } type queryResolver struct{ *Resolver } + +// !!! WARNING !!! +// The code below was going to be deleted when updating resolvers. It has been copied here so you have +// one last chance to move it out of harms way if you want. There are two reasons this happens: +// - When renaming or deleting a resolver the old code will be put in here. You can safely delete +// it when you're done. +// - You have helper methods in this file. Move them out to keep these resolver files clean. +func (r *queryResolver) FetchSupplierAllowedLocations(ctx context.Context) (*dto.BranchConnection, error) { + panic(fmt.Errorf("not implemented")) +} diff --git a/pkg/onboarding/presentation/interactor/interactor.go b/pkg/onboarding/presentation/interactor/interactor.go index c3e87b7a..fba76263 100644 --- a/pkg/onboarding/presentation/interactor/interactor.go +++ b/pkg/onboarding/presentation/interactor/interactor.go @@ -3,7 +3,6 @@ package interactor import ( - "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/chargemaster" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/edi" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/engagement" @@ -19,26 +18,25 @@ import ( // Interactor represents an assemble of all use cases into a single object that can be instantiated anywhere type Interactor struct { - Onboarding usecases.ProfileUseCase - Signup usecases.SignUpUseCases - Supplier usecases.SupplierUseCases - Login usecases.LoginUseCases - Survey usecases.SurveyUseCases - UserPIN usecases.UserPINUseCases - ERP erp.AccountingUsecase - ChargeMaster chargemaster.ServiceChargeMaster - Engagement engagement.ServiceEngagement - Messaging messaging.ServiceMessaging - NHIF usecases.NHIFUseCases - PubSub pubsubmessaging.ServicePubSub - SMS usecases.SMSUsecase - AITUSSD ussd.Usecase - Agent usecases.AgentUseCase - Admin usecases.AdminUseCase - EDI edi.ServiceEdi - AdminSrv admin.Usecase - CrmExt crm.ServiceCrm - Role usecases.RoleUseCase + Onboarding usecases.ProfileUseCase + Signup usecases.SignUpUseCases + Supplier usecases.SupplierUseCases + Login usecases.LoginUseCases + Survey usecases.SurveyUseCases + UserPIN usecases.UserPINUseCases + ERP erp.AccountingUsecase + Engagement engagement.ServiceEngagement + Messaging messaging.ServiceMessaging + NHIF usecases.NHIFUseCases + PubSub pubsubmessaging.ServicePubSub + SMS usecases.SMSUsecase + AITUSSD ussd.Usecase + Agent usecases.AgentUseCase + Admin usecases.AdminUseCase + EDI edi.ServiceEdi + AdminSrv admin.Usecase + CrmExt crm.ServiceCrm + Role usecases.RoleUseCase } // NewOnboardingInteractor returns a new onboarding interactor @@ -51,7 +49,6 @@ func NewOnboardingInteractor( survey usecases.SurveyUseCases, userpin usecases.UserPINUseCases, erp erp.AccountingUsecase, - chrg chargemaster.ServiceChargeMaster, engage engagement.ServiceEngagement, mes messaging.ServiceMessaging, nhif usecases.NHIFUseCases, @@ -67,25 +64,24 @@ func NewOnboardingInteractor( ) (*Interactor, error) { return &Interactor{ - Onboarding: profile, - Signup: su, - Supplier: supplier, - Login: login, - Survey: survey, - UserPIN: userpin, - ERP: erp, - ChargeMaster: chrg, - Engagement: engage, - Messaging: mes, - NHIF: nhif, - PubSub: pubsub, - SMS: sms, - AITUSSD: aitussd, - Agent: agt, - Admin: adm, - EDI: edi, - AdminSrv: admin, - CrmExt: crmExt, - Role: role, + Onboarding: profile, + Signup: su, + Supplier: supplier, + Login: login, + Survey: survey, + UserPIN: userpin, + ERP: erp, + Engagement: engage, + Messaging: mes, + NHIF: nhif, + PubSub: pubsub, + SMS: sms, + AITUSSD: aitussd, + Agent: agt, + Admin: adm, + EDI: edi, + AdminSrv: admin, + CrmExt: crmExt, + Role: role, }, nil } diff --git a/pkg/onboarding/presentation/rest/handlers_test.go b/pkg/onboarding/presentation/rest/handlers_test.go index 1fe198f2..f917380a 100644 --- a/pkg/onboarding/presentation/rest/handlers_test.go +++ b/pkg/onboarding/presentation/rest/handlers_test.go @@ -28,8 +28,6 @@ import ( extMock "github.com/savannahghi/onboarding/pkg/onboarding/application/extension/mock" "github.com/savannahghi/onboarding/pkg/onboarding/domain" - "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/chargemaster" - chargemasterMock "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/chargemaster/mock" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/edi" ediMock "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/edi/mock" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/engagement" @@ -63,7 +61,6 @@ var fakeEDISvc ediMock.FakeServiceEDI func InitializeFakeOnboardingInteractor() (*interactor.Interactor, error) { var r repository.OnboardingRepository = &fakeRepo var erpSvc erp.AccountingUsecase = &erpMock.FakeServiceCommonTools{} - var chargemasterSvc chargemaster.ServiceChargeMaster = &chargemasterMock.FakeServiceChargeMaster{} var engagementSvc engagement.ServiceEngagement = &fakeEngagementSvs var messagingSvc messaging.ServiceMessaging = &messagingMock.FakeServiceMessaging{} var ext extension.BaseExtension = &fakeBaseExt @@ -83,7 +80,7 @@ func InitializeFakeOnboardingInteractor() (*interactor.Interactor, error) { login := usecases.NewLoginUseCases(r, profile, ext, pinExt) survey := usecases.NewSurveyUseCases(r, ext) supplier := usecases.NewSupplierUseCases( - r, profile, erpSvc, chargemasterSvc, engagementSvc, messagingSvc, ext, ps, + r, profile, erpSvc, engagementSvc, messagingSvc, ext, ps, ) userpin := usecases.NewUserPinUseCase(r, profile, ext, pinExt, engagementSvc) su := usecases.NewSignUpUseCases(r, profile, userpin, supplier, ext, engagementSvc, ps, ediSvc) @@ -99,7 +96,7 @@ func InitializeFakeOnboardingInteractor() (*interactor.Interactor, error) { i, err := interactor.NewOnboardingInteractor( r, profile, su, supplier, login, - survey, userpin, erpSvc, chargemasterSvc, + survey, userpin, erpSvc, engagementSvc, messagingSvc, nhif, ps, sms, aitUssd, agent, admin, ediSvc, adminSrv, crmExt, role, diff --git a/pkg/onboarding/usecases/login_test.go b/pkg/onboarding/usecases/login_test.go index 9b12a7d7..dda957f3 100644 --- a/pkg/onboarding/usecases/login_test.go +++ b/pkg/onboarding/usecases/login_test.go @@ -28,7 +28,6 @@ import ( "github.com/savannahghi/serverutils" "gitlab.slade360emr.com/go/commontools/crm/pkg/infrastructure/services/hubspot" - "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/chargemaster" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/edi" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/engagement" @@ -39,7 +38,6 @@ import ( mockRepo "github.com/savannahghi/onboarding/pkg/onboarding/repository/mock" extMock "github.com/savannahghi/onboarding/pkg/onboarding/application/extension/mock" - chargemasterMock "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/chargemaster/mock" ediMock "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/edi/mock" engagementMock "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/engagement/mock" @@ -197,7 +195,6 @@ func InitializeTestService(ctx context.Context) (*interactor.Interactor, error) edi := edi.NewEdiService(ediClient, repo) erp := erp.NewAccounting() - chrg := chargemaster.NewChargeMasterUseCasesImpl() // hubspot usecases hubspotService := hubspot.NewHubSpotService() hubspotfr, err := hubspotRepo.NewHubSpotFirebaseRepository(context.Background(), hubspotService) @@ -221,7 +218,7 @@ func InitializeTestService(ctx context.Context) (*interactor.Interactor, error) pinExt := extension.NewPINExtensionImpl() profile := usecases.NewProfileUseCase(repo, ext, engage, ps, crmExt) - supplier := usecases.NewSupplierUseCases(repo, profile, erp, chrg, engage, mes, ext, ps) + supplier := usecases.NewSupplierUseCases(repo, profile, erp, engage, mes, ext, ps) login := usecases.NewLoginUseCases(repo, profile, ext, pinExt) survey := usecases.NewSurveyUseCases(repo, ext) userpin := usecases.NewUserPinUseCase(repo, profile, ext, pinExt, engage) @@ -232,21 +229,20 @@ func InitializeTestService(ctx context.Context) (*interactor.Interactor, error) aitUssd := ussd.NewUssdUsecases(repo, ext, profile, userpin, su, pinExt, ps, crmExt) return &interactor.Interactor{ - Onboarding: profile, - Signup: su, - Supplier: supplier, - Login: login, - Survey: survey, - UserPIN: userpin, - ERP: erp, - ChargeMaster: chrg, - Engagement: engage, - NHIF: nhif, - PubSub: ps, - SMS: sms, - AITUSSD: aitUssd, - EDI: edi, - CrmExt: crmExt, + Onboarding: profile, + Signup: su, + Supplier: supplier, + Login: login, + Survey: survey, + UserPIN: userpin, + ERP: erp, + Engagement: engage, + NHIF: nhif, + PubSub: ps, + SMS: sms, + AITUSSD: aitUssd, + EDI: edi, + CrmExt: crmExt, }, nil } @@ -450,7 +446,6 @@ var fakePinExt extMock.PINExtensionImpl var fakeEngagementSvs engagementMock.FakeServiceEngagement var fakeMessagingSvc messagingMock.FakeServiceMessaging var fakeEPRSvc erpMock.FakeServiceCommonTools -var fakeChargeMasterSvc chargemasterMock.FakeServiceChargeMaster var fakePubSub pubsubmessagingMock.FakeServicePubSub var fakeEDISvc ediMock.FakeServiceEDI @@ -458,7 +453,6 @@ var fakeEDISvc ediMock.FakeServiceEDI func InitializeFakeOnboardingInteractor() (*interactor.Interactor, error) { var r repository.OnboardingRepository = &fakeRepo var erpSvc erp.AccountingUsecase = &fakeEPRSvc - var chargemasterSvc chargemaster.ServiceChargeMaster = &fakeChargeMasterSvc var engagementSvc engagement.ServiceEngagement = &fakeEngagementSvs var messagingSvc messaging.ServiceMessaging = &fakeMessagingSvc var ext extension.BaseExtension = &fakeBaseExt @@ -478,7 +472,7 @@ func InitializeFakeOnboardingInteractor() (*interactor.Interactor, error) { login := usecases.NewLoginUseCases(r, profile, ext, pinExt) survey := usecases.NewSurveyUseCases(r, ext) supplier := usecases.NewSupplierUseCases( - r, profile, erpSvc, chargemasterSvc, engagementSvc, messagingSvc, ext, ps, + r, profile, erpSvc, engagementSvc, messagingSvc, ext, ps, ) userpin := usecases.NewUserPinUseCase(r, profile, ext, pinExt, engagementSvc) su := usecases.NewSignUpUseCases(r, profile, userpin, supplier, ext, engagementSvc, ps, ediSvc) @@ -492,7 +486,7 @@ func InitializeFakeOnboardingInteractor() (*interactor.Interactor, error) { i, err := interactor.NewOnboardingInteractor( r, profile, su, supplier, login, - survey, userpin, erpSvc, chargemasterSvc, + survey, userpin, erpSvc, engagementSvc, messagingSvc, nhif, ps, sms, aitUssd, agent, admin, ediSvc, adminSrv, crmExt, role, diff --git a/pkg/onboarding/usecases/profile_integration_test.go b/pkg/onboarding/usecases/profile_integration_test.go index 77d47e9b..1ecf219f 100644 --- a/pkg/onboarding/usecases/profile_integration_test.go +++ b/pkg/onboarding/usecases/profile_integration_test.go @@ -129,7 +129,9 @@ func TestUpdateUserProfileUserName(t *testing.T) { if err != nil { t.Error("failed to setup signup usecase") } + primaryPhone := interserviceclient.TestUserPhoneNumber + // clean up _ = s.Signup.RemoveUserByPhoneNumber(context.Background(), primaryPhone) @@ -153,7 +155,6 @@ func TestUpdateUserProfileUserName(t *testing.T) { assert.NotNil(t, resp.Profile) assert.NotNil(t, resp.Profile.UserName) - // login and assert whether the profile matches the one created earlier login1, err := s.Login.LoginByPhone(context.Background(), primaryPhone, pin, feedlib.FlavourConsumer) assert.Nil(t, err) assert.NotNil(t, login1) @@ -168,6 +169,7 @@ func TestUpdateUserProfileUserName(t *testing.T) { firebasetools.AuthTokenContextKey, authCred, ) + s, _ = InitializeTestService(authenticatedContext) err = s.Onboarding.UpdateUserName(authenticatedContext, "makmende1") @@ -196,6 +198,9 @@ func TestUpdateUserProfileUserName(t *testing.T) { assert.NotEqual(t, *resp.Profile.UserName, *pr2.UserName) assert.NotEqual(t, *pr1.UserName, *pr2.UserName) + // clean up + _ = s.Signup.RemoveUserByPhoneNumber(context.Background(), primaryPhone) + } func TestSetPhoneAsPrimary(t *testing.T) { diff --git a/pkg/onboarding/usecases/signup_integration_test.go b/pkg/onboarding/usecases/signup_integration_test.go index fe0f4268..cc70e9c7 100644 --- a/pkg/onboarding/usecases/signup_integration_test.go +++ b/pkg/onboarding/usecases/signup_integration_test.go @@ -273,6 +273,7 @@ func TestCreateUserByPhone(t *testing.T) { _ = s.Signup.RemoveUserByPhoneNumber(context.Background(), validPhoneNumber) } +// TODO: restore func TestUpdateUserProfile(t *testing.T) { s, err := InitializeTestService(context.Background()) if err != nil { @@ -403,6 +404,9 @@ func TestUpdateUserProfile(t *testing.T) { resp6, err := s.Signup.UpdateUserProfile(context.Background(), completeUserDetails) assert.NotNil(t, err) assert.Nil(t, resp6) + + // clean up + _ = s.Signup.RemoveUserByPhoneNumber(context.Background(), validPhoneNumber) } func TestRegisterPushToken(t *testing.T) { diff --git a/pkg/onboarding/usecases/supplier.go b/pkg/onboarding/usecases/supplier.go index 92f77167..cafbc510 100644 --- a/pkg/onboarding/usecases/supplier.go +++ b/pkg/onboarding/usecases/supplier.go @@ -25,7 +25,6 @@ import ( "github.com/savannahghi/onboarding/pkg/onboarding/application/extension" "github.com/savannahghi/onboarding/pkg/onboarding/application/utils" "github.com/savannahghi/onboarding/pkg/onboarding/domain" - "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/chargemaster" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/engagement" "github.com/savannahghi/onboarding/pkg/onboarding/repository" @@ -79,7 +78,6 @@ type SupplierUseCases interface { CoreEDIUserLogin(ctx context.Context, username, password string) (*profileutils.EDIUserProfile, error) - FetchSupplierAllowedLocations(ctx context.Context) (*dto.BranchConnection, error) CheckSupplierKYCSubmitted(ctx context.Context) (bool, error) AddIndividualRiderKyc( @@ -180,14 +178,13 @@ type SupplierUseCases interface { // SupplierUseCasesImpl represents usecase implementation object type SupplierUseCasesImpl struct { - repo repository.OnboardingRepository - profile ProfileUseCase - erp erp.AccountingUsecase - chargemaster chargemaster.ServiceChargeMaster - engagement engagement.ServiceEngagement - messaging messaging.ServiceMessaging - baseExt extension.BaseExtension - pubsub pubsubmessaging.ServicePubSub + repo repository.OnboardingRepository + profile ProfileUseCase + erp erp.AccountingUsecase + engagement engagement.ServiceEngagement + messaging messaging.ServiceMessaging + baseExt extension.BaseExtension + pubsub pubsubmessaging.ServicePubSub } // NewSupplierUseCases returns a new a onboarding usecase @@ -195,7 +192,6 @@ func NewSupplierUseCases( r repository.OnboardingRepository, p ProfileUseCase, er erp.AccountingUsecase, - chrg chargemaster.ServiceChargeMaster, eng engagement.ServiceEngagement, messaging messaging.ServiceMessaging, ext extension.BaseExtension, @@ -203,14 +199,13 @@ func NewSupplierUseCases( ) SupplierUseCases { return &SupplierUseCasesImpl{ - repo: r, - profile: p, - erp: er, - chargemaster: chrg, - engagement: eng, - messaging: messaging, - baseExt: ext, - pubsub: pubsub, + repo: r, + profile: p, + erp: er, + engagement: eng, + messaging: messaging, + baseExt: ext, + pubsub: pubsub, } } @@ -729,23 +724,6 @@ func (s SupplierUseCasesImpl) SupplierEDILogin( supplier.IsOrganizationVerified = true supplier.SladeCode = sladeCode - filter := []*dto.BusinessPartnerFilterInput{ - { - SladeCode: &sladeCode, - }, - } - - partner, err := s.chargemaster.FindProvider(ctx, nil, filter, nil) - if err != nil { - utils.RecordSpanError(span, err) - return nil, exceptions.FindProviderError(err) - } - if len(partner.Edges) != 1 { - return nil, fmt.Errorf("expected one business partner, found: %v", len(partner.Edges)) - } - - businessPartner := *partner.Edges[0].Node - go func() { op := func() error { return s.PublishKYCNudge(ctx, uid, &supplier.PartnerType, supplier.AccountType) @@ -775,66 +753,6 @@ func (s SupplierUseCasesImpl) SupplierEDILogin( } }() - if businessPartner.Parent != nil { - supplier.HasBranches = true - supplier.ParentOrganizationID = *businessPartner.Parent - - partner, err := s.chargemaster.FetchProviderByID(ctx, *businessPartner.Parent) - if err != nil { - utils.RecordSpanError(span, err) - return nil, exceptions.FindProviderError(err) - } - - supplier.OrganizationName = partner.Name - - if err := s.repo.UpdateSupplierProfile(ctx, profile.ID, supplier); err != nil { - utils.RecordSpanError(span, err) - return nil, err - } - - // fetch all locations of the business partner - filter := []*dto.BranchFilterInput{ - { - ParentOrganizationID: &supplier.ParentOrganizationID, - }, - } - - brs, err := s.chargemaster.FindBranch(ctx, nil, filter, nil) - if len(brs.Edges) == 0 || err != nil { - utils.RecordSpanError(span, err) - return nil, exceptions.FindProviderError(err) - } - - if len(brs.Edges) > 1 { - // set branches in the final response object - resp.Branches = brs - resp.Supplier = supplier - return &resp, nil - } - - if len(brs.Edges) == 1 { - spr, err := s.SupplierSetDefaultLocation(ctx, brs.Edges[0].Node.ID) - if err != nil { - utils.RecordSpanError(span, err) - return nil, err - } - - resp.Supplier = spr - return &resp, nil - - } - return nil, exceptions.InternalServerError(nil) - - } - - // set the main branch as the supplier's location - supplier.OrganizationName = businessPartner.Name - loc := profileutils.Location{ - ID: businessPartner.ID, - Name: businessPartner.Name, - } - supplier.Location = &loc - if err := s.repo.UpdateSupplierProfile(ctx, profile.ID, supplier); err != nil { utils.RecordSpanError(span, err) return nil, err @@ -851,124 +769,10 @@ func (s SupplierUseCasesImpl) SupplierSetDefaultLocation( ctx context.Context, locationID string, ) (*profileutils.Supplier, error) { - ctx, span := tracer.Start(ctx, "SupplierSetDefaultLocation") + _, span := tracer.Start(ctx, "SupplierSetDefaultLocation") defer span.End() - uid, err := s.baseExt.GetLoggedInUserUID(ctx) - if err != nil { - utils.RecordSpanError(span, err) - return nil, exceptions.UserNotFoundError(err) - } - - profile, err := s.repo.GetUserProfileByUID(ctx, uid, false) - if err != nil { - utils.RecordSpanError(span, err) - // this is a wrapped error. No need to wrap it again - return nil, err - } - - sup, err := s.FindSupplierByUID(ctx) - if err != nil { - utils.RecordSpanError(span, err) - // this is a wrapped error. No need to wrap it again - return nil, err - } - - // fetch the branches of the provider filtered by ParentOrganizationID - filter := []*dto.BranchFilterInput{ - { - ParentOrganizationID: &sup.ParentOrganizationID, - }, - } - - brs, err := s.chargemaster.FindBranch(ctx, nil, filter, nil) - if err != nil { - utils.RecordSpanError(span, err) - return nil, exceptions.FindProviderError(err) - } - - branch := func(brs *dto.BranchConnection, location string) *dto.BranchEdge { - for _, b := range brs.Edges { - if b.Node.ID == location { - return b - } - } - return nil - }(brs, locationID) - - if branch != nil { - loc := profileutils.Location{ - ID: branch.Node.ID, - Name: branch.Node.Name, - BranchSladeCode: &branch.Node.BranchSladeCode, - } - sup.Location = &loc - - if err := s.repo.UpdateSupplierProfile(ctx, profile.ID, sup); err != nil { - utils.RecordSpanError(span, err) - return nil, err - } - - // refetch the supplier profile and return it - return s.FindSupplierByUID(ctx) - } - - return nil, fmt.Errorf("unable to get location of id %v : %v", locationID, err) -} - -// FetchSupplierAllowedLocations retrieves all the locations that the user in context can work on. -func (s *SupplierUseCasesImpl) FetchSupplierAllowedLocations( - ctx context.Context, -) (*dto.BranchConnection, error) { - ctx, span := tracer.Start(ctx, "FetchSupplierAllowedLocations") - defer span.End() - - supplier, err := s.FindSupplierByUID(ctx) - if err != nil { - utils.RecordSpanError(span, err) - return nil, err - } - - // fetch the branches of the provider filtered by ParentOrganizationID - filter := []*dto.BranchFilterInput{ - { - ParentOrganizationID: &supplier.ParentOrganizationID, - }, - } - - branchConnection, err := s.chargemaster.FindBranch(ctx, nil, filter, nil) - if err != nil { - utils.RecordSpanError(span, err) - return nil, exceptions.FindProviderError(err) - } - - if supplier.Location != nil { - var resp dto.BranchConnection - resp.PageInfo = branchConnection.PageInfo - - newEdges := []*dto.BranchEdge{} - for _, edge := range branchConnection.Edges { - if edge.Node.ID == supplier.Location.ID { - loc := &dto.BranchEdge{ - Cursor: edge.Cursor, - Node: &domain.Branch{ - ID: edge.Node.ID, - Name: edge.Node.Name, - OrganizationSladeCode: edge.Node.OrganizationSladeCode, - BranchSladeCode: edge.Node.BranchSladeCode, - Default: true, - }, - } - newEdges = append(newEdges, loc) - } else { - newEdges = append(newEdges, edge) - } - } - - resp.Edges = newEdges - return &resp, nil - } - return branchConnection, nil + return nil, fmt.Errorf("unable to get location of id %v : %v", locationID, nil) } // PublishKYCNudge pushes a KYC nudge to the user feed diff --git a/pkg/onboarding/usecases/supplier_integration_test.go b/pkg/onboarding/usecases/supplier_integration_test.go index 261ec7e9..643cdbca 100644 --- a/pkg/onboarding/usecases/supplier_integration_test.go +++ b/pkg/onboarding/usecases/supplier_integration_test.go @@ -1849,77 +1849,6 @@ func TestSubmitProcessOrganizationNutritionKycRequest(t *testing.T) { assert.Equal(t, true, response) } -func TestSupplierSetDefaultLocation(t *testing.T) { - // clean kyc processing requests collection because other tests have written to it - ctx1 := context.Background() - if serverutils.MustGetEnvVar(domain.Repo) == domain.FirebaseRepository { - cleanUpFirebase(ctx1, t) - } - - s, err := InitializeTestService(context.Background()) - if err != nil { - t.Error("failed to setup signup usecase") - } - - primaryPhone := interserviceclient.TestUserPhoneNumber - - // clean up - _ = s.Signup.RemoveUserByPhoneNumber(context.Background(), primaryPhone) - - otp, err := generateTestOTP(t, primaryPhone) - if err != nil { - t.Errorf("failed to generate test OTP: %v", err) - return - } - pin := "1234" - resp1, err := s.Signup.CreateUserByPhone( - context.Background(), - &dto.SignUpInput{ - PhoneNumber: &primaryPhone, - PIN: &pin, - Flavour: feedlib.FlavourConsumer, - OTP: &otp.OTP, - }, - ) - assert.Nil(t, err) - assert.NotNil(t, resp1) - assert.NotNil(t, resp1.Profile) - assert.NotNil(t, resp1.CustomerProfile) - assert.NotNil(t, resp1.SupplierProfile) - - login1, err := s.Login.LoginByPhone(context.Background(), primaryPhone, pin, feedlib.FlavourConsumer) - assert.Nil(t, err) - assert.NotNil(t, login1) - - // create authenticated context - ctx := context.Background() - authCred := &auth.Token{UID: login1.Auth.UID} - authenticatedContext := context.WithValue( - ctx, - firebasetools.AuthTokenContextKey, - authCred, - ) - s, _ = InitializeTestService(authenticatedContext) - - cmParentOrgId := testChargeMasterParentOrgId - filter := []*dto.BranchFilterInput{ - { - ParentOrganizationID: &cmParentOrgId, - }, - } - - br, err := s.ChargeMaster.FindBranch(authenticatedContext, nil, filter, nil) - assert.Nil(t, err) - assert.NotNil(t, br) - assert.NotEqual(t, 0, len(br.Edges)) - - // call set supplier default location - spr, err := s.Supplier.SupplierSetDefaultLocation(authenticatedContext, br.Edges[0].Node.ID) - assert.Nil(t, err) - assert.NotNil(t, spr) - assert.Equal(t, br.Edges[0].Node.ID, spr.Location.ID) -} - func TestFindSupplierByUID(t *testing.T) { ctx, _, err := GetTestAuthenticatedContext(t) if err != nil { @@ -2140,59 +2069,6 @@ func TestSupplierEDIUserLogin(t *testing.T) { } } -func TestFetchSupplierAllowedLocations(t *testing.T) { - ctx, _, err := GetTestAuthenticatedContext(t) - if err != nil { - t.Errorf("failed to get test authenticated context: %v", err) - return - } - - s, err := InitializeTestService(ctx) - if err != nil { - t.Errorf("unable to initialize test service") - return - } - - type args struct { - ctx context.Context - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "happy case :)", - args: args{ - ctx: ctx, - }, - wantErr: false, - }, - { - name: "sad case :( unable to get supplier", - args: args{ - ctx: context.Background(), - }, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - branchConnection, err := s.Supplier.FetchSupplierAllowedLocations(tt.args.ctx) - if (err != nil) != tt.wantErr { - t.Errorf("SupplierUseCasesImpl.FetchSupplierAllowedLocations() error = %v, wantErr %v", err, tt.wantErr) - return - } - if err != nil && !tt.wantErr { - if branchConnection == nil { - t.Errorf("expected branch connection") - return - } - } - }) - } -} - func TestSuspendSupplier(t *testing.T) { ctx, _, err := GetTestAuthenticatedContext(t) if err != nil { diff --git a/pkg/onboarding/usecases/supplier_internal_test.go b/pkg/onboarding/usecases/supplier_internal_test.go index 386ccad9..2e1d57fb 100644 --- a/pkg/onboarding/usecases/supplier_internal_test.go +++ b/pkg/onboarding/usecases/supplier_internal_test.go @@ -16,7 +16,6 @@ import ( "github.com/savannahghi/onboarding/pkg/onboarding/domain" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/database/fb" - "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/chargemaster" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/edi" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/engagement" @@ -79,7 +78,7 @@ func TestParseKYCAsMap(t *testing.T) { engage := engagement.NewServiceEngagementImpl(engagementClient, ext) edi := edi.NewEdiService(ediClient, repo) erp := erp.NewAccounting() - chrg := chargemaster.NewChargeMasterUseCasesImpl() + // hubspot usecases hubspotService := hubspot.NewHubSpotService() hubspotfr, err := hubspotRepo.NewHubSpotFirebaseRepository(context.Background(), hubspotService) @@ -105,12 +104,11 @@ func TestParseKYCAsMap(t *testing.T) { profile := NewProfileUseCase(repo, ext, engage, ps, crmExt) supplier := SupplierUseCasesImpl{ - repo: repo, - profile: profile, - erp: erp, - chargemaster: chrg, - engagement: engage, - messaging: mes, + repo: repo, + profile: profile, + erp: erp, + engagement: engage, + messaging: mes, } tests := []struct { diff --git a/pkg/onboarding/usecases/supplier_unit_test.go b/pkg/onboarding/usecases/supplier_unit_test.go index bccdc3d6..823486d4 100644 --- a/pkg/onboarding/usecases/supplier_unit_test.go +++ b/pkg/onboarding/usecases/supplier_unit_test.go @@ -13,7 +13,6 @@ import ( "github.com/savannahghi/converterandformatter" "github.com/savannahghi/enumutils" "github.com/savannahghi/feedlib" - "github.com/savannahghi/firebasetools" "github.com/savannahghi/interserviceclient" "github.com/savannahghi/onboarding/pkg/onboarding/application/dto" "github.com/savannahghi/onboarding/pkg/onboarding/application/utils" @@ -5286,677 +5285,366 @@ func TestSupplierUseCasesImpl_CreateSupplierAccount(t *testing.T) { } } -func TestSupplierUseCasesImpl_SupplierSetDefaultLocation(t *testing.T) { - ctx := context.Background() - - i, err := InitializeFakeOnboardingInteractor() - if err != nil { - t.Errorf("failed to fake initialize onboarding interactor: %v", err) - return - } - testChargeMasterBranchID := "94294577-6b27-4091-9802-1ce0f2ce4153" - - cursor := "1234" - edges := &dto.BranchEdge{ - Cursor: &cursor, - Node: &domain.Branch{ - ID: testChargeMasterBranchID, - Name: "BRANCH-NAME", - OrganizationSladeCode: "PRO-1234", - BranchSladeCode: "1", - }, - } - - newEdges := []*dto.BranchEdge{} - newEdges = append(newEdges, edges) - - type args struct { - ctx context.Context - locationID string - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "valid:set_default_location_with_a_valid_locationID", - args: args{ - ctx: ctx, - locationID: testChargeMasterBranchID, - }, - wantErr: false, - }, - { - name: "invalid:set_default_location_with_an_invalid_locationID", - args: args{ - ctx: ctx, - locationID: "invalid-location-id", - }, - wantErr: true, - }, - { - name: "invalid:fail_to_get_logged_in_user", - args: args{ - ctx: ctx, - locationID: testChargeMasterBranchID, - }, - wantErr: true, - }, - { - name: "invalid:supplier_not_found", - args: args{ - ctx: ctx, - locationID: testChargeMasterBranchID, - }, - wantErr: true, - }, - { - name: "invalid:_unable_to_get_user_profile_by_uid", - args: args{ - ctx: ctx, - locationID: testChargeMasterBranchID, - }, - wantErr: true, - }, - { - name: "invalid:_unable_to_find_branch", - args: args{ - ctx: ctx, - locationID: testChargeMasterBranchID, - }, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if tt.name == "valid:set_default_location_with_a_valid_locationID" { - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "83d3479d-e902-4aab-a27d-6d5067454daf", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "93ca42bb-5cfc-4499-b137-2df4d67b4a21", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: uid, - }, - }, - }, nil - } - - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "83d3479d-e902-4aab-a27d-6d5067454daf", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "94294577-6b27-4091-9802-1ce0f2ce4153", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: "f4f39af7-91bd-42b3af-315a4e", - }, - }, - }, nil - } - - fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - ID: "42b3af315a4e-f4f39af7-5b64-4c2f-91bd", - ProfileID: &profileID, - }, nil - } - - fakeRepo.GetSupplierProfileByUIDFn = func(ctx context.Context, uid string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - SupplierID: "8716-7e2ae-5cf354a2-1d3e-ad29f2c-400d", - }, nil - } - - fakeChargeMasterSvc.FindBranchFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, - sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { - return &dto.BranchConnection{ - Edges: newEdges, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: false, - }, - }, nil - } - - fakeRepo.UpdateSupplierProfileFn = func(ctx context.Context, profileID string, data *profileutils.Supplier) error { - return nil - } - - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "7e2aea-d29f2c", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "400d-8716--91bd-42b3af315a4e", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: "f4f39af7-91bd-42b3af-315a4e", - }, - }, - }, nil - } - - fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - ID: "42b3af315a4e-f4f39af7-5b64-4c2f-91bd", - ProfileID: &profileID, - }, nil - } - - fakeRepo.GetSupplierProfileByUIDFn = func(ctx context.Context, uid string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - SupplierID: "8716-7e2ae-5cf354a2-1d3e-ad29f2c-400d", - }, nil - } - - } - - if tt.name == "invalid:set_default_location_with_an_invalid_locationID" { - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "7e2aea-d29f2c", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "93ca42bb-5cfc-4499-b137-2df4d67b4a21", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: uid, - }, - }, - }, nil - } - - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "7e2aea-d29f2c", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "400d-8716--91bd-42b3af315a4e", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: "f4f39af7-91bd-42b3af-315a4e", - }, - }, - }, nil - } - - fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - ID: "42b3af315a4e-f4f39af7-5b64-4c2f-91bd", - ProfileID: &profileID, - }, nil - } - - fakeRepo.GetSupplierProfileByUIDFn = func(ctx context.Context, uid string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - SupplierID: "8716-7e2ae-5cf354a2-1d3e-ad29f2c-400d", - }, nil - } - - fakeChargeMasterSvc.FindBranchFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, - sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { - return &dto.BranchConnection{ - Edges: newEdges, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: false, - }, - }, nil - } - - fakeRepo.UpdateSupplierProfileFn = func(ctx context.Context, profileID string, data *profileutils.Supplier) error { - return fmt.Errorf("fail to get the location") - } - } - - if tt.name == "invalid:fail_to_get_logged_in_user" { - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "", fmt.Errorf("unable to get logged in user") - } - } - - if tt.name == "invalid:supplier_not_found" { - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "7e2aea-d29f2c", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "93ca42bb-5cfc-4499-b137-2df4d67b4a21", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: uid, - }, - }, - }, nil - } - - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "7e2aea-d29f2c", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "400d-8716--91bd-42b3af315a4e", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: "f4f39af7-91bd-42b3af-315a4e", - }, - }, - }, nil - } - - fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { - return nil, fmt.Errorf("supplier not found") - - } - } - - if tt.name == "invalid:_unable_to_get_user_profile_by_uid" { - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "FSO798-AD3", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return nil, fmt.Errorf("unable to get profile") - } - } - - if tt.name == "invalid:_unable_to_find_branch" { - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "7e2aea-d29f2c", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "93ca42bb-5cfc-4499-b137-2df4d67b4a21", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: uid, - }, - }, - }, nil - } - - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "7e2aea-d29f2c", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "400d-8716--91bd-42b3af315a4e", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: "f4f39af7-91bd-42b3af-315a4e", - }, - }, - }, nil - } - - fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - ID: "42b3af315a4e-f4f39af7-5b64-4c2f-91bd", - ProfileID: &profileID, - }, nil - } - - fakeRepo.GetSupplierProfileByUIDFn = func(ctx context.Context, uid string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - SupplierID: "8716-7e2ae-5cf354a2-1d3e-ad29f2c-400d", - }, nil - } - - fakeChargeMasterSvc.FindBranchFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, - sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { - return nil, fmt.Errorf("unable to find branch") - } - } - - _, err := i.Supplier.SupplierSetDefaultLocation(tt.args.ctx, tt.args.locationID) - if (err != nil) != tt.wantErr { - t.Errorf( - "SupplierUseCasesImpl.SupplierSetDefaultLocation() error = %v, wantErr %v", - err, - tt.wantErr, - ) - return - } - - if tt.wantErr { - if err == nil { - t.Errorf("error expected got %v", err) - return - } - } - - if !tt.wantErr { - if err != nil { - t.Errorf("error not expected got %v", err) - return - } - } - }) - } -} - -func TestSupplierUseCasesImpl_FetchSupplierAllowedLocations(t *testing.T) { - ctx := context.Background() - - i, err := InitializeFakeOnboardingInteractor() - if err != nil { - t.Errorf("failed to fake initialize onboarding interactor: %v", err) - return - } - - testChargeMasterParentOrgId := "83d3479d-e902-4aab-a27d-6d5067454daf" - testChargeMasterBranchID := "94294577-6b27-4091-9802-1ce0f2ce4153" - - sladeCode := "1" - cursor := "4567" - edges := &dto.BranchEdge{ - Cursor: &cursor, - Node: &domain.Branch{ - ID: testChargeMasterParentOrgId, - Name: "BRANCH-NAME", - OrganizationSladeCode: "PRO-1234", - BranchSladeCode: sladeCode, - }, - } - newEdges := []*dto.BranchEdge{} - newEdges = append(newEdges, edges) - - // The Node ID is different from the supplier Location ID - // This helps to test all cases - payload2 := &dto.BranchEdge{ - Cursor: &cursor, - Node: &domain.Branch{ - ID: testChargeMasterBranchID, - Name: "BRANCH-NAME", - OrganizationSladeCode: "PRO-1234", - BranchSladeCode: sladeCode, - }, - } - newPayload := []*dto.BranchEdge{} - newPayload = append(newPayload, payload2) - - type args struct { - ctx context.Context - } - tests := []struct { - name string - args args - wantErr bool - }{ - { - name: "valid:supplier_allowed_location_found", - args: args{ - ctx: ctx, - }, - wantErr: false, - }, - { - name: "valid:supplier_location_found", - args: args{ - ctx: ctx, - }, - wantErr: false, - }, - { - name: "valid:nil_supplier_location", - args: args{ - ctx: ctx, - }, - wantErr: false, - }, - { - name: "invalid:fail_to_find_branch", - args: args{ - ctx: ctx, - }, - wantErr: true, - }, - { - name: "invalid:logged_in_user_not_found", - args: args{ - ctx: ctx, - }, - wantErr: true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - - if tt.name == "valid:supplier_allowed_location_found" { - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "7e2aea-d29f2c", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "400d-8716--91bd-42b3af315a4e", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: "f4f39af7-91bd-42b3af-315a4e", - }, - }, - }, nil - } - - fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - ID: "42b3af315a4e-f4f39af7-5b64-4c2f-91bd", - ProfileID: &profileID, - Location: &profileutils.Location{ - ID: testChargeMasterParentOrgId, - Name: "BRANCH-NAME", - BranchSladeCode: &sladeCode, - }, - }, nil - } - - fakeRepo.GetSupplierProfileByUIDFn = func(ctx context.Context, uid string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - SupplierID: "8716-7e2ae-5cf354a2-1d3e-ad29f2c-400d", - Location: &profileutils.Location{ - ID: testChargeMasterParentOrgId, - Name: "BRANCH-NAME", - BranchSladeCode: &sladeCode, - }, - }, nil - } - - fakeChargeMasterSvc.FindBranchFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, - sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { - return &dto.BranchConnection{ - Edges: newEdges, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: false, - }, - }, nil - } - } - - if tt.name == "valid:supplier_location_found" { - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "7e2aea-d29f2c", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "400d-8716--91bd-42b3af315a4e", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: "f4f39af7-91bd-42b3af-315a4e", - }, - }, - }, nil - } - - fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - ID: "42b3af315a4e-f4f39af7-5b64-4c2f-91bd", - ProfileID: &profileID, - Location: &profileutils.Location{ - ID: testChargeMasterParentOrgId, - Name: "BRANCH-NAME", - BranchSladeCode: &sladeCode, - }, - }, nil - } - - fakeRepo.GetSupplierProfileByUIDFn = func(ctx context.Context, uid string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - SupplierID: "8716-7e2ae-5cf354a2-1d3e-ad29f2c-400d", - Location: &profileutils.Location{ - ID: testChargeMasterParentOrgId, - Name: "BRANCH-NAME", - BranchSladeCode: &sladeCode, - }, - }, nil - } - - fakeChargeMasterSvc.FindBranchFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, - sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { - return &dto.BranchConnection{ - Edges: newPayload, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: false, - }, - }, nil - } - } - - if tt.name == "valid:nil_supplier_location" { - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "7e2aea-d29f2c", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "400d-8716--91bd-42b3af315a4e", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: "f4f39af7-91bd-42b3af-315a4e", - }, - }, - }, nil - } - - // Here we dont pass a location - fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - ID: "42b3af315a4e-f4f39af7-5b64-4c2f-91bd", - ProfileID: &profileID, - }, nil - } - - fakeRepo.GetSupplierProfileByUIDFn = func(ctx context.Context, uid string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - SupplierID: "8716-7e2ae-5cf354a2-1d3e-ad29f2c-400d", - }, nil - } - - fakeChargeMasterSvc.FindBranchFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, - sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { - return &dto.BranchConnection{ - Edges: newPayload, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: false, - }, - }, nil - } - } - - if tt.name == "invalid:fail_to_find_branch" { - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "7e2aea-d29f2c", nil - } - - fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { - return &profileutils.UserProfile{ - ID: "400d-8716--91bd-42b3af315a4e", - VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ - { - UID: "f4f39af7-91bd-42b3af-315a4e", - }, - }, - }, nil - } - - fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - ID: "42b3af315a4e-f4f39af7-5b64-4c2f-91bd", - ProfileID: &profileID, - Location: &profileutils.Location{ - ID: testChargeMasterParentOrgId, - Name: "BRANCH-NAME", - BranchSladeCode: &sladeCode, - }, - }, nil - } - - fakeRepo.GetSupplierProfileByUIDFn = func(ctx context.Context, uid string) (*profileutils.Supplier, error) { - return &profileutils.Supplier{ - SupplierID: "8716-7e2ae-5cf354a2-1d3e-ad29f2c-400d", - Location: &profileutils.Location{ - ID: testChargeMasterParentOrgId, - Name: "BRANCH-NAME", - BranchSladeCode: &sladeCode, - }, - }, nil - } - - fakeChargeMasterSvc.FindBranchFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, - sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { - return &dto.BranchConnection{ - Edges: newEdges, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: false, - }, - }, fmt.Errorf("failed to find branch") - } - } - - if tt.name == "invalid:logged_in_user_not_found" { - fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { - return "", fmt.Errorf("user not found") - } - } - - _, err := i.Supplier.FetchSupplierAllowedLocations(tt.args.ctx) - if (err != nil) != tt.wantErr { - t.Errorf( - "SupplierUseCasesImpl.FetchSupplierAllowedLocations() error = %v, wantErr %v", - err, - tt.wantErr, - ) - return - } - - if tt.wantErr { - if err == nil { - t.Errorf("error expected got %v", err) - return - } - } - - if !tt.wantErr { - if err != nil { - t.Errorf("error not expected got %v", err) - return - } - } - }) - } -} +// TODO: refactor after removing chargemaster +// func TestSupplierUseCasesImpl_SupplierSetDefaultLocation(t *testing.T) { +// ctx := context.Background() + +// i, err := InitializeFakeOnboardingInteractor() +// if err != nil { +// t.Errorf("failed to fake initialize onboarding interactor: %v", err) +// return +// } + +// cursor := "1234" +// edges := &dto.BranchEdge{ +// Cursor: &cursor, +// Node: &domain.Branch{ +// ID: testChargeMasterBranchID, +// Name: "BRANCH-NAME", +// OrganizationSladeCode: "PRO-1234", +// BranchSladeCode: "1", +// }, +// } + +// newEdges := []*dto.BranchEdge{} +// newEdges = append(newEdges, edges) + +// type args struct { +// ctx context.Context +// locationID string +// } +// tests := []struct { +// name string +// args args +// wantErr bool +// }{ +// { +// name: "valid:set_default_location_with_a_valid_locationID", +// args: args{ +// ctx: ctx, +// locationID: testChargeMasterBranchID, +// }, +// wantErr: false, +// }, +// { +// name: "invalid:set_default_location_with_an_invalid_locationID", +// args: args{ +// ctx: ctx, +// locationID: "invalid-location-id", +// }, +// wantErr: true, +// }, +// { +// name: "invalid:fail_to_get_logged_in_user", +// args: args{ +// ctx: ctx, +// locationID: testChargeMasterBranchID, +// }, +// wantErr: true, +// }, +// { +// name: "invalid:supplier_not_found", +// args: args{ +// ctx: ctx, +// locationID: testChargeMasterBranchID, +// }, +// wantErr: true, +// }, +// { +// name: "invalid:_unable_to_get_user_profile_by_uid", +// args: args{ +// ctx: ctx, +// locationID: testChargeMasterBranchID, +// }, +// wantErr: true, +// }, +// { +// name: "invalid:_unable_to_find_branch", +// args: args{ +// ctx: ctx, +// locationID: testChargeMasterBranchID, +// }, +// wantErr: true, +// }, +// } +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// if tt.name == "valid:set_default_location_with_a_valid_locationID" { +// fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { +// return "83d3479d-e902-4aab-a27d-6d5067454daf", nil +// } + +// fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { +// return &profileutils.UserProfile{ +// ID: "93ca42bb-5cfc-4499-b137-2df4d67b4a21", +// VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ +// { +// UID: uid, +// }, +// }, +// }, nil +// } + +// fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { +// return "83d3479d-e902-4aab-a27d-6d5067454daf", nil +// } + +// fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { +// return &profileutils.UserProfile{ +// ID: "94294577-6b27-4091-9802-1ce0f2ce4153", +// VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ +// { +// UID: "f4f39af7-91bd-42b3af-315a4e", +// }, +// }, +// }, nil +// } + +// fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { +// return &profileutils.Supplier{ +// ID: "42b3af315a4e-f4f39af7-5b64-4c2f-91bd", +// ProfileID: &profileID, +// }, nil +// } + +// fakeRepo.GetSupplierProfileByUIDFn = func(ctx context.Context, uid string) (*profileutils.Supplier, error) { +// return &profileutils.Supplier{ +// SupplierID: "8716-7e2ae-5cf354a2-1d3e-ad29f2c-400d", +// }, nil +// } + +// fakeChargeMasterSvc.FindBranchFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, +// sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { +// return &dto.BranchConnection{ +// Edges: newEdges, +// PageInfo: &firebasetools.PageInfo{ +// HasNextPage: false, +// }, +// }, nil +// } + +// fakeRepo.UpdateSupplierProfileFn = func(ctx context.Context, profileID string, data *profileutils.Supplier) error { +// return nil +// } + +// fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { +// return "7e2aea-d29f2c", nil +// } + +// fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { +// return &profileutils.UserProfile{ +// ID: "400d-8716--91bd-42b3af315a4e", +// VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ +// { +// UID: "f4f39af7-91bd-42b3af-315a4e", +// }, +// }, +// }, nil +// } + +// fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { +// return &profileutils.Supplier{ +// ID: "42b3af315a4e-f4f39af7-5b64-4c2f-91bd", +// ProfileID: &profileID, +// }, nil +// } + +// fakeRepo.GetSupplierProfileByUIDFn = func(ctx context.Context, uid string) (*profileutils.Supplier, error) { +// return &profileutils.Supplier{ +// SupplierID: "8716-7e2ae-5cf354a2-1d3e-ad29f2c-400d", +// }, nil +// } + +// } + +// if tt.name == "invalid:set_default_location_with_an_invalid_locationID" { +// fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { +// return "7e2aea-d29f2c", nil +// } + +// fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { +// return &profileutils.UserProfile{ +// ID: "93ca42bb-5cfc-4499-b137-2df4d67b4a21", +// VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ +// { +// UID: uid, +// }, +// }, +// }, nil +// } + +// fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { +// return "7e2aea-d29f2c", nil +// } + +// fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { +// return &profileutils.UserProfile{ +// ID: "400d-8716--91bd-42b3af315a4e", +// VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ +// { +// UID: "f4f39af7-91bd-42b3af-315a4e", +// }, +// }, +// }, nil +// } + +// fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { +// return &profileutils.Supplier{ +// ID: "42b3af315a4e-f4f39af7-5b64-4c2f-91bd", +// ProfileID: &profileID, +// }, nil +// } + +// fakeRepo.GetSupplierProfileByUIDFn = func(ctx context.Context, uid string) (*profileutils.Supplier, error) { +// return &profileutils.Supplier{ +// SupplierID: "8716-7e2ae-5cf354a2-1d3e-ad29f2c-400d", +// }, nil +// } + +// fakeChargeMasterSvc.FindBranchFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, +// sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { +// return &dto.BranchConnection{ +// Edges: newEdges, +// PageInfo: &firebasetools.PageInfo{ +// HasNextPage: false, +// }, +// }, nil +// } + +// fakeRepo.UpdateSupplierProfileFn = func(ctx context.Context, profileID string, data *profileutils.Supplier) error { +// return fmt.Errorf("fail to get the location") +// } +// } + +// if tt.name == "invalid:fail_to_get_logged_in_user" { +// fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { +// return "", fmt.Errorf("unable to get logged in user") +// } +// } + +// if tt.name == "invalid:supplier_not_found" { +// fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { +// return "7e2aea-d29f2c", nil +// } + +// fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { +// return &profileutils.UserProfile{ +// ID: "93ca42bb-5cfc-4499-b137-2df4d67b4a21", +// VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ +// { +// UID: uid, +// }, +// }, +// }, nil +// } + +// fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { +// return "7e2aea-d29f2c", nil +// } + +// fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { +// return &profileutils.UserProfile{ +// ID: "400d-8716--91bd-42b3af315a4e", +// VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ +// { +// UID: "f4f39af7-91bd-42b3af-315a4e", +// }, +// }, +// }, nil +// } + +// fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { +// return nil, fmt.Errorf("supplier not found") + +// } +// } + +// if tt.name == "invalid:_unable_to_get_user_profile_by_uid" { +// fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { +// return "FSO798-AD3", nil +// } + +// fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { +// return nil, fmt.Errorf("unable to get profile") +// } +// } + +// if tt.name == "invalid:_unable_to_find_branch" { +// fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { +// return "7e2aea-d29f2c", nil +// } + +// fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { +// return &profileutils.UserProfile{ +// ID: "93ca42bb-5cfc-4499-b137-2df4d67b4a21", +// VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ +// { +// UID: uid, +// }, +// }, +// }, nil +// } + +// fakeBaseExt.GetLoggedInUserUIDFn = func(ctx context.Context) (string, error) { +// return "7e2aea-d29f2c", nil +// } + +// fakeRepo.GetUserProfileByUIDFn = func(ctx context.Context, uid string, suspended bool) (*profileutils.UserProfile, error) { +// return &profileutils.UserProfile{ +// ID: "400d-8716--91bd-42b3af315a4e", +// VerifiedIdentifiers: []profileutils.VerifiedIdentifier{ +// { +// UID: "f4f39af7-91bd-42b3af-315a4e", +// }, +// }, +// }, nil +// } + +// fakeRepo.GetSupplierProfileByProfileIDFn = func(ctx context.Context, profileID string) (*profileutils.Supplier, error) { +// return &profileutils.Supplier{ +// ID: "42b3af315a4e-f4f39af7-5b64-4c2f-91bd", +// ProfileID: &profileID, +// }, nil +// } + +// fakeRepo.GetSupplierProfileByUIDFn = func(ctx context.Context, uid string) (*profileutils.Supplier, error) { +// return &profileutils.Supplier{ +// SupplierID: "8716-7e2ae-5cf354a2-1d3e-ad29f2c-400d", +// }, nil +// } + +// fakeChargeMasterSvc.FindBranchFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, +// sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { +// return nil, fmt.Errorf("unable to find branch") +// } +// } + +// _, err := i.Supplier.SupplierSetDefaultLocation(tt.args.ctx, tt.args.locationID) +// if (err != nil) != tt.wantErr { +// t.Errorf( +// "SupplierUseCasesImpl.SupplierSetDefaultLocation() error = %v, wantErr %v", +// err, +// tt.wantErr, +// ) +// return +// } + +// if tt.wantErr { +// if err == nil { +// t.Errorf("error expected got %v", err) +// return +// } +// } + +// if !tt.wantErr { +// if err != nil { +// t.Errorf("error not expected got %v", err) +// return +// } +// } +// }) +// } +// } func TestSupplierUseCasesImpl_SupplierEDILogin(t *testing.T) { ctx := context.Background() @@ -5966,72 +5654,72 @@ func TestSupplierUseCasesImpl_SupplierEDILogin(t *testing.T) { t.Errorf("failed to fake initialize onboarding interactor: %v", err) return } - sladeCode := "1" - savannahOrgName := "Savannah Informatics" - cursor := "8765" - parent := "parent" - edges := &dto.BusinessPartnerEdge{ - Cursor: &cursor, - Node: &domain.BusinessPartner{ - ID: "BUS1N3SS-P123-1D", - Name: savannahOrgName, - SladeCode: sladeCode, - Parent: &parent, - }, - } - - newEdges := []*dto.BusinessPartnerEdge{} - newEdges = append(newEdges, edges) - - payload2 := &dto.BranchEdge{ - Cursor: &cursor, - Node: &domain.Branch{ - ID: "BUS1N3SS-P123-1D", - Name: savannahOrgName, - OrganizationSladeCode: "123456", - BranchSladeCode: sladeCode, - }, - } - newPayload := []*dto.BranchEdge{} - newPayload = append(newPayload, payload2) - - payload3 := &dto.BusinessPartnerEdge{ - Cursor: &cursor, - Node: &domain.BusinessPartner{ - ID: "BUS1N3SS-P123", - Name: "Random Org", - SladeCode: "PRO-1234", - Parent: &parent, - }, - } - - newPayload3 := []*dto.BusinessPartnerEdge{} - newPayload3 = append(newPayload3, payload3) - - payload4 := &dto.BranchEdge{ - Cursor: &cursor, - Node: &domain.Branch{ - ID: "BUS1N3SS-P123", - Name: "Random Org", - OrganizationSladeCode: "1234", - BranchSladeCode: "PRO-1234", - }, - } - newPayload4 := []*dto.BranchEdge{} - newPayload4 = append(newPayload4, payload4) + // sladeCode := "1" + // savannahOrgName := "Savannah Informatics" + // cursor := "8765" + // parent := "parent" + // edges := &dto.BusinessPartnerEdge{ + // Cursor: &cursor, + // Node: &domain.BusinessPartner{ + // ID: "BUS1N3SS-P123-1D", + // Name: savannahOrgName, + // SladeCode: sladeCode, + // Parent: &parent, + // }, + // } + + // newEdges := []*dto.BusinessPartnerEdge{} + // newEdges = append(newEdges, edges) + + // payload2 := &dto.BranchEdge{ + // Cursor: &cursor, + // Node: &domain.Branch{ + // ID: "BUS1N3SS-P123-1D", + // Name: savannahOrgName, + // OrganizationSladeCode: "123456", + // BranchSladeCode: sladeCode, + // }, + // } + // newPayload := []*dto.BranchEdge{} + // newPayload = append(newPayload, payload2) + + // payload3 := &dto.BusinessPartnerEdge{ + // Cursor: &cursor, + // Node: &domain.BusinessPartner{ + // ID: "BUS1N3SS-P123", + // Name: "Random Org", + // SladeCode: "PRO-1234", + // Parent: &parent, + // }, + // } + + // newPayload3 := []*dto.BusinessPartnerEdge{} + // newPayload3 = append(newPayload3, payload3) + + // payload4 := &dto.BranchEdge{ + // Cursor: &cursor, + // Node: &domain.Branch{ + // ID: "BUS1N3SS-P123", + // Name: "Random Org", + // OrganizationSladeCode: "1234", + // BranchSladeCode: "PRO-1234", + // }, + // } + // newPayload4 := []*dto.BranchEdge{} + // newPayload4 = append(newPayload4, payload4) // This will help test the case where a parent is nil - payload5 := &dto.BusinessPartnerEdge{ - Cursor: &cursor, - Node: &domain.BusinessPartner{ - ID: "BUS1N3SS-P123", - Name: "Random Org", - SladeCode: "PRO-1234", - }, - } - - newPayload5 := []*dto.BusinessPartnerEdge{} - newPayload5 = append(newPayload5, payload5) + // payload5 := &dto.BusinessPartnerEdge{ + // Cursor: &cursor, + // Node: &domain.BusinessPartner{ + // ID: "BUS1N3SS-P123", + // Name: "Random Org", + // SladeCode: "PRO-1234", + // }, + // } + + // newPayload5 := []*dto.BusinessPartnerEdge{} + // newPayload5 = append(newPayload5, payload5) type args struct { ctx context.Context @@ -6230,16 +5918,6 @@ func TestSupplierUseCasesImpl_SupplierEDILogin(t *testing.T) { return nil } - fakeChargeMasterSvc.FindProviderFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BusinessPartnerFilterInput, - sort []*dto.BusinessPartnerSortInput) (*dto.BusinessPartnerConnection, error) { - return &dto.BusinessPartnerConnection{ - Edges: newEdges, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: false, - }, - }, nil - } - fakeEngagementSvs.PublishKYCNudgeFn = func(ctx context.Context, uid string, payload feedlib.Nudge) (*http.Response, error) { return &http.Response{ Status: "OK", @@ -6248,29 +5926,10 @@ func TestSupplierUseCasesImpl_SupplierEDILogin(t *testing.T) { }, nil } - fakeChargeMasterSvc.FetchProviderByIDFn = func(ctx context.Context, id string) (*domain.BusinessPartner, error) { - return &domain.BusinessPartner{ - ID: "BUS1N3SS-P123-1D", - Name: savannahOrgName, - SladeCode: "1", - Parent: &parent, - }, nil - } - fakeRepo.UpdateSupplierProfileFn = func(ctx context.Context, profileID string, data *profileutils.Supplier) error { return nil } - fakeChargeMasterSvc.FindBranchFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, - sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { - return &dto.BranchConnection{ - Edges: newPayload, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: false, - }, - }, nil - } - fakeRepo.UpdateSupplierProfileFn = func(ctx context.Context, profileID string, data *profileutils.Supplier) error { return nil } @@ -6376,16 +6035,6 @@ func TestSupplierUseCasesImpl_SupplierEDILogin(t *testing.T) { return nil } - fakeChargeMasterSvc.FindProviderFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BusinessPartnerFilterInput, - sort []*dto.BusinessPartnerSortInput) (*dto.BusinessPartnerConnection, error) { - return &dto.BusinessPartnerConnection{ - Edges: newPayload3, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: false, - }, - }, nil - } - fakeEngagementSvs.PublishKYCNudgeFn = func(ctx context.Context, uid string, payload feedlib.Nudge) (*http.Response, error) { return &http.Response{ Status: "OK", @@ -6394,30 +6043,10 @@ func TestSupplierUseCasesImpl_SupplierEDILogin(t *testing.T) { }, nil } - fakeChargeMasterSvc.FetchProviderByIDFn = func(ctx context.Context, id string) (*domain.BusinessPartner, error) { - parent := "parent" - return &domain.BusinessPartner{ - ID: "BUS1N3SS-P123", - Name: "Random Org", - SladeCode: "PRO-1234", - Parent: &parent, - }, nil - } - fakeRepo.UpdateSupplierProfileFn = func(ctx context.Context, profileID string, data *profileutils.Supplier) error { return nil } - fakeChargeMasterSvc.FindBranchFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BranchFilterInput, - sort []*dto.BranchSortInput) (*dto.BranchConnection, error) { - return &dto.BranchConnection{ - Edges: newPayload4, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: false, - }, - }, nil - } - fakeRepo.UpdateSupplierProfileFn = func(ctx context.Context, profileID string, data *profileutils.Supplier) error { return nil } @@ -6497,16 +6126,6 @@ func TestSupplierUseCasesImpl_SupplierEDILogin(t *testing.T) { return nil } - fakeChargeMasterSvc.FindProviderFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BusinessPartnerFilterInput, - sort []*dto.BusinessPartnerSortInput) (*dto.BusinessPartnerConnection, error) { - return &dto.BusinessPartnerConnection{ - Edges: newPayload5, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: false, - }, - }, nil - } - fakeEngagementSvs.PublishKYCNudgeFn = func(ctx context.Context, uid string, payload feedlib.Nudge) (*http.Response, error) { return &http.Response{ Status: "OK", @@ -6593,16 +6212,6 @@ func TestSupplierUseCasesImpl_SupplierEDILogin(t *testing.T) { return nil } - fakeChargeMasterSvc.FindProviderFn = func(ctx context.Context, pagination *firebasetools.PaginationInput, filter []*dto.BusinessPartnerFilterInput, - sort []*dto.BusinessPartnerSortInput) (*dto.BusinessPartnerConnection, error) { - return &dto.BusinessPartnerConnection{ - Edges: newPayload5, - PageInfo: &firebasetools.PageInfo{ - HasNextPage: false, - }, - }, nil - } - fakeEngagementSvs.PublishKYCNudgeFn = func(ctx context.Context, uid string, payload feedlib.Nudge) (*http.Response, error) { return &http.Response{ Status: "OK", diff --git a/pkg/onboarding/usecases/ussd/main_integration_test.go b/pkg/onboarding/usecases/ussd/main_integration_test.go index 79f5ba97..c0408b00 100644 --- a/pkg/onboarding/usecases/ussd/main_integration_test.go +++ b/pkg/onboarding/usecases/ussd/main_integration_test.go @@ -15,7 +15,6 @@ import ( "github.com/savannahghi/onboarding/pkg/onboarding/application/utils" "github.com/savannahghi/onboarding/pkg/onboarding/domain" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/database/fb" - "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/chargemaster" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/edi" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/engagement" "github.com/savannahghi/serverutils" @@ -35,7 +34,6 @@ import ( mockRepo "github.com/savannahghi/onboarding/pkg/onboarding/repository/mock" extMock "github.com/savannahghi/onboarding/pkg/onboarding/application/extension/mock" - chargemasterMock "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/chargemaster/mock" ediMock "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/edi/mock" engagementMock "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/engagement/mock" @@ -97,7 +95,6 @@ func InitializeTestService(ctx context.Context) (*interactor.Interactor, error) ediClient := utils.NewInterServiceClient(ediService, ext) erp := erp.NewAccounting() - chrg := chargemaster.NewChargeMasterUseCasesImpl() hubspotService := hubspot.NewHubSpotService() hubspotfr, err := hubspotRepo.NewHubSpotFirebaseRepository(context.Background(), hubspotService) if err != nil { @@ -122,7 +119,7 @@ func InitializeTestService(ctx context.Context) (*interactor.Interactor, error) pinExt := extension.NewPINExtensionImpl() profile := usecases.NewProfileUseCase(repo, ext, engage, ps, crmExt) - supplier := usecases.NewSupplierUseCases(repo, profile, erp, chrg, engage, mes, ext, ps) + supplier := usecases.NewSupplierUseCases(repo, profile, erp, engage, mes, ext, ps) login := usecases.NewLoginUseCases(repo, profile, ext, pinExt) survey := usecases.NewSurveyUseCases(repo, ext) userpin := usecases.NewUserPinUseCase(repo, profile, ext, pinExt, engage) @@ -133,20 +130,19 @@ func InitializeTestService(ctx context.Context) (*interactor.Interactor, error) aitUssd := ussd.NewUssdUsecases(repo, ext, profile, userpin, su, pinExt, ps, crmExt) return &interactor.Interactor{ - Onboarding: profile, - Signup: su, - Supplier: supplier, - Login: login, - Survey: survey, - UserPIN: userpin, - ERP: erp, - ChargeMaster: chrg, - Engagement: engage, - NHIF: nhif, - PubSub: ps, - SMS: sms, - AITUSSD: aitUssd, - CrmExt: crmExt, + Onboarding: profile, + Signup: su, + Supplier: supplier, + Login: login, + Survey: survey, + UserPIN: userpin, + ERP: erp, + Engagement: engage, + NHIF: nhif, + PubSub: ps, + SMS: sms, + AITUSSD: aitUssd, + CrmExt: crmExt, }, nil } @@ -154,7 +150,6 @@ func InitializeTestService(ctx context.Context) (*interactor.Interactor, error) func InitializeFakeOnboardingInteractor() (*interactor.Interactor, error) { var r repository.OnboardingRepository = &fakeRepo var erpSvc erp.AccountingUsecase = &fakeEPRSvc - var chargemasterSvc chargemaster.ServiceChargeMaster = &fakeChargeMasterSvc var engagementSvc engagement.ServiceEngagement = &fakeEngagementSvs var messagingSvc messaging.ServiceMessaging = &fakeMessagingSvc var ext extension.BaseExtension = &fakeBaseExt @@ -173,7 +168,7 @@ func InitializeFakeOnboardingInteractor() (*interactor.Interactor, error) { login := usecases.NewLoginUseCases(r, profile, ext, pinExt) survey := usecases.NewSurveyUseCases(r, ext) supplier := usecases.NewSupplierUseCases( - r, profile, erpSvc, chargemasterSvc, engagementSvc, messagingSvc, ext, ps, + r, profile, erpSvc, engagementSvc, messagingSvc, ext, ps, ) userpin := usecases.NewUserPinUseCase(r, profile, ext, pinExt, engagementSvc) su := usecases.NewSignUpUseCases(r, profile, userpin, supplier, ext, engagementSvc, ps, ediSvc) @@ -189,7 +184,7 @@ func InitializeFakeOnboardingInteractor() (*interactor.Interactor, error) { i, err := interactor.NewOnboardingInteractor( r, profile, su, supplier, login, - survey, userpin, erpSvc, chargemasterSvc, + survey, userpin, erpSvc, engagementSvc, messagingSvc, nhif, ps, sms, aitUssd, agent, admin, ediSvc, adminSrv, crmExt, role, ) @@ -282,7 +277,6 @@ var fakePinExt extMock.PINExtensionImpl var fakeEngagementSvs engagementMock.FakeServiceEngagement var fakeMessagingSvc messagingMock.FakeServiceMessaging var fakeEPRSvc erpMock.FakeServiceCommonTools -var fakeChargeMasterSvc chargemasterMock.FakeServiceChargeMaster var fakePubSub pubsubmessagingMock.FakeServicePubSub var fakeEDISvc ediMock.FakeServiceEDI var fakeCrm mockCrm.FakeServiceCrm @@ -291,7 +285,6 @@ var fakeCrm mockCrm.FakeServiceCrm func InitializeFakeUSSDTestService() (*interactor.Interactor, error) { var r repository.OnboardingRepository = &fakeRepo var erpSvc erp.AccountingUsecase = &fakeEPRSvc - var chargemasterSvc chargemaster.ServiceChargeMaster = &fakeChargeMasterSvc var engagementSvc engagement.ServiceEngagement = &fakeEngagementSvs var messagingSvc messaging.ServiceMessaging = &fakeMessagingSvc var ext extension.BaseExtension = &fakeBaseExt @@ -311,7 +304,7 @@ func InitializeFakeUSSDTestService() (*interactor.Interactor, error) { login := usecases.NewLoginUseCases(r, profile, ext, pinExt) survey := usecases.NewSurveyUseCases(r, ext) supplier := usecases.NewSupplierUseCases( - r, profile, erpSvc, chargemasterSvc, engagementSvc, messagingSvc, ext, ps, + r, profile, erpSvc, engagementSvc, messagingSvc, ext, ps, ) userpin := usecases.NewUserPinUseCase(r, profile, ext, pinExt, engagementSvc) su := usecases.NewSignUpUseCases(r, profile, userpin, supplier, ext, engagementSvc, ps, ediSvc) @@ -325,7 +318,7 @@ func InitializeFakeUSSDTestService() (*interactor.Interactor, error) { i, err := interactor.NewOnboardingInteractor( r, profile, su, supplier, login, - survey, userpin, erpSvc, chargemasterSvc, + survey, userpin, erpSvc, engagementSvc, messagingSvc, nhif, ps, sms, aitUssd, agent, admin, ediSvc, adminSrv, crmExt, role, ) diff --git a/tests/config_test.go b/tests/config_test.go index 67a224e2..c8005126 100644 --- a/tests/config_test.go +++ b/tests/config_test.go @@ -26,7 +26,6 @@ import ( "github.com/savannahghi/onboarding/pkg/onboarding/application/utils" "github.com/savannahghi/onboarding/pkg/onboarding/domain" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/database/fb" - "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/chargemaster" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/edi" "github.com/savannahghi/onboarding/pkg/onboarding/infrastructure/services/engagement" "github.com/savannahghi/profileutils" @@ -51,9 +50,8 @@ const ( ) const ( - testChargeMasterBranchID = "94294577-6b27-4091-9802-1ce0f2ce4153" - engagementService = "engagement" - ediService = "edi" + engagementService = "engagement" + ediService = "edi" ) /// these are set up once in TestMain and used by all the acceptance tests in @@ -120,7 +118,6 @@ func InitializeTestService(ctx context.Context) (*interactor.Interactor, error) ediClient := utils.NewInterServiceClient(ediService, ext) erp := erp.NewAccounting() - chrg := chargemaster.NewChargeMasterUseCasesImpl() hubspotService := hubspot.NewHubSpotService() hubspotfr, err := hubspotRepo.NewHubSpotFirebaseRepository(context.Background(), hubspotService) if err != nil { @@ -145,7 +142,7 @@ func InitializeTestService(ctx context.Context) (*interactor.Interactor, error) pinExt := extension.NewPINExtensionImpl() profile := usecases.NewProfileUseCase(repo, ext, engage, ps, crmExt) - supplier := usecases.NewSupplierUseCases(repo, profile, erp, chrg, engage, mes, ext, ps) + supplier := usecases.NewSupplierUseCases(repo, profile, erp, engage, mes, ext, ps) login := usecases.NewLoginUseCases(repo, profile, ext, pinExt) survey := usecases.NewSurveyUseCases(repo, ext) userpin := usecases.NewUserPinUseCase(repo, profile, ext, pinExt, engage) @@ -154,18 +151,17 @@ func InitializeTestService(ctx context.Context) (*interactor.Interactor, error) sms := usecases.NewSMSUsecase(repo, ext) return &interactor.Interactor{ - Onboarding: profile, - Signup: su, - Supplier: supplier, - Login: login, - Survey: survey, - UserPIN: userpin, - ERP: erp, - ChargeMaster: chrg, - Engagement: engage, - NHIF: nhif, - PubSub: ps, - SMS: sms, + Onboarding: profile, + Signup: su, + Supplier: supplier, + Login: login, + Survey: survey, + UserPIN: userpin, + ERP: erp, + Engagement: engage, + NHIF: nhif, + PubSub: ps, + SMS: sms, }, nil } diff --git a/tests/supplier_acceptance_test.go b/tests/supplier_acceptance_test.go index 5a19b756..6b5f02c4 100644 --- a/tests/supplier_acceptance_test.go +++ b/tests/supplier_acceptance_test.go @@ -371,413 +371,416 @@ func TestSetUpSupplier_acceptance(t *testing.T) { } } -func TestSuspendSupplier_acceptance(t *testing.T) { - ctx := context.Background() - // create a user and their profile - phoneNumber := interserviceclient.TestUserPhoneNumber - user, err := CreateTestUserByPhone(t, phoneNumber) - if err != nil { - t.Errorf("failed to create a user by phone %v", err) - return - } - - idToken := user.Auth.IDToken - headers, err := CreatedUserGraphQLHeaders(idToken) - if err != nil { - t.Errorf("error in getting headers: %w", err) - return - } - - authToken, err := firebasetools.ValidateBearerToken(ctx, *idToken) - if err != nil { - t.Errorf("invalid token: %w", err) - return - } - authenticatedContext := context.WithValue(ctx, firebasetools.AuthTokenContextKey, authToken) - - err = setPrimaryEmailAddress(authenticatedContext, t, testEmail) - if err != nil { - t.Errorf("failed to set primary email address: %v", err) - return - } - dateOfBirth2 := scalarutils.Date{ - Day: 12, - Year: 1995, - Month: 10, - } - firstName2 := "makmende" - lastName2 := "juha" - - completeUserDetails := profileutils.BioData{ - DateOfBirth: &dateOfBirth2, - FirstName: &firstName2, - LastName: &lastName2, - } - partnerName := "practitioner" - partnerType := profileutils.PartnerTypePractitioner - - _, err = addPartnerType(authenticatedContext, t, &partnerName, partnerType) - if err != nil { - t.Errorf("failed to add partnerType: %v", err) - return - } - account, err := setUpSupplier(authenticatedContext, t, profileutils.AccountTypeIndividual) - if err != nil { - t.Errorf("failed to setup supplier: %v", err) - return - } - log.Printf("the account type for this supplier is %v:", account.AccountType) - err = updateBioData(authenticatedContext, t, completeUserDetails) - if err != nil { - t.Errorf("failed to update biodata: %v", err) - return - } - suspensionReason := ` - "This email is to inform you that as a result of your actions on April 12th, 2021, you have been issued a suspension for 1 week (7 days)" - ` - - graphQLURL := fmt.Sprintf("%s/%s", baseURL, "graphql") - - graphqlMutation := `mutation suspendSupplier($suspensionReason: String){ - suspendSupplier(suspensionReason:$suspensionReason) - } - ` - - type args struct { - query map[string]interface{} - } - - tests := []struct { - name string - args args - wantStatus int - wantErr bool - }{ - { - name: "valid - Suspend existing supplier", - args: args{ - query: map[string]interface{}{ - "query": graphqlMutation, - "variables": map[string]interface{}{ - "suspensionReason": suspensionReason, - }, - }, - }, - wantStatus: http.StatusOK, - wantErr: false, - }, - { - name: "invalid - Suspend supplier using an invalid payload", - args: args{ - query: map[string]interface{}{ - "query": "invalid mutation", - "variables": map[string]interface{}{ - "suspensionReason": suspensionReason, - }, - }, - }, - wantStatus: http.StatusUnprocessableEntity, - wantErr: true, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - body, err := mapToJSONReader(tt.args.query) - - if err != nil { - t.Errorf("unable to get GQL JSON io Reader: %s", err) - return - } - - r, err := http.NewRequest( - http.MethodPost, - graphQLURL, - body, - ) - - if err != nil { - t.Errorf("unable to compose request: %s", err) - return - } - - if r == nil { - t.Errorf("nil request") - return - } - - for k, v := range headers { - r.Header.Add(k, v) - } - client := http.Client{ - Timeout: time.Second * testHTTPClientTimeout, - } - resp, err := client.Do(r) - if err != nil { - t.Errorf("request error: %s", err) - return - } - - dataResponse, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Errorf("can't read request body: %s", err) - return - } - if dataResponse == nil { - t.Errorf("nil response data") - return - } - - data := map[string]interface{}{} - err = json.Unmarshal(dataResponse, &data) - if err != nil { - t.Errorf("bad data returned") - return - } - - if tt.wantErr { - errMsg, ok := data["errors"] - if !ok { - t.Errorf("GraphQL error: %s", errMsg) - return - } - } - - if !tt.wantErr { - _, ok := data["errors"] - if ok { - t.Errorf("error not expected") - return - } - } - if tt.wantStatus != resp.StatusCode { - b, _ := httputil.DumpResponse(resp, true) - t.Errorf("Bad status response returned; %v ", string(b)) - return - } - }) - } - // perform tear down; remove user - _, err = RemoveTestUserByPhone(t, interserviceclient.TestUserPhoneNumber) - if err != nil { - t.Errorf("unable to remove test user: %s", err) - } -} - -func TestSupplierEDILogin(t *testing.T) { - // create a user and their profile - phoneNumber := interserviceclient.TestUserPhoneNumber - user, err := CreateTestUserByPhone(t, phoneNumber) - if err != nil { - t.Errorf("failed to create a user by phone %v", err) - return - } - - idToken := user.Auth.IDToken - headers, err := CreatedUserGraphQLHeaders(idToken) - if err != nil { - t.Errorf("error in getting headers: %w", err) - return - } - - graphQLURL := fmt.Sprintf("%s/%s", baseURL, "graphql") - - sladeCode := "1" - - if err != nil { - t.Errorf("error getting headers: %w", err) - return - } - - graphQLMutationPayload := ` - mutation supplierEDILogin($username: String!, $password: String!, $sladeCode: String!) { - supplierEDILogin(username: $username, password:$password, sladeCode: $sladeCode) { - supplier{ - id - profileID - } - branches{ - edges{ - node{ - id - } - } - } - } - }` - type args struct { - query map[string]interface{} - } - - tests := []struct { - name string - args args - wantStatus int - wantErr bool - }{ - { - name: "valid edi portal login mutation request", - args: args{ - query: map[string]interface{}{ - "query": graphQLMutationPayload, - "variables": map[string]interface{}{ - "username": TestEDIPortalUsername, - "password": TestEDIPortalPassword, - "sladeCode": TestSladeCode, - }, - }, - }, - wantStatus: http.StatusOK, - wantErr: false, - }, - { - name: "invalid edi portal login mutation request", - args: args{ - query: map[string]interface{}{ - "query": graphQLMutationPayload, - "variables": map[string]interface{}{ - "username": "avenue-4190@healthcloud.co.ke", - "password": "test provider", - "sladeCode": "WRONG SLADE CODE", - }, - }, - }, - wantStatus: http.StatusOK, - wantErr: true, - }, - { - name: "valid edi core login mutation request", - args: args{ - query: map[string]interface{}{ - "query": graphQLMutationPayload, - "variables": map[string]interface{}{ - "username": "bewell@slade360.co.ke", - "password": "please change me", - "sladeCode": sladeCode, - }, - }, - }, - wantStatus: http.StatusOK, - wantErr: true, // TODO: This test is unpredictable, https://accounts-core.release.slade360.co.ke/ - // authserver is not always up. Usually shut down every weekend and it is not guaranteed weekday it - // is up unless turned on manually - }, - { - name: "invalid edi core login mutation request", - args: args{ - query: map[string]interface{}{ - "query": graphQLMutationPayload, - "variables": map[string]interface{}{ - "username": "bewell@slade360.co.ke", - "password": "please change me", - "sladeCode": "BOGUS SLADE CODE", - }, - }, - }, - wantStatus: http.StatusOK, - wantErr: true, - }, - { - name: "invalid edi core login mutation request", - args: args{ - query: map[string]interface{}{ - "query": graphQLMutationPayload, - "variables": map[string]interface{}{ - "username": "bewell@slade360.co.ke", - "password": "please change me", - "sladeCode": "BOGUS SLADE CODE", - }, - }, - }, - wantStatus: http.StatusOK, - wantErr: true, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - body, err := mapToJSONReader(tt.args.query) - - if err != nil { - t.Errorf("unable to get GQL JSON io Reader: %s", err) - return - } - - r, err := http.NewRequest( - http.MethodPost, - graphQLURL, - body, - ) - - if err != nil { - t.Errorf("unable to compose request: %s", err) - return - } - - if r == nil { - t.Errorf("nil request") - return - } - - for k, v := range headers { - r.Header.Add(k, v) - } - client := http.Client{ - Timeout: time.Second * testHTTPClientTimeout, - } - resp, err := client.Do(r) - if err != nil { - t.Errorf("request error: %s", err) - return - } - - dataResponse, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Errorf("can't read request body: %s", err) - return - } - if dataResponse == nil { - t.Errorf("nil response data") - return - } - - data := map[string]interface{}{} - err = json.Unmarshal(dataResponse, &data) - if err != nil { - t.Errorf("bad data returned") - return - } - if tt.wantErr { - errMsg, ok := data["errors"] - if !ok { - t.Errorf("GraphQL error: %s", errMsg) - return - } - } - - if !tt.wantErr { - _, ok := data["errors"] - if ok { - logrus.Errorf("error not expected") - t.Errorf("error not expected") - return - } - } - - if tt.wantStatus != resp.StatusCode { - b, _ := httputil.DumpResponse(resp, true) - t.Errorf("Bad status response returned; %v ", string(b)) - return - } - }) - } - - // perform tear down; remove user - _, err = RemoveTestUserByPhone(t, interserviceclient.TestUserPhoneNumber) - if err != nil { - t.Errorf("unable to remove test user: %s", err) - } -} +// TODO: restore +// func TestSuspendSupplier_acceptance(t *testing.T) { +// ctx := context.Background() +// // create a user and their profile +// phoneNumber := interserviceclient.TestUserPhoneNumber +// user, err := CreateTestUserByPhone(t, phoneNumber) +// if err != nil { +// t.Errorf("failed to create a user by phone %v", err) +// return +// } + +// idToken := user.Auth.IDToken +// headers, err := CreatedUserGraphQLHeaders(idToken) +// if err != nil { +// t.Errorf("error in getting headers: %w", err) +// return +// } + +// authToken, err := firebasetools.ValidateBearerToken(ctx, *idToken) +// if err != nil { +// t.Errorf("invalid token: %w", err) +// return +// } +// authenticatedContext := context.WithValue(ctx, firebasetools.AuthTokenContextKey, authToken) + +// err = setPrimaryEmailAddress(authenticatedContext, t, testEmail) +// if err != nil { +// t.Errorf("failed to set primary email address: %v", err) +// return +// } +// dateOfBirth2 := scalarutils.Date{ +// Day: 12, +// Year: 1995, +// Month: 10, +// } +// firstName2 := "makmende" +// lastName2 := "juha" + +// completeUserDetails := profileutils.BioData{ +// DateOfBirth: &dateOfBirth2, +// FirstName: &firstName2, +// LastName: &lastName2, +// } +// partnerName := "practitioner" +// partnerType := profileutils.PartnerTypePractitioner + +// _, err = addPartnerType(authenticatedContext, t, &partnerName, partnerType) +// if err != nil { +// t.Errorf("failed to add partnerType: %v", err) +// return +// } +// account, err := setUpSupplier(authenticatedContext, t, profileutils.AccountTypeIndividual) +// if err != nil { +// t.Errorf("failed to setup supplier: %v", err) +// return +// } +// log.Printf("the account type for this supplier is %v:", account.AccountType) +// err = updateBioData(authenticatedContext, t, completeUserDetails) +// if err != nil { +// t.Errorf("failed to update biodata: %v", err) +// return +// } +// suspensionReason := ` +// "This email is to inform you that as a result of your actions on April 12th, 2021, you have been issued a suspension for 1 week (7 days)" +// ` + +// graphQLURL := fmt.Sprintf("%s/%s", baseURL, "graphql") + +// graphqlMutation := `mutation suspendSupplier($suspensionReason: String){ +// suspendSupplier(suspensionReason:$suspensionReason) +// } +// ` + +// type args struct { +// query map[string]interface{} +// } + +// tests := []struct { +// name string +// args args +// wantStatus int +// wantErr bool +// }{ +// { +// name: "valid - Suspend existing supplier", +// args: args{ +// query: map[string]interface{}{ +// "query": graphqlMutation, +// "variables": map[string]interface{}{ +// "suspensionReason": suspensionReason, +// }, +// }, +// }, +// wantStatus: http.StatusOK, +// wantErr: false, +// }, +// { +// name: "invalid - Suspend supplier using an invalid payload", +// args: args{ +// query: map[string]interface{}{ +// "query": "invalid mutation", +// "variables": map[string]interface{}{ +// "suspensionReason": suspensionReason, +// }, +// }, +// }, +// wantStatus: http.StatusUnprocessableEntity, +// wantErr: true, +// }, +// } + +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// body, err := mapToJSONReader(tt.args.query) + +// if err != nil { +// t.Errorf("unable to get GQL JSON io Reader: %s", err) +// return +// } + +// r, err := http.NewRequest( +// http.MethodPost, +// graphQLURL, +// body, +// ) + +// if err != nil { +// t.Errorf("unable to compose request: %s", err) +// return +// } + +// if r == nil { +// t.Errorf("nil request") +// return +// } + +// for k, v := range headers { +// r.Header.Add(k, v) +// } +// client := http.Client{ +// Timeout: time.Second * testHTTPClientTimeout, +// } +// resp, err := client.Do(r) +// if err != nil { +// t.Errorf("request error: %s", err) +// return +// } + +// dataResponse, err := ioutil.ReadAll(resp.Body) +// if err != nil { +// t.Errorf("can't read request body: %s", err) +// return +// } +// if dataResponse == nil { +// t.Errorf("nil response data") +// return +// } + +// data := map[string]interface{}{} +// err = json.Unmarshal(dataResponse, &data) +// if err != nil { +// t.Errorf("bad data returned") +// return +// } + +// if tt.wantErr { +// errMsg, ok := data["errors"] +// if !ok { +// t.Errorf("GraphQL error: %s", errMsg) +// return +// } +// } + +// if !tt.wantErr { +// _, ok := data["errors"] +// if ok { +// t.Errorf("error not expected") +// return +// } +// } +// if tt.wantStatus != resp.StatusCode { +// b, _ := httputil.DumpResponse(resp, true) +// t.Errorf("Bad status response returned; %v ", string(b)) +// return +// } +// }) +// } +// // perform tear down; remove user +// _, err = RemoveTestUserByPhone(t, interserviceclient.TestUserPhoneNumber) +// if err != nil { +// t.Errorf("unable to remove test user: %s", err) +// } +// } + +// TODO: restore +// func TestSupplierEDILogin(t *testing.T) { +// // create a user and their profile +// phoneNumber := interserviceclient.TestUserPhoneNumber +// user, err := CreateTestUserByPhone(t, phoneNumber) +// if err != nil { +// t.Errorf("failed to create a user by phone %v", err) +// return +// } + +// idToken := user.Auth.IDToken +// headers, err := CreatedUserGraphQLHeaders(idToken) +// if err != nil { +// t.Errorf("error in getting headers: %w", err) +// return +// } + +// graphQLURL := fmt.Sprintf("%s/%s", baseURL, "graphql") + +// sladeCode := "1" + +// if err != nil { +// t.Errorf("error getting headers: %w", err) +// return +// } + +// graphQLMutationPayload := ` +// mutation supplierEDILogin($username: String!, $password: String!, $sladeCode: String!) { +// supplierEDILogin(username: $username, password:$password, sladeCode: $sladeCode) { +// supplier{ +// id +// profileID +// } +// branches{ +// edges{ +// node{ +// id +// } +// } +// } +// } +// }` +// type args struct { +// query map[string]interface{} +// } + +// tests := []struct { +// name string +// args args +// wantStatus int +// wantErr bool +// }{ +// // TODO: refactor after moving internal code +// // { +// // name: "valid edi portal login mutation request", +// // args: args{ +// // query: map[string]interface{}{ +// // "query": graphQLMutationPayload, +// // "variables": map[string]interface{}{ +// // "username": TestEDIPortalUsername, +// // "password": TestEDIPortalPassword, +// // "sladeCode": TestSladeCode, +// // }, +// // }, +// // }, +// // wantStatus: http.StatusOK, +// // wantErr: false, +// // }, +// { +// name: "invalid edi portal login mutation request", +// args: args{ +// query: map[string]interface{}{ +// "query": graphQLMutationPayload, +// "variables": map[string]interface{}{ +// "username": "avenue-4190@healthcloud.co.ke", +// "password": "test provider", +// "sladeCode": "WRONG SLADE CODE", +// }, +// }, +// }, +// wantStatus: http.StatusOK, +// wantErr: true, +// }, +// { +// name: "valid edi core login mutation request", +// args: args{ +// query: map[string]interface{}{ +// "query": graphQLMutationPayload, +// "variables": map[string]interface{}{ +// "username": "bewell@slade360.co.ke", +// "password": "please change me", +// "sladeCode": sladeCode, +// }, +// }, +// }, +// wantStatus: http.StatusOK, +// wantErr: true, // TODO: This test is unpredictable, https://accounts-core.release.slade360.co.ke/ +// // authserver is not always up. Usually shut down every weekend and it is not guaranteed weekday it +// // is up unless turned on manually +// }, +// { +// name: "invalid edi core login mutation request", +// args: args{ +// query: map[string]interface{}{ +// "query": graphQLMutationPayload, +// "variables": map[string]interface{}{ +// "username": "bewell@slade360.co.ke", +// "password": "please change me", +// "sladeCode": "BOGUS SLADE CODE", +// }, +// }, +// }, +// wantStatus: http.StatusOK, +// wantErr: true, +// }, +// { +// name: "invalid edi core login mutation request", +// args: args{ +// query: map[string]interface{}{ +// "query": graphQLMutationPayload, +// "variables": map[string]interface{}{ +// "username": "bewell@slade360.co.ke", +// "password": "please change me", +// "sladeCode": "BOGUS SLADE CODE", +// }, +// }, +// }, +// wantStatus: http.StatusOK, +// wantErr: true, +// }, +// } + +// for _, tt := range tests { +// t.Run(tt.name, func(t *testing.T) { +// body, err := mapToJSONReader(tt.args.query) + +// if err != nil { +// t.Errorf("unable to get GQL JSON io Reader: %s", err) +// return +// } + +// r, err := http.NewRequest( +// http.MethodPost, +// graphQLURL, +// body, +// ) + +// if err != nil { +// t.Errorf("unable to compose request: %s", err) +// return +// } + +// if r == nil { +// t.Errorf("nil request") +// return +// } + +// for k, v := range headers { +// r.Header.Add(k, v) +// } +// client := http.Client{ +// Timeout: time.Second * testHTTPClientTimeout, +// } +// resp, err := client.Do(r) +// if err != nil { +// t.Errorf("request error: %s", err) +// return +// } + +// dataResponse, err := ioutil.ReadAll(resp.Body) +// if err != nil { +// t.Errorf("can't read request body: %s", err) +// return +// } +// if dataResponse == nil { +// t.Errorf("nil response data") +// return +// } + +// data := map[string]interface{}{} +// err = json.Unmarshal(dataResponse, &data) +// if err != nil { +// t.Errorf("bad data returned") +// return +// } +// if tt.wantErr { +// errMsg, ok := data["errors"] +// if !ok { +// t.Errorf("GraphQL error: %s", errMsg) +// return +// } +// } + +// if !tt.wantErr { +// _, ok := data["errors"] +// if ok { +// logrus.Errorf("error not expected") +// t.Errorf("error not expected") +// return +// } +// } + +// if tt.wantStatus != resp.StatusCode { +// b, _ := httputil.DumpResponse(resp, true) +// t.Errorf("Bad status response returned; %v ", string(b)) +// return +// } +// }) +// } + +// // perform tear down; remove user +// _, err = RemoveTestUserByPhone(t, interserviceclient.TestUserPhoneNumber) +// if err != nil { +// t.Errorf("unable to remove test user: %s", err) +// } +// } func TestAddIndividualPractitionerKYC(t *testing.T) { @@ -2511,149 +2514,6 @@ func TestFetchKYCProcessingRequests(t *testing.T) { } } -func TestFetchSupplierAllowedLocations(t *testing.T) { - // create a user and their profile - phoneNumber := interserviceclient.TestUserPhoneNumber - user, err := CreateTestUserByPhone(t, phoneNumber) - if err != nil { - t.Errorf("failed to create a user by phone %v", err) - return - } - - idToken := user.Auth.IDToken - headers, err := CreatedUserGraphQLHeaders(idToken) - if err != nil { - t.Errorf("error in getting headers: %w", err) - return - } - - graphQLURL := fmt.Sprintf("%s/%s", baseURL, "graphql") - graphqlQueryPayload := ` - query fetchSupplierAllowedLocations{ - fetchSupplierAllowedLocations{ - edges { - cursor - node { - id - name - organizationSladeCode - branchSladeCode - } - } - pageInfo { - hasNextPage - hasPreviousPage - startCursor - endCursor - } - } - } - ` - type args struct { - query map[string]interface{} - } - - tests := []struct { - name string - args args - wantStatus int - wantErr bool - }{ - { - name: "Happy Case - Successfully Fetch supplier allowed locations", - args: args{ - query: map[string]interface{}{ - "query": graphqlQueryPayload, - }, - }, - wantStatus: http.StatusOK, - wantErr: false, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - body, err := mapToJSONReader(tt.args.query) - - if err != nil { - t.Errorf("unable to get GQL JSON io Reader: %s", err) - return - } - - r, err := http.NewRequest( - http.MethodPost, - graphQLURL, - body, - ) - - if err != nil { - t.Errorf("unable to compose request: %s", err) - return - } - - if r == nil { - t.Errorf("nil request") - return - } - - for k, v := range headers { - r.Header.Add(k, v) - } - client := http.Client{ - Timeout: time.Second * testHTTPClientTimeout, - } - resp, err := client.Do(r) - if err != nil { - t.Errorf("request error: %s", err) - return - } - - dataResponse, err := ioutil.ReadAll(resp.Body) - if err != nil { - t.Errorf("can't read request body: %s", err) - return - } - if dataResponse == nil { - t.Errorf("nil response data") - return - } - - data := map[string]interface{}{} - err = json.Unmarshal(dataResponse, &data) - if err != nil { - t.Errorf("bad data returned") - return - } - - if tt.wantErr { - errMsg, ok := data["errors"] - if !ok { - t.Errorf("GraphQL error: %s", errMsg) - return - } - } - - if !tt.wantErr { - _, ok := data["errors"] - if ok { - t.Errorf("error not expected") - return - } - } - if tt.wantStatus != resp.StatusCode { - b, _ := httputil.DumpResponse(resp, true) - t.Errorf("Bad status response returned; %v ", string(b)) - return - } - }) - } - // perform tear down; remove user - _, err = RemoveTestUserByPhone(t, interserviceclient.TestUserPhoneNumber) - if err != nil { - t.Errorf("unable to remove test user: %s", err) - } -} - func TestSupplierSetDefaultLocation_acceptance(t *testing.T) { ctx := context.Background() s, err := InitializeTestService(ctx) @@ -2748,19 +2608,6 @@ func TestSupplierSetDefaultLocation_acceptance(t *testing.T) { wantStatus: http.StatusOK, wantErr: true, }, - { - name: "Happy Case - Setup supplier location with a valid locationID", - args: args{ - query: map[string]interface{}{ - "query": graphqlMutation, - "variables": map[string]interface{}{ - "input": testChargeMasterBranchID, - }, - }, - }, - wantStatus: http.StatusOK, - wantErr: true, // TODO: Check on `EDI` - }, } for _, tt := range tests {