All files / src/gmail/strategies gmailCardOperationStrategy.ts

93.33% Statements 14/15
77.27% Branches 17/22
100% Functions 1/1
93.33% Lines 14/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 288x   8x   8x   5x   5x   5x   5x 2x     3x 3x 3x 3x   3x       3x    
import { AbstractPaymentDetailsStrategy } from "../../core/strategies/abstractPaymentDetailsStrategy";
import CardOperation from "../../core/types/cardOperation";
import PaymentDetailsProcessingError from "../../core/errors/paymentDetailsProcessingError";
 
export default class GmailCardOperationStrategy extends AbstractPaymentDetailsStrategy<CardOperation> {
    public tryCreate(paymentDetailsRaw: string[], additionalDetailsRaw: string[]): CardOperation {
        const raw = paymentDetailsRaw.join('');
 
        const regex = /^(?<instrument>[^\d]+)\s(?<sum>[^\s]+)\s(?<currency>\w*)[,]?\sавт.код:(?:[^\s,-]*)[\s]*[-]?[,]?[\s]?(?<merchant>[^\/]+(?<! ))/;
 
        const regexResult = regex.exec(raw);
 
        if (regexResult === null) {
            throw new PaymentDetailsProcessingError(`Failed to execute regex on input '${raw}'`);
        }
 
        const instrument = regexResult.groups?.instrument;
        const sum = regexResult.groups?.sum;
        const currency = regexResult.groups?.currency;
        const merchant = regexResult.groups?.merchant;
 
        Iif (instrument === undefined || sum === undefined || currency === undefined || merchant === undefined) {
            throw new PaymentDetailsProcessingError(`Failed to read regex capture group`);
        }
 
        return this.paymentDetailsFactory.cardOperation(merchant, instrument, sum, currency);
    }
}