Skip to content

Commit 4151534

Browse files
committed
updated casing
1 parent cd80948 commit 4151534

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+1663
-0
lines changed

src/Facade.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import CountItems from "./functions/countItems";
2+
import CreateItem from "./functions/createItem";
3+
import DeleteItem from "./functions/deleteItem";
4+
import DeleteItems from "./functions/deleteItems";
5+
import GetItem from "./functions/getItem";
6+
import GetItems from "./functions/getItems";
7+
import ReplaceItem from "./functions/replaceItem";
8+
import UpdateItem from "./functions/updateItem";
9+
import Item from "./interfaces/item";
10+
11+
export default interface Facade<I extends Item> {
12+
readonly createItem: CreateItem<I>;
13+
readonly getItem: GetItem<I>;
14+
readonly getItems: GetItems<I>;
15+
readonly deleteItem: DeleteItem<I>;
16+
readonly deleteItems: DeleteItems<I>;
17+
readonly updateItem: UpdateItem<I>;
18+
readonly replaceItem: ReplaceItem<I>;
19+
readonly countItems: CountItems<I>;
20+
}

src/errors/ConflictingItemError.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { BaseError } from "make-error";
2+
3+
export default class ConflictingItemError extends BaseError {
4+
5+
public readonly itemName: string;
6+
public readonly itemId: string;
7+
8+
public constructor(itemName: string, itemId: string){
9+
super();
10+
this.itemName = itemName;
11+
this.itemId = itemId;
12+
}
13+
}

src/errors/ItemNotFoundError.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { BaseError } from "make-error";
2+
3+
export default class ItemNotFoundError extends BaseError {
4+
5+
public readonly itemName: string;
6+
public readonly itemId: string;
7+
8+
public constructor(itemName: string, itemId: string){
9+
super();
10+
this.itemName = itemName;
11+
this.itemId = itemId;
12+
}
13+
}

src/errors/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import ConflictingItemError from "./ConflictingItemError";
2+
import ItemNotFoundError from "./ItemNotFoundError";
3+
4+
export {
5+
ConflictingItemError,
6+
ItemNotFoundError
7+
};

src/functions/CountItems/index.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import Filter from '../../interfaces/filter';
2+
import Item from '../../interfaces/item';
3+
4+
export interface Options<I extends Item> {
5+
readonly filter?: Filter<I>;
6+
}
7+
8+
export interface Result {
9+
readonly count: number;
10+
}
11+
12+
export type CountItems<I extends Item> = (options: Options<I>) => Promise<Result>;
13+
14+
export default CountItems;

src/functions/CountItems/test.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import Options from "../../interfaces/options";
2+
import { TestItem } from "../utils/testItem";
3+
import testUsingFilter from "../utils/testUsingFilter";
4+
5+
export default ({ facade }: Options<TestItem>) => {
6+
describe("countItems", () => {
7+
testUsingFilter({
8+
facade,
9+
toGetAllItems: async filter => {
10+
const { count } = await facade.countItems({ filter });
11+
const expectedCount = 2;
12+
expect(count).toBe(expectedCount);
13+
},
14+
toGetFirstItem: async filter => {
15+
const { count } = await facade.countItems({ filter });
16+
const expectedCount = 1;
17+
expect(count).toBe(expectedCount);
18+
},
19+
toGetNoItems: async filter => {
20+
const { count } = await facade.countItems({ filter });
21+
const expectedCount = 0;
22+
expect(count).toBe(expectedCount);
23+
},
24+
toGetSecondItem: async filter => {
25+
const { count } = await facade.countItems({ filter });
26+
const expectedCount = 1;
27+
expect(count).toBe(expectedCount);
28+
}
29+
});
30+
});
31+
};

src/functions/CreateItem/index.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import Item from '../../interfaces/item';
2+
3+
export interface Options<I extends Item> {
4+
readonly id: string;
5+
readonly item: I;
6+
}
7+
8+
export interface Result<I extends Item> {
9+
readonly item: I;
10+
}
11+
12+
export type CreateItems<I extends Item> = (options: Options<I>) => Promise<Result<I>>;
13+
14+
export default CreateItems;

src/functions/CreateItem/test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import ConflictingItemError from "../../errors/ConflictingItemError";
2+
import Options from "../../interfaces/options";
3+
import testItem, { testId, TestItem } from "../utils/testItem";
4+
5+
export default ({ facade }: Options<TestItem>) => {
6+
describe("createItem", () => {
7+
it("creates an item", async () => {
8+
await facade.createItem({ id: testId, item: testItem });
9+
});
10+
11+
it("does not create an item and it throws error instead", async () => {
12+
expect.assertions(1);
13+
try {
14+
await facade.createItem({ id: testId, item: testItem });
15+
await facade.createItem({ id: testId, item: testItem });
16+
} catch (e) {
17+
expect(e).toBeInstanceOf(ConflictingItemError);
18+
}
19+
});
20+
});
21+
};

src/functions/DeleteItem/index.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import Filter from '../../interfaces/filter';
2+
import Item from '../../interfaces/item';
3+
4+
export interface Options<I extends Item> {
5+
readonly id: string;
6+
readonly filter?: Filter<I>;
7+
}
8+
9+
export type DeleteItem<I extends Item> = (options: Options<I>) => Promise<void>;
10+
11+
export default DeleteItem;

src/functions/DeleteItem/test.ts

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import ItemNotFoundError from "../../errors/itemNotFoundError";
2+
import Options from "../../interfaces/options";
3+
import testItem, { testId, TestItem } from "../utils/testItem";
4+
import testUsingFilter, {
5+
firstItemId,
6+
secondItemId
7+
} from "../utils/testUsingFilter";
8+
9+
export default ({ facade }: Options<TestItem>) => {
10+
describe("deleteItem", () => {
11+
testUsingFilter({
12+
facade,
13+
toGetAllItems: async filter => {
14+
await facade.deleteItem({ id: firstItemId, filter });
15+
await facade.deleteItem({ id: secondItemId, filter });
16+
try {
17+
await facade.getItem({ id: firstItemId });
18+
} catch (e) {
19+
expect(e).toBeInstanceOf(ItemNotFoundError);
20+
}
21+
try {
22+
await facade.getItem({ id: secondItemId });
23+
} catch (e) {
24+
expect(e).toBeInstanceOf(ItemNotFoundError);
25+
}
26+
},
27+
toGetFirstItem: async filter => {
28+
await facade.deleteItem({ id: firstItemId, filter });
29+
try {
30+
await facade.getItem({ id: firstItemId });
31+
} catch (e) {
32+
expect(e).toBeInstanceOf(ItemNotFoundError);
33+
}
34+
},
35+
toGetNoItems: async filter => {
36+
try {
37+
await facade.deleteItem({ id: secondItemId, filter });
38+
} catch (e) {
39+
expect(e).toBeInstanceOf(ItemNotFoundError);
40+
}
41+
},
42+
toGetSecondItem: async filter => {
43+
await facade.deleteItem({ id: secondItemId, filter });
44+
try {
45+
await facade.getItem({ id: secondItemId });
46+
} catch (e) {
47+
expect(e).toBeInstanceOf(ItemNotFoundError);
48+
}
49+
}
50+
});
51+
52+
it("throws error when trying to delete an item which does not exist", async () => {
53+
expect.assertions(1);
54+
try {
55+
await facade.deleteItem({ id: testId });
56+
} catch (e) {
57+
expect(e).toBeInstanceOf(ItemNotFoundError);
58+
}
59+
});
60+
61+
it("deletes an item which exists", async () => {
62+
await facade.createItem({ id: testId, item: testItem });
63+
await facade.deleteItem({ id: testId });
64+
try {
65+
await facade.getItem({ id: testId });
66+
} catch (e) {
67+
expect(e).toBeInstanceOf(ItemNotFoundError);
68+
}
69+
});
70+
});
71+
};

0 commit comments

Comments
 (0)