From 748f08a8478f0743da43d0422d4e9a54d48c537d Mon Sep 17 00:00:00 2001 From: Harrison Healey Date: Tue, 11 Oct 2016 11:47:34 -0400 Subject: [PATCH] Changed Client to no longer be a singleton and added TestHelper --- src/actions/general.js | 2 +- src/{actions => client}/client.js | 8 +-- src/client/client_instance.js | 6 +++ src/components/select_server_view.js | 2 +- test/client_general.test.js | 77 ++++++++++++++-------------- test/test_helper.js | 58 ++++++++++++++------- 6 files changed, 90 insertions(+), 63 deletions(-) rename src/{actions => client}/client.js (98%) create mode 100644 src/client/client_instance.js diff --git a/src/actions/general.js b/src/actions/general.js index a27db4b49..db58121b9 100644 --- a/src/actions/general.js +++ b/src/actions/general.js @@ -1,7 +1,7 @@ // Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. -import Client from './client.js'; +import Client from 'client/client_instance.js'; import {bindClientFunc} from './helpers.js'; export const PING_REQUEST = 'PING_REQUEST'; diff --git a/src/actions/client.js b/src/client/client.js similarity index 98% rename from src/actions/client.js rename to src/client/client.js index 024cbb496..bd0a9a3a3 100644 --- a/src/actions/client.js +++ b/src/client/client.js @@ -7,7 +7,7 @@ const HEADER_AUTH = 'Authorization'; const HEADER_BEARER = 'BEARER'; const HEADER_REQUESTED_WITH = 'X-Requested-With'; -export class Client { +export default class Client { constructor() { this.teamId = ''; this.serverVersion = ''; // ?? @@ -222,6 +222,8 @@ export class Client { return onSuccess(data, response); }).catch((err) => { + // TODO errors that return non-json data get sent here + if (this.logToConsole) { console.log(err); // eslint-disable-line no-console } @@ -231,6 +233,4 @@ export class Client { ); }; } -} - -export default new Client(); +} \ No newline at end of file diff --git a/src/client/client_instance.js b/src/client/client_instance.js new file mode 100644 index 000000000..8f550c485 --- /dev/null +++ b/src/client/client_instance.js @@ -0,0 +1,6 @@ +// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved. +// See License.txt for license information. + +import Client from './client.js'; + +export default new Client(); \ No newline at end of file diff --git a/src/components/select_server_view.js b/src/components/select_server_view.js index c83abd31f..0704cf24c 100644 --- a/src/components/select_server_view.js +++ b/src/components/select_server_view.js @@ -3,7 +3,7 @@ import React, {Component} from 'react'; -import Client from 'actions/client.js'; +import Client from 'client/client_instance.js'; import {connect} from 'react-redux'; import {getPing} from 'actions/general.js'; diff --git a/test/client_general.test.js b/test/client_general.test.js index 14dcf0793..c3b7e636c 100644 --- a/test/client_general.test.js +++ b/test/client_general.test.js @@ -3,57 +3,58 @@ import assert from 'assert'; -import Client from 'actions/client.js'; -import * as TestHelper from './test_helper.js'; +import TestHelper from './test_helper.js'; describe('Client.General', () => { - beforeEach(() => { - Client.setUrl('http://localhost:8065'); - }); - it('General.getClientConfig', (done) => { - const {onRequest, onSuccess, onFailure} = TestHelper.assertOnRequestHappensFirst( - (data) => { - assert.ok(data.Version); - assert.ok(data.BuildNumber); - assert.ok(data.BuildDate); - assert.ok(data.BuildHash); + TestHelper.initBasic(({client}) => { + const {onRequest, onSuccess, onFailure} = TestHelper.assertOnRequestHappensFirst( + (data) => { + assert.ok(data.Version); + assert.ok(data.BuildNumber); + assert.ok(data.BuildDate); + assert.ok(data.BuildHash); - done(); - }, - (err) => { - done(new Error(err)); - } - ); + done(); + }, + (err) => { + done(new Error(err)); + } + ); - Client.getClientConfig(onRequest, onSuccess, onFailure)(); + client.getClientConfig(onRequest, onSuccess, onFailure)(); + }); }); it('General.getPing', (done) => { - const {onRequest, onSuccess, onFailure} = TestHelper.assertOnRequestHappensFirst( - () => { - done(); - }, - (err) => { - done(new Error(err)); - } - ); + TestHelper.initBasic(({client}) => { + const {onRequest, onSuccess, onFailure} = TestHelper.assertOnRequestHappensFirst( + () => { + done(); + }, + (err) => { + done(new Error(err)); + } + ); - Client.getPing(onRequest, onSuccess, onFailure)(); + client.getPing(onRequest, onSuccess, onFailure)(); + }); }); it('General.getPing - Invalid URL', (done) => { - const {onRequest, onSuccess, onFailure} = TestHelper.assertOnRequestHappensFirst( - () => { - done(new Error('ping should\'ve failed')); - }, - () => { - done(); - } - ); + TestHelper.initBasic(({client}) => { + const {onRequest, onSuccess, onFailure} = TestHelper.assertOnRequestHappensFirst( + () => { + done(new Error('ping should\'ve failed')); + }, + () => { + done(); + } + ); - Client.setUrl('https://example.com/fake/url'); - Client.getPing(onRequest, onSuccess, onFailure)(); + client.setUrl('https://example.com/fake/url'); + client.getPing(onRequest, onSuccess, onFailure)(); + }); }); // it('General.logClientError', function(done) { diff --git a/test/test_helper.js b/test/test_helper.js index 2e99a868e..a4c768cbe 100644 --- a/test/test_helper.js +++ b/test/test_helper.js @@ -3,27 +3,47 @@ import assert from 'assert'; -export function assertOnRequestHappensFirst(onSuccess, onFailure) { - let hasReceivedOnRequest = false; +import Client from 'client/client.js'; - return { - onRequest: () => { - hasReceivedOnRequest = true; - }, - onSuccess: (response, data) => { - assert(hasReceivedOnRequest); +class TestHelper { + assertOnRequestHappensFirst(onSuccess, onFailure) { + let hasReceivedOnRequest = false; - onSuccess(response, data); - }, - onFailure: (err) => { - assert(hasReceivedOnRequest); + return { + onRequest: () => { + hasReceivedOnRequest = true; + }, + onSuccess: (response, data) => { + assert(hasReceivedOnRequest); - onFailure(err); - } - }; + onSuccess(response, data); + }, + onFailure: (err) => { + assert(hasReceivedOnRequest); + + onFailure(err); + } + }; + } + + assertStatusOkay(data) { + assert(data); + assert(data.status === 'OK'); + } + + createClient() { + const client = new Client(); + + client.setUrl('http://localhost:8065'); + + return client; + } + + initBasic(callback) { + const client = this.createClient(); + + callback({client}); + } } -export function assertStatusOkay(data) { - assert(data); - assert(data.status === 'OK'); -} +export default new TestHelper(); \ No newline at end of file