Fetch the latest database from the new sorted list
And add tests to check this. I've had to adapt the existing `findExistingDatabaseItem` method so receive params so that I'm better able to send it a language and a list of database items.
This commit is contained in:
@@ -253,11 +253,18 @@ export class SkeletonQueryWizard {
|
||||
}
|
||||
|
||||
private async selectOrDownloadDatabase() {
|
||||
if (this.language === undefined) {
|
||||
throw new Error("Language is undefined");
|
||||
}
|
||||
|
||||
if (this.qlPackStoragePath === undefined) {
|
||||
throw new Error("QL Pack storage path is undefined");
|
||||
}
|
||||
|
||||
const existingDatabaseItem = await this.findExistingDatabaseItem();
|
||||
const existingDatabaseItem = await this.findExistingDatabaseItem(
|
||||
this.language,
|
||||
this.databaseManager.databaseItems,
|
||||
);
|
||||
|
||||
if (existingDatabaseItem) {
|
||||
// select the found database
|
||||
@@ -277,10 +284,7 @@ export class SkeletonQueryWizard {
|
||||
(db) => db.language === language && db.name === databaseNwo,
|
||||
);
|
||||
|
||||
if (dbs.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
return dbs[0];
|
||||
return dbs.pop();
|
||||
}
|
||||
|
||||
public async findDatabaseItemByLanguage(
|
||||
@@ -288,25 +292,20 @@ export class SkeletonQueryWizard {
|
||||
databaseItems: readonly DatabaseItem[],
|
||||
): Promise<DatabaseItem | undefined> {
|
||||
const dbs = databaseItems.filter((db) => db.language === language);
|
||||
if (dbs.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
return dbs[0];
|
||||
|
||||
return dbs.pop();
|
||||
}
|
||||
|
||||
private async findExistingDatabaseItem() {
|
||||
if (this.language === undefined) {
|
||||
throw new Error("Language is undefined");
|
||||
}
|
||||
public async findExistingDatabaseItem(
|
||||
language: string,
|
||||
databaseItems: readonly DatabaseItem[],
|
||||
): Promise<DatabaseItem | undefined> {
|
||||
const defaultDatabaseNwo = QUERY_LANGUAGE_TO_DATABASE_REPO[language];
|
||||
|
||||
const defaultDatabaseNwo = QUERY_LANGUAGE_TO_DATABASE_REPO[this.language];
|
||||
|
||||
const dbItems = await this.sortDatabaseItemsByDateAdded(
|
||||
this.databaseManager.databaseItems,
|
||||
);
|
||||
const dbItems = await this.sortDatabaseItemsByDateAdded(databaseItems);
|
||||
|
||||
const defaultDatabaseItem = await this.findDatabaseItemByNwo(
|
||||
this.language,
|
||||
language,
|
||||
defaultDatabaseNwo,
|
||||
dbItems,
|
||||
);
|
||||
@@ -315,7 +314,7 @@ export class SkeletonQueryWizard {
|
||||
return defaultDatabaseItem;
|
||||
}
|
||||
|
||||
return await this.findDatabaseItemByLanguage(this.language, dbItems);
|
||||
return await this.findDatabaseItemByLanguage(language, dbItems);
|
||||
}
|
||||
|
||||
public async sortDatabaseItemsByDateAdded(
|
||||
|
||||
@@ -554,4 +554,73 @@ describe("SkeletonQueryWizard", () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("findExistingDatabaseItem", () => {
|
||||
describe("when there are multiple items with the same name", () => {
|
||||
it("should choose the latest one", async () => {
|
||||
const mockDbItem = createMockDB(dir, {
|
||||
language: "javascript",
|
||||
dateAdded: 456,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem2 = createMockDB(dir, {
|
||||
language: "ruby",
|
||||
dateAdded: 789,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem3 = createMockDB(dir, {
|
||||
language: "javascript",
|
||||
dateAdded: 123,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem4 = createMockDB(dir, {
|
||||
language: "javascript",
|
||||
dateAdded: undefined,
|
||||
} as FullDatabaseOptions);
|
||||
|
||||
jest
|
||||
.spyOn(mockDbItem, "name", "get")
|
||||
.mockReturnValue(QUERY_LANGUAGE_TO_DATABASE_REPO["javascript"]);
|
||||
jest
|
||||
.spyOn(mockDbItem2, "name", "get")
|
||||
.mockReturnValue(QUERY_LANGUAGE_TO_DATABASE_REPO["javascript"]);
|
||||
|
||||
const databaseItem = await wizard.findExistingDatabaseItem(
|
||||
"javascript",
|
||||
[mockDbItem, mockDbItem2, mockDbItem3, mockDbItem4],
|
||||
);
|
||||
|
||||
expect(JSON.stringify(databaseItem)).toEqual(
|
||||
JSON.stringify(mockDbItem),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("when there are multiple items with the same language", () => {
|
||||
it("should choose the latest one", async () => {
|
||||
const mockDbItem = createMockDB(dir, {
|
||||
language: "ruby",
|
||||
dateAdded: 789,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem2 = createMockDB(dir, {
|
||||
language: "javascript",
|
||||
dateAdded: 456,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem3 = createMockDB(dir, {
|
||||
language: "ruby",
|
||||
dateAdded: 123,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem4 = createMockDB(dir, {
|
||||
language: "javascript",
|
||||
dateAdded: undefined,
|
||||
} as FullDatabaseOptions);
|
||||
|
||||
const databaseItem = await wizard.findExistingDatabaseItem(
|
||||
"javascript",
|
||||
[mockDbItem, mockDbItem2, mockDbItem3, mockDbItem4],
|
||||
);
|
||||
|
||||
expect(JSON.stringify(databaseItem)).toEqual(
|
||||
JSON.stringify(mockDbItem2),
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user