Skip to content

Commit

Permalink
OBG-51: Fix admin delete api (#1295)
Browse files Browse the repository at this point in the history
* OBG-51: Fix admin delete api

* OBG-51: add e2e tests for delete bank admin api

* OPEN-51. Added PIS delete bank test

* OPEN-51. Slight reformatting

* OPEN-51. Slight reformatting

* OPEN-51. Fix db cleanup

Co-authored-by: valb3r <valb3r.ua@gmail.com>
  • Loading branch information
clovisgakam and valb3r committed Sep 13, 2021
1 parent 4e3e34a commit 0fc8f9d
Show file tree
Hide file tree
Showing 19 changed files with 296 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,13 @@
import de.adorsys.opba.db.domain.entity.Bank;
import de.adorsys.opba.db.domain.entity.BankAction;
import de.adorsys.opba.db.domain.entity.BankProfile;
import de.adorsys.opba.db.repository.jpa.BankActionRepository;
import de.adorsys.opba.db.repository.jpa.BankProfileJpaRepository;
import de.adorsys.opba.db.repository.jpa.BankRepository;
import de.adorsys.opba.db.repository.jpa.ConsentRepository;
import de.adorsys.opba.db.repository.jpa.PaymentRepository;
import de.adorsys.opba.db.repository.jpa.fintech.FintechPsuAspspPrvKeyInboxRepository;
import de.adorsys.opba.db.repository.jpa.fintech.FintechPsuAspspPrvKeyRepository;
import de.adorsys.opba.db.repository.jpa.psu.PsuAspspPrvKeyRepository;
import de.adorsys.opba.protocol.api.common.ProtocolAction;
import lombok.Data;
import lombok.Getter;
Expand Down Expand Up @@ -45,10 +49,13 @@ public class AdminApiService {

private static final String ADMIN_MAPPERS_PACKAGE = "de.adorsys.opba.adminapi.service.mappers";

private final BankActionRepository actionRepository;
private final BankRepository bankRepository;
private final BankProfileJpaRepository bankProfileJpaRepository;

private final PsuAspspPrvKeyRepository psuAspspPrvKeyRepository;
private final FintechPsuAspspPrvKeyRepository fintechPsuAspspPrvKeyRepository;
private final FintechPsuAspspPrvKeyInboxRepository fintechPsuAspspPrvKeyInboxRepository;
private final PaymentRepository paymentRepository;
private final ConsentRepository consentRepository;
private final BankMapper bankMapper;
private final PageMapper pageMapper;

Expand Down Expand Up @@ -130,7 +137,12 @@ public BankData updateBank(UUID bankId, BankData bankData) {
@Transactional
public void deleteBank(UUID bankId) {
Bank bank = bankRepository.findByUuid(bankId).orElseThrow(() -> new EntityNotFoundException("No bank: " + bankId));
bankProfileJpaRepository.deleteAll(bankProfileJpaRepository.findByBankUuid(bank.getUuid()));
bankProfileJpaRepository.deleteByBank(bank);
psuAspspPrvKeyRepository.deleteByAspsp(bank);
fintechPsuAspspPrvKeyRepository.deleteByAspsp(bank);
fintechPsuAspspPrvKeyInboxRepository.deleteByAspsp(bank);
paymentRepository.deleteByAspsp(bank);
consentRepository.deleteByAspsp(bank);
bankRepository.delete(bank);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import de.adorsys.opba.db.domain.entity.BankProfile;
import de.adorsys.opba.db.domain.entity.Consent;
import de.adorsys.opba.db.domain.entity.IdAssignable;
import de.adorsys.opba.db.domain.entity.Payment;
import de.adorsys.opba.db.domain.generators.AssignedUuidGenerator;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand Down Expand Up @@ -61,6 +62,9 @@ public class ServiceSession implements IdAssignable<UUID> {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "serviceSession")
private Collection<Consent> consents;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "serviceSession")
private Collection<Payment> payments;

@Version
private int version;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.adorsys.opba.db.repository.jpa;

import de.adorsys.opba.db.domain.entity.Bank;
import de.adorsys.opba.db.domain.entity.BankProfile;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
Expand All @@ -14,6 +15,8 @@ public interface BankProfileJpaRepository extends JpaRepository<BankProfile, Lon

Optional<BankProfile> findByUuid(UUID uuid);

void deleteByBank(Bank bank);

List<BankProfile> findByBankUuid(UUID bankUuid);

List<BankProfile> findByBankIdIn(Collection<Long> bankIds);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.adorsys.opba.db.repository.jpa;

import de.adorsys.opba.db.domain.entity.Bank;
import de.adorsys.opba.db.domain.entity.Consent;
import de.adorsys.opba.db.domain.entity.psu.Psu;
import org.springframework.data.jpa.repository.JpaRepository;
Expand All @@ -18,6 +19,7 @@ public interface ConsentRepository extends JpaRepository<Consent, Long> {

List<Consent> findByServiceSessionIdOrderByModifiedAtDesc(UUID serviceSessionId);
Collection<Consent> findByPsu(Psu owner);
void deleteByAspsp(Bank bank);

@Modifying
@Transactional
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.adorsys.opba.db.repository.jpa;

import de.adorsys.opba.db.domain.entity.Bank;
import de.adorsys.opba.db.domain.entity.Payment;
import de.adorsys.opba.db.domain.entity.psu.Psu;
import org.springframework.data.jpa.repository.JpaRepository;
Expand All @@ -18,6 +19,7 @@ public interface PaymentRepository extends JpaRepository<Payment, Long> {

List<Payment> findByServiceSessionIdOrderByModifiedAtDesc(UUID serviceSessionId);
Collection<Payment> findByPsu(Psu owner);
void deleteByAspsp(Bank bank);

@Modifying
@Transactional
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.adorsys.opba.db.repository.jpa.fintech;

import de.adorsys.opba.db.domain.entity.Bank;
import de.adorsys.opba.db.domain.entity.fintech.FintechPsuAspspPrvKeyInbox;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
Expand All @@ -11,4 +12,5 @@
public interface FintechPsuAspspPrvKeyInboxRepository extends CrudRepository<FintechPsuAspspPrvKeyInbox, UUID> {

Optional<FintechPsuAspspPrvKeyInbox> findByFintechIdAndPsuIdAndAspspId(long fintechId, long psuId, long aspspId);
void deleteByAspsp(Bank bank);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.adorsys.opba.db.repository.jpa.fintech;

import de.adorsys.opba.db.domain.entity.Bank;
import de.adorsys.opba.db.domain.entity.fintech.FintechPsuAspspPrvKey;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
Expand All @@ -11,4 +12,5 @@
public interface FintechPsuAspspPrvKeyRepository extends CrudRepository<FintechPsuAspspPrvKey, UUID> {

Optional<FintechPsuAspspPrvKey> findByFintechIdAndPsuIdAndAspspId(long fintechId, long psuId, long aspspId);
void deleteByAspsp(Bank bank);
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.adorsys.opba.db.repository.jpa.psu;

import de.adorsys.opba.db.domain.entity.Bank;
import de.adorsys.opba.db.domain.entity.psu.PsuAspspPrvKey;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
Expand All @@ -11,4 +12,5 @@
public interface PsuAspspPrvKeyRepository extends CrudRepository<PsuAspspPrvKey, UUID> {

Optional<PsuAspspPrvKey> findByPsuIdAndAspspId(long psuId, long aspspId);
void deleteByAspsp(Bank bank);
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

<dependency>
<groupId>de.adorsys.opba</groupId>
<artifactId>opba-admin-rest-impl</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>de.adorsys.opba</groupId>
<artifactId>opba-banking-rest-impl</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -709,6 +709,11 @@ public SELF user_anton_brueckner_sees_that_he_needs_to_be_redirected_to_aspsp_an
return self();
}

public SELF admin_calls_delete_bank(String bankUuid) {
AdminUtil.adminCallsDeleteBank(bankUuid);
return self();
}

protected ExtractableResponse<Response> startInitialInternalConsentAuthorization(String uriPath, String resourceData) {
ExtractableResponse<Response> response =
startInitialInternalConsentAuthorization(uriPath, resourceData, ACCEPTED);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,13 @@ public SELF open_banking_has_consent_for_anton_brueckner_account_list() {
return self();
}

@SneakyThrows
@Transactional
public SELF open_banking_has_no_consent_for_anton_brueckner_account_list() {
assertThat(consents.findByServiceSessionIdOrderByModifiedAtDesc(UUID.fromString(serviceSessionId))).isEmpty();
return self();
}

@SneakyThrows
@Transactional
public SELF open_banking_has_no_consent() {
Expand Down Expand Up @@ -130,6 +137,12 @@ public SELF open_banking_can_read_anton_brueckner_account_data_using_consent_bou
return open_banking_can_read_anton_brueckner_account_data_using_consent_bound_to_service_session(true, bankProfileId);
}

@SneakyThrows
public SELF admin_check_that_bank_is_deleted(String bankUuid) {
AdminUtil.adminChecksThatBankIsDeleted(bankUuid);
return self();
}

@SneakyThrows
public SELF open_banking_can_read_anton_brueckner_account_data_using_consent_bound_to_service_session(
boolean validateResourceId
Expand Down Expand Up @@ -163,6 +176,17 @@ private void open_banking_can_read_anton_brueckner_account_data_using_consent_bo
this.responseContent = response.body().asString();
}

public void open_banking_can_not_read_anton_brueckner_account_data_using_consent_bound_to_service_session_and_bank_profile_id() {
withAccountsHeaders(ANTON_BRUECKNER, SANDBOX_BANK_PROFILE_ID)
.header(SERVICE_SESSION_ID, serviceSessionId)
.when()
.get(AIS_ACCOUNTS_ENDPOINT)
.then()
.statusCode(HttpStatus.INTERNAL_SERVER_ERROR.value())
.body("message", equalTo("No bank profile for bank: " + SANDBOX_BANK_PROFILE_ID))
.extract();
}

@SneakyThrows
public SELF open_banking_can_read_user_account_data_using_consent_bound_to_service_session(
String user, boolean validateResourceId
Expand Down Expand Up @@ -456,20 +480,24 @@ public SELF user_anton_brueckner_provided_initial_parameters_to_list_accounts_wi
return self();
}

public SELF fintech_calls_consent_activation_for_current_authorization_id(String serviceSessionId) {
public SELF fintech_calls_consent_activation_for_current_authorization_id(String serviceSessionId, HttpStatus status) {
withSignatureHeaders(RestAssured
.given()
.header(SERVICE_SESSION_PASSWORD, SESSION_PASSWORD)
.contentType(MediaType.APPLICATION_JSON_VALUE))
.when()
.post(CONFIRM_CONSENT_ENDPOINT, serviceSessionId)
.then()
.statusCode(HttpStatus.OK.value());
.statusCode(status.value());
return self();
}

public SELF fintech_calls_consent_activation_for_current_authorization_id() {
return fintech_calls_consent_activation_for_current_authorization_id(serviceSessionId);
return fintech_calls_consent_activation_for_current_authorization_id(serviceSessionId, HttpStatus.OK);
}

public SELF fintech_calls_consent_activation_for_current_authorization_id_failed_with_not_found() {
return fintech_calls_consent_activation_for_current_authorization_id(serviceSessionId, HttpStatus.NOT_FOUND);
}

@SneakyThrows
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package de.adorsys.opba.protocol.xs2a.tests.e2e.stages;

import lombok.experimental.UtilityClass;
import org.springframework.http.HttpStatus;

import static de.adorsys.opba.protocol.xs2a.tests.e2e.stages.StagesCommonUtil.ADMIN_API;
import static de.adorsys.opba.protocol.xs2a.tests.e2e.stages.StagesCommonUtil.BASIC_AUTH;
import static de.adorsys.opba.protocol.xs2a.tests.e2e.stages.StagesCommonUtil.headersWithAuthorization;

@UtilityClass
public class AdminUtil {

public void adminCallsDeleteBank(String bankUuid) {
headersWithAuthorization(BASIC_AUTH)
.when()
.delete(ADMIN_API + "banks/" + bankUuid)
.then()
.statusCode(HttpStatus.OK.value());
}

public void adminChecksThatBankIsDeleted(String bankUuid) {
headersWithAuthorization(BASIC_AUTH)
.when()
.get(ADMIN_API + "banks/" + bankUuid)
.then()
.statusCode(HttpStatus.NOT_FOUND.value());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import io.restassured.RestAssured;
import io.restassured.response.ExtractableResponse;
import io.restassured.response.Response;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.transaction.annotation.Transactional;
Expand Down Expand Up @@ -56,6 +57,13 @@ public SELF open_banking_has_stored_payment() {
return self();
}

@SneakyThrows
@Transactional
public SELF open_banking_has_no_payment_for_anton_brueckner() {
assertThat(payments.findByServiceSessionIdOrderByModifiedAtDesc(UUID.fromString(paymentServiceSessionId))).isEmpty();
return self();
}

public SELF user_logged_in_into_opba_as_anonymous_user_with_credentials_using_fintech_supplied_url_is_forbidden() {
String fintechUserTempPassword = UriComponentsBuilder
.fromHttpUrl(redirectUriToGetUserParams).build()
Expand Down Expand Up @@ -222,5 +230,11 @@ public SELF fintech_calls_payment_activation_for_current_authorization_id(String
.statusCode(HttpStatus.OK.value());
return self();
}

@SneakyThrows
public SELF admin_check_that_bank_is_deleted(String bankUuid) {
AdminUtil.adminChecksThatBankIsDeleted(bankUuid);
return self();
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import static de.adorsys.opba.protocol.xs2a.tests.HeaderNames.X_TIMESTAMP_UTC;
import static de.adorsys.opba.restapi.shared.HttpHeaders.COMPUTE_PSU_IP_ADDRESS;
import static de.adorsys.opba.restapi.shared.HttpHeaders.UserAgentContext.PSU_IP_ADDRESS;
import static org.springframework.http.HttpHeaders.AUTHORIZATION;

@UtilityClass
@SuppressWarnings({"checkstyle:HideUtilityClassConstructor", "PMD.AvoidUsingHardCodedIP"}) //Checkstyle doesn't recognise Lombok
Expand Down Expand Up @@ -71,6 +72,9 @@ public class StagesCommonUtil {
public static final String POSTBANK_BANK_PROFILE_ID = "e431a602-15ab-48b8-8c9b-ce381d2034c4";
public static final String SPARKASSE_BANK_PROFILE_ID = "f31a87dd-5d3e-41b8-924a-0d85b10288bc";

public static final String ADMIN_API = "/admin/v1/";
public static final String BASIC_AUTH = "Basic QWxhZGRpbjpPcGVuU2VzYW1l";

public static RequestSpecification withAccountsHeaders(String fintechUserId) {
return withAccountsHeaders(fintechUserId, SANDBOX_BANK_PROFILE_ID);
}
Expand Down Expand Up @@ -127,6 +131,12 @@ public static RequestSpecification withSignatureHeaders(RequestSpecification spe
.header(X_TIMESTAMP_UTC, xTimestampUtc.toString());
}

public static RequestSpecification headersWithAuthorization(String authorization) {
return RestAssured
.given()
.header(AUTHORIZATION, authorization);
}

private static RequestSpecification headersWithoutIpAddress(String fintechUserId, UUID xRequestId, Instant xTimestampUtc) {
return headersWithoutIpAddress(fintechUserId, SANDBOX_BANK_PROFILE_ID, xRequestId, xTimestampUtc);
}
Expand All @@ -143,4 +153,7 @@ private static RequestSpecification headersWithoutIpAddress(String fintechUserId
.header(X_REQUEST_ID, xRequestId.toString())
.header(X_TIMESTAMP_UTC, xTimestampUtc.toString());
}



}
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ public class MockServers<SELF extends MockServers<SELF>> extends CommonGivenStag
public static final String POSTBANK_BANK_ID = "01aa84f2-25c0-4e02-8065-c401657e3fb0";
public static final String CONSORS_BANK_BANK_ID = "81cecc67-6d1b-4169-b67c-2de52b99a0cc";
public static final String SPARKASSE_BANK_ID = "03668d3e-c2a7-425a-b50a-f73347fbfb33";
public static final String SANDBOX_BANK_ID = "adadadad-4000-0000-0000-b0b0b0b0b0b0";


@Autowired
private BankProfileJpaRepository bankProfileJpaRepository;
Expand Down Expand Up @@ -359,7 +361,7 @@ public SELF embedded_mock_of_sandbox_for_max_musterman_transactions_running_for_

@SneakyThrows
private void startWireMock(WireMockConfiguration config) {
startWireMock(config, "adadadad-4000-0000-0000-b0b0b0b0b0b0", defaultBankProfileConfigurer);
startWireMock(config, SANDBOX_BANK_ID, defaultBankProfileConfigurer);
}

@SneakyThrows
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.tngtech.jgiven.annotation.ExpectedScenarioState;
import com.tngtech.jgiven.integration.spring.JGivenStage;
import de.adorsys.opba.protocol.xs2a.tests.e2e.LocationExtractorUtil;
import de.adorsys.opba.protocol.xs2a.tests.e2e.stages.AdminUtil;
import de.adorsys.opba.protocol.xs2a.tests.e2e.stages.PaymentRequestCommon;
import io.restassured.RestAssured;
import io.restassured.response.ExtractableResponse;
Expand Down Expand Up @@ -80,6 +81,11 @@ public SELF current_redirected_to_screen_is_payment_result() {
return self();
}

public SELF admin_calls_delete_bank(String bankUuid) {
AdminUtil.adminCallsDeleteBank(bankUuid);
return self();
}

private void extractRedirectOkUriSentByOpbaFromWiremock() {
extractRedirectOkUriSentByOpbaFromWiremock(0);
}
Expand Down

0 comments on commit 0fc8f9d

Please sign in to comment.