-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathserver.test.js
More file actions
124 lines (104 loc) · 4.51 KB
/
server.test.js
File metadata and controls
124 lines (104 loc) · 4.51 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
/**
* Tests for api-proxy server.js
*/
const { deriveCopilotApiTarget } = require('./server');
describe('deriveCopilotApiTarget', () => {
let originalEnv;
beforeEach(() => {
// Save original env vars
originalEnv = {
COPILOT_API_TARGET: process.env.COPILOT_API_TARGET,
GITHUB_SERVER_URL: process.env.GITHUB_SERVER_URL,
};
// Clear env vars before each test
delete process.env.COPILOT_API_TARGET;
delete process.env.GITHUB_SERVER_URL;
});
afterEach(() => {
// Restore original env vars
if (originalEnv.COPILOT_API_TARGET !== undefined) {
process.env.COPILOT_API_TARGET = originalEnv.COPILOT_API_TARGET;
} else {
delete process.env.COPILOT_API_TARGET;
}
if (originalEnv.GITHUB_SERVER_URL !== undefined) {
process.env.GITHUB_SERVER_URL = originalEnv.GITHUB_SERVER_URL;
} else {
delete process.env.GITHUB_SERVER_URL;
}
});
describe('COPILOT_API_TARGET env var (highest priority)', () => {
it('should return COPILOT_API_TARGET when explicitly set', () => {
process.env.COPILOT_API_TARGET = 'custom.api.com';
expect(deriveCopilotApiTarget()).toBe('custom.api.com');
});
it('should prefer COPILOT_API_TARGET over GITHUB_SERVER_URL', () => {
process.env.COPILOT_API_TARGET = 'custom.api.com';
process.env.GITHUB_SERVER_URL = 'https://mycompany.ghe.com';
expect(deriveCopilotApiTarget()).toBe('custom.api.com');
});
});
describe('GitHub Enterprise Cloud (*.ghe.com)', () => {
it('should derive copilot-api.<subdomain>.ghe.com for GHEC tenants', () => {
process.env.GITHUB_SERVER_URL = 'https://mycompany.ghe.com';
expect(deriveCopilotApiTarget()).toBe('copilot-api.mycompany.ghe.com');
});
it('should handle GHEC URLs with trailing slash', () => {
process.env.GITHUB_SERVER_URL = 'https://example.ghe.com/';
expect(deriveCopilotApiTarget()).toBe('copilot-api.example.ghe.com');
});
it('should handle GHEC URLs with path components', () => {
process.env.GITHUB_SERVER_URL = 'https://acme.ghe.com/some/path';
expect(deriveCopilotApiTarget()).toBe('copilot-api.acme.ghe.com');
});
it('should handle multi-part subdomain for GHEC', () => {
process.env.GITHUB_SERVER_URL = 'https://dev.mycompany.ghe.com';
expect(deriveCopilotApiTarget()).toBe('copilot-api.dev.mycompany.ghe.com');
});
});
describe('GitHub Enterprise Server (GHES)', () => {
it('should return api.enterprise.githubcopilot.com for GHES', () => {
process.env.GITHUB_SERVER_URL = 'https://github.example.com';
expect(deriveCopilotApiTarget()).toBe('api.enterprise.githubcopilot.com');
});
it('should handle GHES with IP address', () => {
process.env.GITHUB_SERVER_URL = 'https://192.168.1.100';
expect(deriveCopilotApiTarget()).toBe('api.enterprise.githubcopilot.com');
});
it('should handle GHES with custom port', () => {
process.env.GITHUB_SERVER_URL = 'https://github.internal:8443';
expect(deriveCopilotApiTarget()).toBe('api.enterprise.githubcopilot.com');
});
});
describe('GitHub.com (public)', () => {
it('should return api.githubcopilot.com for github.com', () => {
process.env.GITHUB_SERVER_URL = 'https://github.com';
expect(deriveCopilotApiTarget()).toBe('api.githubcopilot.com');
});
it('should handle github.com with trailing slash', () => {
process.env.GITHUB_SERVER_URL = 'https://github.com/';
expect(deriveCopilotApiTarget()).toBe('api.githubcopilot.com');
});
it('should handle github.com with path', () => {
process.env.GITHUB_SERVER_URL = 'https://github.com/github/hub';
expect(deriveCopilotApiTarget()).toBe('api.githubcopilot.com');
});
});
describe('Default behavior', () => {
it('should return api.githubcopilot.com when no env vars are set', () => {
expect(deriveCopilotApiTarget()).toBe('api.githubcopilot.com');
});
it('should return default when GITHUB_SERVER_URL is empty string', () => {
process.env.GITHUB_SERVER_URL = '';
expect(deriveCopilotApiTarget()).toBe('api.githubcopilot.com');
});
it('should return default when GITHUB_SERVER_URL is invalid', () => {
process.env.GITHUB_SERVER_URL = 'not-a-valid-url';
expect(deriveCopilotApiTarget()).toBe('api.githubcopilot.com');
});
it('should return default when GITHUB_SERVER_URL is malformed', () => {
process.env.GITHUB_SERVER_URL = 'ht!tp://bad-url';
expect(deriveCopilotApiTarget()).toBe('api.githubcopilot.com');
});
});
});