Skip to content

Commit

Permalink
fix(ds): Call remoteLookupForResource when entry doesn't exist locally
Browse files Browse the repository at this point in the history
Signed-off-by: Trae Yelovich <trae.yelovich@broadcom.com>
  • Loading branch information
traeok committed Oct 22, 2024
1 parent e4a190e commit c95f9e8
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 14 deletions.
1 change: 1 addition & 0 deletions packages/zowe-explorer/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ All notable changes to the "vscode-extension-for-zowe" extension will be documen

- `DatasetFSProvider.stat()` will now throw a `FileNotFound` error for extenders trying to fetch an MVS resource that does not exist. [#3252](https://github.com/zowe/zowe-explorer-vscode/issues/3252)
- 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 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`

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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(() => {
Expand All @@ -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",
Expand All @@ -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();
Expand All @@ -378,23 +376,21 @@ 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",
});
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 () => {
Expand Down
7 changes: 2 additions & 5 deletions packages/zowe-explorer/src/trees/dataset/DatasetFSProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down

0 comments on commit c95f9e8

Please sign in to comment.