import { deserializeEnvelope } from "./SoapDeserializer"; import { string, date, dateTime, time, boolean, int } from "./SimpleXmlType"; import IXmlType from "./IXmlType"; import * as DateUtils from "./DateUtils"; import { soapEnvelopeNamespaceURI } from "./SoapCommon"; interface IAddress { line1?: string; line2?: string; suburb?: string; state?: string; postcode?: string; } interface ITagList { tag: string[]; } interface IPerson { firstName?: string; middleName?: string; lastName?: string; address?: IAddress; receiveSpam?: boolean; dateOfBirth?: Date; lastContactDate?: Date; timeTest?: Date; dodgyCommentCount?: number; tagList?: ITagList; } const personNamespaceURI = "http://www.person.com"; const addressNamespaceURI = "http://www.address.com"; const addressType : IXmlType = { namespaceURI: addressNamespaceURI, namespacePrefix: "addr", props: { line1: { type: string }, suburb: { type: string }, state: { type: string }, postcode: { type: string } } }; const listOfTagsType : IXmlType = { namespaceURI: personNamespaceURI, namespacePrefix: "per", props: { tag: { type: string, array: true } } } const personType : IXmlType = { namespaceURI: personNamespaceURI, namespacePrefix: "per", props : { firstName: { type: string }, middleName: { type: string, attribute: true }, lastName: { type: string }, address: { name: "Address", type: addressType }, receiveSpam: { name: "receivespam", type: boolean }, dateOfBirth: { type: date }, lastContactDate: { type: dateTime }, timeTest: { type: time }, dodgyCommentCount: { type: int }, tagList: { type : listOfTagsType } } }; describe("SoapDeserializer", () => { test("deserializeEnvelope() - default namespaces", () => { const source = ` Sunburn Slapper
10 Some Drive Lismore NSW 2480
true 1992-12-02 1994-11-03T13:22:28.223Z 04:52:22.333 3 idiot test
`; const er = deserializeEnvelope(source, personType); console.log("-- Envelope Result: " + JSON.stringify(er)); expect(er.header).toBeFalsy(); expect(er.fault).toBeFalsy(); expect(er.body).toBeTruthy(); const r = er.body; expect(r.firstName).toBe("Sunburn"); expect(r.middleName).toBe("H"); expect(r.lastName).toBe("Slapper"); expect(r.receiveSpam).toBeTruthy(); expect(DateUtils.dateToDataText(r.dateOfBirth)).toBe("1992-12-02"); expect(DateUtils.dateToTimestampDataText(r.lastContactDate)).toBe("1994-11-03T13:22:28.223Z"); expect(DateUtils.dateToTimeDataText(r.timeTest)).toBe("04:52:22.333"); expect(r.address.line1).toBe("10 Some Drive"); expect(r.address.suburb).toBe("Lismore"); expect(r.address.state).toBe("NSW"); expect(r.address.postcode).toBe("2480"); expect(r.dodgyCommentCount).toBe(3); expect(r.tagList.tag.length).toBe(2); expect(r.tagList.tag[0]).toBe("idiot"); expect(r.tagList.tag[1]).toBe("test"); }); test("deserializeEnvelope() - simple", () => { const source = ` Sunburn Slapper
10 Some Drive Lismore NSW 2480
true 1992-12-02 1994-11-03T13:22:28.223Z 04:52:22.333 3 idiot test
`; const er = deserializeEnvelope(source, personType); console.log("-- Envelope Result: " + JSON.stringify(er)); expect(er.header).toBeFalsy(); expect(er.fault).toBeFalsy(); expect(er.body).toBeTruthy(); const r = er.body; expect(r.firstName).toBe("Sunburn"); expect(r.middleName).toBe("H"); expect(r.lastName).toBe("Slapper"); expect(r.receiveSpam).toBeTruthy(); expect(DateUtils.dateToDataText(r.dateOfBirth)).toBe("1992-12-02"); expect(DateUtils.dateToTimestampDataText(r.lastContactDate)).toBe("1994-11-03T13:22:28.223Z"); expect(DateUtils.dateToTimeDataText(r.timeTest)).toBe("04:52:22.333"); expect(r.address.line1).toBe("10 Some Drive"); expect(r.address.suburb).toBe("Lismore"); expect(r.address.state).toBe("NSW"); expect(r.address.postcode).toBe("2480"); expect(r.dodgyCommentCount).toBe(3); expect(r.tagList.tag.length).toBe(2); expect(r.tagList.tag[0]).toBe("idiot"); expect(r.tagList.tag[1]).toBe("test"); }); test("deserializeEnvelope() - fault - basic", () => { const source = ` TestFaultCode Test Fault String `; const er = deserializeEnvelope(source, personType); console.log("-- Envelope Result: " + JSON.stringify(er)); expect(er.header).toBeFalsy(); expect(er.body).toBeFalsy(); expect(er.fault).toBeTruthy(); expect(er.fault.faultcode).toBe("TestFaultCode"); expect(er.fault.faultstring).toBe("Test Fault String"); }); });