Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
presets:["react","es2015"],
plugins: ["transform-es2015-destructuring", "transform-object-rest-spread" ]
}
25 changes: 25 additions & 0 deletions __tests__/client/components/App-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import React from 'react';
import App from '../../../src/client/components/App'
import Sites from '../../../src/client/components/Sites'
import renderer from 'react-test-renderer';
import store from '../../../src/client/redux/store';
import {Provider} from 'react-redux';
import {shallow} from 'enzyme';
test('App is renderable', () => {
const component = renderer.create(
<Provider store={store}>
<App/>
</Provider>
);
let tree = component.toJSON();
expect(tree).toMatchSnapshot();
});

test('App DOM validation', () => {
const appComponent = shallow(
<Provider store={store}>
<App/>
</Provider>
);
expect(appComponent.find(Sites).length).toBeDefined();
});
29 changes: 29 additions & 0 deletions __tests__/client/components/Flag-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import React from 'react';
import Flag from '../../../src/client/components/Flag'
import renderer from 'react-test-renderer';

//Mock data
const mockFlag={startDate:"2017-01-01",endDate:"2018-01-01",flagType:"GSTV - Unsellable"}
const mockOpenModalFunc=(siteKey,addOrEditFlag,flagIndex)=>{
console.log("Executing mockOpenModalFunc");
console.log("siteKey: "+siteKey)
console.log("addOrEditFlag: "+addOrEditFlag)
console.log("flagIndex: "+flagIndex)
}
const mockFlagIndex=0
const mockSiteKey=1
const mockRemoveAlertFunc=(siteKey,flagIndex)=>{
console.log("Executing mockRemoveAlertFunc");
console.log("siteKey: "+siteKey)
console.log("flagIndex: "+flagIndex)
}
const mockAddOrEditFlag="ADD"
test('Flag is renderable', () => {

const component = renderer.create(
<Flag flag={mockFlag} openModalFunc={mockOpenModalFunc} flagIndex={mockFlagIndex}
siteKey={mockSiteKey} removeAlertFunc={mockRemoveAlertFunc}/>
);
let tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
11 changes: 11 additions & 0 deletions __tests__/client/components/Navigation-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import React from 'react';
import Navigation from '../../../src/client/components/Navigation'
import renderer from 'react-test-renderer';

test('Navigation is renderable', () => {
const component = renderer.create(
<Navigation/>
);
let tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
57 changes: 57 additions & 0 deletions __tests__/client/components/__snapshots__/App-test.js.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`App is renderable 1`] = `
<div
className="row"
>
<div
className="row"
>
<nav
className="navbar navbar-default"
>
<div
className="container"
>
<div
className="navbar-header"
>
<a
className="navbar-brand"
href="#"
>
GSTV - Full Stack Coding Excercise
</a>
<button
className="navbar-toggle collapsed"
onClick={[Function]}
type="button"
>
<span
className="sr-only"
>
Toggle navigation
</span>
<span
className="icon-bar"
/>
<span
className="icon-bar"
/>
<span
className="icon-bar"
/>
</button>
</div>
</div>
</nav>
</div>
<div
className="row"
>
<ul
className="list-group"
/>
</div>
</div>
`;
59 changes: 59 additions & 0 deletions __tests__/client/components/__snapshots__/Flag-test.js.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Flag is renderable 1`] = `
<div
className="panel panel-default"
id={undefined}
>
<div
className="panel-body"
>
<div
className="row"
>
Flag Type:
GSTV - Unsellable
</div>
<div
className="row"
>
Start Date:
2017-01-01
</div>
<div
className="row"
>
End Date:
2018-01-01
</div>
<div
className="row"
>
<div
className="col-lg-6 col-md-6 col-sm-6"
>
<button
className="btn btn-sm btn-info"
disabled={false}
onClick={[Function]}
type="button"
>
Edit
</button>
</div>
<div
className="col-lg-6 col-md-6 col-sm-6"
>
<button
className="btn btn-sm btn-danger"
disabled={false}
onClick={[Function]}
type="button"
>
Remove
</button>
</div>
</div>
</div>
</div>
`;
42 changes: 42 additions & 0 deletions __tests__/client/components/__snapshots__/Navigation-test.js.snap
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`Navigation is renderable 1`] = `
<nav
className="navbar navbar-default"
>
<div
className="container"
>
<div
className="navbar-header"
>
<a
className="navbar-brand"
href="#"
>
GSTV - Full Stack Coding Excercise
</a>
<button
className="navbar-toggle collapsed"
onClick={[Function]}
type="button"
>
<span
className="sr-only"
>
Toggle navigation
</span>
<span
className="icon-bar"
/>
<span
className="icon-bar"
/>
<span
className="icon-bar"
/>
</button>
</div>
</div>
</nav>
`;
43 changes: 43 additions & 0 deletions __tests__/client/redux/siteActions-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import {toggleOpenFlag,openModal,cancelModal,handleChange,saveModal,removeAlertFunc,handleAlertDismiss,removeConfirm} from '../../../src/client/redux/siteActions'
import {TOGGLE_OPEN_FLAG,OPEN_FLAG_MODAL,CLOSE_MODAL,FORM_CHANGE,FORM_SAVE,REMOVE_ALERT,CANCEL_REMOVE,CONFIRM_REMOVE} from '../../../src/client/redux/siteActions'

describe('ACTIONS: SITE ACTIONS GENERATORS',()=>{
it('Toggles show/hide for flags panel', () => {
const payload = toggleOpenFlag(1)
expect(payload).toEqual({type:TOGGLE_OPEN_FLAG,siteKey:1})
});
it('Sets open modal flag to true for a given site', () => {
const payload = openModal(1,"ADD",0)
expect(payload).toEqual({
type:OPEN_FLAG_MODAL,
siteKey:1,
mode:"ADD",
flagIndex:0
})
});
it('Sets open modal flag to false for a given site', () => {
const payload = cancelModal(1,"ADD")
expect(payload).toEqual({
type:CLOSE_MODAL,
siteKey:1,
mode:"ADD"
})
});
it('Handles form change event', () => {
const payload = handleChange(1,"flagType","GSTV - Site Visit")
expect(payload).toEqual({
type:FORM_CHANGE,
siteKey:1,
name:"flagType",
value:"GSTV - Site Visit"
})
});
it('Saves data and closes modal', () => {
const payload = saveModal(1,"EDIT")
expect(payload).toEqual({
type:FORM_SAVE,
siteKey:1,
mode:"EDIT"
})
});
});
13 changes: 13 additions & 0 deletions __tests__/client/redux/siteReducer-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import {sitesReducer} from '../../../src/client/redux/sitesReducer'

describe('REDUCER: SITE REDUCER',()=>{
it('It intiates blank site list', () => {
const newState = sitesReducer({},{type:'INIT'})
expect(newState).toEqual({})
});
it('It will load sites from action generator', () => {
const sites={1:{},2:{}}
const newState = sitesReducer({},{type:'LOAD_SITES_SUCESS',sites:sites})
expect(newState).toEqual({1:{},2:{}})
});
});
60 changes: 60 additions & 0 deletions __tests__/server/endPoint-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
const request = require('supertest');
import {setupApp} from '../../src/server/server';

//Important: Please update testSiteKey before running test cases
const testSiteKey=3;
describe('Test site routes', () => {
let agent=null;

beforeAll(() => setupApp().then(expressApp => {
agent = request.agent(expressApp);
}));
test('It shoudl respond with avalable sites', (done) => {
return agent.get("/api/site").set('Accept', 'application/json').then(response => {
expect(response.statusCode).toBe(200)
done()
})
});
test('It should create new site', (done) => {
return agent.post("/api/site")
.type('form').send({name:"Test Site Name",address:"Test Site Address"}).
set('Accept', 'application/json').then(response => {
expect(response.statusCode).toBe(200)
done()
})
},10000);
test('It should create new flag', (done) => {
agent.post("/api/flag")
.type('form').send({startDate:"2017-08-01",endDate:"2017-08-30",flagType:"GSTV - Unsellable",siteKey:testSiteKey}).
set('Accept', 'application/json').then(response => {
expect(typeof response).toBe('object')
expect(response.body.flagType).toEqual("GSTV - Unsellable")
expect(response.body.endDate).toEqual("2017-08-30")
expect(response.body.startDate).toEqual("2017-08-01")
done()
})

},10000);
test('It should update existing flag', (done) => {
agent.put("/api/flag/"+testSiteKey+"/0")
.type('form').send({startDate:"2017-08-01",endDate:"2017-08-30",flagType:"GSTV - Research Survey"}).
set('Accept', 'application/json').then(response => {
expect(typeof response).toBe('object')
expect(response.body.flagType).toEqual("GSTV - Research Survey")
expect(response.body.endDate).toEqual("2017-08-30")
expect(response.body.startDate).toEqual("2017-08-01")
done()
})

},10000);
test('It should delete existing flag', (done) => {
agent.delete("/api/flag/"+testSiteKey+"/0")
.type('form').
set('Accept', 'application/json').then(response => {
expect(typeof response).toBe('object')
expect(response.body.message).toEqual('Flag Deleted')
done()
})

},10000);
})
14 changes: 14 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"database":{
"connecStrategy":"PROD",
"hostName":"localhost",
"port":"27017",
"db":"gstv",
"user":"gstv",
"pwd":"gstv",
"authSource":"admin"
},
"seedDataOnStartup":true,
"seedDataFilePath":"./sample_seed.json"
}

Loading