# 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" } ```