Skip to content

Commit

Permalink
Merge pull request #11 from StackAdapt/jc/onDelete-handle
Browse files Browse the repository at this point in the history
(ITE-146) Update Segment Engage Destination to handle onDelete events
  • Loading branch information
illumin04 authored Nov 18, 2024
2 parents 718402c + befd69f commit 4907cbe
Show file tree
Hide file tree
Showing 6 changed files with 148 additions and 324 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import { createTestEvent, createTestIntegration } from '@segment/actions-core'
import nock from 'nock'
import Definition from '../index'
import { GQL_ENDPOINT } from '../functions'

const testDestination = createTestIntegration(Definition)

describe('StackAdapt Audiences - Destination Tests', () => {
const mockSettings = { apiKey: 'test-api-key' }
const gqlHostUrl = 'https://api.stackadapt.com'

afterEach(() => {
nock.cleanAll()
})

describe('testAuthentication', () => {
it('should validate authentication inputs', async () => {
nock(GQL_ENDPOINT, {
reqheaders: {
authorization: `Bearer ${mockSettings.apiKey}`,
'content-type': 'application/json'
}
})
.post('', {
query: /tokenInfo/
})
.reply(200, {
data: {
tokenInfo: {
scopesByAdvertiser: {
nodes: [
{
advertiser: { name: 'Test Advertiser' },
scopes: ['WRITE']
}
]
}
}
}
})

await expect(testDestination.testAuthentication(mockSettings)).resolves.not.toThrowError()
})

it('should fail if authentication is invalid', async () => {
nock(GQL_ENDPOINT).post('').reply(403, {})

await expect(testDestination.testAuthentication(mockSettings)).rejects.toThrowError('403Forbidden')
})
})

describe('onDelete', () => {
it('should delete a user with a given userId', async () => {
const userId = '9999'
const event = createTestEvent({ userId, type: 'identify' })

// Mock the GraphQL deleteProfilesWithExternalIds mutation
nock(gqlHostUrl)
.post('/graphql', (body) => {
return body.query.includes('deleteProfilesWithExternalIds') && body.query.includes(userId)
})
.reply(200, {
data: { deleteProfilesWithExternalIds: { userErrors: [] } }
})

const response = await testDestination.onDelete!(event, {
apiKey: 'test-api-key'
})

expect(response).toMatchObject({
data: { deleteProfilesWithExternalIds: { userErrors: [] } }
})
})

it('should throw an error if profile deletion fails with userErrors', async () => {
const userId = '9999'
const event = createTestEvent({ userId, type: 'identify' })

// Mock the GraphQL deleteProfilesWithExternalIds mutation with an error
nock(gqlHostUrl)
.post('/graphql')
.reply(200, {
data: {
deleteProfilesWithExternalIds: {
userErrors: [{ message: 'Deletion failed' }]
}
}
})

await expect(
testDestination.onDelete!(event, {
apiKey: 'test-api-key'
})
).rejects.toThrowError('Profile deletion was not successful: Deletion failed')
})
})
})

This file was deleted.

This file was deleted.

This file was deleted.

Loading

0 comments on commit 4907cbe

Please sign in to comment.