From 0a627e02d24fa6aa0442b2ef7e4be8ad4b29062d Mon Sep 17 00:00:00 2001 From: Trae Yelovich Date: Mon, 28 Oct 2024 09:09:15 -0400 Subject: [PATCH] fix(ds): Call remoteLookupForResource when entry doesn't exist locally (#3268) Signed-off-by: Trae Yelovich Signed-off-by: Billie Simmons Co-authored-by: Billie Simmons --- packages/zowe-explorer/CHANGELOG.md | 1 + .../trees/dataset/DatasetFSProvider.unit.test.ts | 14 +++++--------- .../src/trees/dataset/DatasetFSProvider.ts | 7 ++----- 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/packages/zowe-explorer/CHANGELOG.md b/packages/zowe-explorer/CHANGELOG.md index ba5fbc9ce4..e9e87e8e00 100644 --- a/packages/zowe-explorer/CHANGELOG.md +++ b/packages/zowe-explorer/CHANGELOG.md @@ -15,6 +15,7 @@ All notable changes to the "vscode-extension-for-zowe" extension will be documen - Fixed an issue where renaming or deleting a USS file or data set did not update the opened editor. [#3260](https://github.com/zowe/zowe-explorer-vscode/issues/3260) - Fixed an issue during initialization where a broken team configuration file caused the "Show Config" action in the error dialog to stop working. [#3273](https://github.com/zowe/zowe-explorer-vscode/issues/3273) - Fixed issue where switching the authentication methods would cause `Cannot read properties of undefined` error. [#3142](https://github.com/zowe/zowe-explorer-vscode/issues/3142) +- Fixed an issue where calling `vscode.workspace.fs.readFile` with a PDS member URI would throw an error when the PDS already existed as a filesystem entry. [#3267](https://github.com/zowe/zowe-explorer-vscode/issues/3267) ## `3.0.2` diff --git a/packages/zowe-explorer/__tests__/__unit__/trees/dataset/DatasetFSProvider.unit.test.ts b/packages/zowe-explorer/__tests__/__unit__/trees/dataset/DatasetFSProvider.unit.test.ts index a48da93bb7..3bfacb4d37 100644 --- a/packages/zowe-explorer/__tests__/__unit__/trees/dataset/DatasetFSProvider.unit.test.ts +++ b/packages/zowe-explorer/__tests__/__unit__/trees/dataset/DatasetFSProvider.unit.test.ts @@ -348,7 +348,7 @@ describe("readFile", () => { _getInfoFromUriMock.mockRestore(); }); - it("checks if parent dir exists when lookup fails & calls remoteLookupForResource if parent dir doesn't exist", async () => { + it("calls remoteLookupForResource if entry does not exist locally", async () => { const _lookupAsFileMock = jest .spyOn(DatasetFSProvider.instance as any, "_lookupAsFile") .mockImplementationOnce(() => { @@ -357,7 +357,6 @@ describe("readFile", () => { .mockReturnValue(testEntries.pdsMember); const fetchDatasetAtUriMock = jest.spyOn(DatasetFSProvider.instance, "fetchDatasetAtUri").mockImplementation(); - const _lookupParentDirectoryMock = jest.spyOn(DatasetFSProvider.instance as any, "_lookupParentDirectory").mockReturnValueOnce(null); const _getInfoFromUriMock = jest.spyOn(DatasetFSProvider.instance as any, "_getInfoFromUri").mockReturnValueOnce({ profile: testProfile, path: "/USER.DATA.PS", @@ -368,7 +367,6 @@ describe("readFile", () => { await DatasetFSProvider.instance.readFile(testUris.pdsMember); expect(_lookupAsFileMock).toHaveBeenCalledWith(testUris.pdsMember); - expect(_lookupParentDirectoryMock).toHaveBeenCalledWith(testUris.pdsMember, true); expect(remoteLookupForResourceMock).toHaveBeenCalledWith(testUris.pdsMember); expect(fetchDatasetAtUriMock).toHaveBeenCalledWith(testUris.pdsMember, { isConflict: false }); _getInfoFromUriMock.mockRestore(); @@ -378,9 +376,6 @@ describe("readFile", () => { const _lookupAsFileMock = jest.spyOn(DatasetFSProvider.instance as any, "_lookupAsFile").mockImplementationOnce(() => { throw FileSystemError.FileNotFound(testUris.pdsMember); }); - const _lookupParentDirectoryMock = jest - .spyOn(DatasetFSProvider.instance as any, "_lookupParentDirectory") - .mockReturnValueOnce(testEntries.pds); const _getInfoFromUriMock = jest.spyOn(DatasetFSProvider.instance as any, "_getInfoFromUri").mockReturnValueOnce({ profile: testProfile, path: "/USER.DATA.PS", @@ -388,13 +383,14 @@ describe("readFile", () => { const remoteLookupForResourceMock = jest .spyOn(DatasetFSProvider.instance, "remoteLookupForResource") .mockReset() - .mockResolvedValue(testEntries.pdsMember); + .mockResolvedValueOnce(null as any); await expect(DatasetFSProvider.instance.readFile(testUris.pdsMember)).rejects.toThrow(); expect(_lookupAsFileMock).toHaveBeenCalledWith(testUris.pdsMember); - expect(_lookupParentDirectoryMock).toHaveBeenCalledWith(testUris.pdsMember, true); - expect(remoteLookupForResourceMock).not.toHaveBeenCalledWith(testUris.pdsMember); + expect(remoteLookupForResourceMock).toHaveBeenCalledWith(testUris.pdsMember); _getInfoFromUriMock.mockRestore(); + _lookupAsFileMock.mockRestore(); + remoteLookupForResourceMock.mockRestore(); }); it("returns the data for an entry", async () => { diff --git a/packages/zowe-explorer/src/trees/dataset/DatasetFSProvider.ts b/packages/zowe-explorer/src/trees/dataset/DatasetFSProvider.ts index a853471adf..a9c3849bf5 100644 --- a/packages/zowe-explorer/src/trees/dataset/DatasetFSProvider.ts +++ b/packages/zowe-explorer/src/trees/dataset/DatasetFSProvider.ts @@ -390,11 +390,8 @@ export class DatasetFSProvider extends BaseProvider implements vscode.FileSystem throw err; } - // check if parent directory exists; if not, do a remote lookup - const parent = this._lookupParentDirectory(uri, true); - if (parent == null) { - ds = await this.remoteLookupForResource(uri); - } + // do a remote lookup if the entry does not yet exist locally + ds = await this.remoteLookupForResource(uri); } if (ds == null) {