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

Commit

Permalink
feat: made getInboundGuidanceForSku
Browse files Browse the repository at this point in the history
  • Loading branch information
justinemmanuelmercado committed Jul 9, 2020
1 parent 55f7dbe commit ea63761
Show file tree
Hide file tree
Showing 3 changed files with 114 additions and 7 deletions.
65 changes: 64 additions & 1 deletion src/sections/fulfillment-inbound-shipment.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,74 @@
import { HttpClient, Resource } from '../http'
import { Codec, enumeration, GetInterface, optional, string } from 'purify-ts'

import { ParsingError } from '../error'
import { HttpClient, RequestMeta, Resource } from '../http'
import { ensureArray } from '../parsing'
import { getServiceStatusByResource } from './shared'

const FULFILLMENT_INBOUND_SHIPMENT_API_VERSION = '2010-10-01'

interface GetInboundGuidanceForSKUParameters {
SellerSKUList: string[]
MarketplaceId: string
}

enum GuidanceReasonEnum {
SlowMovingASIN = 'SlowMovingASIN',
NoApplicableGuidance = 'NoApplicableGuidance',
}

enum InboundGuidanceEnum {
InboundNotRecommended = 'InboundNotRecommended',
InboundOK = 'InboundOK',
}

const GuidanceReason = enumeration(GuidanceReasonEnum)
const InboundGuidance = enumeration(InboundGuidanceEnum)

const SKUInboundGuidance = Codec.interface({
SellerSKU: string,
ASIN: string,
InboundGuidance,
GuidanceReasonList: optional(ensureArray('GuidanceReason', GuidanceReason)),
})

const GetInboundGuidanceForSKU = Codec.interface({
SKUInboundGuidanceList: ensureArray('SKUInboundGuidance', SKUInboundGuidance),
InvalidSKUList: optional(string),
})

type GetInboundGuidanceForSKU = GetInterface<typeof GetInboundGuidanceForSKU>

const GetInboundGuidanceForSKUResponse = Codec.interface({
GetInboundGuidanceForSKUResponse: Codec.interface({
GetInboundGuidanceForSKUResult: GetInboundGuidanceForSKU,
}),
})

export class FulfillmentInboundShipment {
constructor(private httpClient: HttpClient) {}

async getInboundGuidanceForSku(
parameters: GetInboundGuidanceForSKUParameters,
): Promise<[GetInboundGuidanceForSKU, RequestMeta]> {
const [response, meta] = await this.httpClient.request('POST', {
resource: Resource.FulfillmentInboundShipment,
version: FULFILLMENT_INBOUND_SHIPMENT_API_VERSION,
action: 'GetInboundGuidanceForSKU',
parameters: {
'SellerSKUList.Id': parameters.SellerSKUList,
MarketplaceId: parameters.MarketplaceId,
},
})

return GetInboundGuidanceForSKUResponse.decode(response).caseOf({
Right: (x) => [x.GetInboundGuidanceForSKUResponse.GetInboundGuidanceForSKUResult, meta],
Left: (error) => {
throw new ParsingError(error)
},
})
}

async getServiceStatus() {
return getServiceStatusByResource(
this.httpClient,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
<GetInboundGuidanceForSKUResponse xmlns="https://mws.amazonservices.com/FulfillmentInboundShipment/2010-10-01">
<GetInboundGuidanceForSKUResult>
<SKUInboundGuidanceList>
<SellerSKU>us001</SellerSKU>
<ASIN>B00005N5PF</ASIN>
<InboundGuidance>InboundNotRecommended</InboundGuidance>
<GuidanceReasonList>
<GuidanceReason>SlowMovingASIN</GuidanceReason>
</GuidanceReasonList>
<SKUInboundGuidance>
<SellerSKU>us001</SellerSKU>
<ASIN>B00005N5PF</ASIN>
<InboundGuidance>InboundNotRecommended</InboundGuidance>
<GuidanceReasonList>
<GuidanceReason>SlowMovingASIN</GuidanceReason>
</GuidanceReasonList>
</SKUInboundGuidance>
</SKUInboundGuidanceList>
<InvalidSKUList></InvalidSKUList>
</GetInboundGuidanceForSKUResult>
Expand Down
42 changes: 42 additions & 0 deletions test/unit/__snapshots__/fulfillment-inbound-shipment.test.ts.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`fulfillmentInboundShipment getInboundGuidanceForSku returns sku inbound guidance list if succesful 1`] = `
Array [
Object {
"InvalidSKUList": "",
"SKUInboundGuidanceList": Array [
Object {
"ASIN": "B00005N5PF",
"GuidanceReasonList": Array [
"SlowMovingASIN",
],
"InboundGuidance": "InboundNotRecommended",
"SellerSKU": "us001",
},
],
},
Object {
"quotaMax": 1000,
"quotaRemaining": 999,
"quotaResetOn": 2020-04-06T10:22:23.582Z,
"requestId": "0",
"timestamp": 2020-05-06T09:22:23.582Z,
},
]
`;

exports[`fulfillmentInboundShipment getServiceStatus returns a parsed model when the status response is valid 1`] = `
Array [
Object {
"Status": "GREEN",
"Timestamp": "2020-05-06T08:22:23.582Z",
},
Object {
"quotaMax": 1000,
"quotaRemaining": 999,
"quotaResetOn": 2020-04-06T10:22:23.582Z,
"requestId": "0",
"timestamp": 2020-05-06T09:22:23.582Z,
},
]
`;

0 comments on commit ea63761

Please sign in to comment.