416 lines
11 KiB
Markdown
416 lines
11 KiB
Markdown
|
# Acceptance Criteria #
|
||
|
|
||
|
|
||
|
### 1. User generates receivecode ###
|
||
|
|
||
|
Create a new worldpay merchant account using `/payment-instruments/worldpay-merchants`
|
||
|
|
||
|
Testing data:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"key": "4f84d8e7-b800-444d-b2ad-2633d5561bc0",
|
||
|
"ID": "5aba3afdb28f2c8e1700c9b6"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
|
||
|
Using : `/receivecodes`
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"key": "4f84d8e7-b800-444d-b2ad-2633d5561bc0",
|
||
|
"ID": "5aba3afdb28f2c8e1700c9b6"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Response:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"receivecode": "WGB5U"
|
||
|
}
|
||
|
|
||
|
```
|
||
|
|
||
|
Database Contains:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"_id" : ObjectId("5aba3b2db28f2c8e1700c9b9"),
|
||
|
"ReceiveCode" : "WGB5U",
|
||
|
"Creation" : ISODate("2018-03-27T12:38:05.776Z"),
|
||
|
"Expiry" : ISODate("2018-03-27T12:41:05.776Z"),
|
||
|
"PaymentInstrument" : {
|
||
|
"_id" : ObjectId("5aba3afdb28f2c8e1700c9b6"),
|
||
|
"AccountType" : "Worldpay Online Payments Account",
|
||
|
"ReceivingAccount" : 1,
|
||
|
"PaymentsAccount" : 0,
|
||
|
"WorldpayOnlinePaymentsInfo" : {
|
||
|
"ServiceKeyEncrypted" : "3::3820fe3fa496b06d66f8c3c1e11fa7f590be6b3caf8ce31e9460b0eafade924d3da17699552fdfea26e48c8b904e52da146f4478a622b5aed3241182e27aa73eb91c94412e0c619506f57358f989b79369a4dd51c7ab8dea3a5ae961e758c22e",
|
||
|
"ServiceKey" : "T_S_********-****-****-****-********4bfb"
|
||
|
},
|
||
|
"UserID" : "79a26d981246978135edadf1",
|
||
|
"VendorID" : "Worldpay",
|
||
|
"VendorAccountName" : "Worldpay Online Payments",
|
||
|
"Description" : "Erskine Argon Inc. account.",
|
||
|
"IconLocation" : "worldpay-account.png",
|
||
|
"APIVersion" : "7.6.4-dev",
|
||
|
"Integrity" : null,
|
||
|
"LastUpdate" : ISODate("2018-03-27T12:37:17.423Z"),
|
||
|
"LastVersion" : 1
|
||
|
},
|
||
|
"Status" : "Pending"
|
||
|
}
|
||
|
|
||
|
```
|
||
|
|
||
|
_Receivecode object contains the receivecode string_
|
||
|
|
||
|
```json
|
||
|
"ReceiveCode" : "WGB5U"
|
||
|
```
|
||
|
|
||
|
_Receivecode object contains re-encrypted payment instrument details_
|
||
|
|
||
|
```json
|
||
|
"WorldpayOnlinePaymentsInfo" : {
|
||
|
"ServiceKeyEncrypted" : "3::3820fe3fa496b06d66f8c3c1e11fa7f590be6b3caf8ce31e9460b0eafade924d3da17699552fdfea26e48c8b904e52da146f4478a622b5aed3241182e27aa73eb91c94412e0c619506f57358f989b79369a4dd51c7ab8dea3a5ae961e758c22e",
|
||
|
"ServiceKey" : "T_S_********-****-****-****-********4bfb"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
_Receivecode object contains an expiry timestamp_
|
||
|
|
||
|
```json
|
||
|
"Expiry" : ISODate("2018-03-27T12:41:05.776Z")
|
||
|
```
|
||
|
|
||
|
### 2. User specifies nonexistent instrument ID ###
|
||
|
|
||
|
Using : `/receivecodes`
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"key": "12345678-9012-3456-7890-123456789012",
|
||
|
"ID": "000000000000000000000000"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Response:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"code": 600,
|
||
|
"info": "The instrument could not be found, has no access or has expired."
|
||
|
}
|
||
|
```
|
||
|
|
||
|
|
||
|
|
||
|
### 3. User specifies instrument ID belonging to another user ###
|
||
|
|
||
|
Create a new instrument for user `YTM2ZGQ1NzUtOWFmNS01MjMyLTg5MjYtM2NkZjA5ZDU2ZGU2`
|
||
|
|
||
|
Create a new worldpay merchant account using `/payment-instruments/worldpay-merchants`
|
||
|
|
||
|
Testing data:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"key": "f3c94230-2e2d-4b7a-8f27-7c05ca51ab1a",
|
||
|
"ID": "5aba42b5b28f2c8e1700c9c0"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Re-authorise with `YTM2ZGQ1NzUtOWFmNS01MjMyLTg5MjYtM2NkZjA5ZDU2ZGU1`
|
||
|
|
||
|
Using : `/receivecodes`
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"key": "f3c94230-2e2d-4b7a-8f27-7c05ca51ab1a",
|
||
|
"ID": "5aba42b5b28f2c8e1700c9c0"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Response:
|
||
|
|
||
|
`400 Error: Bad Request`
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"code": 600,
|
||
|
"info": "The instrument could not be found, has no access or has expired."
|
||
|
}
|
||
|
|
||
|
```
|
||
|
|
||
|
|
||
|
|
||
|
### 4. User provides incorrect encryption key ###
|
||
|
|
||
|
Using : `/receivecodes`
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"key": "badbadba-dbad-badb-adba-badbadbadbad",
|
||
|
"ID": "5aba3afdb28f2c8e1700c9b6"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Response:
|
||
|
|
||
|
`401 Error: Unauthroized`
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"code": 602,
|
||
|
"info": "The instrument could not be decrypted."
|
||
|
}
|
||
|
```
|
||
|
|
||
|
### 5. Payment instrument cannot create receivecodes ###
|
||
|
|
||
|
Create a new worldpay merchant account using `/payment-instruments/worldpay-merchants`
|
||
|
|
||
|
Testing data:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"key": "de851ec5-6b36-453a-870c-14bb63e16ede",
|
||
|
"ID": "5aba46ecb28f2c8e1700c9c8"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Modify record to remove the ability to create receive codes.
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"_id" : ObjectId("5aba46ecb28f2c8e1700c9c8"),
|
||
|
"AccountType" : "Worldpay Online Payments Account",
|
||
|
"ReceivingAccount" : 0,
|
||
|
"PaymentsAccount" : 0,
|
||
|
"WorldpayOnlinePaymentsInfo" : {
|
||
|
"ServiceKeyEncrypted" : "3::e6c0dea6b0dff24f0c3502830aaafbf04d3530e36b18180186bde15b2e0984b2c4ef841a6f05e4f3d8ba4fd73d50b2296e881ed1a60eadddff1d955a4d07ac61798ad8d04b307b9b4b8df8a23ba6aacdc4ed8068f5fcaaeb985d1642b16e8339",
|
||
|
"ServiceKey" : "T_S_********-****-****-****-********4bfb"
|
||
|
},
|
||
|
"UserID" : "79a26d981246978135edadf1",
|
||
|
"VendorID" : "Worldpay",
|
||
|
"VendorAccountName" : "Worldpay Online Payments",
|
||
|
"Description" : "Falkirk Tin Inc. account.",
|
||
|
"IconLocation" : "worldpay-account.png",
|
||
|
"APIVersion" : "7.6.4-dev",
|
||
|
"Integrity" : null,
|
||
|
"LastUpdate" : ISODate("2018-03-27T13:28:12.544Z"),
|
||
|
"LastVersion" : 1
|
||
|
}
|
||
|
|
||
|
```
|
||
|
|
||
|
Response:
|
||
|
|
||
|
`400 Error: Bad Request`
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"key": "de851ec5-6b36-453a-870c-14bb63e16ede",
|
||
|
"ID": "5aba46ecb28f2c8e1700c9c8"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
|
||
|
### 6. Receivecode should be deleted when it expires ###
|
||
|
|
||
|
Using : `/receivecodes`
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"key": "4f84d8e7-b800-444d-b2ad-2633d5561bc0",
|
||
|
"ID": "5aba3afdb28f2c8e1700c9b6"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Response: `201`
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"receivecode": "9S4CJ"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Database record:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"_id" : ObjectId("5aba5a31febf9e953ffadcab"),
|
||
|
"ReceiveCode" : "9S4CJ",
|
||
|
"Creation" : ISODate("2018-03-27T14:50:25.997Z"),
|
||
|
"Expiry" : ISODate("2018-03-27T14:53:25.997Z"),
|
||
|
"PaymentInstrument" : {
|
||
|
"_id" : ObjectId("5aba3afdb28f2c8e1700c9b6"),
|
||
|
"AccountType" : "Worldpay Online Payments Account",
|
||
|
"ReceivingAccount" : 1,
|
||
|
"PaymentsAccount" : 0,
|
||
|
"WorldpayOnlinePaymentsInfo" : {
|
||
|
"ServiceKeyEncrypted" : "3::75bcbcb07040bc95c2409800f67384e1e186e87fceb90c4a6291189635d2a11bb52ce93d0e83a9bd82d3e130c9f25f60f64529f9b4ae9e6feac6c9d4ca2e131d5efc4793fdaf97d8b89909b05a8bd39c940899b71e816a0242149e360ad551a0",
|
||
|
"ServiceKey" : "T_S_********-****-****-****-********4bfb"
|
||
|
},
|
||
|
"UserID" : "79a26d981246978135edadf1",
|
||
|
"VendorID" : "Worldpay",
|
||
|
"VendorAccountName" : "Worldpay Online Payments",
|
||
|
"Description" : "Erskine Argon Inc. account.",
|
||
|
"IconLocation" : "worldpay-account.png",
|
||
|
"APIVersion" : "7.6.4-dev",
|
||
|
"Integrity" : null,
|
||
|
"LastUpdate" : ISODate("2018-03-27T12:37:17.423Z"),
|
||
|
"LastVersion" : 1
|
||
|
},
|
||
|
"Status" : "Pending"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Database was checked again at 2018-03-27 14:54.
|
||
|
|
||
|
`db.getCollection('ReceiveCode').find({"_id" : ObjectId("5aba5a31febf9e953ffadcab")})`
|
||
|
|
||
|
`Fetched 0 record(s) in 1ms`
|
||
|
|
||
|
### 7. Request should be logged ###
|
||
|
|
||
|
Log for AC 1:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"_id" : ObjectId("5aba3b2db28f2c8e1700c9ba"),
|
||
|
"timestamp" : ISODate("2018-03-27T12:38:05.791Z"),
|
||
|
"level" : "info",
|
||
|
"message" : "Successfully created a receivecode",
|
||
|
"meta" : {
|
||
|
"logId" : "payments:paycodes",
|
||
|
"ip" : "127.0.0.1",
|
||
|
"reqId" : "56c96602-9d3d-49ad-8495-3a7527e85be5",
|
||
|
"userId" : "79a26d981246978135edadf1",
|
||
|
"file" : "/Users/martin/dev/bridge-node-server/node_server/dev_api/controllers/receivecode_controller.js",
|
||
|
"_receivecode" : "WGB5U",
|
||
|
"_instrumentID" : "5aba3afdb28f2c8e1700c9b6"
|
||
|
},
|
||
|
"hostname" : "Admins-MacBook-Pro.local"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Log for AC 2:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"_id" : ObjectId("5aba3f05b28f2c8e1700c9bd"),
|
||
|
"timestamp" : ISODate("2018-03-27T12:54:29.830Z"),
|
||
|
"level" : "error",
|
||
|
"message" : "Failed to create a receivecode",
|
||
|
"meta" : {
|
||
|
"logId" : "payments:paycodes",
|
||
|
"ip" : "127.0.0.1",
|
||
|
"reqId" : "6eaea836-c247-41e1-940a-a84dc192d5ce",
|
||
|
"userId" : "79a26d981246978135edadf1",
|
||
|
"file" : "/Users/martin/dev/bridge-node-server/node_server/dev_api/controllers/receivecode_controller.js",
|
||
|
"_instrumentID" : "000000000000000000000000",
|
||
|
"_internalError" : "Error: BRIDGE: INVALID INSTRUMENT",
|
||
|
"_httpCode" : 400,
|
||
|
"_info" : "The instrument could not be found, has no access or has expired.",
|
||
|
"_code" : 600
|
||
|
},
|
||
|
"hostname" : "Admins-MacBook-Pro.local"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Log for AC 3:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"_id" : ObjectId("5aba42fab28f2c8e1700c9c3"),
|
||
|
"timestamp" : ISODate("2018-03-27T13:11:22.983Z"),
|
||
|
"level" : "error",
|
||
|
"message" : "Failed to create a receivecode",
|
||
|
"meta" : {
|
||
|
"logId" : "payments:paycodes",
|
||
|
"ip" : "127.0.0.1",
|
||
|
"reqId" : "ad27c4a1-6324-459d-b457-380ed0d3140d",
|
||
|
"userId" : "79a26d981246978135edadf1",
|
||
|
"file" : "/Users/martin/dev/bridge-node-server/node_server/dev_api/controllers/receivecode_controller.js",
|
||
|
"_instrumentID" : "5aba42b5b28f2c8e1700c9c0",
|
||
|
"_internalError" : "Error: BRIDGE: INVALID INSTRUMENT",
|
||
|
"_httpCode" : 400,
|
||
|
"_info" : "The instrument could not be found, has no access or has expired.",
|
||
|
"_code" : 600
|
||
|
},
|
||
|
"hostname" : "Admins-MacBook-Pro.local"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Log for AC 4:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"_id" : ObjectId("5aba4634b28f2c8e1700c9c6"),
|
||
|
"timestamp" : ISODate("2018-03-27T13:25:08.701Z"),
|
||
|
"level" : "error",
|
||
|
"message" : "Failed to create a receivecode",
|
||
|
"meta" : {
|
||
|
"logId" : "payments:paycodes",
|
||
|
"ip" : "127.0.0.1",
|
||
|
"reqId" : "14dcc4b2-80dc-41da-a680-f648099205e6",
|
||
|
"userId" : "79a26d981246978135edadf1",
|
||
|
"file" : "/Users/martin/dev/bridge-node-server/node_server/dev_api/controllers/receivecode_controller.js",
|
||
|
"_instrumentID" : "5aba3afdb28f2c8e1700c9b6",
|
||
|
"_internalError" : "Error: BRIDGE: INSTRUMENT DECRYPTION FAILURE",
|
||
|
"_httpCode" : 401,
|
||
|
"_info" : "The instrument could not be decrypted.",
|
||
|
"_code" : 602
|
||
|
},
|
||
|
"hostname" : "Admins-MacBook-Pro.local"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Log for AC 5:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"_id" : ObjectId("5aba55a4febf9e953ffadca8"),
|
||
|
"timestamp" : ISODate("2018-03-27T14:31:00.918Z"),
|
||
|
"level" : "error",
|
||
|
"message" : "Failed to create a receivecode",
|
||
|
"meta" : {
|
||
|
"logId" : "payments:paycodes",
|
||
|
"ip" : "127.0.0.1",
|
||
|
"reqId" : "d01bf003-10d4-4cfa-8f31-c4bdb447445d",
|
||
|
"userId" : "79a26d981246978135edadf1",
|
||
|
"file" : "/Users/martin/dev/bridge-node-server/node_server/dev_api/controllers/receivecode_controller.js",
|
||
|
"_instrumentID" : "5aba46ecb28f2c8e1700c9c8",
|
||
|
"_internalError" : "Error: BRIDGE: INVALID INSTRUMENT",
|
||
|
"_httpCode" : 400,
|
||
|
"_info" : "The instrument could not be found, has no access or has expired.",
|
||
|
"_code" : 600
|
||
|
},
|
||
|
"hostname" : "Admins-MacBook-Pro.local"
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Log for AC 6:
|
||
|
```json
|
||
|
{
|
||
|
"_id" : ObjectId("5aba5a32febf9e953ffadcac"),
|
||
|
"timestamp" : ISODate("2018-03-27T14:50:26.008Z"),
|
||
|
"level" : "info",
|
||
|
"message" : "Successfully created a receivecode",
|
||
|
"meta" : {
|
||
|
"logId" : "payments:paycodes",
|
||
|
"ip" : "127.0.0.1",
|
||
|
"reqId" : "ea671287-89cf-4be0-9229-0144e743dd96",
|
||
|
"userId" : "79a26d981246978135edadf1",
|
||
|
"file" : "/Users/martin/dev/bridge-node-server/node_server/dev_api/controllers/receivecode_controller.js",
|
||
|
"_receivecode" : "9S4CJ",
|
||
|
"_instrumentID" : "5aba3afdb28f2c8e1700c9b6"
|
||
|
},
|
||
|
"hostname" : "Admins-MacBook-Pro.local"
|
||
|
}
|
||
|
```
|