Register
Login
Resources
Docs Blog Datasets Glossary Case Studies Tutorials & Webinars
Product
Data Engine LLMs Platform Enterprise
Pricing Explore
Connect to our Discord channel

webhooks.js 3.5 KB

You have to be logged in to leave a comment. Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  1. const { difference } = require('lodash')
  2. const { getJSON } = require('../helpers/supertest')
  3. const { latest } = require('../../lib/enterprise-server-releases')
  4. const allVersions = Object.values(require('../../lib/all-versions'))
  5. const payloadVersions = allVersions.map(v => v.miscVersionName)
  6. const webhookPayloads = require('../../lib/webhooks')
  7. // grab some values for testing
  8. const nonEnterpriseDefaultPayloadVersion = allVersions
  9. .find(version => version.nonEnterpriseDefault)
  10. .miscVersionName
  11. const latestGhesPayloadVersion = allVersions
  12. .find(version => version.currentRelease === latest)
  13. .miscVersionName
  14. const ghaePayloadVersion = allVersions
  15. .find(version => version.plan === 'github-ae')
  16. .miscVersionName
  17. describe('webhook payloads', () => {
  18. jest.setTimeout(3 * 60 * 1000)
  19. test('have expected top-level keys', () => {
  20. payloadVersions.forEach(version => {
  21. expect(version in webhookPayloads).toBe(true)
  22. })
  23. })
  24. test('have a reasonable number of payloads per version', () => {
  25. payloadVersions.forEach(version => {
  26. const payloadsPerVersion = Object.keys(webhookPayloads[version])
  27. expect(payloadsPerVersion.length).toBeGreaterThan(20)
  28. })
  29. })
  30. test('have payloads that are JSON strings, not objects', () => {
  31. // use the first one found for testing purposes
  32. const firstKey = Object.keys(webhookPayloads[nonEnterpriseDefaultPayloadVersion])[0]
  33. const firstValue = webhookPayloads[nonEnterpriseDefaultPayloadVersion][firstKey]
  34. const payloadString = getPayloadString(firstValue)
  35. const payloadLines = payloadString.split('\n')
  36. expect(payloadLines.length).toBeGreaterThan(5)
  37. expect(payloadLines[2].trim()).toBe('```json')
  38. expect(payloadLines[3].trim()).toBe('{')
  39. expect(payloadLines[payloadLines.length - 3].trim()).toBe('```')
  40. })
  41. test('on non-dotcom versions, dotcom-only payloads fall back to dotcom', async () => {
  42. const ghesPayloads = webhookPayloads[latestGhesPayloadVersion]
  43. const ghaePayloads = webhookPayloads[ghaePayloadVersion]
  44. const dotcomOnlyPayloads = difference(Object.keys(webhookPayloads[nonEnterpriseDefaultPayloadVersion]), Object.keys(ghesPayloads))
  45. // use the first one found for testing purposes
  46. const dotcomOnlyPayload = dotcomOnlyPayloads[0]
  47. expect(ghesPayloads[dotcomOnlyPayload]).toBeUndefined()
  48. expect(ghaePayloads[dotcomOnlyPayload]).toBeUndefined()
  49. // fallback handling is in middleware/contextualizers/webhooks.js
  50. const ghesPayloadsWithFallbacks = await getJSON(`/en/enterprise-server@${latest}/developers/webhooks-and-events?json=webhookPayloadsForCurrentVersion`)
  51. const ghaePayloadsWithFallbacks = await getJSON('/en/github-ae@latest/developers/webhooks-and-events?json=webhookPayloadsForCurrentVersion')
  52. expect(ghesPayloadsWithFallbacks[dotcomOnlyPayload]).toBeDefined()
  53. expect(ghaePayloadsWithFallbacks[dotcomOnlyPayload]).toBeDefined()
  54. const ghesPayloadString = getPayloadString(ghesPayloadsWithFallbacks[dotcomOnlyPayload])
  55. const ghaePayloadString = getPayloadString(ghaePayloadsWithFallbacks[dotcomOnlyPayload])
  56. expect(ghesPayloadString.includes('```json')).toBe(true)
  57. expect(ghaePayloadString.includes('```json')).toBe(true)
  58. })
  59. })
  60. // accommodate two possible payload string locations
  61. // value of top-level key: `create` (in create.payload.json)
  62. // value of second-level key: `issues.opened` (in issues.opened.payload.json)
  63. function getPayloadString (payload) {
  64. return typeof payload === 'string'
  65. ? payload
  66. : payload[Object.keys(payload)[0]]
  67. }
Tip!

Press p or to see the previous file or, n or to see the next file

Comments

Loading...