diff --git a/example/index.ts b/example/index.ts index bfe5db3..805b9d1 100644 --- a/example/index.ts +++ b/example/index.ts @@ -19,10 +19,8 @@ const someFunction = async () => { const result = await sfmc .dataExtension("DataExtensionName") .get() - .where("EmailAddress", "eq", "someemail@example.com") console.log(result); - const resultSoap = await sfmc .dataExtension("DataExtensionName") .soap @@ -30,7 +28,7 @@ const someFunction = async () => { queryAllAccounts: true, }) .where("Name", "equals", "test"); - + console.log(resultSoap); }; diff --git a/src/utils/soap/soap-client.ts b/src/utils/soap/soap-client.ts index 6ee5c3a..3ed436b 100644 --- a/src/utils/soap/soap-client.ts +++ b/src/utils/soap/soap-client.ts @@ -1,13 +1,16 @@ -import { SfmcHelper } from "../../sfmc-ts"; import fetch from "node-fetch"; +import { parseStringPromise } from "xml2js"; + import { createDataExtensionBody, createFieldsXml, } from "../../models/soap/create"; + import { deleteDataExtensionBody } from "../../models/soap/delete"; import { retrieveDataExtensionBody } from "../../models/soap/retrieve"; -import { parseStringPromise } from "xml2js"; import { SfmcSoapFilter, createFilterXml } from "./soap-filter"; +import { SfmcHelper } from "../../sfmc-ts"; + enum SoapAction { Create = "Create", @@ -80,7 +83,6 @@ export class SfmcDataExtensionSoap implements ISoapRequest { ): Promise { await this.helper.authenticate(); const soapEnvelope = this.buildSoapEnvelope(requestBody); - console.log(soapEnvelope); let response: any; try { response = await fetch( @@ -151,8 +153,7 @@ export class SfmcDataExtensionSoap implements ISoapRequest { .join(""); const filterXml = filters.length > 0 ? createFilterXml(filters) : ""; - - + const response = await this.sendSoapRequest( retrieveDataExtensionBody( this.objectKey, @@ -165,12 +166,9 @@ export class SfmcDataExtensionSoap implements ISoapRequest { const envelopeBody = response["soap:Envelope"]["soap:Body"]; const retrieveResponse = envelopeBody.RetrieveResponseMsg; - - - + const overallStatus = retrieveResponse.OverallStatus; const results = retrieveResponse.Results; - const resultsArray = Array.isArray(results) ? results diff --git a/tests/mock-data.ts b/tests/mock-data.ts index cb30b6f..2b12de5 100644 --- a/tests/mock-data.ts +++ b/tests/mock-data.ts @@ -3,6 +3,7 @@ export const apiConfig = { clientSecret: "test_client_secret", authEndpoint: "https://auth.example.com", restEndpoint: "https://rest.example.com", + soapEndpoint: "https://soap.example.com", businessUnitId: "test_business_unit_id", }; export const authResponse = { diff --git a/tests/sfmc.test.ts b/tests/sfmc.test.ts index b2a6409..9c88101 100644 --- a/tests/sfmc.test.ts +++ b/tests/sfmc.test.ts @@ -3,6 +3,7 @@ import { ComparisonEnum } from "../src/index"; import { SfmcHelper } from "../src/sfmc-ts"; import { SfmcQueryBuilder } from "../src/utils/query-builder"; import { apiConfig, authResponse, authRequestBody } from "./mock-data"; +import { SfmcDataExtensionSoap } from "../src/utils/soap/soap-client"; describe("SfmcHelper", () => { nock.disableNetConnect(); @@ -178,4 +179,53 @@ describe("SfmcHelper", () => { expect(result).toEqual(rowsetResponse.items.map((item) => item.values)); }); + + it("should fetch via soap api", async () => { + const dataExtension = "test_data_extension_key"; + const fields = ["test_column_1", "test_column_2"]; + const testValues = { + test_column_1: "value_1", + test_column_2: "value_2", + }; + + const soapResponse = ` + + + + OK + 123456789 + + + + DataExtensionObject + + ${fields + .map( + (field) => + // @ts-ignore + `${field}${testValues[field]}` + ) + .join("")} + + + + Retrieve + + + + `; + + nock(apiConfig.soapEndpoint) + .persist() + .post("/Service.asmx") + .reply(200, soapResponse); + + const de = new SfmcDataExtensionSoap(helper, dataExtension); + const result = await de.get({ + fields, + filters: [], + }); + + expect(result).toEqual([testValues]); + }); });