import { TrustpilotClient } from "./TrustpilotClient"; import { Mock, It, IMock, Times } from 'typemoq'; import { TrustpilotBusinessUnit, TrustpilotBusinessUnitWebLinks, TrustpilotSummary } from "../entities/Trustpilot"; import { appConfig } from "../entities/AppConfig.fixture"; import { businessUnitResponse, webLinksResponse } from "../entities/Trustpilot.fixture"; import { $q } from '../util/PromiseUtils'; import { expect } from 'chai'; describe('Trustpilot client', () => { const $http: IMock = Mock.ofType(); const trustpilotClient: TrustpilotClient = new TrustpilotClient($q, $http.object); it('should return the summary', () => { $http.setup(x => x.get("https://api.trustpilot.com/v1/business-units/4e71fb7f0000640005110198", It.isAny())).returns(() => Promise.resolve({ data: businessUnitResponse })); $http.setup(x => x.get("https://api.trustpilot.com/v1/business-units/4e71fb7f0000640005110198/web-links", It.isAny())).returns(() => Promise.resolve({ data: webLinksResponse })); return expect(trustpilotClient.getSummary()).to.eventually.deep.equal({ trustScore: businessUnitResponse.trustScore, numberOfReviews: businessUnitResponse.numberOfReviews.total, profileUrl: webLinksResponse.profileUrl }); }); it('should fail when trustpilot responds with an error', () => { $http.setup(x => x.get("https://api.trustpilot.com/v1/business-units/4e71fb7f0000640005110198", It.isAny())).returns(() => Promise.resolve({ data: businessUnitResponse })); $http.setup(x => x.get("https://api.trustpilot.com/v1/business-units/4e71fb7f0000640005110198/web-links", It.isAny())).returns(() => Promise.reject<{}>({ error: "error" })); return expect(trustpilotClient.getSummary()).to.be.rejectedWith({ error: "error" }); }); });