forked from github/docs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathliquid.js
More file actions
149 lines (133 loc) · 5.46 KB
/
liquid.js
File metadata and controls
149 lines (133 loc) · 5.46 KB
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
const { liquid } = require('../../lib/render-content')
const middleware = require('../../middleware/contextualizers/short-versions')
const allVersions = require('../../lib/all-versions')
const enterpriseServerReleases = require('../../lib/enterprise-server-releases')
const template = `
{% if currentVersion ver_gt "enterprise-server@2.13" %}up to date{% endif %}
{% if currentVersion ver_lt "enterprise-server@2.13" %}out of date{% endif %}
`
const shortVersionsTemplate = `
{% ifversion fpt %} I am FPT {% endif %}
{% ifversion ghae %} I am GHAE {% endif %}
{% ifversion ghes %} I am GHES {% endif %}
{% ifversion ghes = 3.1 %} I am GHES = 3.1 {% endif %}
{% ifversion ghes > 3.1 %} I am GHES > 3.1 {% endif %}
{% ifversion ghes < 3.1 %} I am GHES < 3.1 {% endif %}
{% ifversion fpt or ghes < 3.0 %} I am FTP or GHES < 3.0 {% endif %}
{% ifversion ghes < 3.1 and ghes > 2.22 %} I am 3.0 only {% endif %}
`
const negativeVersionsTemplate = `
{% ifversion not ghae %} I am not GHAE {% endif %}
{% ifversion not ghes %} I am not GHES {% endif %}
{% ifversion ghes != 3.1 %} I am not GHES 3.1 {% endif %}
`
describe('liquid template parser', () => {
describe('custom operators', () => {
describe('ver_gt', () => {
test('works as expected', async () => {
const context = { currentVersion: 'enterprise-server@2.14' }
const output = await liquid.parseAndRender(template, context)
expect(output.trim()).toBe('up to date')
})
test('returns false when given value is not numeric, like `dotcom`', async () => {
const context = { currentVersion: 'free-pro-team@latest' }
const output = await liquid.parseAndRender(template, context)
expect(output.trim()).toBe('')
})
test('returns false when given value is falsy', async () => {
const context = {}
const output = await liquid.parseAndRender(template, context)
expect(output.trim()).toBe('')
})
})
describe('ver_lt', () => {
test('works as expected', async () => {
const context = { currentVersion: 'enterprise-server@2.12' }
const output = await liquid.parseAndRender(template, context)
expect(output.trim()).toBe('out of date')
})
})
})
describe('short versions', () => {
// Create a fake req so we can test the shortVersions middleware
const req = { language: 'en', query: {} }
test('FPT works as expected when it is FPT', async () => {
req.context = {
currentVersion: 'free-pro-team@latest',
page: {},
allVersions,
enterpriseServerReleases
}
await middleware(req, null, () => {})
const output = await liquid.parseAndRender(shortVersionsTemplate, req.context)
// We should have TWO results because we are supporting two shortcuts
expect(output.replace(/\s\s+/g, ' ').trim()).toBe('I am FPT I am FTP or GHES < 3.0')
})
test('GHAE works as expected', async () => {
req.context = {
currentVersion: 'github-ae@latest',
page: {},
allVersions,
enterpriseServerReleases
}
await middleware(req, null, () => {})
const output = await liquid.parseAndRender(shortVersionsTemplate, req.context)
expect(output.trim()).toBe('I am GHAE')
})
test('GHES works as expected', async () => {
req.context = {
currentVersion: 'enterprise-server@2.22',
page: {},
allVersions,
enterpriseServerReleases
}
await middleware(req, null, () => {})
const output = await liquid.parseAndRender(shortVersionsTemplate, req.context)
expect(output.replace(/\s\s+/g, ' ').trim()).toBe('I am GHES I am GHES < 3.1 I am FTP or GHES < 3.0')
})
test('AND statements work as expected', async () => {
req.context = {
currentVersion: 'enterprise-server@3.0',
page: {},
allVersions,
enterpriseServerReleases
}
await middleware(req, null, () => {})
const output = await liquid.parseAndRender(shortVersionsTemplate, req.context)
expect(output.replace(/\s\s+/g, ' ').trim()).toBe('I am GHES I am GHES < 3.1 I am 3.0 only')
})
test('NOT statements work as expected on versions without numbered releases', async () => {
req.context = {
currentVersion: 'github-ae@latest',
page: {},
allVersions,
enterpriseServerReleases
}
await middleware(req, null, () => {})
const output = await liquid.parseAndRender(negativeVersionsTemplate, req.context)
expect(output.replace(/\s\s+/g, ' ').trim()).toBe('I am not GHES I am not GHES 3.1')
})
test('NOT statements work as expected on versions with numbered releases', async () => {
req.context = {
currentVersion: 'enterprise-server@3.0',
page: {},
allVersions,
enterpriseServerReleases
}
await middleware(req, null, () => {})
const output = await liquid.parseAndRender(negativeVersionsTemplate, req.context)
expect(output.replace(/\s\s+/g, ' ').trim()).toBe('I am not GHAE I am not GHES 3.1')
})
test('The != operator works as expected', async () => {
req.context = {
currentVersion: 'enterprise-server@3.1',
page: {},
allVersions,
enterpriseServerReleases
}
await middleware(req, null, () => {})
const output = await liquid.parseAndRender(negativeVersionsTemplate, req.context)
expect(output.replace(/\s\s+/g, ' ').trim()).toBe('I am not GHAE')
})
})
})