Sort database items by dateAdded
Before selecting an existing database, let's sort them by date. We're opting to exclude databases with errors during the sorting process.
This commit is contained in:
@@ -273,12 +273,8 @@ export class SkeletonQueryWizard {
|
||||
databaseNwo: string,
|
||||
databaseItems: readonly DatabaseItem[],
|
||||
): Promise<DatabaseItem | undefined> {
|
||||
const dbItems = databaseItems || [];
|
||||
const dbs = dbItems.filter(
|
||||
(db) =>
|
||||
db.language === language &&
|
||||
db.name === databaseNwo &&
|
||||
db.error === undefined,
|
||||
const dbs = databaseItems.filter(
|
||||
(db) => db.language === language && db.name === databaseNwo,
|
||||
);
|
||||
|
||||
if (dbs.length === 0) {
|
||||
@@ -291,10 +287,7 @@ export class SkeletonQueryWizard {
|
||||
language: string,
|
||||
databaseItems: readonly DatabaseItem[],
|
||||
): Promise<DatabaseItem | undefined> {
|
||||
const dbItems = databaseItems || [];
|
||||
const dbs = dbItems.filter(
|
||||
(db) => db.language === language && db.error === undefined,
|
||||
);
|
||||
const dbs = databaseItems.filter((db) => db.language === language);
|
||||
if (dbs.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
@@ -308,19 +301,38 @@ export class SkeletonQueryWizard {
|
||||
|
||||
const defaultDatabaseNwo = QUERY_LANGUAGE_TO_DATABASE_REPO[this.language];
|
||||
|
||||
const dbItems = await this.sortDatabaseItemsByDateAdded(
|
||||
this.databaseManager.databaseItems,
|
||||
);
|
||||
|
||||
const defaultDatabaseItem = await this.findDatabaseItemByNwo(
|
||||
this.language,
|
||||
defaultDatabaseNwo,
|
||||
this.databaseManager.databaseItems,
|
||||
dbItems,
|
||||
);
|
||||
|
||||
if (defaultDatabaseItem !== undefined) {
|
||||
return defaultDatabaseItem;
|
||||
}
|
||||
|
||||
return await this.findDatabaseItemByLanguage(
|
||||
this.language,
|
||||
this.databaseManager.databaseItems,
|
||||
);
|
||||
return await this.findDatabaseItemByLanguage(this.language, dbItems);
|
||||
}
|
||||
|
||||
public async sortDatabaseItemsByDateAdded(
|
||||
databaseItems: readonly DatabaseItem[],
|
||||
) {
|
||||
const validDbItems = databaseItems.filter((db) => db.error === undefined);
|
||||
|
||||
return validDbItems.sort((a, b) => {
|
||||
if (a.dateAdded === undefined) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (b.dateAdded === undefined) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return a.dateAdded - b.dateAdded;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -330,37 +330,6 @@ describe("SkeletonQueryWizard", () => {
|
||||
JSON.stringify(mockDbItem),
|
||||
);
|
||||
});
|
||||
|
||||
it("should ignore databases with errors", async () => {
|
||||
const mockDbItem = createMockDB(dir, {
|
||||
language: "ruby",
|
||||
dateAdded: 123,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem2 = createMockDB(dir, {
|
||||
language: "javascript",
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem3 = createMockDB(dir, {
|
||||
language: "ruby",
|
||||
dateAdded: 345,
|
||||
} as FullDatabaseOptions);
|
||||
|
||||
jest.spyOn(mockDbItem, "name", "get").mockReturnValue("mock-name");
|
||||
jest.spyOn(mockDbItem3, "name", "get").mockReturnValue(mockDbItem.name);
|
||||
|
||||
jest
|
||||
.spyOn(mockDbItem, "error", "get")
|
||||
.mockReturnValue(asError("database go boom!"));
|
||||
|
||||
const databaseItem = await wizard.findDatabaseItemByNwo(
|
||||
mockDbItem.language,
|
||||
mockDbItem.name,
|
||||
[mockDbItem, mockDbItem2, mockDbItem3],
|
||||
);
|
||||
|
||||
expect(JSON.stringify(databaseItem)).toEqual(
|
||||
JSON.stringify(mockDbItem3),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("when the item doesn't exist", () => {
|
||||
@@ -396,32 +365,6 @@ describe("SkeletonQueryWizard", () => {
|
||||
|
||||
expect(databaseItem).toEqual(mockDbItem);
|
||||
});
|
||||
|
||||
it("should ignore databases with errors", async () => {
|
||||
const mockDbItem = createMockDB(dir, {
|
||||
language: "ruby",
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem2 = createMockDB(dir, {
|
||||
language: "javascript",
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem3 = createMockDB(dir, {
|
||||
language: "ruby",
|
||||
} as FullDatabaseOptions);
|
||||
|
||||
jest
|
||||
.spyOn(mockDbItem, "error", "get")
|
||||
.mockReturnValue(asError("database go boom!"));
|
||||
|
||||
const databaseItem = await wizard.findDatabaseItemByLanguage("ruby", [
|
||||
mockDbItem,
|
||||
mockDbItem2,
|
||||
mockDbItem3,
|
||||
]);
|
||||
|
||||
expect(JSON.stringify(databaseItem)).toEqual(
|
||||
JSON.stringify(mockDbItem3),
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe("when the item doesn't exist", () => {
|
||||
@@ -550,4 +493,65 @@ describe("SkeletonQueryWizard", () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("sortDatabaseItemsByDateAdded", () => {
|
||||
describe("should return a sorted list", () => {
|
||||
it("should sort the items by dateAdded", async () => {
|
||||
const mockDbItem = createMockDB(dir, {
|
||||
dateAdded: 678,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem2 = createMockDB(dir, {
|
||||
dateAdded: 123,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem3 = createMockDB(dir, {
|
||||
dateAdded: undefined,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem4 = createMockDB(dir, {
|
||||
dateAdded: 345,
|
||||
} as FullDatabaseOptions);
|
||||
|
||||
const sortedList = await wizard.sortDatabaseItemsByDateAdded([
|
||||
mockDbItem,
|
||||
mockDbItem2,
|
||||
mockDbItem3,
|
||||
mockDbItem4,
|
||||
]);
|
||||
|
||||
expect(sortedList).toEqual([
|
||||
mockDbItem3,
|
||||
mockDbItem2,
|
||||
mockDbItem4,
|
||||
mockDbItem,
|
||||
]);
|
||||
});
|
||||
|
||||
it("should ignore databases with errors", async () => {
|
||||
const mockDbItem = createMockDB(dir, {
|
||||
dateAdded: 678,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem2 = createMockDB(dir, {
|
||||
dateAdded: undefined,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem3 = createMockDB(dir, {
|
||||
dateAdded: 345,
|
||||
} as FullDatabaseOptions);
|
||||
const mockDbItem4 = createMockDB(dir, {
|
||||
dateAdded: 123,
|
||||
} as FullDatabaseOptions);
|
||||
|
||||
jest
|
||||
.spyOn(mockDbItem, "error", "get")
|
||||
.mockReturnValue(asError("database go boom!"));
|
||||
|
||||
const sortedList = await wizard.sortDatabaseItemsByDateAdded([
|
||||
mockDbItem,
|
||||
mockDbItem2,
|
||||
mockDbItem3,
|
||||
mockDbItem4,
|
||||
]);
|
||||
|
||||
expect(sortedList).toEqual([mockDbItem2, mockDbItem4, mockDbItem3]);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user