|
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