|
6 | 6 | createMockExtensionContext,
|
7 | 7 | createMockRemoteSSHExtension,
|
8 | 8 | createMockWorkspaceProvider,
|
9 |
| - createMockRemote, |
10 | 9 | createMockStorage,
|
11 | 10 | createMockCommands,
|
12 | 11 | createMockOutputChannel,
|
@@ -123,21 +122,6 @@ const setupVSCodeMocks = async () => {
|
123 | 122 | return vscode;
|
124 | 123 | };
|
125 | 124 |
|
126 |
| -const createAuthTestContext = () => { |
127 |
| - const mockStorage = createMockStorage({ writeToCoderOutputChannel: vi.fn() }); |
128 |
| - const mockMyWorkspacesProvider = createMockWorkspaceProvider({ |
129 |
| - fetchAndRefresh: vi.fn(), |
130 |
| - }); |
131 |
| - const mockAllWorkspacesProvider = createMockWorkspaceProvider({ |
132 |
| - fetchAndRefresh: vi.fn(), |
133 |
| - }); |
134 |
| - return { |
135 |
| - mockStorage, |
136 |
| - mockMyWorkspacesProvider, |
137 |
| - mockAllWorkspacesProvider, |
138 |
| - }; |
139 |
| -}; |
140 |
| - |
141 | 125 | describe("extension", () => {
|
142 | 126 | describe("setupRemoteSSHExtension", () => {
|
143 | 127 | it.each([
|
@@ -517,211 +501,4 @@ describe("extension", () => {
|
517 | 501 | expect(providers.all.fetchAndRefresh).toHaveBeenCalled();
|
518 | 502 | });
|
519 | 503 | });
|
520 |
| - |
521 |
| - describe("handleRemoteEnvironment", () => { |
522 |
| - it("should handle remote environment when remoteSSHExtension and remoteAuthority exist", async () => { |
523 |
| - const vscode = await import("vscode"); |
524 |
| - const { Remote } = await import("./remote"); |
525 |
| - |
526 |
| - const mockVscodeProposed = { |
527 |
| - env: { remoteAuthority: "test-remote-authority" }, |
528 |
| - window: { |
529 |
| - showErrorMessage: vi.fn(), |
530 |
| - }, |
531 |
| - } as unknown as typeof vscode; |
532 |
| - |
533 |
| - const mockRemoteSSHExtension = createMockRemoteSSHExtension({ |
534 |
| - extensionPath: "/path/to/extension", |
535 |
| - }); |
536 |
| - |
537 |
| - const mockRestClient = { |
538 |
| - setHost: vi.fn(), |
539 |
| - setSessionToken: vi.fn(), |
540 |
| - }; |
541 |
| - |
542 |
| - const mockStorage = { |
543 |
| - writeToCoderOutputChannel: vi.fn(), |
544 |
| - }; |
545 |
| - |
546 |
| - const mockCommands = {}; |
547 |
| - |
548 |
| - const mockContext = createMockExtensionContext({ |
549 |
| - extensionMode: 1, // Normal mode |
550 |
| - }); |
551 |
| - |
552 |
| - const mockRemote = createMockRemote({ |
553 |
| - setup: vi.fn().mockResolvedValue({ |
554 |
| - url: "https://test.coder.com", |
555 |
| - token: "test-token-123", |
556 |
| - }), |
557 |
| - closeRemote: vi.fn(), |
558 |
| - }); |
559 |
| - |
560 |
| - vi.mocked(Remote).mockImplementation(() => mockRemote as never); |
561 |
| - |
562 |
| - const result = await extension.handleRemoteEnvironment( |
563 |
| - mockVscodeProposed, |
564 |
| - mockRemoteSSHExtension, |
565 |
| - mockRestClient as never, |
566 |
| - mockStorage as never, |
567 |
| - mockCommands as never, |
568 |
| - mockContext, |
569 |
| - ); |
570 |
| - |
571 |
| - expect(Remote).toHaveBeenCalledWith( |
572 |
| - mockVscodeProposed, |
573 |
| - mockStorage, |
574 |
| - mockCommands, |
575 |
| - mockContext.extensionMode, |
576 |
| - ); |
577 |
| - expect(mockRemote.setup).toHaveBeenCalledWith("test-remote-authority"); |
578 |
| - expect(mockRestClient.setHost).toHaveBeenCalledWith( |
579 |
| - "https://test.coder.com", |
580 |
| - ); |
581 |
| - expect(mockRestClient.setSessionToken).toHaveBeenCalledWith( |
582 |
| - "test-token-123", |
583 |
| - ); |
584 |
| - expect(result).toBe(true); // Success |
585 |
| - }); |
586 |
| - }); |
587 |
| - |
588 |
| - describe("checkAuthentication", () => { |
589 |
| - beforeEach(() => { |
590 |
| - vi.clearAllMocks(); |
591 |
| - }); |
592 |
| - |
593 |
| - it.each([ |
594 |
| - [ |
595 |
| - "valid member authentication", |
596 |
| - { |
597 |
| - baseURL: "https://test.coder.com", |
598 |
| - user: { username: "test-user", roles: [{ name: "member" }] }, |
599 |
| - }, |
600 |
| - { authenticated: true, isOwner: false, workspacesRefreshed: true }, |
601 |
| - ], |
602 |
| - ])("%s", async (_, config, expected) => { |
603 |
| - const { |
604 |
| - mockStorage, |
605 |
| - mockMyWorkspacesProvider, |
606 |
| - mockAllWorkspacesProvider, |
607 |
| - } = createAuthTestContext(); |
608 |
| - |
609 |
| - const mockRestClient = { |
610 |
| - getAxiosInstance: vi |
611 |
| - .fn() |
612 |
| - .mockReturnValue({ defaults: { baseURL: config.baseURL } }), |
613 |
| - getAuthenticatedUser: config.user |
614 |
| - ? vi.fn().mockResolvedValue(config.user) |
615 |
| - : vi.fn(), |
616 |
| - }; |
617 |
| - |
618 |
| - await extension.checkAuthentication( |
619 |
| - mockRestClient as never, |
620 |
| - mockStorage as never, |
621 |
| - mockMyWorkspacesProvider as never, |
622 |
| - mockAllWorkspacesProvider as never, |
623 |
| - ); |
624 |
| - |
625 |
| - if (expected.authenticated) { |
626 |
| - expect(vscodeActual.commands.executeCommand).toHaveBeenCalledWith( |
627 |
| - "setContext", |
628 |
| - "coder.authenticated", |
629 |
| - true, |
630 |
| - ); |
631 |
| - if (expected.isOwner) { |
632 |
| - expect(vscodeActual.commands.executeCommand).toHaveBeenCalledWith( |
633 |
| - "setContext", |
634 |
| - "coder.isOwner", |
635 |
| - true, |
636 |
| - ); |
637 |
| - } |
638 |
| - } else if ("skipUserCheck" in expected && expected.skipUserCheck) { |
639 |
| - expect(mockRestClient.getAuthenticatedUser).not.toHaveBeenCalled(); |
640 |
| - } |
641 |
| - |
642 |
| - expect(vscodeActual.commands.executeCommand).toHaveBeenCalledWith( |
643 |
| - "setContext", |
644 |
| - "coder.loaded", |
645 |
| - true, |
646 |
| - ); |
647 |
| - |
648 |
| - if (expected.workspacesRefreshed) { |
649 |
| - expect(mockMyWorkspacesProvider.fetchAndRefresh).toHaveBeenCalled(); |
650 |
| - expect(mockAllWorkspacesProvider.fetchAndRefresh).toHaveBeenCalled(); |
651 |
| - } else { |
652 |
| - expect(mockMyWorkspacesProvider.fetchAndRefresh).not.toHaveBeenCalled(); |
653 |
| - expect( |
654 |
| - mockAllWorkspacesProvider.fetchAndRefresh, |
655 |
| - ).not.toHaveBeenCalled(); |
656 |
| - } |
657 |
| - }); |
658 |
| - }); |
659 |
| - |
660 |
| - describe("handleAutologin", () => { |
661 |
| - beforeEach(() => { |
662 |
| - vi.clearAllMocks(); |
663 |
| - }); |
664 |
| - |
665 |
| - it.each([ |
666 |
| - [ |
667 |
| - "autologin enabled with defaultUrl", |
668 |
| - { |
669 |
| - autologin: true, |
670 |
| - defaultUrl: "https://auto.coder.com", |
671 |
| - baseURL: "", |
672 |
| - envUrl: undefined, |
673 |
| - }, |
674 |
| - { shouldLogin: true, expectedUrl: "https://auto.coder.com" }, |
675 |
| - ], |
676 |
| - ])("should handle %s", async (_, config, expected) => { |
677 |
| - const mockRestClient = { |
678 |
| - getAxiosInstance: vi.fn().mockReturnValue({ |
679 |
| - defaults: { baseURL: config.baseURL }, |
680 |
| - }), |
681 |
| - }; |
682 |
| - |
683 |
| - const mockConfig = createMockConfiguration({ |
684 |
| - "coder.autologin": config.autologin, |
685 |
| - "coder.defaultUrl": config.defaultUrl, |
686 |
| - }); |
687 |
| - vi.mocked(vscodeActual.workspace.getConfiguration).mockReturnValue( |
688 |
| - mockConfig, |
689 |
| - ); |
690 |
| - |
691 |
| - // Handle environment variable |
692 |
| - const originalEnv = process.env.CODER_URL; |
693 |
| - if (config.envUrl !== undefined) { |
694 |
| - process.env.CODER_URL = config.envUrl; |
695 |
| - } else { |
696 |
| - delete process.env.CODER_URL; |
697 |
| - } |
698 |
| - |
699 |
| - await extension.handleAutologin(mockRestClient as never); |
700 |
| - |
701 |
| - if (expected.shouldLogin) { |
702 |
| - expect(vscodeActual.commands.executeCommand).toHaveBeenCalledWith( |
703 |
| - "coder.login", |
704 |
| - "expectedUrl" in expected ? expected.expectedUrl : undefined, |
705 |
| - undefined, |
706 |
| - undefined, |
707 |
| - "true", |
708 |
| - ); |
709 |
| - } else { |
710 |
| - expect(vscodeActual.commands.executeCommand).not.toHaveBeenCalledWith( |
711 |
| - "coder.login", |
712 |
| - expect.anything(), |
713 |
| - expect.anything(), |
714 |
| - expect.anything(), |
715 |
| - expect.anything(), |
716 |
| - ); |
717 |
| - } |
718 |
| - |
719 |
| - // Restore environment |
720 |
| - if (originalEnv !== undefined) { |
721 |
| - process.env.CODER_URL = originalEnv; |
722 |
| - } else { |
723 |
| - delete process.env.CODER_URL; |
724 |
| - } |
725 |
| - }); |
726 |
| - }); |
727 | 504 | });
|
0 commit comments