Merge pull request #1853 from github/nora/test-factories-dbitem

Create and use more factories for DbItem creation
This commit is contained in:
Nora
2022-12-09 14:27:29 +01:00
committed by GitHub
3 changed files with 211 additions and 225 deletions

View File

@@ -1,34 +1,162 @@
import { faker } from "@faker-js/faker";
import {
DbItemKind,
LocalDatabaseDbItem,
LocalDbItem,
LocalListDbItem,
RemoteDbItem,
RemoteOwnerDbItem,
RemoteRepoDbItem,
RemoteSystemDefinedListDbItem,
RemoteUserDefinedListDbItem,
RootLocalDbItem,
RootRemoteDbItem,
} from "../../src/databases/db-item";
export function createRootRemoteDbItem(): RootRemoteDbItem {
// Root Remote Db Items
export function createRootRemoteDbItem({
children = [],
expanded = false,
}: {
children?: RemoteDbItem[];
expanded?: boolean;
} = {}): RootRemoteDbItem {
return {
kind: DbItemKind.RootRemote,
children: [],
expanded: false,
children,
expanded,
};
}
export function createRemoteOwnerDbItem({
ownerName = `owner${faker.datatype.number()}`,
selected = false,
}: {
ownerName?: string;
selected?: boolean;
} = {}): RemoteOwnerDbItem {
return {
kind: DbItemKind.RemoteOwner,
selected,
ownerName,
};
}
export function createRemoteRepoDbItem({
repoFullName = `owner${faker.datatype.number()}/repo${faker.datatype.number}`,
selected = false,
parentListName = undefined,
}: {
repoFullName?: string;
selected?: boolean;
parentListName?: string;
} = {}): RemoteRepoDbItem {
return {
kind: DbItemKind.RemoteRepo,
selected,
repoFullName,
parentListName,
};
}
export function createRemoteSystemDefinedListDbItem({
listName = `top_${faker.datatype.number()}`,
listDisplayName = `Display Name`,
listDescription = `Description`,
selected = false,
}: {
listName?: string;
listDisplayName?: string;
listDescription?: string;
selected?: boolean;
} = {}): RemoteSystemDefinedListDbItem {
return {
kind: DbItemKind.RemoteSystemDefinedList,
selected,
listName,
listDisplayName,
listDescription,
};
}
export function createRemoteUserDefinedListDbItem({
name = "list1",
expanded = false,
selected = false,
listName = `list${faker.datatype.number()}`,
repos = [
createRemoteRepoDbItem({
parentListName: listName,
}),
],
}: {
name: string;
}): RemoteUserDefinedListDbItem {
listName?: string;
expanded?: boolean;
selected?: boolean;
repos?: RemoteRepoDbItem[];
} = {}): RemoteUserDefinedListDbItem {
return {
kind: DbItemKind.RemoteUserDefinedList,
selected: false,
expanded: false,
listName: name,
repos: [
{
kind: DbItemKind.RemoteRepo,
selected: false,
repoFullName: "repo1",
parentListName: name,
},
],
expanded,
selected,
listName,
repos,
};
}
// Root Local Db Items
export function createRootLocalDbItem({
children = [],
expanded = false,
}: {
children?: LocalDbItem[];
expanded?: boolean;
} = {}): RootLocalDbItem {
return {
kind: DbItemKind.RootLocal,
children,
expanded,
};
}
export function createLocalDatabaseDbItem({
databaseName = `database${faker.datatype.number()}`,
dateAdded = faker.date.past().getTime(),
language = `language${faker.datatype.number()}`,
storagePath = `storagePath${faker.datatype.number()}`,
selected = false,
}: {
databaseName?: string;
dateAdded?: number;
language?: string;
storagePath?: string;
selected?: boolean;
} = {}): LocalDatabaseDbItem {
return {
kind: DbItemKind.LocalDatabase,
selected,
databaseName,
dateAdded,
language,
storagePath,
};
}
export function createLocalListDbItem({
listName = `top_${faker.datatype.number()}`,
selected = false,
expanded = false,
databases = [],
}: {
listName?: string;
databases?: LocalDatabaseDbItem[];
selected?: boolean;
expanded?: boolean;
} = {}): LocalListDbItem {
return {
kind: DbItemKind.LocalList,
selected,
expanded,
databases,
listName,
};
}

View File

@@ -26,7 +26,7 @@ describe("db item expansion", () => {
const dbItem: RemoteUserDefinedListDbItem =
createRemoteUserDefinedListDbItem({
name: "list2",
listName: "list2",
});
const newExpandedItems = calculateNewExpandedState(
@@ -47,7 +47,7 @@ describe("db item expansion", () => {
it("should add an expanded item to an empty list", () => {
const dbItem: RemoteUserDefinedListDbItem =
createRemoteUserDefinedListDbItem({
name: "list2",
listName: "list2",
});
const newExpandedItems = calculateNewExpandedState([], dbItem, true);
@@ -73,7 +73,7 @@ describe("db item expansion", () => {
const dbItem: RemoteUserDefinedListDbItem =
createRemoteUserDefinedListDbItem({
name: "list1",
listName: "list1",
});
const newExpandedItems = calculateNewExpandedState(

View File

@@ -1,90 +1,29 @@
import { DbItem, DbItemKind } from "../../../src/databases/db-item";
import { getSelectedDbItem } from "../../../src/databases/db-item-selection";
import {
createLocalDatabaseDbItem,
createLocalListDbItem,
createRemoteOwnerDbItem,
createRemoteRepoDbItem,
createRemoteSystemDefinedListDbItem,
createRemoteUserDefinedListDbItem,
createRootLocalDbItem,
createRootRemoteDbItem,
} from "../../factories/db-item-factories";
describe("db item selection", () => {
it("should return undefined if no item is selected", () => {
const dbItems: DbItem[] = [
{
kind: DbItemKind.RootRemote,
expanded: false,
createRootRemoteDbItem({
children: [
{
kind: DbItemKind.RemoteSystemDefinedList,
listName: "top_10",
listDisplayName: "Top 10 repositories",
listDescription: "Top 10 repositories of a language",
selected: false,
},
{
kind: DbItemKind.RemoteSystemDefinedList,
listName: "top_100",
listDisplayName: "Top 100 repositories",
listDescription: "Top 100 repositories of a language",
selected: false,
},
{
kind: DbItemKind.RemoteOwner,
ownerName: "github",
selected: false,
},
{
kind: DbItemKind.RemoteUserDefinedList,
expanded: false,
listName: "my list",
repos: [
{
kind: DbItemKind.RemoteRepo,
repoFullName: "owner1/repo2",
selected: false,
},
{
kind: DbItemKind.RemoteRepo,
repoFullName: "owner1/repo3",
selected: false,
},
],
selected: false,
},
createRemoteSystemDefinedListDbItem(),
createRemoteOwnerDbItem(),
createRemoteUserDefinedListDbItem(),
],
},
{
kind: DbItemKind.RootLocal,
expanded: false,
children: [
{
kind: DbItemKind.LocalList,
expanded: false,
listName: "list-1",
databases: [
{
kind: DbItemKind.LocalDatabase,
databaseName: "db1",
dateAdded: 1234,
language: "javascript",
storagePath: "/foo/bar",
selected: false,
},
{
kind: DbItemKind.LocalDatabase,
databaseName: "db2",
dateAdded: 1234,
language: "javascript",
storagePath: "/foo/bar",
selected: false,
},
],
selected: false,
},
{
kind: DbItemKind.LocalDatabase,
databaseName: "db3",
dateAdded: 1234,
language: "javascript",
storagePath: "/foo/bar",
selected: false,
},
],
},
}),
createRootLocalDbItem({
children: [createLocalListDbItem(), createLocalDatabaseDbItem()],
}),
];
expect(getSelectedDbItem(dbItems)).toBeUndefined();
@@ -92,44 +31,24 @@ describe("db item selection", () => {
it("should return correct local database item from DbItem list", () => {
const dbItems: DbItem[] = [
{
kind: DbItemKind.RootLocal,
expanded: false,
createRootLocalDbItem({
children: [
{
kind: DbItemKind.LocalList,
expanded: false,
listName: "list-1",
databases: [
{
kind: DbItemKind.LocalDatabase,
databaseName: "db1",
dateAdded: 1234,
language: "javascript",
storagePath: "/foo/bar",
selected: false,
},
{
kind: DbItemKind.LocalDatabase,
databaseName: "db2",
dateAdded: 1234,
language: "javascript",
storagePath: "/foo/bar",
selected: true,
},
],
selected: false,
},
{
kind: DbItemKind.LocalDatabase,
databaseName: "db3",
createLocalDatabaseDbItem({
databaseName: "db2",
dateAdded: 1234,
language: "javascript",
storagePath: "/foo/bar",
selected: false,
},
selected: true,
}),
createLocalListDbItem({
databases: [
createLocalDatabaseDbItem(),
createLocalDatabaseDbItem(),
],
}),
],
},
expanded: false,
}),
];
expect(getSelectedDbItem(dbItems)).toEqual({
@@ -144,42 +63,20 @@ describe("db item selection", () => {
it("should return correct remote database list item from DbItem list", () => {
const dbItems: DbItem[] = [
{
kind: DbItemKind.RootRemote,
expanded: false,
createRootRemoteDbItem({
children: [
{
kind: DbItemKind.RemoteSystemDefinedList,
listName: "top_10",
listDisplayName: "Top 10 repositories",
listDescription: "Top 10 repositories of a language",
selected: false,
},
{
kind: DbItemKind.RemoteOwner,
ownerName: "github",
selected: false,
},
{
kind: DbItemKind.RemoteUserDefinedList,
expanded: false,
createRemoteSystemDefinedListDbItem(),
createRemoteOwnerDbItem(),
createRemoteUserDefinedListDbItem({
listName: "my list",
repos: [
{
kind: DbItemKind.RemoteRepo,
repoFullName: "owner1/repo2",
selected: false,
},
{
kind: DbItemKind.RemoteRepo,
repoFullName: "owner1/repo3",
selected: false,
},
],
selected: true,
},
repos: [
createRemoteRepoDbItem({ repoFullName: "owner1/repo2" }),
createRemoteRepoDbItem({ repoFullName: "owner1/repo3" }),
],
}),
],
},
}),
];
expect(getSelectedDbItem(dbItems)).toEqual({
@@ -204,49 +101,19 @@ describe("db item selection", () => {
it("should handle arbitrary list of db items", () => {
const dbItems: DbItem[] = [
{
kind: DbItemKind.RootRemote,
expanded: false,
createRootRemoteDbItem({
children: [
{
kind: DbItemKind.RemoteSystemDefinedList,
listName: "top_10",
listDisplayName: "Top 10 repositories",
listDescription: "Top 10 repositories of a language",
selected: false,
},
{
kind: DbItemKind.RemoteOwner,
ownerName: "github",
selected: false,
},
{
kind: DbItemKind.RemoteUserDefinedList,
expanded: false,
listName: "my list",
repos: [
{
kind: DbItemKind.RemoteRepo,
repoFullName: "owner1/repo2",
selected: false,
},
{
kind: DbItemKind.RemoteRepo,
repoFullName: "owner1/repo3",
selected: false,
},
],
selected: false,
},
createRemoteSystemDefinedListDbItem(),
createRemoteOwnerDbItem(),
createRemoteUserDefinedListDbItem(),
],
},
{
kind: DbItemKind.RemoteSystemDefinedList,
}),
createRemoteSystemDefinedListDbItem({
listName: "top_10",
listDisplayName: "Top 10 repositories",
listDescription: "Top 10 repositories of a language",
selected: true,
},
}),
];
expect(getSelectedDbItem(dbItems)).toEqual({
@@ -260,33 +127,24 @@ describe("db item selection", () => {
it("should handle empty db item lists", () => {
const dbItems: DbItem[] = [
{
kind: DbItemKind.RootRemote,
expanded: false,
createRootRemoteDbItem({
children: [
{
kind: DbItemKind.RemoteSystemDefinedList,
listName: "top_10",
listDisplayName: "Top 10 repositories",
listDescription: "Top 10 repositories of a language",
selected: false,
},
{
kind: DbItemKind.RemoteOwner,
ownerName: "github",
selected: false,
},
{
kind: DbItemKind.RemoteUserDefinedList,
expanded: false,
listName: "my list",
createRemoteSystemDefinedListDbItem(),
createRemoteOwnerDbItem(),
createRemoteUserDefinedListDbItem({
repos: [],
selected: false,
},
selected: true,
listName: "list84",
}),
],
},
}),
];
expect(getSelectedDbItem(dbItems)).toBeUndefined();
expect(getSelectedDbItem(dbItems)).toEqual({
expanded: false,
kind: DbItemKind.RemoteUserDefinedList,
listName: "list84",
repos: [],
selected: true,
});
});
});