Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PP-11682 Add pact test for temp connector Axios client #3828

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
'use strict'

// Core dependencies
const path = require('path')

// NPM dependencies
const { Pact } = require('@pact-foundation/pact')
const chai = require('chai')
const chaiAsPromised = require('chai-as-promised')

// Constants
const TEST_CHARGE_ID = 'testChargeId'
const APPLE_AUTH_PATH = `/v1/frontend/charges/${TEST_CHARGE_ID}/wallets/apple`
const PORT = Math.floor(Math.random() * 48127) + 1024
const BASEURL = `http://127.0.0.1:${PORT}`

// Custom dependencies
const connectorClient = require('../../../app/services/clients/connector-axios.client')
const fixtures = require('../../fixtures/wallet-payment.fixtures.js')
const { PactInteractionBuilder } = require('../../test-helpers/pact/pact-interaction-builder')
const { pactify } = require('../../test-helpers/pact/pact-base')()

// Global setup
const expect = chai.expect
chai.use(chaiAsPromised)

describe('connectors client - apple authentication API', function () {
const provider = new Pact({
consumer: 'frontend',
provider: 'connector',
port: PORT,
log: path.resolve(process.cwd(), 'logs', 'mockserver-integration.log'),
dir: path.resolve(process.cwd(), 'pacts'),
spec: 2,
pactfileWriteMode: 'merge'
})

before(() => provider.setup())
after(() => provider.finalize())

describe('Authenticate apple payment', function () {
describe('authorisation success', function () {
const appleAuthRequest = fixtures.appleAuthRequestDetails({ email: '[email protected]' })
const authorisationSuccessResponse = fixtures.webPaymentSuccessResponse()

before(() => {
const builder = new PactInteractionBuilder(APPLE_AUTH_PATH)
.withRequestBody(appleAuthRequest)
.withMethod('POST')
.withState('a sandbox account exists with a charge with id testChargeId that is in state ENTERING_CARD_DETAILS.')
.withUponReceiving('a valid apple pay auth request which should be authorised')
.withResponseBody(pactify(authorisationSuccessResponse))
.withStatusCode(200)
.build()
return provider.addInteraction(builder)
})

afterEach(() => provider.verify())

it('should return authorisation success', async () => {
const payload = appleAuthRequest

try {
const res = await connectorClient({ baseUrl: BASEURL }).chargeAuthWithWallet({
chargeId: TEST_CHARGE_ID,
wallet: 'apple',
payload: payload
})

expect(res.data.status).to.be.equal('AUTHORISATION SUCCESS')
} catch (err) {
throw new Error('should not be hit: ' + JSON.stringify(err))
}
})
})

describe('authorisation success with no last card digits', function () {
const appleAuthRequest = fixtures.appleAuthRequestDetails({ email: '[email protected]', lastDigitsCardNumber: '' })
const authorisationSuccessResponse = fixtures.webPaymentSuccessResponse()

before(() => {
const builder = new PactInteractionBuilder(APPLE_AUTH_PATH)
.withRequestBody(appleAuthRequest)
.withMethod('POST')
.withState('a sandbox account exists with a charge with id testChargeId that is in state ENTERING_CARD_DETAILS.')
.withUponReceiving('a valid Apple Pay auth request with no last card digits which should be authorised')
.withResponseBody(pactify(authorisationSuccessResponse))
.withStatusCode(200)
.build()
return provider.addInteraction(builder)
})

afterEach(() => provider.verify())

it('should return authorisation success', async () => {
const payload = appleAuthRequest

try {
const res = await connectorClient({ baseUrl: BASEURL }).chargeAuthWithWallet({
chargeId: TEST_CHARGE_ID,
wallet: 'apple',
payload: payload
})

expect(res.data.status).to.be.equal('AUTHORISATION SUCCESS')
} catch (err) {
throw new Error('should not be hit: ' + JSON.stringify(err))
}
})
})
})

describe('authorisation success with no email', function () {
const appleAuthRequest = fixtures.appleAuthRequestDetails()
const authorisationSuccessResponse = fixtures.webPaymentSuccessResponse()

before(() => {
const builder = new PactInteractionBuilder(APPLE_AUTH_PATH)
.withRequestBody(appleAuthRequest)
.withMethod('POST')
.withState('a sandbox account exists with a charge with id testChargeId that is in state ENTERING_CARD_DETAILS.')
.withUponReceiving('a valid Apple Pay auth request with no email address which should be authorised')
.withResponseBody(pactify(authorisationSuccessResponse))
.withStatusCode(200)
.build()
return provider.addInteraction(builder)
})

afterEach(() => provider.verify())

it('should return authorisation success', async () => {
const payload = appleAuthRequest

try {
const res = await connectorClient({ baseUrl: BASEURL }).chargeAuthWithWallet({
chargeId: TEST_CHARGE_ID,
wallet: 'apple',
payload: payload
})

expect(res.data.status).to.be.equal('AUTHORISATION SUCCESS')
} catch (err) {
throw new Error('should not be hit: ' + JSON.stringify(err))
}
})
})

describe('authorisation declined', function () {
const appleAuthRequest = fixtures.appleAuthRequestDetails({ email: '[email protected]', lastDigitsCardNumber: '0002' })
const authorisationDeclinedResponse = fixtures.webPaymentDeclinedResponse()

before(() => {
const builder = new PactInteractionBuilder(APPLE_AUTH_PATH)
.withRequestBody(appleAuthRequest)
.withMethod('POST')
.withState('a sandbox account exists with a charge with id testChargeId and description DECLINED that is in state ENTERING_CARD_DETAILS.')
.withUponReceiving('a valid apple pay auth request which should be declined')
.withResponseBody(pactify(authorisationDeclinedResponse))
.withStatusCode(400)
.build()
return provider.addInteraction(builder)
})

afterEach(() => provider.verify())

it('should return authorisation declined with error identifier in response payload', async () => {
try {
await connectorClient({ baseUrl: BASEURL }).chargeAuthWithWallet({
chargeId: TEST_CHARGE_ID,
wallet: 'apple',
payload: appleAuthRequest
})
} catch (err) {
if (err.errorCode === 400) {
expect(err.errorIdentifier).to.be.equal('AUTHORISATION_REJECTED')
} else {
throw new Error('should not be hit: ' + JSON.stringify(err))
}
}
})
})

describe('authorisation error', function () {
const appleAuthRequest = fixtures.appleAuthRequestDetails({ email: '[email protected]', lastDigitsCardNumber: '0119' })

before(() => {
const builder = new PactInteractionBuilder(APPLE_AUTH_PATH)
.withRequestBody(appleAuthRequest)
.withMethod('POST')
.withState('a sandbox account exists with a charge with id testChargeId and description ERROR that is in state ENTERING_CARD_DETAILS.')
.withUponReceiving('a valid apple pay auth request which should return an error')
.withStatusCode(402)
.build()
return provider.addInteraction(builder)
})

afterEach(() => provider.verify())

it('should return authorisation declined', async () => {
try {
await connectorClient({ baseUrl: BASEURL }).chargeAuthWithWallet({
chargeId: TEST_CHARGE_ID,
wallet: 'apple',
payload: appleAuthRequest
})
} catch (err) {
expect(err.errorCode).to.be.equal(402)
}
})
})
})
Loading