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

(ITE-146) Update Segment Engage Destination to handle onDelete events #11

Merged
merged 11 commits into from
Nov 18, 2024
Merged
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
Loading