From 6ceb3ea0d4bd04c98a0cf251ab300040e8d0e975 Mon Sep 17 00:00:00 2001 From: Dragomir Todorov Date: Wed, 31 Oct 2018 20:31:08 +0200 Subject: [PATCH 1/2] =?UTF-8?q?NY-4531:=20Added=20=D0=B0=20couple=20of=20u?= =?UTF-8?q?nit=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AccountRepositoryAdditionalImpl.java | 21 +- .../account/services/AccountServiceImpl.java | 201 ++++++++++-------- .../account/services/AccountServiceTests.java | 57 ++++- .../java/biz/nynja/account/utils/Util.java | 2 + 4 files changed, 169 insertions(+), 112 deletions(-) diff --git a/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java b/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java index 0e0976f..d9765ca 100644 --- a/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java +++ b/src/main/java/biz/nynja/account/repositories/AccountRepositoryAdditionalImpl.java @@ -4,7 +4,6 @@ package biz.nynja.account.repositories; import java.time.Instant; -import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -28,9 +27,7 @@ import com.datastax.driver.core.Session; import biz.nynja.account.components.AccountServiceHelper; import biz.nynja.account.components.StatementsPool; -import biz.nynja.account.grpc.AccessStatus; import biz.nynja.account.grpc.CompletePendingAccountCreationRequest; -import biz.nynja.account.grpc.Role; import biz.nynja.account.grpc.UpdateAccountRequest; import biz.nynja.account.grpc.UpdateProfileRequest; import biz.nynja.account.models.Account; @@ -141,11 +138,8 @@ public class AccountRepositoryAdditionalImpl implements AccountRepositoryAdditio newAccount.setUsername(request.getUsername()); newAccount.setCreationTimestamp(creationTimestamp); newAccount.setQrCode(request.getQrCode()); - newAccount.setRoles((request.getRolesList() == null || request.getRolesList().isEmpty()) - ? new HashSet(Arrays.asList(Role.USER.toString())) - : request.getRolesList().stream().map(n -> n.toString()).collect(Collectors.toSet())); - newAccount.setAccessStatus(request.getAccessStatus() == null ? AccessStatus.ENABLED.toString() - : request.getAccessStatus().toString()); + newAccount.setRoles(request.getRolesList().stream().map(n -> n.toString()).collect(Collectors.toSet())); + newAccount.setAccessStatus(request.getAccessStatus().toString()); batchOps.insert(newAccount); } @@ -581,13 +575,13 @@ public class AccountRepositoryAdditionalImpl implements AccountRepositoryAdditio ResultSet rs = null; // Remove authentication provider form list of authentication providers in profile - BoundStatement deleteAuthProviderStatement= statementsPool.deleteAuthenicationProviderFromProfile(profile.getProfileId(), - authProvider); + BoundStatement deleteAuthProviderStatement = statementsPool + .deleteAuthenicationProviderFromProfile(profile.getProfileId(), authProvider); batch.add(deleteAuthProviderStatement); // Remove record for profile by this authentication provider - BoundStatement deleteProfileStatement = statementsPool.deleteProfileByAuthenticationProvider(authProvider.getValue(), - authProvider.getType()); + BoundStatement deleteProfileStatement = statementsPool + .deleteProfileByAuthenticationProvider(authProvider.getValue(), authProvider.getType()); batch.add(deleteProfileStatement); // Check if there is an account, created using this authentication provider @@ -596,7 +590,8 @@ public class AccountRepositoryAdditionalImpl implements AccountRepositoryAdditio // Delete authentication provider from account if (account != null) { - BoundStatement deleteCreationProviderStatement = statementsPool.deleteCreationProviderFromAccount(account.getAccountId()); + BoundStatement deleteCreationProviderStatement = statementsPool + .deleteCreationProviderFromAccount(account.getAccountId()); batch.add(deleteCreationProviderStatement); } diff --git a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java index 4c1f49b..1909e98 100644 --- a/src/main/java/biz/nynja/account/services/AccountServiceImpl.java +++ b/src/main/java/biz/nynja/account/services/AccountServiceImpl.java @@ -3,28 +3,58 @@ */ package biz.nynja.account.services; +import static biz.nynja.account.grpc.ErrorResponse.newBuilder; + +import java.time.Instant; +import java.util.Optional; +import java.util.UUID; + +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.lognet.springboot.grpc.GRpcService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import biz.nynja.account.components.PhoneNumberNormalizer; import biz.nynja.account.components.Validator; -import biz.nynja.account.grpc.*; +import biz.nynja.account.grpc.AccountByAccountIdRequest; +import biz.nynja.account.grpc.AccountByAuthenticationProviderRequest; +import biz.nynja.account.grpc.AccountResponse; +import biz.nynja.account.grpc.AccountServiceGrpc; +import biz.nynja.account.grpc.AccountsByProfileIdRequest; +import biz.nynja.account.grpc.AccountsResponse; +import biz.nynja.account.grpc.AddAuthenticationProviderRequest; +import biz.nynja.account.grpc.AddContactInfoRequest; +import biz.nynja.account.grpc.AuthProviderDetails; +import biz.nynja.account.grpc.AuthenticationType; +import biz.nynja.account.grpc.CompletePendingAccountCreationRequest; +import biz.nynja.account.grpc.ContactType; +import biz.nynja.account.grpc.CreateAccountRequest; +import biz.nynja.account.grpc.CreatePendingAccountRequest; +import biz.nynja.account.grpc.CreatePendingAccountResponse; +import biz.nynja.account.grpc.DeleteAccountRequest; +import biz.nynja.account.grpc.DeleteAuthenticationProviderRequest; +import biz.nynja.account.grpc.DeleteContactInfoRequest; +import biz.nynja.account.grpc.DeleteProfileRequest; +import biz.nynja.account.grpc.EditContactInfoRequest; +import biz.nynja.account.grpc.ErrorResponse.Cause; +import biz.nynja.account.grpc.ProfileResponse; +import biz.nynja.account.grpc.Role; +import biz.nynja.account.grpc.StatusResponse; +import biz.nynja.account.grpc.UpdateAccountRequest; +import biz.nynja.account.grpc.UpdateProfileRequest; import biz.nynja.account.models.Account; -import biz.nynja.account.models.*; +import biz.nynja.account.models.AuthenticationProvider; +import biz.nynja.account.models.ContactInfo; +import biz.nynja.account.models.PendingAccount; +import biz.nynja.account.models.PendingAccountByAuthenticationProvider; +import biz.nynja.account.models.Profile; +import biz.nynja.account.models.ProfileByAuthenticationProvider; import biz.nynja.account.repositories.AccountRepositoryAdditional; import biz.nynja.account.repositories.PendingAccountRepository; import biz.nynja.account.repositories.ProfileByAuthenticationProviderRepository; import biz.nynja.account.repositories.ProfileRepository; import biz.nynja.account.services.decomposition.AccountsProvider; import io.grpc.stub.StreamObserver; -import org.apache.commons.lang3.tuple.ImmutablePair; -import org.lognet.springboot.grpc.GRpcService; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.time.Instant; -import java.util.Optional; -import java.util.UUID; - -import static biz.nynja.account.grpc.ErrorResponse.Cause; -import static biz.nynja.account.grpc.ErrorResponse.newBuilder; /** * gRPC Account service implementation.
@@ -46,12 +76,9 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas private final PhoneNumberNormalizer phoneNumberNormalizer; public AccountServiceImpl(PendingAccountRepository pendingAccountRepository, - AccountRepositoryAdditional accountRepositoryAdditional, - ProfileRepository profileRepository, - ProfileByAuthenticationProviderRepository profileByAutheticationProviderRepository, - Validator validator, - AccountsProvider accountsProvider, - PhoneNumberNormalizer phoneNumberNormalizer) { + AccountRepositoryAdditional accountRepositoryAdditional, ProfileRepository profileRepository, + ProfileByAuthenticationProviderRepository profileByAutheticationProviderRepository, Validator validator, + AccountsProvider accountsProvider, PhoneNumberNormalizer phoneNumberNormalizer) { this.pendingAccountRepository = pendingAccountRepository; this.accountRepositoryAdditional = accountRepositoryAdditional; this.profileRepository = profileRepository; @@ -70,7 +97,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas @Override public void getAccountByAuthenticationProvider(AccountByAuthenticationProviderRequest request, - StreamObserver responseObserver) { + StreamObserver responseObserver) { logger.info("Getting account by authentication provider: {}", request); if (request.getAuthenticationTypeValue() == 0) { @@ -90,12 +117,11 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas responseObserver.onCompleted(); } - } @Override public void getAllAccountsByProfileId(AccountsByProfileIdRequest request, - StreamObserver responseObserver) { + StreamObserver responseObserver) { logger.info("Getting accounts by profile id: {}", request.getProfileId()); if ((request.getProfileId() == null) || (request.getProfileId().isEmpty())) { @@ -119,7 +145,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas @Override public void getAccountByAccountId(AccountByAccountIdRequest request, - StreamObserver responseObserver) { + StreamObserver responseObserver) { logger.info("Getting accounts by account id: {}", request.getAccountId()); if ((request.getAccountId() == null) || (request.getAccountId().isEmpty())) { @@ -151,8 +177,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas Cause cause = validator.validateCreatePendingAccountRequest(request); if (cause != null) { - responseObserver.onNext(CreatePendingAccountResponse.newBuilder() - .setError(newBuilder().setCause(cause)).build()); + responseObserver + .onNext(CreatePendingAccountResponse.newBuilder().setError(newBuilder().setCause(cause)).build()); responseObserver.onCompleted(); return; } @@ -161,7 +187,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas // Get the normalized phone number from libphone CreatePendingAccountRequest newRequest = CreatePendingAccountRequest.newBuilder() .setAuthenticationType(request.getAuthenticationType()) - .setAuthenticationProvider(validator.getNormalizedPhoneNumber(request.getAuthenticationProvider())).build(); + .setAuthenticationProvider(validator.getNormalizedPhoneNumber(request.getAuthenticationProvider())) + .build(); request = newRequest; } @@ -225,25 +252,28 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas Cause cause = validator.validateCompletePendingAccountCreationRequest(request); if (cause != null) { - responseObserver - .onNext(AccountResponse.newBuilder().setError(newBuilder().setCause(cause)).build()); + responseObserver.onNext(AccountResponse.newBuilder().setError(newBuilder().setCause(cause)).build()); responseObserver.onCompleted(); return; } if (request.getUsername() != null && !request.getUsername().trim().isEmpty() && accountRepositoryAdditional .foundExistingNotOwnUsername(UUID.fromString(request.getAccountId()), request.getUsername())) { - responseObserver.onNext(AccountResponse.newBuilder() - .setError(newBuilder().setCause(Cause.USERNAME_ALREADY_USED)).build()); + responseObserver.onNext( + AccountResponse.newBuilder().setError(newBuilder().setCause(Cause.USERNAME_ALREADY_USED)).build()); responseObserver.onCompleted(); return; } + if (request.getRolesList() == null || request.getRolesList().isEmpty()) { + request = CompletePendingAccountCreationRequest.newBuilder(request).addRoles(Role.USER).build(); + } + Account createdAccount = accountRepositoryAdditional.completePendingAccountCreation(request); if (createdAccount == null) { - responseObserver.onNext(AccountResponse.newBuilder() - .setError(newBuilder().setCause(Cause.ERROR_CREATING_ACCOUNT)).build()); + responseObserver.onNext( + AccountResponse.newBuilder().setError(newBuilder().setCause(Cause.ERROR_CREATING_ACCOUNT)).build()); responseObserver.onCompleted(); return; } else { @@ -264,16 +294,15 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas logger.debug("Updating profile...: {}", request); if ((request.getProfileId() == null) || (request.getProfileId().isEmpty())) { - responseObserver.onNext(ProfileResponse.newBuilder() - .setError(newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build()); + responseObserver.onNext( + ProfileResponse.newBuilder().setError(newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build()); responseObserver.onCompleted(); return; } Cause cause = validator.validateUpdateProfileRequest(request); if (cause != null) { - responseObserver.onNext(ProfileResponse.newBuilder() - .setError(newBuilder().setCause(cause)).build()); + responseObserver.onNext(ProfileResponse.newBuilder().setError(newBuilder().setCause(cause)).build()); responseObserver.onCompleted(); return; } @@ -281,15 +310,14 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas Profile updatedProfile = accountRepositoryAdditional.updateProfile(request); if (updatedProfile == null) { - responseObserver.onNext(ProfileResponse.newBuilder() - .setError(newBuilder().setCause(Cause.ERROR_UPDATING_PROFILE)).build()); + responseObserver.onNext( + ProfileResponse.newBuilder().setError(newBuilder().setCause(Cause.ERROR_UPDATING_PROFILE)).build()); responseObserver.onCompleted(); return; } logger.debug("Profile \"{}\" updated in the DB", updatedProfile.toString()); logger.debug("Profile: \"{}\" updated successfully.", updatedProfile); - ProfileResponse response = ProfileResponse.newBuilder().setProfileDetails (updatedProfile.toProto()) - .build(); + ProfileResponse response = ProfileResponse.newBuilder().setProfileDetails(updatedProfile.toProto()).build(); responseObserver.onNext(response); responseObserver.onCompleted(); logger.info("Profile updated successfully."); @@ -302,23 +330,23 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas logger.debug("Updating account...: {}", request); if ((request.getAccountId() == null) || (request.getAccountId().isEmpty())) { - responseObserver.onNext(AccountResponse.newBuilder() - .setError(newBuilder().setCause(Cause.MISSING_ACCOUNT_ID)).build()); + responseObserver.onNext( + AccountResponse.newBuilder().setError(newBuilder().setCause(Cause.MISSING_ACCOUNT_ID)).build()); responseObserver.onCompleted(); return; } Cause validationCause = validator.validateUpdateAccountRequest(request); if (validationCause != null) { - responseObserver.onNext(AccountResponse.newBuilder() - .setError(newBuilder().setCause(validationCause)).build()); + responseObserver + .onNext(AccountResponse.newBuilder().setError(newBuilder().setCause(validationCause)).build()); responseObserver.onCompleted(); return; } if (request.getUsername() != null && !request.getUsername().trim().isEmpty() && accountRepositoryAdditional .foundExistingNotOwnUsername(UUID.fromString(request.getAccountId()), request.getUsername())) { - responseObserver.onNext(AccountResponse.newBuilder() - .setError(newBuilder().setCause(Cause.USERNAME_ALREADY_USED)).build()); + responseObserver.onNext( + AccountResponse.newBuilder().setError(newBuilder().setCause(Cause.USERNAME_ALREADY_USED)).build()); responseObserver.onCompleted(); return; } @@ -326,8 +354,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas Account updatedAccount = accountRepositoryAdditional.updateAccount(request); if (updatedAccount == null) { - responseObserver.onNext(AccountResponse.newBuilder() - .setError(newBuilder().setCause(Cause.ERROR_UPDATING_ACCOUNT)).build()); + responseObserver.onNext( + AccountResponse.newBuilder().setError(newBuilder().setCause(Cause.ERROR_UPDATING_ACCOUNT)).build()); responseObserver.onCompleted(); return; } @@ -345,8 +373,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas logger.debug("Deleting account...: {}", request); if ((request.getAccountId() == null) || (request.getAccountId().isEmpty())) { - responseObserver.onNext(StatusResponse.newBuilder() - .setError(newBuilder().setCause(Cause.MISSING_ACCOUNT_ID)).build()); + responseObserver.onNext( + StatusResponse.newBuilder().setError(newBuilder().setCause(Cause.MISSING_ACCOUNT_ID)).build()); responseObserver.onCompleted(); return; } @@ -358,8 +386,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas return; } - responseObserver.onNext(StatusResponse.newBuilder() - .setError(newBuilder().setCause(Cause.ERROR_DELETING_ACCOUNT)).build()); + responseObserver.onNext( + StatusResponse.newBuilder().setError(newBuilder().setCause(Cause.ERROR_DELETING_ACCOUNT)).build()); responseObserver.onCompleted(); return; } @@ -368,8 +396,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas public void deleteProfile(DeleteProfileRequest request, StreamObserver responseObserver) { logger.debug("Deleting profile: {}", request); if ((request.getProfileId() == null) || (request.getProfileId().isEmpty())) { - responseObserver.onNext(StatusResponse.newBuilder() - .setError(newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build()); + responseObserver.onNext( + StatusResponse.newBuilder().setError(newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build()); responseObserver.onCompleted(); return; } @@ -383,8 +411,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas } logger.info("Error deleting profile."); - responseObserver.onNext(StatusResponse.newBuilder() - .setError(newBuilder().setCause(Cause.ERROR_DELETING_PROFILE)).build()); + responseObserver.onNext( + StatusResponse.newBuilder().setError(newBuilder().setCause(Cause.ERROR_DELETING_PROFILE)).build()); responseObserver.onCompleted(); return; } @@ -392,11 +420,11 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas @Override public void addAuthenticationProviderToProfile(AddAuthenticationProviderRequest request, StreamObserver responseObserver) { - logger.info("Adding authentication provider to profile requested."); + logger.info("Adding authentication provider to profile requested."); logger.debug("Adding authentication provider to profile requested: {}", request); - if ((request.getProfileId() == null) || (request.getProfileId().isEmpty())) { - responseObserver.onNext(StatusResponse.newBuilder() - .setError(newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build()); + if ((request.getProfileId() == null) || (request.getProfileId().isEmpty())) { + responseObserver.onNext( + StatusResponse.newBuilder().setError(newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build()); responseObserver.onCompleted(); return; } @@ -413,10 +441,9 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas responseObserver.onCompleted(); return; } - Cause cause = validator.validateAddAuthenticationProviderRequest(request); + Cause cause = validator.validateAddAuthenticationProviderRequest(request); if (cause != null) { - responseObserver - .onNext(StatusResponse.newBuilder().setError(newBuilder().setCause(cause)).build()); + responseObserver.onNext(StatusResponse.newBuilder().setError(newBuilder().setCause(cause)).build()); responseObserver.onCompleted(); return; } @@ -425,20 +452,20 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas // Get the normalized phone number from libphone AuthProviderDetails newAuthProviderDetails = AuthProviderDetails.newBuilder() .setAuthenticationType(request.getAuthenticationProvider().getAuthenticationType()) - .setAuthenticationProvider(validator.getNormalizedPhoneNumber(request.getAuthenticationProvider().getAuthenticationProvider())) + .setAuthenticationProvider(validator + .getNormalizedPhoneNumber(request.getAuthenticationProvider().getAuthenticationProvider())) .build(); AddAuthenticationProviderRequest newRequest = AddAuthenticationProviderRequest.newBuilder() - .setProfileId(request.getProfileId()) - .setAuthenticationProvider(newAuthProviderDetails).build(); + .setProfileId(request.getProfileId()).setAuthenticationProvider(newAuthProviderDetails).build(); request = newRequest; } - // Make sure that the requested profile id for update exists in DB. + // Make sure that the requested profile id for update exists in DB. Profile profile = profileRepository.findByProfileId(UUID.fromString(request.getProfileId())); if (profile == null) { logger.error("Profile id {} missing in DB.", request.getProfileId()); - responseObserver.onNext(StatusResponse.newBuilder() - .setError(newBuilder().setCause(Cause.PROFILE_NOT_FOUND)).build()); + responseObserver.onNext( + StatusResponse.newBuilder().setError(newBuilder().setCause(Cause.PROFILE_NOT_FOUND)).build()); responseObserver.onCompleted(); return; } @@ -469,8 +496,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas logger.error("Authentication provider {}:{} was not successfuly added for profile id {}.", request.getAuthenticationProvider().getAuthenticationType().name(), request.getAuthenticationProvider().getAuthenticationProvider(), request.getProfileId()); - responseObserver.onNext(StatusResponse.newBuilder() - .setError(newBuilder().setCause(Cause.INTERNAL_SERVER_ERROR)).build()); + responseObserver.onNext( + StatusResponse.newBuilder().setError(newBuilder().setCause(Cause.INTERNAL_SERVER_ERROR)).build()); responseObserver.onCompleted(); return; } @@ -541,8 +568,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas logger.info("Deleting Authentication Provider from profile: {}", request); if ((request.getProfileId() == null) || (request.getProfileId().isEmpty())) { - responseObserver.onNext(StatusResponse.newBuilder() - .setError(newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build()); + responseObserver.onNext( + StatusResponse.newBuilder().setError(newBuilder().setCause(Cause.MISSING_PROFILE_ID)).build()); responseObserver.onCompleted(); return; } @@ -562,8 +589,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas Cause cause = validator.validateDeleteAuthenticationProviderRequest(request); if (cause != null) { - responseObserver - .onNext(StatusResponse.newBuilder().setError(newBuilder().setCause(cause)).build()); + responseObserver.onNext(StatusResponse.newBuilder().setError(newBuilder().setCause(cause)).build()); responseObserver.onCompleted(); return; } @@ -572,8 +598,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas Profile profile = profileRepository.findByProfileId(UUID.fromString(request.getProfileId())); if (profile == null) { logger.error("Profile id {} missing in DB.", request.getProfileId()); - responseObserver.onNext(StatusResponse.newBuilder() - .setError(newBuilder().setCause(Cause.PROFILE_NOT_FOUND)).build()); + responseObserver.onNext( + StatusResponse.newBuilder().setError(newBuilder().setCause(Cause.PROFILE_NOT_FOUND)).build()); responseObserver.onCompleted(); return; } @@ -585,7 +611,7 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas if (profile.getAuthenticationProviders().size() < MIN_NUMBER_OF_AUTH_PROVIDERS_IN_PROFILE) { logger.error( "Error deleting authentication provider {} from profile with id {}. Check the number of authentication providers.", - request.getAuthenticationProvider(), request.getProfileId()); + request.getAuthenticationProvider(), request.getProfileId()); responseObserver.onNext(StatusResponse.newBuilder() .setError(newBuilder().setCause(Cause.ERROR_DELETING_AUTH_PROVIDER)).build()); responseObserver.onCompleted(); @@ -606,8 +632,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas logger.error("Authentication provider {}:{} was not successfuly deleted from profile id {}.", request.getAuthenticationProvider().getAuthenticationType().name(), request.getAuthenticationProvider().getAuthenticationProvider(), request.getProfileId()); - responseObserver.onNext(StatusResponse.newBuilder() - .setError(newBuilder().setCause(Cause.INTERNAL_SERVER_ERROR)).build()); + responseObserver.onNext( + StatusResponse.newBuilder().setError(newBuilder().setCause(Cause.INTERNAL_SERVER_ERROR)).build()); responseObserver.onCompleted(); return; } @@ -630,7 +656,8 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas logger.error("Error editing Contact info for account {}. Different types: {} and {}.", request.getAccountId(), request.getOldContactInfo().getType().name(), request.getEditedContactInfo().getType().name()); - prepareErrorStatusResponse(responseObserver, Cause.ERROR_EDITING_CONTACT_INFO, "Error editing contact info"); + prepareErrorStatusResponse(responseObserver, Cause.ERROR_EDITING_CONTACT_INFO, + "Error editing contact info"); return; } @@ -656,22 +683,20 @@ public class AccountServiceImpl extends AccountServiceGrpc.AccountServiceImplBas } private void sendErrorMessageForAccountsResponse(StreamObserver responseObserver, Cause cause) { - responseObserver.onNext(AccountsResponse.newBuilder() - .setError(newBuilder().setCause(cause)).build()); + responseObserver.onNext(AccountsResponse.newBuilder().setError(newBuilder().setCause(cause)).build()); responseObserver.onCompleted(); } private void sendErrorMessageForAccountResponse(StreamObserver responseObserver, Cause cause) { - responseObserver.onNext(AccountResponse.newBuilder() - .setError(newBuilder().setCause(cause)).build()); + responseObserver.onNext(AccountResponse.newBuilder().setError(newBuilder().setCause(cause)).build()); responseObserver.onCompleted(); } public void prepareErrorStatusResponse(StreamObserver responseObserver, Cause error, String message) { - responseObserver.onNext(StatusResponse.newBuilder() - .setError(newBuilder().setCause(error).setMessage(message)).build()); + responseObserver + .onNext(StatusResponse.newBuilder().setError(newBuilder().setCause(error).setMessage(message)).build()); responseObserver.onCompleted(); } - + } diff --git a/src/test/java/biz/nynja/account/services/AccountServiceTests.java b/src/test/java/biz/nynja/account/services/AccountServiceTests.java index 10c135a..f60ffec 100644 --- a/src/test/java/biz/nynja/account/services/AccountServiceTests.java +++ b/src/test/java/biz/nynja/account/services/AccountServiceTests.java @@ -7,6 +7,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.verify; import java.util.ArrayList; import java.util.List; @@ -16,11 +17,12 @@ import java.util.concurrent.ExecutionException; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mockito; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; @@ -28,10 +30,9 @@ import org.springframework.test.context.junit4.SpringRunner; import biz.nynja.account.components.AccountServiceHelper; import biz.nynja.account.components.PreparedStatementsCache; import biz.nynja.account.configurations.CassandraTestsConfig; - +import biz.nynja.account.grpc.AccountByAccountIdRequest; import biz.nynja.account.grpc.AccountByAuthenticationProviderRequest; import biz.nynja.account.grpc.AccountResponse; -import biz.nynja.account.grpc.AccountByAccountIdRequest; import biz.nynja.account.grpc.AccountServiceGrpc; import biz.nynja.account.grpc.AccountsByProfileIdRequest; import biz.nynja.account.grpc.AccountsResponse; @@ -45,18 +46,18 @@ import biz.nynja.account.grpc.ContactType; import biz.nynja.account.grpc.CreatePendingAccountRequest; import biz.nynja.account.grpc.CreatePendingAccountResponse; import biz.nynja.account.grpc.DeleteAccountRequest; -import biz.nynja.account.grpc.DeleteProfileRequest; -import biz.nynja.account.grpc.EditContactInfoRequest; import biz.nynja.account.grpc.DeleteAuthenticationProviderRequest; import biz.nynja.account.grpc.DeleteContactInfoRequest; +import biz.nynja.account.grpc.DeleteProfileRequest; +import biz.nynja.account.grpc.EditContactInfoRequest; import biz.nynja.account.grpc.ErrorResponse.Cause; +import biz.nynja.account.grpc.ProfileResponse; +import biz.nynja.account.grpc.Role; import biz.nynja.account.grpc.StatusResponse; import biz.nynja.account.grpc.UpdateAccountRequest; import biz.nynja.account.grpc.UpdateProfileRequest; -import biz.nynja.account.grpc.ProfileResponse; import biz.nynja.account.models.Account; import biz.nynja.account.models.AccountByAuthenticationProvider; -import biz.nynja.account.repositories.AccountByAuthenticationProviderRepository; import biz.nynja.account.models.AccountByProfileId; import biz.nynja.account.models.AuthenticationProvider; import biz.nynja.account.models.ContactInfo; @@ -64,6 +65,7 @@ import biz.nynja.account.models.PendingAccount; import biz.nynja.account.models.PendingAccountByAuthenticationProvider; import biz.nynja.account.models.Profile; import biz.nynja.account.models.ProfileByAuthenticationProvider; +import biz.nynja.account.repositories.AccountByAuthenticationProviderRepository; import biz.nynja.account.repositories.AccountByProfileIdRepository; import biz.nynja.account.repositories.AccountRepository; import biz.nynja.account.repositories.AccountRepositoryAdditional; @@ -80,8 +82,7 @@ import biz.nynja.account.utils.Util; @RunWith(SpringRunner.class) @SpringBootTest(classes = { Util.class, CassandraTestsConfig.class }, webEnvironment = WebEnvironment.RANDOM_PORT, - properties = { - "grpc.port=${grpc.unitTest.port.accountServiceTest}", + properties = { "grpc.port=${grpc.unitTest.port.accountServiceTest}", "spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration", "spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration" }) @ActiveProfiles("dev") @@ -445,8 +446,7 @@ public class AccountServiceTests extends GrpcServerTestBase { @Test public void testUpdateProfileMissingProfileId() throws ExecutionException, InterruptedException { - final UpdateProfileRequest request = UpdateProfileRequest.newBuilder() - .build(); + final UpdateProfileRequest request = UpdateProfileRequest.newBuilder().build(); final AccountServiceGrpc.AccountServiceBlockingStub accountServiceBlockingStub = AccountServiceGrpc .newBlockingStub(Optional.ofNullable(channel).orElse(inProcChannel)); final ProfileResponse reply = accountServiceBlockingStub.updateProfile(request); @@ -513,6 +513,41 @@ public class AccountServiceTests extends GrpcServerTestBase { respose.getAccountDetails().getAccountId().equals(Util.ACCOUNT_ID.toString())); } + @Test + public void testCompletePendingAccountCreationOkMissingRoleAndAccess() { + final CompletePendingAccountCreationRequest request = CompletePendingAccountCreationRequest.newBuilder() + .setAccountId(Util.ACCOUNT_ID.toString()).setUsername(Util.USERNAME).setFirstName(Util.FIRST_NAME) + .build(); + + final AccountServiceGrpc.AccountServiceBlockingStub accountServiceBlockingStub = AccountServiceGrpc + .newBlockingStub(Optional.ofNullable(channel).orElse(inProcChannel)); + accountServiceBlockingStub.completePendingAccountCreation(request); + + ArgumentCaptor argument = ArgumentCaptor + .forClass(CompletePendingAccountCreationRequest.class); + verify(accountRepositoryAdditional).completePendingAccountCreation(argument.capture()); + assertNotNull(argument.getValue().getRolesList()); + assertNotNull(Role.USER.equals(argument.getValue().getRoles(0))); + } + + @Test + public void testCompletePendingAccountCreationOkMultipleRoles() { + final CompletePendingAccountCreationRequest request = CompletePendingAccountCreationRequest.newBuilder() + .setAccountId(Util.ACCOUNT_ID.toString()).setUsername(Util.USERNAME).setFirstName(Util.FIRST_NAME) + .addRoles(Role.USER).addRoles(Role.ADMIN).build(); + + final AccountServiceGrpc.AccountServiceBlockingStub accountServiceBlockingStub = AccountServiceGrpc + .newBlockingStub(Optional.ofNullable(channel).orElse(inProcChannel)); + accountServiceBlockingStub.completePendingAccountCreation(request); + + ArgumentCaptor argument = ArgumentCaptor + .forClass(CompletePendingAccountCreationRequest.class); + verify(accountRepositoryAdditional).completePendingAccountCreation(argument.capture()); + assertNotNull(argument.getValue().getRolesList()); + assertNotNull(Role.USER.equals(argument.getValue().getRoles(0))); + assertNotNull(Role.USER.equals(argument.getValue().getRoles(1))); + } + @Test public void testCompletePendingAccountCreationUsernameInvalid() { final CompletePendingAccountCreationRequest request = CompletePendingAccountCreationRequest.newBuilder() diff --git a/src/test/java/biz/nynja/account/utils/Util.java b/src/test/java/biz/nynja/account/utils/Util.java index a2c1e15..e540b01 100644 --- a/src/test/java/biz/nynja/account/utils/Util.java +++ b/src/test/java/biz/nynja/account/utils/Util.java @@ -13,6 +13,7 @@ import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import biz.nynja.account.grpc.AccessStatus; +import biz.nynja.account.grpc.Role; import biz.nynja.account.models.Account; import biz.nynja.account.models.AccountByAuthenticationProvider; import biz.nynja.account.models.AccountByProfileId; @@ -146,6 +147,7 @@ public class Util { account.setLastUpdateTimestamp(LAST_UPDATE_TIMESTAMP); account.setContactsInfo(CONTACTS_INFO); account.setQrCode(QR_CODE); + account.setRoles(Set.of(Role.USER.toString())); account.setAccessStatus(AccessStatus.ENABLED.toString()); return account; } -- GitLab From cea7ef92238f0d9bcb14fb21382971f1d89cd9d7 Mon Sep 17 00:00:00 2001 From: Dragomir Todorov Date: Wed, 31 Oct 2018 20:53:26 +0200 Subject: [PATCH 2/2] Wrong test name fix --- .../java/biz/nynja/account/services/AccountServiceTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/biz/nynja/account/services/AccountServiceTests.java b/src/test/java/biz/nynja/account/services/AccountServiceTests.java index f60ffec..3f46386 100644 --- a/src/test/java/biz/nynja/account/services/AccountServiceTests.java +++ b/src/test/java/biz/nynja/account/services/AccountServiceTests.java @@ -514,7 +514,7 @@ public class AccountServiceTests extends GrpcServerTestBase { } @Test - public void testCompletePendingAccountCreationOkMissingRoleAndAccess() { + public void testCompletePendingAccountCreationOkMissingRole() { final CompletePendingAccountCreationRequest request = CompletePendingAccountCreationRequest.newBuilder() .setAccountId(Util.ACCOUNT_ID.toString()).setUsername(Util.USERNAME).setFirstName(Util.FIRST_NAME) .build(); -- GitLab