Skip to content

Commit c6d9a8b

Browse files
authored
Merge pull request #6 from klmhyeonwoo/feature/utils-workspace-yeom
feat: Add http url check util function to validationUtil
2 parents 49d2820 + 9278cc0 commit c6d9a8b

4 files changed

Lines changed: 72 additions & 22 deletions

File tree

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { describe, expect, it } from "vitest";
2+
import checkHttpUrl from ".";
3+
4+
describe("URL 유효성 검사", () => {
5+
describe("유효한 HTTP/HTTPS URL 문자열이 주어졌을 때", () => {
6+
const validUrls = [
7+
"http://example.com",
8+
"https://example.com",
9+
"https://www.example.com",
10+
"http://example.com/path/to/resource",
11+
"https://example.com?query=123&key=value",
12+
"http://localhost:3000",
13+
"https://sub.domain.co.uk/page#section",
14+
];
15+
16+
// it: 테스트하는 개별 동작을 명확히 서술
17+
it.each(validUrls)("'%s'에 대해 true를 반환한다", (url) => {
18+
expect(checkHttpUrl(url)).toBe(true);
19+
});
20+
});
21+
22+
describe("유효하지 않은 URL 문자열이 주어졌을 때", () => {
23+
const invalidUrls = [
24+
"www.example.com", // 프로토콜 없음
25+
"example.com", // 프로토콜 없음
26+
"/relative/path", // 상대 경로
27+
"ftp://example.com", // 다른 프로토콜
28+
"mailto:test@example.com", // 다른 프로토콜
29+
"http:// example.com", // 공백 포함
30+
"https://", // 프로토콜만 있음
31+
"just a random string", // 일반 문자열
32+
"", // 빈 문자열
33+
];
34+
35+
it.each(invalidUrls)("'%s'에 대해 false를 반환한다", (url) => {
36+
expect(checkHttpUrl(url)).toBe(false);
37+
});
38+
});
39+
});
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
export default function checkHttpUrl(str: string): boolean {
2+
try {
3+
const url = new URL(str);
4+
return url.protocol === "http:" || url.protocol === "https:";
5+
} catch {
6+
return false;
7+
}
8+
}

package/validationUtil/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export { default as checkEmail } from "./checkEmail";
2+
export { default as checkHttpUrl } from "./checkHttpUrl";

vitest-report.xml

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,37 @@
11
<?xml version="1.0" encoding="UTF-8" ?>
2-
<testsuites name="vitest tests" tests="10" failures="0" errors="0" time="0.0078695">
3-
<testsuite name="package/objectUtil/clearNullProperties/index.test.ts" timestamp="2025-08-27T00:35:02.147Z" hostname="users-MacBook-Pro.local" tests="1" failures="0" errors="0" skipped="0" time="0.001491875">
4-
<testcase classname="package/objectUtil/clearNullProperties/index.test.ts" name="만약 Null이 객체에 존재한다면, Null이 없는 객체가 반환된다." time="0.000944958">
2+
<testsuites name="vitest tests" tests="16" failures="0" errors="0" time="0.002133542">
3+
<testsuite name="package/validationUtil/checkHttpUrl/index.test.ts" timestamp="2025-08-27T08:47:10.603Z" hostname="users-MacBook-Pro.local" tests="16" failures="0" errors="0" skipped="0" time="0.002133542">
4+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효한 HTTP/HTTPS URL 문자열이 주어졌을 때 &gt; &apos;http://example.com&apos;에 대해 true를 반환한다" time="0.000729292">
55
</testcase>
6-
</testsuite>
7-
<testsuite name="package/objectUtil/deepFreeze/index.test.ts" timestamp="2025-08-27T00:35:02.148Z" hostname="users-MacBook-Pro.local" tests="1" failures="0" errors="0" skipped="0" time="0.001265125">
8-
<testcase classname="package/objectUtil/deepFreeze/index.test.ts" name="객체의 불변성이 유지된다." time="0.000742375">
6+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효한 HTTP/HTTPS URL 문자열이 주어졌을 때 &gt; &apos;https://example.com&apos;에 대해 true를 반환한다" time="0.0001035">
97
</testcase>
10-
</testsuite>
11-
<testsuite name="package/numberUtil/subtract/index.test.ts" timestamp="2025-08-27T00:35:02.149Z" hostname="users-MacBook-Pro.local" tests="4" failures="0" errors="0" skipped="0" time="0.001365541">
12-
<testcase classname="package/numberUtil/subtract/index.test.ts" name="2 - 1은 1이다." time="0.000675792">
8+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효한 HTTP/HTTPS URL 문자열이 주어졌을 때 &gt; &apos;https://www.example.com&apos;에 대해 true를 반환한다" time="0.000051375">
139
</testcase>
14-
<testcase classname="package/numberUtil/subtract/index.test.ts" name="5 - 10 - 15는 -20이다." time="0.000068208">
10+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효한 HTTP/HTTPS URL 문자열이 주어졌을 때 &gt; &apos;http://example.com/path/to/resource&apos;에 대해 true를 반환한다" time="0.000051875">
1511
</testcase>
16-
<testcase classname="package/numberUtil/subtract/index.test.ts" name="-1 - (-2)는 1이다." time="0.000055125">
12+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효한 HTTP/HTTPS URL 문자열이 주어졌을 때 &gt; &apos;https://example.com?query=123&amp;key=value&apos;에 대해 true를 반환한다" time="0.000052833">
1713
</testcase>
18-
<testcase classname="package/numberUtil/subtract/index.test.ts" name="인자 없는 경우 0을 반환한다." time="0.000058917">
14+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효한 HTTP/HTTPS URL 문자열이 주어졌을 때 &gt; &apos;http://localhost:3000&apos;에 대해 true를 반환한다" time="0.000047542">
1915
</testcase>
20-
</testsuite>
21-
<testsuite name="package/numberUtil/sum/index.test.ts" timestamp="2025-08-27T00:35:02.150Z" hostname="users-MacBook-Pro.local" tests="2" failures="0" errors="0" skipped="0" time="0.0013085">
22-
<testcase classname="package/numberUtil/sum/index.test.ts" name="1 + 2 + 3은 6이다." time="0.000696375">
16+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효한 HTTP/HTTPS URL 문자열이 주어졌을 때 &gt; &apos;https://sub.domain.co.uk/page#section&apos;에 대해 true를 반환한다" time="0.00004075">
2317
</testcase>
24-
<testcase classname="package/numberUtil/sum/index.test.ts" name="5 + 10 + 15는 30이다." time="0.000073666">
18+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효하지 않은 URL 문자열이 주어졌을 때 &gt; &apos;www.example.com&apos;에 대해 false를 반환한다" time="0.000048916">
2519
</testcase>
26-
</testsuite>
27-
<testsuite name="package/stringUtil/escapeHtml/index.test.ts" timestamp="2025-08-27T00:35:02.150Z" hostname="users-MacBook-Pro.local" tests="1" failures="0" errors="0" skipped="0" time="0.00125">
28-
<testcase classname="package/stringUtil/escapeHtml/index.test.ts" name="HTML 특수 문자를 이스케이프한다." time="0.000713334">
20+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효하지 않은 URL 문자열이 주어졌을 때 &gt; &apos;example.com&apos;에 대해 false를 반환한다" time="0.000043208">
2921
</testcase>
30-
</testsuite>
31-
<testsuite name="package/stringUtil/unescapeHtml/index.test.ts" timestamp="2025-08-27T00:35:02.150Z" hostname="users-MacBook-Pro.local" tests="1" failures="0" errors="0" skipped="0" time="0.001188459">
32-
<testcase classname="package/stringUtil/unescapeHtml/index.test.ts" name="HTML 특수 문자를 언이스케이프한다." time="0.000659959">
22+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효하지 않은 URL 문자열이 주어졌을 때 &gt; &apos;/relative/path&apos;에 대해 false를 반환한다" time="0.00005725">
23+
</testcase>
24+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효하지 않은 URL 문자열이 주어졌을 때 &gt; &apos;ftp://example.com&apos;에 대해 false를 반환한다" time="0.000036584">
25+
</testcase>
26+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효하지 않은 URL 문자열이 주어졌을 때 &gt; &apos;mailto:test@example.com&apos;에 대해 false를 반환한다" time="0.000029167">
27+
</testcase>
28+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효하지 않은 URL 문자열이 주어졌을 때 &gt; &apos;http:// example.com&apos;에 대해 false를 반환한다" time="0.000047292">
29+
</testcase>
30+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효하지 않은 URL 문자열이 주어졌을 때 &gt; &apos;https://&apos;에 대해 false를 반환한다" time="0.000043291">
31+
</testcase>
32+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효하지 않은 URL 문자열이 주어졌을 때 &gt; &apos;just a random string&apos;에 대해 false를 반환한다" time="0.000024416">
33+
</testcase>
34+
<testcase classname="package/validationUtil/checkHttpUrl/index.test.ts" name="URL 유효성 검사 &gt; 유효하지 않은 URL 문자열이 주어졌을 때 &gt; &apos;&apos;에 대해 false를 반환한다" time="0.000033208">
3335
</testcase>
3436
</testsuite>
3537
</testsuites>

0 commit comments

Comments
 (0)