Skip to content

Commit

Permalink
refactor(app): refactor fetcher + fix issues with some services
Browse files Browse the repository at this point in the history
  • Loading branch information
Quentin Laffont committed Jun 26, 2023
1 parent 172da09 commit 9bd7c27
Show file tree
Hide file tree
Showing 9 changed files with 533 additions and 342 deletions.
174 changes: 90 additions & 84 deletions __tests__/index.test.ts
@@ -1,114 +1,120 @@
import axios from 'axios';
import { UsernameChecker } from '../src';
import MockAdapter from 'axios-mock-adapter';

const mock = new MockAdapter(axios);
import { faker } from '@faker-js/faker';

describe('Username Checker', () => {
const random = Math.random().toString().replace('.', '').substring(0, 8);

test('Twitter 200', async () => {
const service = 'twitter';
const username = `r1a2n3d${random}`;
const url = `https://api.twitter.com/i/users/username_available.json?username=${username}`;

mock
.onGet(url)
.reply(
200,
{ valid: true, reason: 'available', msg: 'Available!', desc: 'Available!' },
{ 'content-type': 'application/json;charset=utf-8' },
);
test('getServices', () => {
const usernameChecker = new UsernameChecker();

const result = await usernameChecker.isAvailable(service, username);
expect(result).toMatchObject({ service, url, available: true });
const services = usernameChecker.getServices();
expect(services).toEqual(expect.any(Array));
});

test('Twitter ContentType', async () => {
const service = 'twitter';
const username = `r1a2n3d${random}`;
const url = `https://api.twitter.com/i/users/username_available.json?username=${username}`;

mock.onGet(url).reply(200, { valid: true, reason: 'available', msg: 'Available!', desc: 'Available!' });
test('getServiceDetail', () => {
const usernameChecker = new UsernameChecker();

const result = await usernameChecker.isAvailable(service, username);
expect(result).toMatchObject({ service, url, available: false });
const serviceDetail = usernameChecker.getServiceDetail('yelp');
expect(serviceDetail).toEqual(expect.any(Object));
});

test('Venmo 404', async () => {
const service = 'venmo';
const username = `r1a2n3d${random}`;
const url = `https://venmo.com/${username}`;

mock.onGet(url).reply(404);
const usernameChecker = new UsernameChecker();
describe('Twitch', () => {
test('Username exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('twitch', 'mirardes');
expect(serviceDetail).toMatchObject({ available: false });
});

const result = await usernameChecker.isAvailable(service, username);
expect(result).toMatchObject({ service, url, available: true });
test('Username not exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('twitch', faker.string.alphanumeric(14));
expect(serviceDetail).toMatchObject({ available: true });
});
});

test('Vimeo 500', async () => {
const service = 'vimeo';
const username = `r1a2n3d${random}`;
const url = `https://vimeo.com/${username}`;
describe('Twitter', () => {
test('Username not exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('twitter', faker.string.alphanumeric(14));
expect(serviceDetail).toMatchObject({ available: true });
});

mock.onGet(url).reply(500);
const usernameChecker = new UsernameChecker();
test('Username exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('twitter', 'qlaffont');
expect(serviceDetail).toMatchObject({ available: false });
});

const result = await usernameChecker.isAvailable(service, username);
expect(result).toMatchObject({
service,
url,
available: undefined,
reason: `${service} faced internal server error.`,
test('Username too long', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('twitter', 'qlaffontqweqweqweqweqweqwe');
expect(serviceDetail).toMatchObject({ available: false });
});
});

test('Github 400', async () => {
const service = 'github';
const username = `r1a2n3d${random}`;
const url = `https://github.com/${username}`;

mock.onGet(url).reply(400);
const usernameChecker = new UsernameChecker();
describe('Pinterest', () => {
test('Username not exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('pinterest', faker.string.alphanumeric(14));
expect(serviceDetail).toMatchObject({ available: true });
});

const result = await usernameChecker.isAvailable(service, username);
expect(result).toMatchObject({
service,
url,
available: undefined,
reason: `Unknown error occured with ${service}`,
test('Username exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('pinterest', 'avaerage');
expect(serviceDetail).toMatchObject({ available: false });
});
});

test('Pandora Timeout', async () => {
const service = 'pandora';
const username = `r1a2n3d${random}`;
const url = `https://www.pandora.com/profile/${username}`;
describe('Reddit', () => {
test('Username not exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('reddit', faker.string.alphanumeric(14));
expect(serviceDetail).toMatchObject({ available: true });
});

mock.onGet(url).timeout();
const usernameChecker = new UsernameChecker();
test('Username exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('reddit', 'Judgement_Bot_AITA');
expect(serviceDetail).toMatchObject({ available: false });
});
});

describe('Wordpress', () => {
test('Username not exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('wordpress', faker.string.alphanumeric(14));
expect(serviceDetail).toMatchObject({ available: true });
});

const result = await usernameChecker.isAvailable(service, username);
expect(result).toMatchObject({
service,
url,
available: undefined,
reason: `Unable to connect to ${service}`,
test('Username exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('wordpress', 'facebook');
expect(serviceDetail).toMatchObject({ available: false });
});
});

test('getServices', () => {
const usernameChecker = new UsernameChecker();
const services = usernameChecker.getServices();
expect(services).toEqual(expect.any(Array));
describe('Paypal', () => {
test('Username not exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('paypal', faker.string.alphanumeric(27));
expect(serviceDetail).toMatchObject({ available: true });
});

test('Username exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('paypal', 'qlaffont');
expect(serviceDetail).toMatchObject({ available: false });
});
});

test('getServiceDetail', () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = usernameChecker.getServiceDetail('yelp');
expect(serviceDetail).toEqual(expect.any(Object));
describe('Y Combinator', () => {
test('Username not exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('ycombinator', faker.string.alphanumeric(27));
expect(serviceDetail).toMatchObject({ available: true });
});

test('Username exist', async () => {
const usernameChecker = new UsernameChecker();
const serviceDetail = await usernameChecker.isAvailable('ycombinator', 'slack');
expect(serviceDetail).toMatchObject({ available: false });
});
});
});

0 comments on commit 9bd7c27

Please sign in to comment.