Skip to content

Commit

Permalink
Merge 494264f into f0137c6
Browse files Browse the repository at this point in the history
  • Loading branch information
laingsimon authored Jul 7, 2023
2 parents f0137c6 + 494264f commit 949fa7a
Show file tree
Hide file tree
Showing 28 changed files with 1,229 additions and 626 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,42 @@ public async Task Adapt_GivenNoFixtures_SetsPropertiesCorrectly()
Assert.That(result.Updated, Is.EqualTo(player.Updated));
}

[Test]
public async Task Adapt_GivenNoFixtures_TrimsWhitespace()
{
var score = new DivisionData.PlayerScore
{
OneEighties = 3,
HiCheckout = 4,
PlayerPlayCount =
{
{ 1, _singles },
{ 2, _pairs },
{ 3, _triples },
}
};
var team = new TeamDto
{
Id = Guid.NewGuid(),
Address = "address ",
Name = "team ",
};
var player = new TeamPlayerDto
{
Id = Guid.NewGuid(),
Name = "player ",
Captain = true,
Updated = new DateTime(2001, 02, 03),
};
var playerTuple = new DivisionData.TeamPlayerTuple(player, team);
var fixtures = new Dictionary<DateTime, Guid>();

var result = await _adapter.Adapt(score, playerTuple, fixtures, _token);

Assert.That(result.Team, Is.EqualTo("team"));
Assert.That(result.Name, Is.EqualTo("player"));
}

[Test]
public async Task Adapt_GivenTeamPlayerDto_SetsPropertiesCorrectly()
{
Expand Down Expand Up @@ -112,4 +148,26 @@ public async Task Adapt_GivenTeamPlayerDto_SetsPropertiesCorrectly()
Assert.That(result.Fixtures, Is.Empty);
Assert.That(result.Updated, Is.EqualTo(player.Updated));
}

[Test]
public async Task Adapt_GivenTeamPlayerDto_TrimsWhitespace()
{
var team = new TeamDto
{
Id = Guid.NewGuid(),
Name = "Team "
};
var player = new TeamPlayerDto
{
Id = Guid.NewGuid(),
Name = "Player ",
Captain = true,
Updated = new DateTime(2001, 02, 03),
};

var result = await _adapter.Adapt(team, player, _token);

Assert.That(result.Name, Is.EqualTo("Player"));
Assert.That(result.Team, Is.EqualTo("Team"));
}
}
14 changes: 14 additions & 0 deletions CourageScores.Tests/Models/Adapters/Game/GamePlayerAdapterTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,20 @@ public async Task Adapt_GivenModel_MapsPropertiesCorrectly()
Assert.That(result.Name, Is.EqualTo(model.Name));
}

[Test]
public async Task Adapt_GivenModel_TrimsWhitespace()
{
var model = new GamePlayer
{
Id = Guid.NewGuid(),
Name = "Simon ",
};

var result = await _adapter.Adapt(model, _token);

Assert.That(result.Name, Is.EqualTo("Simon"));
}

[Test]
public async Task Adapt_GivenDto_MapsPropertiesCorrectly()
{
Expand Down
113 changes: 96 additions & 17 deletions CourageScores/ClientApp/src/components/Division.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,85 @@ import {propChanged} from "../helpers/events";
import {useDependencies} from "../IocContainer";
import {useApp} from "../AppContainer";
import {DivisionDataContainer} from "./DivisionDataContainer";
import {isGuid} from "../helpers/projection";

export function Division() {
const { divisionApi } = useDependencies();
const { account, onError, error } = useApp();
const { divisionId, mode, seasonId } = useParams();
const { account, onError, error, divisions, seasons } = useApp();
const { divisionId: divisionIdish, mode, seasonId: seasonIdish } = useParams();
const [ divisionData, setDivisionData ] = useState(null);
const [ loading, setLoading ] = useState(false);
const effectiveTab = mode || 'teams';
const [ dataErrors, setDataErrors ] = useState(null);
const divisionId = getDivisionId(divisionIdish);
const seasonId = getSeasonId(seasonIdish);

function getDivisionId(idish) {
if (isGuid(idish)) {
return idish;
}

if (!divisions || !any(divisions)) {
return null;
}

const division = divisions.filter(d => d.name.toLowerCase() === idish.toLowerCase())[0];
return division ? division.id : null;
}

function getSeasonId(idish) {
if (isGuid(idish)) {
return idish;
}

if (!seasons || !any(seasons) || !idish) {
return null;
}

const season = seasons.filter(d => d.name.toLowerCase() === idish.toLowerCase())[0];
return season ? season.id : null;
}

function getPlayerId(idish) {
if (isGuid(idish)) {
return idish;
}

if (!divisionData || !idish) {
return null;
}

const matchItem = idish.matchAll(/(.+)@(.+)/g).next();
const match = matchItem.value;
if (!match || match.length < 3) {
return idish;
}

const playerName = match[1];
const teamName = match[2];

const team = divisionData.teams.filter(t => t.name.toLowerCase() === teamName.toLowerCase())[0];
if (!team) {
// team not found
return idish;
}

const teamPlayer = divisionData.players.filter(p => p.teamId === team.id && p.name.toLowerCase() === playerName.toLowerCase())[0];
return teamPlayer ? teamPlayer.id : null;
}

function getTeamId(idish) {
if (isGuid(idish)) {
return idish;
}

if (!divisionData || !idish) {
return null;
}

const team = divisionData.teams.filter(t => t.name.toLowerCase() === idish.toLowerCase())[0];
return team ? team.id : null;
}

async function reloadDivisionData() {
try {
Expand All @@ -46,13 +116,16 @@ export function Division() {

try {
if (!divisionData || ((divisionData.id !== divisionId || ((divisionData.season || {}).id !== seasonId && seasonId)) && !divisionData.status)) {
setLoading(true);
// noinspection JSIgnoredPromiseFromCall
reloadDivisionData();
if (divisionId) {
setLoading(true);
// noinspection JSIgnoredPromiseFromCall
reloadDivisionData();
}
return;
}

if (divisionData.status) {
/* istanbul ignore next */
console.log(divisionData);
const suffix = divisionData.errors ? ' -- ' + Object.keys(divisionData.errors).map(key => `${key}: ${divisionData.errors[key]}`).join(', ') : '';
onError(`Error accessing division: Code: ${divisionData.status}${suffix}`);
Expand All @@ -70,10 +143,16 @@ export function Division() {
// eslint-disable-next-line
[ divisionData, loading, divisionId, seasonId, error ]);

if (loading || !divisionData) {
if (loading) {
return (<Loading />);
}

if (loading || !divisionData) {
return (<div className="p-3 content-background">
No data found
</div>);
}

try {
return (<div>
<DivisionControls
Expand All @@ -84,30 +163,30 @@ export function Division() {
<li className="nav-item">
<NavLink tag={Link}
className={effectiveTab === 'teams' ? 'active' : ''}
to={`/division/${divisionId}/teams${seasonId ? '/' + seasonId : ''}`}>Teams</NavLink>
to={`/division/${divisionIdish}/teams${seasonIdish ? '/' + seasonIdish : ''}`}>Teams</NavLink>
</li>
{effectiveTab.startsWith('team:') ? (<li className="nav-item">
<NavLink tag={Link}
className="active"
to={`/division/${divisionId}/teams${seasonId ? '/' + seasonId : ''}`}>Team Details</NavLink>
</li>) : null }
to={`/division/${divisionIdish}/teams${seasonIdish ? '/' + seasonIdish : ''}`}>Team Details</NavLink>
</li>) : null}
<li className="nav-item">
<NavLink tag={Link} className={effectiveTab === 'fixtures' ? 'active' : ''}
to={`/division/${divisionId}/fixtures${seasonId ? '/' + seasonId : ''}`}>Fixtures</NavLink>
to={`/division/${divisionIdish}/fixtures${seasonIdish ? '/' + seasonIdish : ''}`}>Fixtures</NavLink>
</li>
<li className="nav-item">
<NavLink tag={Link}
className={effectiveTab === 'players' ? 'active' : ''}
to={`/division/${divisionId}/players${seasonId ? '/' + seasonId : ''}`}>Players</NavLink>
to={`/division/${divisionIdish}/players${seasonIdish ? '/' + seasonIdish : ''}`}>Players</NavLink>
</li>
{effectiveTab.startsWith('player:') ? (<li className="nav-item">
<NavLink tag={Link}
className="active"
to={`/division/${divisionId}/teams${seasonId ? '/' + seasonId : ''}`}>Player Details</NavLink>
</li>) : null }
to={`/division/${divisionIdish}/teams${seasonIdish ? '/' + seasonIdish : ''}`}>Player Details</NavLink>
</li>) : null}
{account && account.access && account.access.runReports ? (<li className="nav-item">
<NavLink tag={Link} className={effectiveTab === 'reports' ? 'active' : ''}
to={`/division/${divisionId}/reports${seasonId ? '/' + seasonId : ''}`}>Reports</NavLink>
to={`/division/${divisionIdish}/reports${seasonIdish ? '/' + seasonIdish : ''}`}>Reports</NavLink>
</li>) : null}
{divisionData.season ? (<li className="d-screen-none position-absolute right-0">
<strong className="mx-2 d-inline-block fs-3">{divisionData.name}, {divisionData.season.name}</strong>
Expand All @@ -132,14 +211,14 @@ export function Division() {
{effectiveTab === 'players' && divisionData.season
? (<DivisionPlayers/>)
: null}
{effectiveTab === 'reports' && divisionData.season
{effectiveTab === 'reports' && divisionData.season && account && account.access && account.access.runReports
? (<DivisionReports/>)
: null}
{effectiveTab && effectiveTab.startsWith('team:') && divisionData.season
? (<TeamOverview teamId={effectiveTab.substring('team:'.length)}/>)
? (<TeamOverview teamId={getTeamId(effectiveTab.substring('team:'.length))}/>)
: null}
{effectiveTab && effectiveTab.startsWith('player:') && divisionData.season
? (<PlayerOverview playerId={effectiveTab.substring('player:'.length)}/>)
? (<PlayerOverview playerId={getPlayerId(effectiveTab.substring('player:'.length))}/>)
: null}
</DivisionDataContainer>)}
</div>);
Expand Down
Loading

0 comments on commit 949fa7a

Please sign in to comment.