Tests for Team

Fixed tests for Team class
Small sdjustments on tests for Member class
This commit is contained in:
Rodrigo Pedroso 2019-08-27 12:43:21 -04:00
commit f2b61371e2
8 changed files with 49 additions and 46 deletions

View file

@ -15,6 +15,15 @@
vertical-align: middle; vertical-align: middle;
display: table-cell; display: table-cell;
} }
span {
vertical-align: middle;
display: table-cell;
h1 {
display: block;
}
}
} }
.back { .back {

View file

@ -12,7 +12,7 @@ history.listen(() => {
export default function Router() { export default function Router() {
// let [team, setTeam] = useState([]) // let [team, setTeam] = useState([])
let [users, setUsers] = useState([]) // let [users, setUsers] = useState([])
let [memberProps, setMemberProps] = useState({}) let [memberProps, setMemberProps] = useState({})
let [teamProps, setTeamProps] = useState({}) let [teamProps, setTeamProps] = useState({})
@ -30,10 +30,6 @@ export default function Router() {
}) })
} }
let usersCallback = el => {
setUsers(el)
}
let userIdCallback = (el, teams) => { let userIdCallback = (el, teams) => {
setMemberProps({ setMemberProps({
url: config.api + '/user/' + el, url: config.api + '/user/' + el,
@ -50,11 +46,7 @@ export default function Router() {
return ( return (
<ReactRouter history={history}> <ReactRouter history={history}>
<Switch> <Switch>
<Route <Route exact path="/" render={props => <Home teamCallback={teamCallback} {...props} />} />
exact
path="/"
render={props => <Home teamCallback={teamCallback} usersCallback={usersCallback} {...props} />}
/>
<Route exact path="/team" render={() => <Team props={teamProps} />} /> <Route exact path="/team" render={() => <Team props={teamProps} />} />

View file

@ -1,6 +1,6 @@
import React from 'react' import React from 'react'
export default function TeamList({ teams, users, selectTeam, selectUser }) { export default function TeamList({ teams, selectTeam }) {
return ( return (
<div className="teams"> <div className="teams">
<ul className="list"> <ul className="list">

View file

@ -58,7 +58,6 @@ export default function Home(props) {
let selectTeam = selectedTeam => { let selectTeam = selectedTeam => {
props.teamCallback(selectedTeam, users, teams) props.teamCallback(selectedTeam, users, teams)
props.usersCallback(users)
history.push('/team') history.push('/team')
} }

View file

@ -2,7 +2,6 @@
import React, { useState, useEffect } from 'react' import React, { useState, useEffect } from 'react'
import axios from 'axios' import axios from 'axios'
import history from '../history.js' import history from '../history.js'
// import config from '../config.json'
import './Member.scss' import './Member.scss'
export default function Member({ props }) { export default function Member({ props }) {
@ -48,7 +47,7 @@ export default function Member({ props }) {
user !== undefined && ( user !== undefined && (
<div> <div>
<div className="header"> <div className="header">
<span data-testid="resolved"> <span data-testid="resolved-name">
<h1>Member {user.name}</h1> <h1>Member {user.name}</h1>
</span> </span>
</div> </div>
@ -59,7 +58,9 @@ export default function Member({ props }) {
<h2>Username:</h2> <h2>Username:</h2>
<div className="username"> <div className="username">
<p>{user.username}</p> <span data-testid="resolved-username">
<p>{user.username}</p>
</span>
</div> </div>
<h2>Member of:</h2> <h2>Member of:</h2>

View file

@ -14,9 +14,6 @@ describe('A members page', () => {
it('should fetch and display data', async () => { it('should fetch and display data', async () => {
const callData = { const callData = {
username: 'goodpanda', username: 'goodpanda',
member_teams: [3],
lead_teams: [],
id: 15,
name: 'Charlotte Amsterdan' name: 'Charlotte Amsterdan'
} }
@ -24,9 +21,11 @@ describe('A members page', () => {
const address = { url: '/user15' } const address = { url: '/user15' }
const { getByTestId } = render(<Member props={address} />) const { getByTestId } = render(<Member props={address} />)
const resolvedSpan = await waitForElement(() => getByTestId('resolved')) const resolvedName = await waitForElement(() => getByTestId('resolved-name'))
const resolvedUsername = await waitForElement(() => getByTestId('resolved-username'))
expect(resolvedSpan).toHaveTextContent('Member ' + callData.name) expect(resolvedName).toHaveTextContent('Member ' + callData.name)
expect(resolvedUsername).toHaveTextContent(callData.username)
expect(axiosMock.get).toHaveBeenCalledTimes(1) expect(axiosMock.get).toHaveBeenCalledTimes(1)
expect(axiosMock.get).toHaveBeenCalledWith(address.url) expect(axiosMock.get).toHaveBeenCalledWith(address.url)
}) })

View file

@ -7,7 +7,7 @@ import './Team.scss'
export default function Team({ props }) { export default function Team({ props }) {
// MARK: State // MARK: State
let [team, setTeam] = useState([]) let [team, setTeam] = useState(null)
let [members, setMembers] = useState([]) let [members, setMembers] = useState([])
let [filteredMembers, setFilteredMembers] = useState([]) let [filteredMembers, setFilteredMembers] = useState([])
@ -16,7 +16,7 @@ export default function Team({ props }) {
useEffect(() => { useEffect(() => {
let fetchData = async () => { let fetchData = async () => {
try { try {
let result = await axios(props.url) let result = await axios.get(props.url)
if (result.data) { if (result.data) {
setTeam(result.data) setTeam(result.data)
@ -81,22 +81,22 @@ export default function Team({ props }) {
// MARK: Return // MARK: Return
return ( return (
<div className="team"> <div className="team">
{props.team !== undefined && ( {team === null ? (
<div className="header">
<h1>Team {props.team.name}</h1>
</div>
)}
<div className="back">
<button className="back-btn" onClick={navBack}>{`< Back to teams`}</button>
</div>
<FilterForm filterCallback={filterCallback} />
{team.length === 0 ? (
<div data-testid="loading">Loading...</div> <div data-testid="loading">Loading...</div>
) : ( ) : (
team !== undefined && ( <div>
{props.team !== undefined && (
<div className="header">
<h1>Team {props.team.name}</h1>
</div>
)}
<div className="back">
<button className="back-btn" onClick={navBack}>{`< Back to teams`}</button>
</div>
<FilterForm filterCallback={filterCallback} />
<div> <div>
<h2>Team lead</h2> <h2>Team lead</h2>
@ -116,7 +116,7 @@ export default function Team({ props }) {
))} ))}
</ul> </ul>
</div> </div>
) </div>
)} )}
</div> </div>
) )

View file

@ -13,19 +13,22 @@ describe('A team page', () => {
}) })
it('should fetch and display data', async () => { it('should fetch and display data', async () => {
const callData = { const callData = { lead: 1, id: 2, name: 'Awesome Tricksters', members: [2, 3, 4] }
teamProps: {
id: 3
},
usersProps: [{ name: 'UserName' }]
}
axiosMock.get.mockResolvedValueOnce({ data: callData }) axiosMock.get.mockResolvedValueOnce({ data: callData })
const address = { url: '/team3' } const mockProps = {
const { getByTestId } = render(<Team props={address} />) users: [
{ id: 1, name: 'Leader', username: 'team leader' },
{ id: 2, name: 'First Member', username: 'first member' },
{ id: 3, name: 'Second Member', username: 'second member' },
{ id: 4, name: 'Third Member', username: 'third member' }
]
}
const { getByTestId } = render(<Team props={mockProps} />)
const resolvedSpan = await waitForElement(() => getByTestId('resolved')) const resolvedSpan = await waitForElement(() => getByTestId('resolved'))
expected(resolvedSpan).toHaveContent('Team') expect(resolvedSpan).toHaveTextContent(mockProps.users[0].name)
}) })
}) })