Skip to content

Commit

Permalink
Merge pull request #30 from Hacksore/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
Sean Boult authored Mar 19, 2020
2 parents 1553c15 + 0e9864b commit b843756
Show file tree
Hide file tree
Showing 35 changed files with 8,021 additions and 3,009 deletions.
1 change: 1 addition & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@ jobs:
# run tests!
- run: yarn lint
- run: yarn build
- run: yarn test --verbose
2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ module.exports = {
env: {
browser: true,
node: true,
},
}
};
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ node_modules/
.rpt2_cache
dist/
config*.json
.vs/
.vscode/
coverage/
3 changes: 0 additions & 3 deletions .vs/ProjectSettings.json

This file was deleted.

7 changes: 0 additions & 7 deletions .vs/VSWorkspaceState.json

This file was deleted.

Binary file removed .vs/bluelinky/v16/.suo
Binary file not shown.
Binary file removed .vs/slnx.sqlite
Binary file not shown.
5 changes: 0 additions & 5 deletions .vscode/settings.json

This file was deleted.

4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ Checkout out the docs [bluelinky-docs](https://hacksore.github.io/bluelinky-docs
| [Regions](https://github.com/Hacksore/bluelinky/wiki/Regions) | Current Status |
|-----------|--------------|
| USA | Working |
| Canada | WIP (soon™) |
| Europe | WIP (soon™) |
| Canada | Working |
| Europe | Working |
| Korea | ▯▯▯▯▯▯ |
| Australia | sorry m8 |

Expand Down
67 changes: 67 additions & 0 deletions __tests__/bluelinky.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@

/* eslint-disable */

import got from 'got';
import BlueLinky from '../lib/index';
jest.mock('got');

describe('BlueLinky', () => {

beforeEach(() => {
(got as any).mockReturnValueOnce({
body: {
'access_token': 'test',
'refresh_token': 'test',
'expires_in': 'test'
},
statusCode: 200
})
.mockReturnValueOnce({
body: '[]',
statusCode: 200
});
});

it('creates a client with valid config', () => {
const client = new BlueLinky({
username: '[email protected]',
password: 'hunter1',
pin: '1234',
region: 'US'
});

expect(client).toBeDefined();

client.on('ready', () => {
expect(client.getSession()).toBeDefined();
expect(client.getSession().accessToken).toEqual('test');
});

});

it('throws error when you pass invalid region', () => {
expect(() => {
const client = new BlueLinky({
username: '[email protected]',
password: 'hunter1',
pin: '1234',
region: 'KR'
})
}).toThrowError('Your region is not supported yet.');
});

it('ready event is called after login', (done) => {
const client = new BlueLinky({
username: '[email protected]',
password: 'hunter1',
pin: '1234',
region: 'US'
});

client.on('ready', () => {
done();
});

});

});
134 changes: 134 additions & 0 deletions __tests__/controller.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
/* eslint-disable */
import got from 'got';

import { AmericanController } from '../lib/controllers/american.controller';
import { EuropeanController } from '../lib/controllers/european.controller';
import { CanadianController } from '../lib/controllers/canadian.controller';

jest.mock('got');

const getController = region => {
const referenceMap = {
US: AmericanController,
EU: EuropeanController,
CA: CanadianController,
};

const controller = new referenceMap[region]({
username: '[email protected]',
password: 'test',
region: 'US',
autoLogin: true,
pin: '1234',
vin: '4444444444444',
vehicleId: undefined,
deviceUuid: '',
});

return controller;
};

describe('AmericanController', () => {
it('call getVehicles and check length', async () => {
const controller = getController('US');

(got as any).mockReturnValueOnce({
body: JSON.stringify({
enrolledVehicleDetails: [
{
vehicleDetails: [
{
nickname: 'Jest is best',
vin: '444',
regDate: 'test',
brandIndicator: 'H',
regId: '123123',
gen: '2',
name: 'Car',
},
],
},
],
}),
statusCode: 200,
});

expect(await controller.getVehicles()).toHaveLength(1);
});
});

describe('EuropeanController', () => {

it('call getVehicles and check length', async () => {
const controller = getController('EU');

(got as any).mockReturnValueOnce({
body: {
resMsg: {
vehicles: [
{
nickname: 'Jest is best',
vin: '444',
regDate: 'test',
brandIndicator: 'H',
regId: '123123',
gen: '2',
name: 'Car',
},
],
},
},
statusCode: 200,
});

(got as any).mockReturnValueOnce({
body: {
resMsg: {
vinInfo: [
{
basic: {
modelYear: '2019',
vin: '5555'
}
}
],
},
},
statusCode: 200,
});

const vehicles = await controller.getVehicles();
expect(vehicles).toHaveLength(1);
});
});

describe('CanadianController', () => {

it('call getVehicles and check length', async () => {
const controller = getController('CA');

(got as any).mockReturnValueOnce({
body: {
responseHeader: {
responseCode: 0,
},
result: {
vehicles: [
{
nickname: 'Jest is best',
vin: '444',
regDate: 'test',
brandIndicator: 'H',
regId: '123123',
gen: '2',
name: 'Car',
},
],
},
},
statusCode: 200,
});

expect(await controller.getVehicles()).toHaveLength(1);
});
});
137 changes: 137 additions & 0 deletions __tests__/vehicle.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
/* eslint-disable */
import got from 'got';

import AmericanVehicle from '../lib/vehicles/americanVehicle';
import { AmericanController } from '../lib/controllers/american.controller';

import EuropeanVehicle from '../lib/vehicles/europianVehicle';
import { EuropeanController } from '../lib/controllers/european.controller';

import CanadianVehicle from '../lib/vehicles/canadianVehicle';
import { CanadianController } from '../lib/controllers/canadian.controller';

jest.mock('got');

const getVehicle = region => {
const referenceMap = {
US: {
controller: AmericanController,
vehicle: AmericanVehicle,
},
EU: {
controller: EuropeanController,
vehicle: EuropeanVehicle,
},
CA: {
controller: CanadianController,
vehicle: CanadianVehicle,
},
};

const controller = new referenceMap[region].controller({
username: '[email protected]',
password: 'test',
region: 'US',
autoLogin: true,
pin: '1234',
vin: '4444444444444',
vehicleId: undefined,
deviceUuid: '',
});

const vehicle = new referenceMap[region].vehicle(
{
nickname: 'Jest is best',
vin: '444',
regDate: 'test',
brandIndicator: 'H',
regId: '123123',
gen: '2',
name: 'Car',
},
controller
);

return vehicle;
};

describe('AmericanVehicle', () => {
const vehicle = getVehicle('US');

it('define new vehicle', () => {
expect(vehicle.config.nickname).toEqual('Jest is best');
});

it('call lock commmand', async () => {
(got as any).mockReturnValueOnce({
body: {},
statusCode: 200,
});

const response = await vehicle.lock();
expect(response).toEqual('Lock successful');

});
});

describe('CanadianVehicle', () => {
const vehicle = getVehicle('CA');

it('define new vehicle', () => {
expect(vehicle.config.nickname).toEqual('Jest is best');
});

it('call lock commmand', async () => {
(got as any).mockReturnValueOnce({
body: {
result: {
pAuth: 'test'
},
responseHeader: {
responseCode: 0,
},
},
statusCode: 200,
});

(got as any).mockReturnValueOnce({
body: {
responseHeader: {
responseCode: 0,
},
},
statusCode: 200,
});

const response = await vehicle.lock();
expect(response).toEqual('Lock successful');
});
});

describe('EuropeanVehicle', () => {
const vehicle = getVehicle('EU');

it('define new vehicle', () => {
expect(vehicle.config.nickname).toEqual('Jest is best');
});

it('call lock commmand', async () => {
(got as any).mockReturnValueOnce({
body: {},
statusCode: 200
});

const response = await vehicle.lock();
expect(response).toEqual('Lock successful');
});

it('call unlock commmand', async () => {
(got as any).mockReturnValueOnce({
body: {},
statusCode: 200
});

const response = await vehicle.unlock();
expect(response).toEqual('Unlock successful');
});
});
6 changes: 6 additions & 0 deletions babel.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
presets: [
['@babel/preset-env', {targets: {node: 'current'}}],
'@babel/preset-typescript',
],
};
Loading

0 comments on commit b843756

Please sign in to comment.