alpic 0.0.0-dev.d113fee → 0.0.0-dev.d17e8ef

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/__tests__/auth.e2e.test.d.ts +1 -0
  2. package/dist/__tests__/auth.e2e.test.js +142 -0
  3. package/dist/__tests__/auth.e2e.test.js.map +1 -0
  4. package/dist/__tests__/deploy.e2e.test.js +53 -103
  5. package/dist/__tests__/deploy.e2e.test.js.map +1 -1
  6. package/dist/__tests__/git.e2e.test.d.ts +1 -0
  7. package/dist/__tests__/git.e2e.test.js +218 -0
  8. package/dist/__tests__/git.e2e.test.js.map +1 -0
  9. package/dist/__tests__/mock-server.js +196 -16
  10. package/dist/__tests__/mock-server.js.map +1 -1
  11. package/dist/__tests__/utils.d.ts +32 -0
  12. package/dist/__tests__/utils.js +110 -1
  13. package/dist/__tests__/utils.js.map +1 -1
  14. package/dist/api.d.ts +0 -1
  15. package/dist/api.js +5 -9
  16. package/dist/api.js.map +1 -1
  17. package/dist/commands/deploy.d.ts +2 -2
  18. package/dist/commands/deploy.js +6 -10
  19. package/dist/commands/deploy.js.map +1 -1
  20. package/dist/commands/git/connect.d.ts +9 -0
  21. package/dist/commands/git/connect.js +59 -0
  22. package/dist/commands/git/connect.js.map +1 -0
  23. package/dist/commands/git/disconnect.d.ts +9 -0
  24. package/dist/commands/git/disconnect.js +51 -0
  25. package/dist/commands/git/disconnect.js.map +1 -0
  26. package/dist/commands/git.d.ts +6 -0
  27. package/dist/commands/git.js +17 -0
  28. package/dist/commands/git.js.map +1 -0
  29. package/dist/commands/login.d.ts +6 -0
  30. package/dist/commands/login.js +38 -0
  31. package/dist/commands/login.js.map +1 -0
  32. package/dist/commands/logout.d.ts +6 -0
  33. package/dist/commands/logout.js +20 -0
  34. package/dist/commands/logout.js.map +1 -0
  35. package/dist/commands/whoami.d.ts +6 -0
  36. package/dist/commands/whoami.js +25 -0
  37. package/dist/commands/whoami.js.map +1 -0
  38. package/dist/env.d.ts +4 -0
  39. package/dist/env.js +10 -0
  40. package/dist/env.js.map +1 -0
  41. package/dist/lib/alpic-command.d.ts +4 -0
  42. package/dist/lib/alpic-command.js +17 -0
  43. package/dist/lib/alpic-command.js.map +1 -0
  44. package/dist/lib/auth/auth.d.ts +2 -0
  45. package/dist/lib/auth/auth.js +21 -0
  46. package/dist/lib/auth/auth.js.map +1 -0
  47. package/dist/lib/auth/oauth/client.d.ts +29 -0
  48. package/dist/lib/auth/oauth/client.js +112 -0
  49. package/dist/lib/auth/oauth/client.js.map +1 -0
  50. package/dist/lib/auth/oauth/constants.d.ts +2 -0
  51. package/dist/lib/auth/oauth/constants.js +3 -0
  52. package/dist/lib/auth/oauth/constants.js.map +1 -0
  53. package/dist/lib/auth/oauth/server.d.ts +6 -0
  54. package/dist/lib/auth/oauth/server.js +88 -0
  55. package/dist/lib/auth/oauth/server.js.map +1 -0
  56. package/dist/lib/auth/whoami.d.ts +28 -0
  57. package/dist/lib/auth/whoami.js +35 -0
  58. package/dist/lib/auth/whoami.js.map +1 -0
  59. package/dist/lib/deployment.d.ts +2 -3
  60. package/dist/lib/deployment.js +13 -9
  61. package/dist/lib/deployment.js.map +1 -1
  62. package/dist/lib/git.d.ts +14 -0
  63. package/dist/lib/git.js +105 -0
  64. package/dist/lib/git.js.map +1 -0
  65. package/dist/lib/global-store.d.ts +28 -0
  66. package/dist/lib/global-store.js +75 -0
  67. package/dist/lib/global-store.js.map +1 -0
  68. package/dist/lib/project.js +6 -2
  69. package/dist/lib/project.js.map +1 -1
  70. package/dist/lib/telemetry.js +6 -6
  71. package/dist/lib/telemetry.js.map +1 -1
  72. package/package.json +21 -23
  73. package/dist/lib/global-config.d.ts +0 -9
  74. package/dist/lib/global-config.js +0 -48
  75. package/dist/lib/global-config.js.map +0 -1
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,142 @@
1
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
4
+ import { MockApiServer } from "./mock-server";
5
+ import { cliSession, createOAuthEnv, setupTestDirectory } from "./utils";
6
+ describe("alpic login, logout, whoami (E2E)", () => {
7
+ let mockServer;
8
+ let serverUrl;
9
+ let cwd;
10
+ let binPath;
11
+ beforeEach(async () => {
12
+ mockServer = new MockApiServer();
13
+ serverUrl = await mockServer.start();
14
+ const setup = await setupTestDirectory({ prefix: "alpic-cli-e2e-auth" });
15
+ cwd = setup.cwd;
16
+ binPath = setup.binPath;
17
+ });
18
+ afterEach(async () => {
19
+ await mockServer.stop();
20
+ if (cwd) {
21
+ rmSync(cwd, { recursive: true, force: true });
22
+ }
23
+ });
24
+ describe("whoami", () => {
25
+ it("shows not logged in when no API key and no OAuth credentials", async () => {
26
+ const { output } = await cliSession(process.execPath, [binPath, "whoami"], {
27
+ cwd,
28
+ env: {
29
+ ALPIC_API_BASE_URL: serverUrl,
30
+ },
31
+ }, async (cli) => {
32
+ await cli.expect("Not logged in");
33
+ await cli.expect("alpic login");
34
+ });
35
+ expect(output).toContain("Not logged in");
36
+ expect(output).toMatch(/alpic login|ALPIC_API_KEY/);
37
+ });
38
+ it("shows team when authenticated via API key", async () => {
39
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "whoami"], {
40
+ cwd,
41
+ env: {
42
+ ALPIC_API_BASE_URL: serverUrl,
43
+ ALPIC_API_KEY: "test-api-key",
44
+ },
45
+ }, async (cli) => {
46
+ await cli.expect("API key");
47
+ await cli.expect("Team:");
48
+ await cli.expect("Mock Team");
49
+ });
50
+ expect(exitCode).toBe(0);
51
+ expect(output).toContain("Authenticated via API key");
52
+ expect(output).toContain("Mock Team");
53
+ });
54
+ it("shows user email and name when authenticated via OAuth", async () => {
55
+ const oauthEnv = createOAuthEnv(cwd, serverUrl);
56
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "whoami"], {
57
+ cwd,
58
+ env: oauthEnv,
59
+ }, async (cli) => {
60
+ await cli.expect("Authenticated as");
61
+ await cli.expect("test@example.com");
62
+ await cli.expect("Test User");
63
+ });
64
+ expect(exitCode).toBe(0);
65
+ expect(output).toContain("Authenticated as");
66
+ expect(output).toContain("Test User");
67
+ expect(output).toContain("test@example.com");
68
+ });
69
+ it("deletes credentials file when it is not readable (e.g. corrupt)", async () => {
70
+ const configHome = join(cwd, ".config");
71
+ const alpicConfigDir = join(configHome, "alpic");
72
+ const credentialsPath = join(alpicConfigDir, "credentials.json");
73
+ mkdirSync(alpicConfigDir, { recursive: true });
74
+ writeFileSync(credentialsPath, "not valid json", "utf-8");
75
+ expect(existsSync(credentialsPath)).toBe(true);
76
+ const env = {
77
+ XDG_CONFIG_HOME: configHome,
78
+ ALPIC_COGNITO_URL: serverUrl,
79
+ ALPIC_API_BASE_URL: serverUrl,
80
+ };
81
+ await cliSession(process.execPath, [binPath, "whoami"], { cwd, env }, async (cli) => {
82
+ await cli.expect("Not logged in");
83
+ });
84
+ expect(existsSync(credentialsPath)).toBe(false);
85
+ });
86
+ });
87
+ describe("logout", () => {
88
+ it("says not logged in when no credentials", async () => {
89
+ const configHome = join(cwd, ".config");
90
+ const alpicConfigDir = join(configHome, "alpic");
91
+ const credentialsPath = join(alpicConfigDir, "credentials.json");
92
+ mkdirSync(alpicConfigDir, { recursive: true });
93
+ const oauthEnv = {
94
+ XDG_CONFIG_HOME: configHome,
95
+ ALPIC_COGNITO_URL: serverUrl,
96
+ ALPIC_API_BASE_URL: serverUrl,
97
+ };
98
+ expect(existsSync(credentialsPath)).toBe(false);
99
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "logout"], {
100
+ cwd,
101
+ env: {
102
+ ...oauthEnv,
103
+ ALPIC_API_BASE_URL: serverUrl,
104
+ },
105
+ }, async (cli) => {
106
+ await cli.expect("not logged in");
107
+ });
108
+ expect(exitCode).toBe(0);
109
+ expect(output).toContain("You are not logged in");
110
+ });
111
+ it("clears OAuth credentials and shows logged out", async () => {
112
+ const oauthEnv = createOAuthEnv(cwd, serverUrl);
113
+ const credentialsPath = join(cwd, ".config", "alpic", "credentials.json");
114
+ expect(existsSync(credentialsPath)).toBe(true);
115
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "logout"], {
116
+ cwd,
117
+ env: oauthEnv,
118
+ }, async (cli) => {
119
+ await cli.expect("logged out");
120
+ await cli.expect("authentication cleared");
121
+ });
122
+ expect(exitCode).toBe(0);
123
+ expect(output).toContain("You are logged out");
124
+ expect(output).toMatch(/cleared|logged out/);
125
+ expect(existsSync(credentialsPath)).toBe(false);
126
+ });
127
+ });
128
+ describe("login", () => {
129
+ it("says already logged in when OAuth credentials exist", async () => {
130
+ const oauthEnv = createOAuthEnv(cwd, serverUrl);
131
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "login"], {
132
+ cwd,
133
+ env: oauthEnv,
134
+ }, async (cli) => {
135
+ await cli.expect("Already logged in");
136
+ });
137
+ expect(exitCode).toBe(0);
138
+ expect(output).toContain("Already logged in");
139
+ });
140
+ });
141
+ });
142
+ //# sourceMappingURL=auth.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/auth.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,10 @@
1
- import { randomUUID } from "node:crypto";
2
- import { mkdirSync, rmSync, writeFileSync } from "node:fs";
3
- import { cp, mkdtemp, readFile } from "node:fs/promises";
4
- import { tmpdir } from "node:os";
5
- import { dirname, join } from "node:path";
6
- import { fileURLToPath } from "node:url";
1
+ import { rmSync } from "node:fs";
2
+ import { readFile } from "node:fs/promises";
3
+ import { join } from "node:path";
7
4
  import { afterEach, beforeEach, describe, expect, it } from "vitest";
8
5
  import { MockApiServer } from "./mock-server";
6
+ import { buildMockProject, createConfigFile, createOAuthEnv, expectSuccessfulApiCall, setupTestDirectory, } from "./utils";
9
7
  import { cliSession } from "./utils";
10
- const __dirname = dirname(fileURLToPath(import.meta.url));
11
8
  describe("alpic deploy (E2E)", () => {
12
9
  let mockServer;
13
10
  let serverUrl;
@@ -31,9 +28,7 @@ describe("alpic deploy (E2E)", () => {
31
28
  cwd,
32
29
  env: {
33
30
  ALPIC_API_BASE_URL: serverUrl,
34
- ALPIC_FRONTEND_BASE_URL: "http://mocked.frontend.url",
35
31
  ALPIC_API_KEY: "test-api-key",
36
- ALPIC_POLL_INTERVAL: "1000",
37
32
  },
38
33
  }, async (cli) => {
39
34
  await cli.expect("Deploy the directory?");
@@ -67,44 +62,18 @@ describe("alpic deploy (E2E)", () => {
67
62
  const existingTeamId = "mock-team-id";
68
63
  const existingEnvId = "existing-env-id";
69
64
  const existingEnvName = "production";
70
- mockServer.addProject({
71
- id: existingProjectId,
72
- name: "existing-project",
65
+ mockServer.addProject(buildMockProject({
66
+ projectId: existingProjectId,
73
67
  teamId: existingTeamId,
74
- environments: [
75
- {
76
- id: existingEnvId,
77
- name: existingEnvName,
78
- sourceBranch: null,
79
- mcpServerUrl: `https://mcp-${existingProjectId}.alpic.ai`,
80
- createdAt: new Date(),
81
- projectId: existingProjectId,
82
- latestDeployment: null,
83
- },
84
- ],
85
- productionEnvironment: {
86
- id: existingEnvId,
87
- name: existingEnvName,
88
- mcpServerUrl: `https://mcp-${existingProjectId}.alpic.ai`,
89
- latestDeployment: null,
90
- },
91
- sourceRepository: null,
92
- runtime: "node24",
93
- transport: null,
94
- rootDirectory: null,
95
- buildCommand: null,
96
- buildOutputDir: null,
97
- installCommand: null,
98
- startCommand: null,
99
- createdAt: new Date(),
100
- });
68
+ projectName: "existing-project",
69
+ environmentId: existingEnvId,
70
+ environmentName: existingEnvName,
71
+ }));
101
72
  const { exitCode, output } = await cliSession(process.execPath, [binPath, "deploy"], {
102
73
  cwd,
103
74
  env: {
104
75
  ALPIC_API_BASE_URL: serverUrl,
105
- ALPIC_FRONTEND_BASE_URL: "http://mocked.frontend.url",
106
76
  ALPIC_API_KEY: "test-api-key",
107
- ALPIC_POLL_INTERVAL: "1000",
108
77
  },
109
78
  }, async (cli) => {
110
79
  await cli.expect("Deploy the directory?");
@@ -133,46 +102,19 @@ describe("alpic deploy (E2E)", () => {
133
102
  const existingTeamId = "mock-team-id";
134
103
  const existingEnvId = "existing-env-id";
135
104
  const existingEnvName = "production";
136
- mockServer.addProject({
137
- id: existingProjectId,
138
- name: "existing-project",
105
+ mockServer.addProject(buildMockProject({
106
+ projectId: existingProjectId,
139
107
  teamId: existingTeamId,
140
- environments: [
141
- {
142
- id: existingEnvId,
143
- name: existingEnvName,
144
- sourceBranch: null,
145
- mcpServerUrl: `https://mcp-${existingProjectId}.alpic.ai`,
146
- createdAt: new Date(),
147
- projectId: existingProjectId,
148
- latestDeployment: null,
149
- },
150
- ],
151
- productionEnvironment: {
152
- id: existingEnvId,
153
- name: existingEnvName,
154
- mcpServerUrl: `https://mcp-${existingProjectId}.alpic.ai`,
155
- latestDeployment: null,
156
- },
157
- sourceRepository: null,
158
- runtime: "node24",
159
- transport: null,
160
- rootDirectory: null,
161
- buildCommand: null,
162
- buildOutputDir: null,
163
- installCommand: null,
164
- startCommand: null,
165
- createdAt: new Date(),
166
- });
108
+ projectName: "existing-project",
109
+ environmentId: existingEnvId,
110
+ environmentName: existingEnvName,
111
+ }));
167
112
  createConfigFile(cwd, existingProjectId, existingTeamId, "existing-project", existingEnvId, existingEnvName);
168
113
  const { exitCode, output } = await cliSession(process.execPath, [binPath, "deploy"], {
169
114
  cwd,
170
115
  env: {
171
116
  ALPIC_API_BASE_URL: serverUrl,
172
- ALPIC_FRONTEND_BASE_URL: "http://mocked.frontend.url",
173
117
  ALPIC_API_KEY: "test-api-key",
174
- ALPIC_POLL_INTERVAL: "1000",
175
- NO_COLOR: "1",
176
118
  },
177
119
  }, async (cli) => {
178
120
  await cli.expect("Deploy the directory?");
@@ -190,27 +132,42 @@ describe("alpic deploy (E2E)", () => {
190
132
  environmentName: existingEnvName,
191
133
  });
192
134
  });
193
- });
194
- async function setupTestDirectory() {
195
- const uniqueId = randomUUID();
196
- const cwd = await mkdtemp(join(tmpdir(), `alpic-cli-e2e-${uniqueId}-`));
197
- const fixturePath = join(__dirname, "fixtures", "demo-project");
198
- await cp(fixturePath, cwd, { recursive: true });
199
- const binPath = join(process.cwd(), "bin", "dev.js");
200
- return { cwd, binPath };
201
- }
202
- function createConfigFile(cwd, projectId, teamId, projectName, environmentId, environmentName) {
203
- const configDir = join(cwd, ".alpic");
204
- mkdirSync(configDir, { recursive: true });
205
- const configPath = join(configDir, "project.json");
206
- writeFileSync(configPath, JSON.stringify({
207
- projectId,
208
- teamId,
209
- projectName,
210
- environmentId,
211
- environmentName,
212
- }));
213
- }
135
+ it("deploys with existing config using OAuth auth (no API key)", async () => {
136
+ const existingProjectId = "existing-project-id";
137
+ const existingTeamId = "mock-team-id";
138
+ const existingEnvId = "existing-env-id";
139
+ const existingEnvName = "production";
140
+ mockServer.addProject(buildMockProject({
141
+ projectId: existingProjectId,
142
+ teamId: existingTeamId,
143
+ projectName: "existing-project",
144
+ environmentId: existingEnvId,
145
+ environmentName: existingEnvName,
146
+ }));
147
+ createConfigFile(cwd, existingProjectId, existingTeamId, "existing-project", existingEnvId, existingEnvName);
148
+ const oauthEnv = createOAuthEnv(cwd, serverUrl);
149
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "deploy"], {
150
+ cwd,
151
+ env: {
152
+ ...oauthEnv,
153
+ },
154
+ }, async (cli) => {
155
+ await cli.expect("Deploy the directory?");
156
+ await cli.send("");
157
+ await cli.expect(`Deploy project "existing-project" to environment "production"?`);
158
+ await cli.send("");
159
+ await verifyDeploymentFlow(cli, mockServer);
160
+ });
161
+ expect(exitCode).toBe(0);
162
+ await verifyConfigFile(cwd, output, {
163
+ projectName: "existing-project",
164
+ projectId: existingProjectId,
165
+ teamId: existingTeamId,
166
+ environmentId: existingEnvId,
167
+ environmentName: existingEnvName,
168
+ });
169
+ });
170
+ }, 15_000);
214
171
  async function verifyConfigFile(cwd, output, expected) {
215
172
  const cfgPath = join(cwd, ".alpic", "project.json");
216
173
  const cfg = await readFile(cfgPath, "utf8");
@@ -251,17 +208,10 @@ async function verifyDeploymentFlow(cli, mockServer) {
251
208
  const deployCall = mockServer.getLastCall("POST", /\/v1\/environments\/.*\/deploy/);
252
209
  expectSuccessfulApiCall(deployCall);
253
210
  await cli.expect("View deployment details:");
254
- await cli.expect(/Deployment completed|Deployment summary/);
211
+ await cli.expect("Deployment summary:");
255
212
  const deploymentStatusCalls = mockServer.getCalls("GET", /\/v1\/deployments\/.*/);
256
213
  expect(deploymentStatusCalls.length).toBeGreaterThan(0);
257
214
  const envCall = mockServer.getLastCall("GET", /\/v1\/environments\/.*/);
258
215
  expectSuccessfulApiCall(envCall);
259
216
  }
260
- function expectSuccessfulApiCall(call, customAssertions) {
261
- expect(call).toBeDefined();
262
- expect(call?.responseStatus).toBe(200);
263
- if (customAssertions && call) {
264
- customAssertions(call);
265
- }
266
- }
267
217
  //# sourceMappingURL=deploy.e2e.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/deploy.e2e.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/deploy.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,218 @@
1
+ import { rmSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
4
+ import { MockApiServer } from "./mock-server";
5
+ import { buildMockProject, cliSession, createConfigFile, createOAuthEnv, expectSuccessfulApiCall, runGit, setupTestDirectory, } from "./utils";
6
+ describe("alpic git connect/disconnect (E2E)", () => {
7
+ let mockServer;
8
+ let serverUrl;
9
+ let cwd;
10
+ let binPath;
11
+ const projectId = "project-id";
12
+ const teamId = "team-id";
13
+ const environmentId = "env-id";
14
+ function setupProject(overrides) {
15
+ mockServer.addProject(buildMockProject({
16
+ projectId,
17
+ teamId,
18
+ projectName: "demo",
19
+ environmentId,
20
+ environmentName: "production",
21
+ sourceRepository: null,
22
+ sourceBranch: "main",
23
+ ...overrides,
24
+ }));
25
+ createConfigFile(cwd, projectId, teamId, "demo", environmentId, "production");
26
+ }
27
+ beforeEach(async () => {
28
+ mockServer = new MockApiServer();
29
+ serverUrl = await mockServer.start();
30
+ const setup = await setupTestDirectory({ prefix: "alpic-cli-e2e-git", initGit: true });
31
+ cwd = setup.cwd;
32
+ binPath = setup.binPath;
33
+ });
34
+ afterEach(async () => {
35
+ await mockServer.stop();
36
+ if (cwd) {
37
+ rmSync(cwd, { recursive: true, force: true });
38
+ }
39
+ });
40
+ it("connects using selected remote source when multiple remotes are available", async () => {
41
+ setupProject();
42
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "git", "connect"], {
43
+ cwd,
44
+ env: {
45
+ ALPIC_API_BASE_URL: serverUrl,
46
+ ALPIC_API_KEY: "test-api-key",
47
+ },
48
+ }, async (cli) => {
49
+ await cli.expect("Choose the remote source to connect");
50
+ await cli.send("\u001B[B"); // Move down one option (select acme/backend)
51
+ await cli.send("");
52
+ await cli.expect("Connected");
53
+ await cli.expect("every push");
54
+ });
55
+ expect(exitCode).toBe(0);
56
+ expect(output).toMatch(/Connected .*acme\/backend.* to project .*demo.*\./);
57
+ expect(output).toContain("make sure to install the Alpic GitHub App on this repository.");
58
+ const updateCall = mockServer.getLastCall("PATCH", `/v1/projects/${projectId}`);
59
+ expectSuccessfulApiCall(updateCall, (call) => {
60
+ expect(call.input).toMatchObject({
61
+ sourceRepository: "acme/backend",
62
+ });
63
+ });
64
+ });
65
+ it("requires linked Alpic project config", async () => {
66
+ rmSync(join(cwd, ".alpic"), { recursive: true, force: true });
67
+ const { output } = await cliSession(process.execPath, [binPath, "git", "connect"], {
68
+ cwd,
69
+ env: {
70
+ ALPIC_API_BASE_URL: serverUrl,
71
+ ALPIC_API_KEY: "test-api-key",
72
+ },
73
+ }, async (cli) => {
74
+ await cli.expect("This directory is not linked to an Alpic project. Link it first using `alpic deploy`.");
75
+ });
76
+ expect(output).toContain("This directory is not linked to an Alpic project. Link it first using `alpic deploy`.");
77
+ });
78
+ it("shows git setup instructions when directory is not a git repository", async () => {
79
+ setupProject();
80
+ rmSync(join(cwd, ".git"), { recursive: true, force: true });
81
+ const { output } = await cliSession(process.execPath, [binPath, "git", "connect"], {
82
+ cwd,
83
+ env: {
84
+ ALPIC_API_BASE_URL: serverUrl,
85
+ ALPIC_API_KEY: "test-api-key",
86
+ },
87
+ }, async (cli) => {
88
+ await cli.expect("This directory is not a git repository.");
89
+ await cli.expect("To set up a git repository");
90
+ await cli.expect("git init");
91
+ });
92
+ expect(output).toContain("This directory is not a git repository.");
93
+ expect(output).toContain("To set up a git repository");
94
+ expect(output).toContain("git init");
95
+ });
96
+ it("shows git setup instructions when repository has no remotes", async () => {
97
+ setupProject();
98
+ runGit(["remote", "remove", "origin"], cwd);
99
+ runGit(["remote", "remove", "upstream"], cwd);
100
+ const { output } = await cliSession(process.execPath, [binPath, "git", "connect"], {
101
+ cwd,
102
+ env: {
103
+ ALPIC_API_BASE_URL: serverUrl,
104
+ ALPIC_API_KEY: "test-api-key",
105
+ },
106
+ }, async (cli) => {
107
+ await cli.expect("This git repository has no remotes configured.");
108
+ await cli.expect("To set up a git repository");
109
+ await cli.expect("git init");
110
+ });
111
+ expect(output).toContain("This git repository has no remotes configured.");
112
+ expect(output).toContain("To set up a git repository");
113
+ expect(output).toContain("git init");
114
+ });
115
+ it("when project is already connected, prompts to link another and exits if user declines", async () => {
116
+ setupProject({ sourceRepository: "acme/backend" });
117
+ const { output } = await cliSession(process.execPath, [binPath, "git", "connect"], {
118
+ cwd,
119
+ env: {
120
+ ALPIC_API_BASE_URL: serverUrl,
121
+ ALPIC_API_KEY: "test-api-key",
122
+ },
123
+ }, async (cli) => {
124
+ await cli.expect(/Project .*demo.* is already connected to .*acme\/backend.*\./);
125
+ await cli.expect("Do you want to link another repository?");
126
+ await cli.send(""); // accept default (No)
127
+ await cli.expect("Git connect cancelled");
128
+ });
129
+ expect(output).toMatch(/Project .*demo.* is already connected to .*acme\/backend.*\./);
130
+ expect(output).toContain("Git connect cancelled");
131
+ expect(mockServer.getCalls("PATCH", "/v1/projects/")).toHaveLength(0);
132
+ });
133
+ it("disconnect fails with clear message when project is not connected", async () => {
134
+ setupProject(); // sourceRepository is null by default
135
+ const { output } = await cliSession(process.execPath, [binPath, "git", "disconnect"], {
136
+ cwd,
137
+ env: {
138
+ ALPIC_API_BASE_URL: serverUrl,
139
+ ALPIC_API_KEY: "test-api-key",
140
+ },
141
+ }, async (cli) => {
142
+ await cli.expect(/Project .*demo.* is not connected to any repository\./);
143
+ });
144
+ expect(output).toMatch(/Project .*demo.* is not connected to any repository\./);
145
+ expect(mockServer.getCalls("PATCH", "/v1/projects/")).toHaveLength(0);
146
+ });
147
+ it("disconnects an already connected project repository", async () => {
148
+ setupProject({ sourceRepository: "acme/frontend" });
149
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "git", "disconnect"], {
150
+ cwd,
151
+ env: {
152
+ ALPIC_API_BASE_URL: serverUrl,
153
+ ALPIC_API_KEY: "test-api-key",
154
+ },
155
+ }, async (cli) => {
156
+ await cli.expect(/Are you sure you want to disconnect .*acme\/frontend.* from project .*demo.*\?/);
157
+ await cli.send("\u001B[A"); // arrow up to select Yes
158
+ await cli.send("");
159
+ await cli.expect(/Disconnected .*acme\/frontend.* from project .*demo.*\./);
160
+ });
161
+ expect(exitCode).toBe(0);
162
+ expect(output).toMatch(/Disconnected .*acme\/frontend.* from project .*demo.*\./);
163
+ const updateCall = mockServer.getLastCall("PATCH", `/v1/projects/${projectId}`);
164
+ expectSuccessfulApiCall(updateCall, (call) => {
165
+ expect(call.input).toMatchObject({
166
+ sourceRepository: null,
167
+ });
168
+ });
169
+ });
170
+ it("git connect works with OAuth auth (no API key)", async () => {
171
+ setupProject();
172
+ const oauthEnv = createOAuthEnv(cwd, serverUrl);
173
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "git", "connect"], {
174
+ cwd,
175
+ env: {
176
+ ...oauthEnv,
177
+ },
178
+ }, async (cli) => {
179
+ await cli.expect("Choose the remote source to connect");
180
+ await cli.send("\u001B[B"); // Move down one option (select acme/backend)
181
+ await cli.send("");
182
+ await cli.expect("Connected");
183
+ await cli.expect("every push");
184
+ });
185
+ expect(exitCode).toBe(0);
186
+ expect(output).toMatch(/Connected .*acme\/backend.* to project .*demo.*\./);
187
+ const updateCall = mockServer.getLastCall("PATCH", `/v1/projects/${projectId}`);
188
+ expectSuccessfulApiCall(updateCall, (call) => {
189
+ expect(call.input).toMatchObject({
190
+ sourceRepository: "acme/backend",
191
+ });
192
+ });
193
+ });
194
+ it("git disconnect works with OAuth auth (no API key)", async () => {
195
+ setupProject({ sourceRepository: "acme/frontend" });
196
+ const oauthEnv = createOAuthEnv(cwd, serverUrl);
197
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "git", "disconnect"], {
198
+ cwd,
199
+ env: {
200
+ ...oauthEnv,
201
+ },
202
+ }, async (cli) => {
203
+ await cli.expect(/Are you sure you want to disconnect .*acme\/frontend.* from project .*demo.*\?/);
204
+ await cli.send("\u001B[A"); // arrow up to select Yes
205
+ await cli.send("");
206
+ await cli.expect(/Disconnected .*acme\/frontend.* from project .*demo.*\./);
207
+ });
208
+ expect(exitCode).toBe(0);
209
+ expect(output).toMatch(/Disconnected .*acme\/frontend.* from project .*demo.*\./);
210
+ const updateCall = mockServer.getLastCall("PATCH", `/v1/projects/${projectId}`);
211
+ expectSuccessfulApiCall(updateCall, (call) => {
212
+ expect(call.input).toMatchObject({
213
+ sourceRepository: null,
214
+ });
215
+ });
216
+ });
217
+ }, 20_000);
218
+ //# sourceMappingURL=git.e2e.test.js.map