Skip to content

Commit 8a12605

Browse files
committed
finish schema
1 parent 82179fe commit 8a12605

File tree

3 files changed

+143
-25
lines changed

3 files changed

+143
-25
lines changed

config.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
module.exports = {
2-
"API_LOGIN_ID": "2msN9nrBG8K",
3-
"TRANSACTION_KEY": "43jNykM6kC8v87Nb"
4-
};
2+
"API_LOGIN_ID": "2msN9nrBG8K",
3+
"TRANSACTION_KEY": "43jNykM6kC8v87Nb"
4+
};

lib/applySchema.js

Lines changed: 71 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
//xsd schema expects a sequence of fields, Javascript json object (map) does not ensure an order in the keys, we have to use arrays
22

3-
//schema not complete ...
43
var transactionRequestSchema = [
54
{node: 'merchantAuthentication', value: [
65
{node: 'name'},
@@ -21,6 +20,50 @@ var transactionRequestSchema = [
2120
{node: 'cardCode'}
2221
]}
2322
]},
23+
{node : 'profile', value : [
24+
{node: 'createProfile'},
25+
{node: 'customerProfileId'},
26+
{node: 'paymentProfile', value: [
27+
{node: 'paymentProfileId'},
28+
{node: 'cardCode'},
29+
{node: 'shippingProfileId'}
30+
]}
31+
]},
32+
{node: 'order', value : [
33+
{node: 'invoiceNumber'},
34+
{node: 'description'}
35+
]},
36+
{node : 'lineItems', value: [
37+
[{node: 'lineItem', value: [
38+
{node: 'itemId'},
39+
{node: 'name'},
40+
{node: 'description'},
41+
{node: 'quantity'},
42+
{node: 'unitPrice'}
43+
]}]
44+
]},
45+
{node: 'tax', value: [
46+
{node: 'amount'},
47+
{node: 'name'},
48+
{node: 'description'}
49+
]},
50+
{node: 'duty', value: [
51+
{node: 'amount'},
52+
{node: 'name'},
53+
{node: 'description'}
54+
]},
55+
{node: 'shipping', value: [
56+
{node: 'amount'},
57+
{node: 'name'},
58+
{node: 'description'},
59+
{node: 'taxExempt'},
60+
]},
61+
{node: 'poNumber'},
62+
{node : 'customer', value: [
63+
{node: 'type'},
64+
{node: 'id'},
65+
{node: 'email'}
66+
]},
2467
{node: 'billTo', value: [
2568
{node: 'firstName'},
2669
{node: 'lastName'},
@@ -29,7 +72,9 @@ var transactionRequestSchema = [
2972
{node: 'city'},
3073
{node: 'state'},
3174
{node: 'zip'},
32-
{node: 'country'}
75+
{node: 'country'},
76+
{node: 'phoneNumber'},
77+
{node: 'faxNumber'}
3378
]},
3479
{node: 'shipTo', value: [
3580
{node: 'firstName'},
@@ -39,7 +84,29 @@ var transactionRequestSchema = [
3984
{node: 'city'},
4085
{node: 'state'},
4186
{node: 'zip'},
42-
{node: 'country'}
87+
{node: 'country'},
88+
{node: 'customerIP'}
89+
]},
90+
{node: 'cardholderAuthentication', value: [
91+
{node: 'Authentication Indicator'},
92+
{node: 'Cardholder Authentication Value'}
93+
]},
94+
{node: 'retail', value: [
95+
{node: 'marketType'},
96+
{node: 'deviceType'}
97+
]},
98+
{node: 'transactionSettings', value: [
99+
[{node: 'setting', value: [
100+
{node: 'settingName'},
101+
{node: 'settingValue'}
102+
103+
]}]
104+
]},
105+
{node: 'userFields', value: [
106+
[{node: 'userField', value: [
107+
{node: 'name'},
108+
{node: 'value'}
109+
]}]
43110
]}
44111
]}
45112
];
@@ -51,7 +118,7 @@ function applySchema(schema, obj) {
51118
var value = val.value;
52119
var node = {};
53120

54-
if (!value) {
121+
if (!value || !(value.constructor === Array && value.length > 1)) {
55122
//leaf
56123
if (obj[key]) {
57124
node[key] = obj[key];

test.js

Lines changed: 69 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,51 @@ describe('AuthorizeNet service', function () {
2222
service.authCaptureTransaction(randomAmount(), 4012888818888, 2017, 1).then(function (transaction) {
2323
assert.equal(transaction.transactionResponse.responseCode, '1');
2424
done();
25-
});
25+
}, function(rejection){
26+
done(rejection);
27+
})
2628
});
2729

2830
it('should submit authorizationCapture request with some extra params', function (done) {
2931
service.authCaptureTransaction(randomAmount(), 4012888818888, 2016, 10, {
3032
transactionRequest: {
3133
payment: {creditCard: {cardCode: 999}},
32-
billTo: {firstName: 'bob', lastName: 'Eponge'}
34+
lineItems : [
35+
{lineItem: {itemId:1, name: 'Test Item', quantity:2, unitPrice: 4.99}},
36+
{lineItem: {itemId:2, name: 'Test Item2', quantity:3, unitPrice: 5.99}}
37+
],
38+
tax : {
39+
amount: 2.13,
40+
name: 'city tax',
41+
description: 'some text here'
42+
},
43+
duty : {
44+
amount: 1.21,
45+
name: 'duty name',
46+
description: 'duty description'
47+
},
48+
shipping : {
49+
amount: 12.99,
50+
name: '2 Day Shipping',
51+
description: 'UPS'
52+
},
53+
poNumber : 'abcd-1234',
54+
billTo: {firstName: 'bob', lastName: 'Eponge'},
55+
customer : {
56+
id : 12345678
57+
},
58+
userFields : [
59+
{userField: {name: 'cartId', value: 'xyx1234'}},
60+
{userField: {name: 'discountCode', value: 'xcxcx'}}
61+
]
3362
}
3463
}).then(function (transaction) {
3564
assert.equal(transaction.transactionResponse.responseCode, '1');
3665
done();
66+
}, function(rejection){
67+
done(JSON.stringify(rejection));
3768
});
38-
});
69+
});
3970

4071
it('should reject the promise when web service send an error code', function (done) {
4172
service.authCaptureTransaction(randomAmount(), 234234, 2016, 10).then(function () {
@@ -66,14 +97,18 @@ describe('AuthorizeNet service', function () {
6697
service.authOnlyTransaction(randomAmount(), 4007000000027, 2016, 2).then(function (transaction) {
6798
assert.equal(transaction.transactionResponse.responseCode, '1');
6899
done();
69-
});
100+
}).catch(function(err){
101+
done(err);
102+
})
70103
});
71104

72105
it('should submit authorization only request with extra params', function (done) {
73106
service.authOnlyTransaction(randomAmount(), 4007000000027, 2017, 11, {transactionRequest: {payment: {creditCard: {cardCode: 666}}}}).then(function (transaction) {
74107
assert.equal(transaction.transactionResponse.responseCode, '1');
75108
done();
76-
});
109+
}).catch(function(err){
110+
done(err);
111+
})
77112
});
78113

79114
it('should reject the promise when web service send an error code', function (done) {
@@ -114,6 +149,7 @@ describe('AuthorizeNet service', function () {
114149
})
115150
.catch(function (err) {
116151
console.log(err);
152+
done(err);
117153
});
118154
});
119155

@@ -178,7 +214,10 @@ describe('AuthorizeNet service', function () {
178214
.then(function (trans) {
179215
assert.equal(trans.transactionResponse.responseCode, '1');
180216
done();
181-
});
217+
})
218+
.catch(function(err){
219+
done(err);
220+
})
182221
});
183222

184223
it('should reject the promise when web service send an error code', function (done) {
@@ -218,7 +257,10 @@ describe('AuthorizeNet service', function () {
218257
assert.equal(trans.transaction.responseCode, '1');
219258
assert.equal(trans.transaction.transId, transId);
220259
done();
221-
});
260+
})
261+
.catch(function(err){
262+
done(err);
263+
})
222264
});
223265

224266
it('should reject the promise when web service return error code', function (done) {
@@ -250,7 +292,9 @@ describe('AuthorizeNet service', function () {
250292
service.getUnsettledTransactionList().then(function (response) {
251293
assert(response.transactions, 'transactions field should be defined');
252294
done();
253-
});
295+
}).catch(function(err){
296+
done(err);
297+
})
254298
});
255299

256300
});
@@ -261,7 +305,9 @@ describe('AuthorizeNet service', function () {
261305
service.getSettledBatchList(true, new Date(Date.now() - 7 * 24 * 3600 * 1000), new Date()).then(function (response) {
262306
assert(response.batchList, 'batchList should be defined');
263307
done();
264-
});
308+
}).catch(function(err){
309+
done(err);
310+
})
265311
});
266312

267313
});
@@ -273,10 +319,12 @@ describe('AuthorizeNet service', function () {
273319
var batchId = response.batchList.batch.length ? response.batchList.batch[0].batchId : response.batchList.batch.batchId;
274320
return service.getBatchStatistics(batchId);
275321
})
276-
.then(function (response) {
277-
assert(response.batch, 'batch should be defined');
278-
done();
279-
});
322+
.then(function (response) {
323+
assert(response.batch, 'batch should be defined');
324+
done();
325+
}).catch(function(err){
326+
done(err);
327+
})
280328
});
281329

282330
it('should reject the promise if any error happens', function (done) {
@@ -298,10 +346,13 @@ describe('AuthorizeNet service', function () {
298346
var batchId = response.batchList.batch.length ? response.batchList.batch[0].batchId : response.batchList.batch.batchId;
299347
return service.getTransactionList(batchId);
300348
})
301-
.then(function (response) {
302-
assert(response.transactions.transaction, 'it should have a list of transactions');
303-
done();
304-
});
349+
.then(function (response) {
350+
assert(response.transactions.transaction, 'it should have a list of transactions');
351+
done();
352+
}).catch(function(err){
353+
done(err);
354+
})
305355
});
306-
});
356+
});
357+
307358
});

0 commit comments

Comments
 (0)