Skip to content
This repository has been archived by the owner on Feb 6, 2024. It is now read-only.

Commit

Permalink
feat: update getTransportContent
Browse files Browse the repository at this point in the history
  • Loading branch information
justinemmanuelmercado committed Jul 14, 2020
1 parent b8bb806 commit 1e9f3b2
Show file tree
Hide file tree
Showing 3 changed files with 155 additions and 22 deletions.
119 changes: 103 additions & 16 deletions src/sections/fulfillment-inbound-shipment/codec.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import { boolean, Codec, enumeration, GetInterface, number, optional, string } from 'purify-ts'

import { ensureArray, ensureString, mwsDate } from '../../parsing'
import { DimensionsUnitEnum } from '../merchant-fulfillment/codec'
import {
boolean,
Codec,
enumeration,
GetInterface,
number,
optional,
string,
unknown,
} from 'purify-ts'

import { ensureArray, ensureString } from '../../parsing'
import { CreateInboundShipmentParameters, PrepInstructionEnum, PrepOwnerEnum } from './type'
CreateInboundShipmentParameters,
PackageStatusEnum,
PrepInstructionEnum,
PrepOwnerEnum,
WeightUnitEnum,
} from './type'

enum GuidanceReasonEnum {
SlowMovingASIN = 'SlowMovingASIN',
Expand Down Expand Up @@ -297,14 +295,103 @@ const TransportHeader = Codec.interface({
ShipmentType: string,
})

// const TransportDetails = Codec.interface({
const PartneredEstimate = Codec.interface({
Amount: optional(Amount),
ConfirmDeadline: optional(mwsDate),
VoidDeadline: optional(mwsDate),
})

const PackageStatus = enumeration(PackageStatusEnum)

const DimensionsUnit = enumeration(DimensionsUnitEnum)

const FIBDimensions = Codec.interface({
Unit: DimensionsUnit,
Length: number,
Width: number,
Height: number,
})

const WeightUnit = enumeration(WeightUnitEnum)

const FIBWeight = Codec.interface({
Unit: WeightUnit,
Value: number,
})

const PartneredSmallParcelPackageOutput = Codec.interface({
Dimensions: FIBDimensions,
Weight: FIBWeight,
TrackingId: ensureString,
PackageStatus,
CarrierName: string,
})

const NonPartneredSmallParcelPackageOutput = Codec.interface({
CarrierName: string,
TrackingId: ensureString,
PackageStatus,
})

const NonPartneredSmallParcelDataOutput = Codec.interface({
PackageList: ensureArray('member', NonPartneredSmallParcelPackageOutput),
})

// })
const PartneredSmallParcelDataOutput = Codec.interface({
PackageList: ensureArray('member', PartneredSmallParcelPackageOutput),
PartneredEstimate: optional(PartneredEstimate),
})

const Contact = Codec.interface({
Name: string,
Phone: string,
Email: string,
Fax: string,
})

const Pallet = Codec.interface({
Dimensions: FIBDimensions,
Weight: optional(FIBWeight),
IsStacked: boolean,
})

const PartneredLtlDataOutput = Codec.interface({
Contact,
BoxCount: number,
SellerFreightClass: optional(string),
FreightReadyDate: string,
PalletList: ensureArray('member', Pallet),
SellerDeclaredValue: optional(Amount),
AmazonCalculatedValue: optional(Amount),
PreviewPickupDate: mwsDate,
PreviewDeliveryDate: mwsDate,
PreviewFreightClass: string,
AmazonReferenceId: ensureString,
IsBillOfLadingAvailable: boolean,
PartneredEstimate: optional(PartneredEstimate),
CarrierName: string,
})

const NonPartneredLtlDataOutput = Codec.interface({
CarrierName: string,
ProNumber: ensureString,
})

const TransportDetails = Codec.interface({
PartneredSmallParcelData: optional(PartneredSmallParcelDataOutput),
NonPartneredSmallParcelData: optional(NonPartneredSmallParcelDataOutput),
PartneredLtlData: optional(PartneredLtlDataOutput),
NonPartneredLtlData: optional(NonPartneredLtlDataOutput),
})

const TransportResult = Codec.interface({
TransportStatus,
})

const TransportContent = Codec.interface({
TransportHeader,
TransportDetails: unknown,
TransportResult: unknown,
TransportDetails,
TransportResult,
})

const GetTransportContent = Codec.interface({
Expand Down
21 changes: 18 additions & 3 deletions src/sections/fulfillment-inbound-shipment/type.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { Parameters, ParameterTypes } from '../../http'
import { DimensionsUnitEnum } from '../merchant-fulfillment/codec'
import { RequireOnlyOne } from '../types'

export const canonicalizeInboundShipmentPlanRequestItems = (
Expand Down Expand Up @@ -216,7 +217,7 @@ interface PartneredEstimate {
VoidDeadline?: Date
}

type DimensionsUnit = 'inches' | 'centimeters'
type DimensionsUnit = keyof typeof DimensionsUnitEnum

interface FIBDimensions {
Unit: DimensionsUnit
Expand All @@ -225,14 +226,28 @@ interface FIBDimensions {
Height: number
}

type WeightUnit = 'pounds' | 'kilograms'
export enum WeightUnitEnum {
'pounds',
'kilograms',
}

type WeightUnit = keyof typeof WeightUnitEnum

interface FIBWeight {
Unit: WeightUnit
Value: number
}

type PackageStatus = 'SHIPPED' | 'IN_TRANSIT' | 'DELIVERED' | 'CHECKED_IN' | 'RECEIVING' | 'CLOSED'
export enum PackageStatusEnum {
'SHIPPED',
'IN_TRANSIT',
'DELIVERED',
'CHECKED_IN',
'RECEIVING',
'CLOSED',
}

type PackageStatus = keyof typeof PackageStatusEnum

export interface PartneredSmallParcelPackageInput {
Dimensions: FIBDimensions
Expand Down
37 changes: 34 additions & 3 deletions test/unit/__snapshots__/fulfillment-inbound-shipment.test.ts.snap
Original file line number Diff line number Diff line change
Expand Up @@ -268,19 +268,50 @@ Array [
]
`;

exports[`fulfillmentInboundShipment getTransportContent returns the transport content for LTL if succesful 1`] = `
Array [
Object {
"TransportContent": Object {
"TransportDetails": Object {
"NonPartneredLtlData": Object {
"CarrierName": "ABF FREIGHT SYSTEM INC",
"ProNumber": "123456",
},
},
"TransportHeader": Object {
"IsPartnered": false,
"SellerId": "A135KKEKWF1J56",
"ShipmentId": "FBAQFGQZ",
"ShipmentType": "LTL",
},
"TransportResult": Object {
"TransportStatus": "WORKING",
},
},
},
Object {
"quotaMax": 1000,
"quotaRemaining": 999,
"quotaResetOn": 2020-04-06T10:22:23.582Z,
"requestId": "0",
"timestamp": 2020-05-06T09:22:23.582Z,
},
]
`;

exports[`fulfillmentInboundShipment getTransportContent returns the transport content if succesful 1`] = `
Array [
Object {
"TransportContent": Object {
"TransportDetails": Object {
"NonPartneredSmallParcelData": Object {
"PackageList": Object {
"member": Object {
"PackageList": Array [
Object {
"CarrierName": "UNITED PARCEL SERVICE INC",
"PackageStatus": "SHIPPED",
"TrackingId": "1Z6Y68W00342402864",
},
},
],
},
},
"TransportHeader": Object {
Expand Down

0 comments on commit 1e9f3b2

Please sign in to comment.