Skip to content

Commit

Permalink
Fix missing club in breadcrumb trail #626 #650
Browse files Browse the repository at this point in the history
  • Loading branch information
sussexrick committed Jan 15, 2023
1 parent f3d4e79 commit acf54d8
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -582,22 +582,32 @@ public async Task ReadPlayerByMemberKey_returns_null_for_no_match()
}

[Fact]
public async Task ReadPlayerIdentityByRoute_returns_identity_player_and_team()
public async Task ReadPlayerIdentityByRoute_returns_identity_player_team_and_club()
{
var playerDataSource = new SqlServerPlayerDataSource(_databaseFixture.ConnectionFactory, _routeNormaliser.Object, _statisticsQueryBuilder.Object);
var identity = _databaseFixture.TestData.PlayerIdentities.First();
var route = $"{identity.Team!.TeamRoute}/edit/players/{identity.RouteSegment}/rename";
_routeNormaliser.Setup(x => x.NormaliseRouteToEntity(route, "/teams")).Returns(identity.Team!.TeamRoute!);

var result = await playerDataSource.ReadPlayerIdentityByRoute(route).ConfigureAwait(false);

Assert.NotNull(result?.Team);
Assert.Equal(identity.PlayerIdentityId, result!.PlayerIdentityId);
Assert.Equal(identity.PlayerIdentityName, result.PlayerIdentityName);
Assert.Equal(identity.Player?.PlayerId, result.Player?.PlayerId);
Assert.Equal(identity.Team.TeamId, result.Team!.TeamId);
Assert.Equal(identity.Team.TeamName, result.Team!.TeamName);
Assert.Equal(identity.Team.TeamRoute, result.Team!.TeamRoute);
var foundAtLeastOneClub = false;
foreach (var identity in _databaseFixture.TestData.PlayerIdentities)
{
var route = $"{identity.Team!.TeamRoute}/edit/players/{identity.RouteSegment}/rename";
_routeNormaliser.Setup(x => x.NormaliseRouteToEntity(route, "/teams")).Returns(identity.Team!.TeamRoute!);

var result = await playerDataSource.ReadPlayerIdentityByRoute(route).ConfigureAwait(false);

Assert.NotNull(result?.Team);
Assert.Equal(identity.PlayerIdentityId, result!.PlayerIdentityId);
Assert.Equal(identity.PlayerIdentityName, result.PlayerIdentityName);
Assert.Equal(identity.Player?.PlayerId, result.Player?.PlayerId);
Assert.Equal(identity.Team.TeamId, result.Team!.TeamId);
Assert.Equal(identity.Team.TeamName, result.Team!.TeamName);
Assert.Equal(identity.Team.TeamRoute, result.Team!.TeamRoute);
Assert.Equal(identity.Team.Club?.ClubId, result.Team.Club?.ClubId);
Assert.Equal(identity.Team.Club?.ClubName, result.Team.Club?.ClubName);
Assert.Equal(identity.Team.Club?.ClubRoute, result.Team.Club?.ClubRoute);

foundAtLeastOneClub = foundAtLeastOneClub || identity.Team.Club != null;
}
Assert.True(foundAtLeastOneClub);
}

[Fact]
Expand Down
16 changes: 11 additions & 5 deletions Stoolball.Data.SqlServer/SqlServerPlayerDataSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Linq;
using System.Threading.Tasks;
using Dapper;
using Stoolball.Clubs;
using Stoolball.Data.Abstractions;
using Stoolball.Routing;
using Stoolball.Statistics;
Expand Down Expand Up @@ -274,22 +275,27 @@ WHERE LOWER(PlayerRoute) = @Route

using (var connection = _databaseConnectionFactory.CreateDatabaseConnection())
{
var results = await connection.QueryAsync<PlayerIdentity, Player, Team, PlayerIdentity>(
var results = await connection.QueryAsync<PlayerIdentity, Player, Team, Club, PlayerIdentity>(
$@"SELECT pi.PlayerIdentityId, pi.PlayerIdentityName,
pi.PlayerId,
t.TeamId, tv.TeamName, t.TeamRoute
t.TeamId, tv.TeamName, t.TeamRoute,
c.ClubId, cv.ClubName, c.ClubRoute
FROM {Tables.PlayerIdentity} pi INNER JOIN {Tables.Team} t ON pi.TeamId = t.TeamId
INNER JOIN {Tables.TeamVersion} tv ON t.TeamId = tv.TeamId
LEFT JOIN {Tables.Club} c ON t.ClubId = c.ClubId
LEFT JOIN {Tables.ClubVersion} cv ON c.ClubId = cv.ClubId
WHERE LOWER(pi.RouteSegment) = @RouteSegment AND LOWER(t.TeamRoute) = @TeamRoute
AND tv.TeamVersionId = (SELECT TOP 1 TeamVersionId FROM {Tables.TeamVersion} WHERE TeamId = t.TeamId ORDER BY ISNULL(UntilDate, '{SqlDateTime.MaxValue.Value.Date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}') DESC)",
(identity, player, team) =>
AND tv.TeamVersionId = (SELECT TOP 1 TeamVersionId FROM { Tables.TeamVersion } WHERE TeamId = t.TeamId ORDER BY ISNULL(UntilDate, '{SqlDateTime.MaxValue.Value.Date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}') DESC)
AND (cv.ClubVersionId = (SELECT TOP 1 ClubVersionId FROM {Tables.ClubVersion} WHERE ClubId = c.ClubId ORDER BY ISNULL(UntilDate, '{SqlDateTime.MaxValue.Value.Date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}') DESC) OR cv.ClubVersionId IS NULL)",
(identity, player, team, club) =>
{
identity.Player = player;
identity.Team = team;
identity.Team.Club = club;
return identity;
},
parameters,
splitOn: "PlayerId, TeamId"
splitOn: "PlayerId, TeamId, ClubId"
).ConfigureAwait(false);

return results.SingleOrDefault();
Expand Down
1 change: 1 addition & 0 deletions Stoolball.Data.SqlServer/SqlServerTeamDataSource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ private string NormaliseRouteToTeam(string route)
LEFT JOIN {Tables.SeasonMatchType} AS mt ON s.SeasonId = mt.SeasonId
WHERE LOWER(t.TeamRoute) = @Route
AND tv.TeamVersionId = (SELECT TOP 1 TeamVersionId FROM {Tables.TeamVersion} WHERE TeamId = t.TeamId ORDER BY ISNULL(UntilDate, '{SqlDateTime.MaxValue.Value.Date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}') DESC)
AND (cn.ClubVersionId = (SELECT TOP 1 ClubVersionId FROM {Tables.ClubVersion} WHERE ClubId = c.ClubId ORDER BY ISNULL(UntilDate, '{SqlDateTime.MaxValue.Value.Date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}') DESC) OR cn.ClubVersionId IS NULL)
AND (cv.CompetitionVersionId = (SELECT TOP 1 CompetitionVersionId FROM {Tables.CompetitionVersion} WHERE CompetitionId = co.CompetitionId ORDER BY ISNULL(UntilDate, '{SqlDateTime.MaxValue.Value.Date.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)}') DESC) OR cv.CompetitionVersionId IS NULL)
ORDER BY cv.ComparableName, s.FromYear DESC, s.UntilYear ASC",
(team, club, matchLocation, season, competition, matchType) =>
Expand Down

0 comments on commit acf54d8

Please sign in to comment.