aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorST-DDT <[email protected]>2022-01-30 21:31:31 +0100
committerGitHub <[email protected]>2022-01-30 21:31:31 +0100
commitc6f7aa9de0259b45a62bf59336c3ff037a40651d (patch)
treedb3294eaaf68e429a58d3ca341272ae1bbfcbee3
parent6c5b9706eb16f8841d3f3b2109b8a21fb65fa04a (diff)
downloadfaker-c6f7aa9de0259b45a62bf59336c3ff037a40651d.tar.xz
faker-c6f7aa9de0259b45a62bf59336c3ff037a40651d.zip
fix: improve internet tests and fix bug in domain name generation (#258)
Co-authored-by: Shinigami <[email protected]>
-rw-r--r--package.json2
-rw-r--r--pnpm-lock.yaml13
-rw-r--r--src/internet.ts3
-rw-r--r--test/internet.spec.ts126
4 files changed, 136 insertions, 8 deletions
diff --git a/package.json b/package.json
index 6f103173..3146b704 100644
--- a/package.json
+++ b/package.json
@@ -89,6 +89,7 @@
"@types/node": "~16.11.21",
"@typescript-eslint/eslint-plugin": "~5.10.1",
"@typescript-eslint/parser": "~5.10.1",
+ "@types/validator": "~13.7.1",
"@vitest/ui": "~0.2.5",
"c8": "~7.11.0",
"conventional-changelog-cli": "~2.2.2",
@@ -109,6 +110,7 @@
"typedoc": "~0.22.11",
"typedoc-plugin-missing-exports": "~0.22.6",
"typescript": "~4.5.5",
+ "validator": "~13.7.0",
"vite": "~2.7.13",
"vitepress": "~0.21.6",
"vitest": "~0.2.5"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index da3644f4..70ac0bfa 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -2,6 +2,7 @@ lockfileVersion: 5.3
specifiers:
'@types/node': ~16.11.21
+ '@types/validator': ~13.7.1
'@typescript-eslint/eslint-plugin': ~5.10.1
'@typescript-eslint/parser': ~5.10.1
'@vitest/ui': ~0.2.5
@@ -24,12 +25,14 @@ specifiers:
typedoc: ~0.22.11
typedoc-plugin-missing-exports: ~0.22.6
typescript: ~4.5.5
+ validator: ~13.7.0
vite: ~2.7.13
vitepress: ~0.21.6
vitest: ~0.2.5
devDependencies:
'@types/node': 16.11.21
+ '@types/validator': 13.7.1
'@typescript-eslint/eslint-plugin': 5.10.1_5bb2413551d07429e4087fb9ca3ae3ea
'@typescript-eslint/parser': [email protected][email protected]
'@vitest/ui': 0.2.5
@@ -52,6 +55,7 @@ devDependencies:
typedoc-plugin-missing-exports: [email protected]
typescript: 4.5.5
+ validator: 13.7.0
vite: 2.7.13
vitepress: 0.21.6
@@ -370,6 +374,10 @@ packages:
resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==}
dev: true
+ /@types/validator/13.7.1:
+ resolution: {integrity: sha512-I6OUIZ5cYRk5lp14xSOAiXjWrfVoMZVjDuevBYgQDYzZIjsf2CAISpEcXOkFAtpAHbmWIDLcZObejqny/9xq5Q==}
+ dev: true
+
/@types/yauzl/2.9.2:
resolution: {integrity: sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==}
requiresBuild: true
@@ -4182,6 +4190,11 @@ packages:
spdx-expression-parse: 3.0.1
dev: true
+ /validator/13.7.0:
+ resolution: {integrity: sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
/verror/1.10.0:
resolution: {integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=}
engines: {'0': node >=0.6.0}
diff --git a/src/internet.ts b/src/internet.ts
index 2c663d58..7b74101f 100644
--- a/src/internet.ts
+++ b/src/internet.ts
@@ -325,6 +325,8 @@ export class Internet {
domainWord(): string {
return (this.faker.word.adjective() + '-' + this.faker.word.noun())
.replace(/([\\~#&*{}/:<>?|\"'])/gi, '')
+ .replace(/\s/g, '-')
+ .replace(/-{2,}/g, '-')
.toLowerCase();
}
@@ -333,6 +335,7 @@ export class Internet {
*
* @method faker.internet.ip
*/
+ // TODO @Shinigami92 2022-01-23: Add ipv4 alias
ip(): string {
const randNum = () => {
return this.faker.datatype.number(255).toFixed(0);
diff --git a/test/internet.spec.ts b/test/internet.spec.ts
index e5002cd6..78337866 100644
--- a/test/internet.spec.ts
+++ b/test/internet.spec.ts
@@ -1,7 +1,8 @@
import { describe, expect, it, vi } from 'vitest';
import { faker } from '../dist/cjs';
+import validator from 'validator';
-describe('internet.js', () => {
+describe('internet', () => {
describe('email()', () => {
it('returns an email', () => {
const spy_internet_userName = vi
@@ -12,6 +13,7 @@ describe('internet.js', () => {
const res = email.split('@')[0];
expect(res).toBe('Aiden.Harann55');
+ expect(email).satisfy(validator.isEmail);
spy_internet_userName.mockRestore();
});
@@ -25,28 +27,48 @@ describe('internet.js', () => {
const res = email.split('@')[0];
expect(res).toBe('思源_唐3');
+ expect(email).satisfy(validator.isEmail);
spy_internet_userName.mockRestore();
});
+
+ it('email() to return valid values', () => {
+ for (let i = 0; i < 10000; i++) {
+ const email = faker.internet.email();
+
+ expect(email).satisfy(validator.isEmail);
+ }
+ });
});
- describe('exampleEmail', () => {
+ describe('exampleEmail()', () => {
it('returns an email with the correct name', () => {
const spy_internet_userName = vi
.spyOn(faker.internet, 'userName')
.mockReturnValue('Aiden.Harann55');
- const email = faker.internet.email('Aiden.Harann55');
+ const email = faker.internet.exampleEmail('Aiden.Harann55');
const res = email.split('@')[0];
expect(res).toBe('Aiden.Harann55');
+ expect(email).satisfy(validator.isEmail);
spy_internet_userName.mockRestore();
});
it('uses the example.[org|com|net] host', () => {
const email = faker.internet.exampleEmail();
+
expect(email).match(/@example\.(org|com|net)$/);
+ expect(email).satisfy(validator.isEmail);
+ });
+
+ it('exampleEmail() to return valid values', () => {
+ for (let i = 0; i < 10000; i++) {
+ const email = faker.internet.exampleEmail();
+
+ expect(email).satisfy(validator.isEmail);
+ }
});
});
@@ -100,10 +122,19 @@ describe('internet.js', () => {
const domain_name = faker.internet.domainName();
expect(domain_name).toBe('bar.net');
+ expect(domain_name).satisfy(validator.isFQDN);
spy_internet_domainWord.mockRestore();
spy_internet_domainSuffix.mockRestore();
});
+
+ it('domainName() to return valid values', () => {
+ for (let i = 0; i < 10000; i++) {
+ const domainName = faker.internet.domainName();
+
+ expect(domainName).satisfy(validator.isFQDN);
+ }
+ });
});
describe('domainWord()', () => {
@@ -136,11 +167,24 @@ describe('internet.js', () => {
const domain_word = faker.internet.domainWord();
expect(domain_word).toBe('another-noun');
+ expect(domain_word).satisfy((value) =>
+ validator.isFQDN(value, { require_tld: false })
+ );
spy_word_adjective.mockRestore();
spy_word_noun.mockRestore();
});
});
+
+ it('domainWord() to return valid values', () => {
+ for (let i = 0; i < 10000; i++) {
+ const domainWord = faker.internet.domainWord();
+
+ expect(domainWord).satisfy((value) =>
+ validator.isFQDN(value, { require_tld: false })
+ );
+ }
+ });
});
describe('protocol()', () => {
@@ -186,22 +230,51 @@ describe('internet.js', () => {
describe('url()', () => {
it('returns a valid url', () => {
- vi.spyOn(faker.internet, 'protocol').mockReturnValue('http');
- vi.spyOn(faker.internet, 'domainWord').mockReturnValue('bar');
- vi.spyOn(faker.internet, 'domainSuffix').mockReturnValue('net');
+ const spy_internet_protocol = vi
+ .spyOn(faker.internet, 'protocol')
+ .mockReturnValue('http');
+ const spy_internet_domainWord = vi
+ .spyOn(faker.internet, 'domainWord')
+ .mockReturnValue('bar');
+ const spy_internet_domainSuffix = vi
+ .spyOn(faker.internet, 'domainSuffix')
+ .mockReturnValue('net');
const url = faker.internet.url();
expect(url).toBeTruthy();
expect(url).toBe('http://bar.net');
+ expect(url).satisfy(validator.isURL);
+
+ spy_internet_protocol.mockRestore();
+ spy_internet_domainWord.mockRestore();
+ spy_internet_domainSuffix.mockRestore();
+ });
+
+ it('url() to return valid values', () => {
+ for (let i = 0; i < 10000; i++) {
+ const url = faker.internet.url();
+
+ expect(url).satisfy(validator.isURL);
+ }
});
});
describe('ip()', () => {
- it('returns a random IP address with four parts', () => {
+ it('returns a random IPv4 address with four parts', () => {
const ip = faker.internet.ip();
const parts = ip.split('.');
+
expect(parts).toHaveLength(4);
+ expect(ip).satisfy(validator.isIP);
+ });
+
+ it('ip() to return valid values', () => {
+ for (let i = 0; i < 10000; i++) {
+ const ip = faker.internet.ip();
+
+ expect(ip).satisfy(validator.isIP);
+ }
});
});
@@ -209,16 +282,36 @@ describe('internet.js', () => {
it('returns a random IPv6 address with eight parts', () => {
const ip = faker.internet.ipv6();
const parts = ip.split(':');
+
expect(parts).toHaveLength(8);
+ expect(ip).satisfy(validator.isIP);
+ });
+
+ it('ipv6() to return valid values', () => {
+ for (let i = 0; i < 10000; i++) {
+ const ip = faker.internet.ipv6();
+
+ expect(ip).satisfy(validator.isIP);
+ }
});
});
describe('port()', () => {
it('returns a random port number', () => {
const port = faker.internet.port();
+
expect(Number.isInteger(port)).toBe(true);
expect(port).greaterThanOrEqual(0);
expect(port).lessThanOrEqual(65535);
+ expect(String(port)).satisfy(validator.isPort);
+ });
+
+ it('port() to return valid values', () => {
+ for (let i = 0; i < 10000; i++) {
+ const port = faker.internet.port();
+
+ expect(String(port)).satisfy(validator.isPort);
+ }
});
});
@@ -240,7 +333,16 @@ describe('internet.js', () => {
describe('color()', () => {
it('returns a valid hex value (like #ffffff)', () => {
const color = faker.internet.color(100, 100, 100);
- expect(color).match(/^#[a-f0-9]{6}$/);
+
+ expect(color).satisfy(validator.isHexColor);
+ });
+
+ it('color() to return valid values', () => {
+ for (let i = 0; i < 10000; i++) {
+ const color = faker.internet.color();
+
+ expect(color).satisfy(validator.isHexColor);
+ }
});
});
@@ -267,5 +369,13 @@ describe('internet.js', () => {
mac = faker.internet.mac('&');
expect(mac).match(/^([a-f0-9]{2}:){5}[a-f0-9]{2}$/);
});
+
+ it('mac() to return valid values', () => {
+ for (let i = 0; i < 10000; i++) {
+ const mac = faker.internet.mac();
+
+ expect(mac).satisfy(validator.isMACAddress);
+ }
+ });
});
});