Skip to content

Commit 90f5555

Browse files
author
Gabriel Goncalves
committed
* Create component to list areas
* Create test to cover the component list area * Changing the test of menu * Adding item of navigation
1 parent bdf6aec commit 90f5555

File tree

6 files changed

+186
-15
lines changed

6 files changed

+186
-15
lines changed

app/App.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import 'style-loader!css-loader!less-loader!font-awesome-webpack/font-awesome-st
66

77
import iClientComponent from 'components/IClient/IClient'
88
import HomeComponent from 'components/Home/Home'
9-
import AreaComponent from 'components/Area/Area'
9+
import AreaComponent from 'components/Area/List/Area'
10+
import LastVisitsComponent from 'components/Area/Area'
1011
import ListClientComponent from 'components/Client/List/Client'
1112
import ProfileClientComponent from 'components/Client/Profile/Client'
1213
import SaveClientComponent from 'components/Client/Save/Client'
@@ -25,6 +26,7 @@ ReactDOM.render(
2526
<Route path="area" component={CreateAreaComponent} />
2627
<Route path="visit/:clientId/" component={CreateVisitComponent} />
2728
<Route path="visit/:id" component={AreaComponent} />
29+
<Route path="lastVisits" component={LastVisitsComponent} />
2830
</Route>
2931
</Router>,
3032
document.getElementById('app')

app/components/Area/Area.js

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,6 @@ class Area extends React.Component
5757
}
5858
return (
5959
<div className="container hello">
60-
<div className="level header">
61-
<div className="level-left">
62-
<h2 className="title is-2">iClient</h2>
63-
</div>
64-
<div className="level-right">
65-
<Link to='/area' className="button is-info is-medium">
66-
<span className="icon">
67-
<i className="fa fa-plus"></i>
68-
</span>
69-
<span>New Area</span>
70-
</Link>
71-
</div>
72-
</div>
7360
{ this.state.areas }
7461
</div>
7562
);

app/components/Area/List/Area.js

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import React from 'react';
2+
import { Link } from 'react-router'
3+
4+
import AreaService from 'services/Area'
5+
6+
import Error from 'components/Error/Error'
7+
8+
class Area extends React.Component
9+
{
10+
constructor(props) {
11+
super(props);
12+
this.state = {
13+
areas : null,
14+
error : ''
15+
};
16+
this.getAreas();
17+
}
18+
19+
getAreas() {
20+
AreaService.getAll().then((response) => {
21+
this.setState({areas: response.data.areas});
22+
}).catch((error) => {
23+
this.setState({error: 'Error Found: Trying get area'});
24+
if (typeof error.response.data.error !== 'undefined') {
25+
this.setState({error: error.response.data.error});
26+
}
27+
});
28+
}
29+
30+
render() {
31+
if (this.state.error) {
32+
return (<Error error={this.state.error} />);
33+
}
34+
if (!this.state.areas) {
35+
return <div>Loading...</div>;
36+
}
37+
const areaList = this.state.areas.map((area, key) => {
38+
let line = ((key % 2) ? 'is-success' : 'is-info');
39+
return (
40+
<tr key={key}>
41+
<td>
42+
{ area._id }
43+
</td>
44+
</tr>
45+
);
46+
});
47+
48+
return (
49+
<section className="">
50+
<div className="container hello">
51+
<div className="level header">
52+
<div className="level-left">
53+
<h2 className="title is-2">Areas</h2>
54+
</div>
55+
<div className="level-right">
56+
<Link to='/area' className="button is-info is-medium">
57+
<span className="icon">
58+
<i className="fa fa-plus"></i>
59+
</span>
60+
<span>New Area</span>
61+
</Link>
62+
</div>
63+
</div>
64+
<table className="table">
65+
<tbody>
66+
{ areaList }
67+
</tbody>
68+
</table>
69+
</div>
70+
</section>
71+
);
72+
}
73+
}
74+
75+
export default Area;

app/components/Menu/Menu.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class Menu extends React.Component{
1414
links: [
1515
[ '/', 'Home'],
1616
['/clients', 'Clients'],
17+
['/lastVisits', 'Last Visits'],
1718
['/areas', 'Areas']
1819
]
1920
};

tests/List.Area.test.js

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
jest.enableAutomock();
2+
jest.dontMock('components/Area/List/Area');
3+
jest.dontMock('components/Error/Error');
4+
jest.dontMock('react');
5+
jest.dontMock('axios');
6+
jest.dontMock('axios-mock-adapter');
7+
jest.dontMock('enzyme');
8+
jest.dontMock('services/Area');
9+
10+
describe('Test Area', () => {
11+
require('../tests/__mocks__/LocalStorageMock');
12+
13+
const React = require('react');
14+
const Enzyme = require('enzyme');
15+
const shallow = Enzyme.shallow;
16+
17+
let axios = require('axios');
18+
let MockAdapter = require('axios-mock-adapter');
19+
20+
it('Area should show error message', (done) => {
21+
22+
let response = {error:"Area Not Found"};
23+
let Area;
24+
let component;
25+
let mockAdapter = new MockAdapter(axios);
26+
27+
mockAdapter.onGet(HOST + '/api/v1/area').reply(404, response);
28+
29+
Area = require('components/Area/List/Area').default;
30+
31+
component = shallow(
32+
<Area />
33+
);
34+
35+
setTimeout(() => {
36+
try {
37+
component.update();
38+
expect(component.render().text()).toEqual('Area Not Found');
39+
done();
40+
} catch (e) {
41+
console.log(e);
42+
}
43+
44+
}, 0);
45+
});
46+
47+
it('Area should show default error message', (done) => {
48+
49+
let response = {};
50+
let Area;
51+
let component;
52+
let mockAdapter = new MockAdapter(axios);
53+
54+
mockAdapter.onGet(HOST + '/api/v1/area').reply(503, response);
55+
56+
Area = require('components/Area/List/Area').default;
57+
58+
component = shallow(
59+
<Area />
60+
);
61+
62+
setTimeout(() => {
63+
try {
64+
component.update();
65+
expect(component.render().text()).toEqual('Error Found: Trying get area');
66+
done();
67+
} catch (e) {
68+
console.log(e);
69+
}
70+
}, 0);
71+
});
72+
73+
it('Area should show mocked data', (done) => {
74+
75+
let response = {
76+
areas: [
77+
{_id: 'South', parent: 'Center', ancestors: 'Center'},
78+
{_id: 'North', parent: 'Center', ancestors: 'Center'},
79+
]
80+
};
81+
let Area;
82+
let component;
83+
let mockAdapter = new MockAdapter(axios);
84+
85+
mockAdapter.onGet(HOST + '/api/v1/area').reply(200, response);
86+
87+
Area = require('components/Area/List/Area').default;
88+
89+
component = shallow(
90+
<Area />
91+
);
92+
93+
setTimeout(() => {
94+
try {
95+
component.update();
96+
expect(component.find('tbody td').at(0).text()).toEqual('South');
97+
done();
98+
} catch (e) {
99+
console.log(e);
100+
}
101+
}, 0);
102+
});
103+
104+
});
105+

tests/Menu.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ describe('Test Menu', () => {
2121
let expectedLinks = [
2222
['/', 'Home'],
2323
['/clients', 'Clients'],
24+
['/lastVisits', 'Last Visits'],
2425
['/areas', 'Areas'],
2526
];
2627

@@ -55,7 +56,7 @@ describe('Test Menu', () => {
5556
expect(window.localStorage.getItem('token')).toEqual('test_menu');
5657

5758
expect(component.childAt(0).text()).toEqual('<LinksApp />');
58-
expect(component.childAt(0).render().find('.nav-item.is-tab').length).toEqual(3);
59+
expect(component.childAt(0).render().find('.nav-item.is-tab').length).toEqual(4);
5960
expect(component.childAt(1).text()).toEqual('Logout');
6061
done();
6162
});

0 commit comments

Comments
 (0)