Skip to content

Commit 0e57e49

Browse files
committed
refactor(api): implement isRandomOrder function
1 parent b063cd1 commit 0e57e49

6 files changed

Lines changed: 50 additions & 15 deletions

File tree

__tests__/unit/api/api.test.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,12 @@ test("should returns 404 if path contains ignore chars", async () => {
1111
expect(response.status).toEqual(404);
1212
});
1313

14-
1514
describe("PaginationParams", () => {
1615
it("should accept valid PaginationParams object", () => {
1716
const params: PaginationParams = {
1817
page: 1,
1918
limit: 10,
20-
order: Order.DESC,
19+
order: Order.DESC
2120
};
2221

2322
expect(params.page).toBe(1);
@@ -29,13 +28,13 @@ describe("PaginationParams", () => {
2928
const defaultParams: PaginationParams = {
3029
page: 1,
3130
limit: 20,
32-
order: Order.DEFAULT,
31+
order: Order.DEFAULT
3332
};
3433

3534
const randomParams: PaginationParams = {
3635
page: 2,
3736
limit: 5,
38-
order: Order.RANDOM,
37+
order: Order.RANDOM
3938
};
4039

4140
expect(defaultParams.order).toBe(Order.DEFAULT);
@@ -46,7 +45,7 @@ describe("PaginationParams", () => {
4645
const params: PaginationParams = {
4746
page: 1,
4847
limit: 10,
49-
order: Order.DESC,
48+
order: Order.DESC
5049
};
5150

5251
expect(typeof params.page).toBe("number");
@@ -61,7 +60,7 @@ describe("PaginationParams", () => {
6160
const params: PaginationParams = {
6261
page: 1,
6362
limit: 10,
64-
order: validOrder,
63+
order: validOrder
6564
};
6665

6766
expect(params.order).toBe(Order.DESC);

__tests__/unit/api/order.test.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { describe, expect, it } from "vitest";
2-
import { Order, getValidOrder } from "../../../src/api/order";
2+
import { Order, getValidOrder, isRandomOrder } from "../../../src/api/order";
33

44
describe("Order", () => {
55
it("should have correct enum values", () => {
@@ -51,3 +51,30 @@ describe("getValidOrder", () => {
5151
expect(getValidOrder("RANDOM")).toBe(Order.DEFAULT);
5252
});
5353
});
54+
55+
describe("isRandomOrder", () => {
56+
it("should return true when order is Order.RANDOM", () => {
57+
const result = isRandomOrder(Order.RANDOM);
58+
expect(result).toBe(true);
59+
});
60+
61+
it("should return false when order is Order.DEFAULT", () => {
62+
const result = isRandomOrder(Order.DEFAULT);
63+
expect(result).toBe(false);
64+
});
65+
66+
it("should return false when order is Order.DESC", () => {
67+
const result = isRandomOrder(Order.DESC);
68+
expect(result).toBe(false);
69+
});
70+
71+
it("should work with getValidOrder function", () => {
72+
const randomOrder = getValidOrder("random");
73+
const descOrder = getValidOrder("desc");
74+
const defaultOrder = getValidOrder("invalid");
75+
76+
expect(isRandomOrder(randomOrder)).toBe(true);
77+
expect(isRandomOrder(descOrder)).toBe(false);
78+
expect(isRandomOrder(defaultOrder)).toBe(false);
79+
});
80+
});

src/api/order.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export enum Order {
2-
DEFAULT = 'default',
3-
DESC = 'desc',
4-
RANDOM = 'random'
2+
DEFAULT = "default",
3+
DESC = "desc",
4+
RANDOM = "random"
55
}
66

77
export function getValidOrder(orderParam: string | undefined): Order {
@@ -14,3 +14,7 @@ export function getValidOrder(orderParam: string | undefined): Order {
1414
return Order.DEFAULT;
1515
}
1616
}
17+
18+
export function isRandomOrder(order: Order): boolean {
19+
return order === Order.RANDOM;
20+
}

src/app/articles/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import { headers } from "next/headers";
44
import { fetchArticles } from "../../api";
5-
import { getValidOrder, Order } from "../../api/order";
5+
import { getValidOrder, isRandomOrder } from "../../api/order";
66
import { Article, ArticleResponseWithCount } from "../../models/models";
77
import { parseOrThrow, runWithHandleErrorIf } from "../handler";
88
import { Renderer } from "./renderer";
@@ -18,7 +18,7 @@ export default async function Page(req: any) {
1818
async function handler(req: any) {
1919
const queryString = await req.searchParams;
2020
const order = getValidOrder(queryString.order);
21-
const randomness = order === Order.RANDOM;
21+
const randomness = isRandomOrder(order);
2222
const currentPage = queryString.p ? queryString.p : 1;
2323
const response: Response = await fetchArticles(
2424
await headers(),

src/app/page.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@ export default async function Page(req: any) {
1616
}
1717

1818
async function handler(req: any) {
19-
const response: Response = await fetchArticles(await headers(), 1, 5, Order.DEFAULT);
19+
const response: Response = await fetchArticles(
20+
await headers(),
21+
1,
22+
5,
23+
Order.DEFAULT
24+
);
2025
const articlesResponseWithCount =
2126
await parseOrThrow<ArticleResponseWithCount>(response);
2227
const articles: Array<Article> = articlesResponseWithCount.articles.map(

src/app/tags/[...slug]/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import { headers } from "next/headers";
44
import { fetchTag } from "../../../api";
5-
import { getValidOrder, Order } from "../../../api/order";
5+
import { getValidOrder, isRandomOrder } from "../../../api/order";
66
import { Article, ArticleResponseWithCount } from "../../../models/models";
77
import { parseOrThrow, runWithHandleErrorIf } from "../../handler";
88
import { Renderer } from "./renderer";
@@ -21,7 +21,7 @@ async function handler(req: any) {
2121

2222
const queryString = await req.searchParams;
2323
const order = getValidOrder(queryString.order);
24-
const randomness = order === Order.RANDOM;
24+
const randomness = isRandomOrder(order);
2525
const currentPage = queryString.p ? queryString.p : 1;
2626
const response: Response = await fetchTag(
2727
await headers(),

0 commit comments

Comments
 (0)