All files / src/Connector ZohoGetRecordsConnector.ts

90% Statements 18/20
50% Branches 2/4
100% Functions 2/2
90% Lines 18/20

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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 1182x 2x   2x       2x   2x     2x       2x   2x       2x 2x 2x 2x 2x   2x 2x   1x   1x       1x                                                                                                                                                                
import AConnector from '@orchesty/nodejs-sdk/dist/lib/Connector/AConnector';
import { HttpMethods } from '@orchesty/nodejs-sdk/dist/lib/Transport/HttpMethods';
import ProcessDto from '@orchesty/nodejs-sdk/dist/lib/Utils/ProcessDto';
import {
    ACCOUNT_OWNER_NAME, APP_LINK_NAME, CREATOR_FORM, REPORT_LINK_NAME,
} from '../ZohoApplication';
 
export const NAME = 'zoho-get-records-connector';
 
export default class ZohoGetRecordsConnector extends AConnector {
 
    public getName(): string {
        return NAME;
    }
 
    public async processAction(dto: ProcessDto<IInput>): Promise<ProcessDto<IOutput>> {
        const { recordId } = dto.getJsonData();
 
        Iif (!recordId) {
            throw new Error('Record ID is missing');
        }
 
        const appInstall = await this.getApplicationInstallFromProcess(dto);
        const accountOwnerName = appInstall.getSettings()[CREATOR_FORM][ACCOUNT_OWNER_NAME];
        const appLink = appInstall.getSettings()[CREATOR_FORM][APP_LINK_NAME];
        const reportLink = appInstall.getSettings()[CREATOR_FORM][REPORT_LINK_NAME];
        const url = `/${accountOwnerName}/${appLink}/report/${reportLink}/${recordId}`;
 
        const req = await this.getApplication().getRequestDto(dto, appInstall, HttpMethods.GET, url);
        const resp = await this.getSender().send<IResponse>(req, [200]);
 
        const records = resp.getJsonBody();
 
        Iif (records.code !== 3000) {
            throw new Error('The request failed');
        }
 
        return dto.setNewJsonData(records.data);
    }
 
}
 
/* eslint-disable @typescript-eslint/naming-convention */
interface IResponse {
    code: number;
    data: IOutput;
}
 
export interface IInput {
    recordId: string;
}
 
export interface IOutput {
    Multi_Line: string;
    Email: string;
    Address: {
        display_value: string;
        country: string;
        district_city: string;
        latitude: string;
        address_line_1: string;
        state_province: string;
        address_line_2: string;
        postal_code: string;
        longitude: string;
    };
    Phone_Number: string;
    Time: string;
    Image: string;
    Url: {
        value: string;
        url: string;
    };
    Name: {
        display_value: string;
        prefix: string;
        last_name: string;
        suffix: string;
        first_name: string;
    };
    Formula: string;
    Single_Line: string;
    Number: string;
    Decimal: string;
    Decision_box: string;
    File_upload: string;
    Checkbox: string;
    Currency: string;
    Rich_Text: string;
    Lookup: {
        display_value: string;
        ID: string;
    };
    ID: string;
    Integration: {
        display_value: string;
        ID: string;
    };
    Multi_Select: string[];
    Keyword: string;
    Percent: string;
    Prediction: string;
    Dropdown: string;
    Inline_SubForm: { display_value: string; ID: string };
    Radio: string;
    Auto_Number: string;
    users: string;
    Audio: string;
    Video: string;
    Signature: string;
    Sentiment: string;
    Date_Time: string;
    Date_field: string;
    Object_Detection: string;
}
 
/* eslint-enable @typescript-eslint/naming-convention */