import * as chai from 'chai'; import 'mocha'; import { CopperActivity, CopperActivityType, CopperCustomField, CopperLead, CopperOpportunity, } from '../../../src/entities'; import { CopperActivityResponse, CopperActivityTypeCategory, CopperActivityTypeResponse, CopperCustomFieldResponse, CopperSearchResponse, parseActivities, parseActivityTypes, parseCustomFields, parseLeads, parseOpportunities, } from '../../../src/parsers/copper'; import { chaiSetup } from '../../utils/chai_setup'; chaiSetup.configure(); const expect = chai.expect; type CopperResponse = CopperSearchResponse | CopperCustomFieldResponse; type CopperEntity = CopperLead | CopperActivity | CopperOpportunity | CopperActivityType | CopperCustomField; import * as activityTypesApiResponse from '../../fixtures/copper/api_v1_activity_types.json'; import * as customFieldsApiResponse from '../../fixtures/copper/api_v1_custom_field_definitions.json'; import * as listActivitiesApiResponse from '../../fixtures/copper/api_v1_list_activities.json'; import * as listLeadsApiResponse from '../../fixtures/copper/api_v1_list_leads.json'; import * as listOpportunitiesApiResponse from '../../fixtures/copper/api_v1_list_opportunities.json'; import { ParsedActivities, ParsedActivityTypes, ParsedCustomFields, ParsedLeads, ParsedOpportunities, } from '../../fixtures/copper/parsed_entities'; interface TestCase { input: CopperResponse[]; expected: CopperEntity[]; parseFn(input: CopperResponse[]): CopperEntity[]; } const testCases: TestCase[] = [ { input: listLeadsApiResponse, expected: ParsedLeads, parseFn: parseLeads, }, { input: (listActivitiesApiResponse as unknown) as CopperActivityResponse[], expected: ParsedActivities, parseFn: parseActivities, }, { input: listOpportunitiesApiResponse, expected: ParsedOpportunities, parseFn: parseOpportunities, }, { input: customFieldsApiResponse, expected: ParsedCustomFields, parseFn: parseCustomFields, }, ]; describe('Copper parser', () => { it('parses API responses', () => { testCases.forEach(testCase => { const actual: CopperEntity[] = testCase.parseFn(testCase.input); expect(actual).deep.equal(testCase.expected); }); }); // special case because the API response is not an array it('parses activity types API response', () => { const actual: CopperActivityType[] = parseActivityTypes((activityTypesApiResponse as unknown) as Map< CopperActivityTypeCategory, CopperActivityTypeResponse[] >); expect(actual).deep.equal(ParsedActivityTypes); }); });