Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
"generate:api:io": "rimraf generated/io-api && shx mkdir -p generated/io-api && gen-api-models --api-spec https://raw.githubusercontent.com/pagopa/io-functions-app/master/openapi/index.yaml --no-strict --out-dir generated/io-api --request-types --response-decoders",
"generate:proxy:bonus-models": "rimraf generated/bonus && shx mkdir -p generated/bonus && gen-api-models --api-spec api_bonus.yaml --out-dir generated/bonus",
"generate:api:io-bonus": "rimraf generated/io-bonus-api && shx mkdir -p generated/io-bonus-api && gen-api-models --api-spec https://raw.githubusercontent.com/pagopa/io-functions-bonus/master/openapi/index.yaml --no-strict --out-dir generated/io-bonus-api --request-types --response-decoders",
"generate:api:pagopaproxy": "rimraf generated/pagopa-proxy && shx mkdir -p generated/pagopa-proxy && gen-api-models --api-spec https://raw.githubusercontent.com/pagopa/io-pagopa-proxy/v0.8.6/api_pagopa.yaml --no-strict --out-dir generated/pagopa-proxy --request-types --response-decoders",
"generate:api:pagopaproxy": "rimraf generated/pagopa-proxy && shx mkdir -p generated/pagopa-proxy && gen-api-models --api-spec https://raw.githubusercontent.com/pagopa/io-pagopa-proxy/attiva-soggetto-pagatore/api_pagopa.yaml --no-strict --out-dir generated/pagopa-proxy --request-types --response-decoders",
"generate:test-certs": "./scripts/generate-test-certs.sh certs",
"postversion": "git push && git push --tags",
"dist:modules": "modclean -r -n default:safe && yarn install --production",
Expand Down
45 changes: 42 additions & 3 deletions src/controllers/__tests__/pagoPAProxyController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,14 @@ import {
ResponseErrorInternal,
ResponseSuccessJson
} from "italia-ts-commons/lib/responses";
import { FiscalCode, NonEmptyString } from "italia-ts-commons/lib/strings";
import { EmailAddress } from "../../../generated/backend/EmailAddress";
import { SpidLevelEnum } from "../../../generated/backend/SpidLevel";
import mockReq from "../../__mocks__/request";
import PagoPAClientFactory from "../../services/pagoPAClientFactory";
import PagoPAProxyService from "../../services/pagoPAProxyService";
import { SessionToken, WalletToken } from "../../types/token";
import { User } from "../../types/user";
import PagoPAProxyController from "../pagoPAProxyController";

const aRptId = "123456";
Expand Down Expand Up @@ -152,12 +157,35 @@ describe("PagoPAProxyController#getPaymentInfo", () => {
});

describe("PagoPAProxyController#activatePayment", () => {
const aTimestamp = 1518010929530;
const aFiscalNumber = "GRBGPP87L04L741X" as FiscalCode;
const anEmailAddress = "garibaldi@example.com" as EmailAddress;
const aValidSpidLevel = SpidLevelEnum["https://www.spid.gov.it/SpidL2"];

const mockedUser: User = {
created_at: aTimestamp,
family_name: "Garibaldi",
fiscal_code: aFiscalNumber,
name: "Giuseppe Maria",
session_token: "123hexToken" as SessionToken,
spid_email: anEmailAddress,
spid_level: aValidSpidLevel,
spid_mobile_phone: "3222222222222" as NonEmptyString,
wallet_token: "123hexToken" as WalletToken
};
const expectedSoggettoPagatore = {
anagrafica: `${mockedUser.name} ${mockedUser.family_name}`,
fiscal_code: mockedUser.fiscal_code,
tipo: "F"
};

beforeEach(() => {
jest.clearAllMocks();
});

it("calls the activatePayment on the PagoPAProxyService with valid values", async () => {
const req = mockReq();
req.user = mockedUser;

mockActivatePayment.mockReturnValue(
Promise.resolve(ResponseSuccessJson(proxyPaymentActivationsPostResponse))
Expand All @@ -176,7 +204,10 @@ describe("PagoPAProxyController#activatePayment", () => {
const response = await controller.activatePayment(req);

expect(mockActivatePayment).toHaveBeenCalledWith(
paymentActivationsPostRequest,
{
...paymentActivationsPostRequest,
soggettoPagatore: expectedSoggettoPagatore
},
false
);

Expand All @@ -189,6 +220,7 @@ describe("PagoPAProxyController#activatePayment", () => {

it("[TEST env] calls the activatePayment on the PagoPAProxyService with valid values", async () => {
const req = mockReq();
req.user = mockedUser;

mockActivatePayment.mockReturnValue(
Promise.resolve(ResponseSuccessJson(proxyPaymentActivationsPostResponse))
Expand All @@ -207,7 +239,10 @@ describe("PagoPAProxyController#activatePayment", () => {
const response = await controller.activatePayment(req);

expect(mockActivatePayment).toHaveBeenCalledWith(
paymentActivationsPostRequest,
{
...paymentActivationsPostRequest,
soggettoPagatore: expectedSoggettoPagatore
},
true
);
expect(response).toEqual({
Expand All @@ -219,6 +254,7 @@ describe("PagoPAProxyController#activatePayment", () => {

it("fails if the call to activatePayment fails", async () => {
const req = mockReq();
req.user = mockedUser;

mockActivatePayment.mockReturnValue(
Promise.resolve(ResponseErrorInternal(internalErrorMessage))
Expand All @@ -237,7 +273,10 @@ describe("PagoPAProxyController#activatePayment", () => {
const response = await controller.activatePayment(req);

expect(mockActivatePayment).toHaveBeenCalledWith(
paymentActivationsPostRequest,
{
...paymentActivationsPostRequest,
soggettoPagatore: expectedSoggettoPagatore
},
false
);
expect(response).toEqual(aResponseErrorInternal);
Expand Down
26 changes: 18 additions & 8 deletions src/controllers/pagoPAProxyController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { PaymentActivationsPostResponse } from "../../generated/backend/PaymentA
import { PaymentRequestsGetResponse } from "../../generated/backend/PaymentRequestsGetResponse";
import { PaymentActivationsPostRequest } from "../../generated/pagopa-proxy/PaymentActivationsPostRequest";

import { withUserFromRequest } from "../types/user";
import { withValidatedOrInternalError } from "../utils/responses";

const parsePagopaTestParam = (testParam: unknown) =>
Expand Down Expand Up @@ -50,14 +51,23 @@ export default class PagoPAProxyController {
| IResponseErrorNotFound
| IResponseSuccessJson<PaymentActivationsPostResponse>
> =>
withValidatedOrInternalError(
PaymentActivationsPostRequest.decode(req.body),
paymentActivationsPostRequest => {
return this.pagoPAProxyService.activatePayment(
paymentActivationsPostRequest,
parsePagopaTestParam(req.query.test)
);
}
withUserFromRequest(req, async user =>
withValidatedOrInternalError(
PaymentActivationsPostRequest.decode({
...req.body,
soggettoPagatore: {
anagrafica: `${user.name} ${user.family_name}`,
fiscal_code: user.fiscal_code,
tipo: "F"
}
}),
paymentActivationsPostRequest => {
return this.pagoPAProxyService.activatePayment(
paymentActivationsPostRequest,
parsePagopaTestParam(req.query.test)
);
}
)
);

public readonly getActivationStatus = async (
Expand Down