public async Task Create_club_audits_and_logs() { var club = new Club { ClubName = "New club " + Guid.NewGuid(), MemberGroupKey = Guid.NewGuid(), MemberGroupName = "Test group" }; var auditable = new Club { ClubName = club.ClubName, MemberGroupKey = club.MemberGroupKey, MemberGroupName = club.MemberGroupName }; var route = "/clubs/" + Guid.NewGuid(); var routeGenerator = new Mock <IRouteGenerator>(); routeGenerator.Setup(x => x.GenerateUniqueRoute("/clubs", club.ClubName, NoiseWords.ClubRoute, It.IsAny <Func <string, Task <int> > >())).Returns(Task.FromResult(route)); var copier = new Mock <IStoolballEntityCopier>(); copier.Setup(x => x.CreateAuditableCopy(club)).Returns(auditable); var auditRepository = new Mock <IAuditRepository>(); var logger = new Mock <ILogger>(); var repo = new SqlServerClubRepository(_databaseFixture.ConnectionFactory, auditRepository.Object, logger.Object, routeGenerator.Object, Mock.Of <IRedirectsRepository>(), copier.Object); var memberKey = Guid.NewGuid(); var memberName = "Person 1"; var createdClub = await repo.CreateClub(club, memberKey, memberName).ConfigureAwait(false); auditRepository.Verify(x => x.CreateAudit(It.IsAny <AuditRecord>(), It.IsAny <IDbTransaction>()), Times.Once); logger.Verify(x => x.Info(typeof(SqlServerClubRepository), LoggingTemplates.Created, auditable, memberName, memberKey, typeof(SqlServerClubRepository), nameof(SqlServerClubRepository.CreateClub))); }
public async Task Create_club_returns_a_copy() { var club = new Club { ClubName = "New club " + Guid.NewGuid(), MemberGroupKey = Guid.NewGuid(), MemberGroupName = "Test group" }; var copyClub = new Club { ClubName = club.ClubName, MemberGroupKey = club.MemberGroupKey, MemberGroupName = club.MemberGroupName }; var routeGenerator = new Mock <IRouteGenerator>(); routeGenerator.Setup(x => x.GenerateUniqueRoute("/clubs", club.ClubName, NoiseWords.ClubRoute, It.IsAny <Func <string, Task <int> > >())).Returns(Task.FromResult("/clubs/" + Guid.NewGuid())); var copier = new Mock <IStoolballEntityCopier>(); copier.Setup(x => x.CreateAuditableCopy(club)).Returns(copyClub); var repo = new SqlServerClubRepository(_databaseFixture.ConnectionFactory, Mock.Of <IAuditRepository>(), Mock.Of <ILogger>(), routeGenerator.Object, Mock.Of <IRedirectsRepository>(), copier.Object); var createdClub = await repo.CreateClub(club, Guid.NewGuid(), "Person 1").ConfigureAwait(false); Assert.Equal(copyClub, createdClub); }
public async Task Create_club_adds_teams_only_if_no_existing_club() { var club = new Club { ClubName = "New club " + Guid.NewGuid(), MemberGroupKey = Guid.NewGuid(), MemberGroupName = "Test group" }; var route = "/clubs/" + Guid.NewGuid(); var routeGenerator = new Mock <IRouteGenerator>(); routeGenerator.Setup(x => x.GenerateUniqueRoute("/clubs", club.ClubName, NoiseWords.ClubRoute, It.IsAny <Func <string, Task <int> > >())).Returns(Task.FromResult(route)); var copier = new Mock <IStoolballEntityCopier>(); copier.Setup(x => x.CreateAuditableCopy(club)).Returns(club); var teamsToIgnore = _databaseFixture.TestData.Teams.Where(x => x.Club != null).Select(x => new Team { TeamId = x.TeamId }).Take(3); var teamsToAdd = _databaseFixture.TestData.Teams.Where(x => x.Club == null).Select(x => new Team { TeamId = x.TeamId }).Take(3); club.Teams.AddRange(teamsToIgnore); club.Teams.AddRange(teamsToAdd); var repo = new SqlServerClubRepository(_databaseFixture.ConnectionFactory, Mock.Of <IAuditRepository>(), Mock.Of <ILogger>(), routeGenerator.Object, Mock.Of <IRedirectsRepository>(), copier.Object); var createdClub = await repo.CreateClub(club, Guid.NewGuid(), "Person 1").ConfigureAwait(false); using (var connection = _databaseFixture.ConnectionFactory.CreateDatabaseConnection()) { var results = await connection.QueryAsync <Guid>($"SELECT TeamId FROM {Tables.Team} WHERE ClubId = @ClubId", new { createdClub.ClubId }).ConfigureAwait(false); Assert.Equal(teamsToAdd.Count(), results.Count()); foreach (var teamId in results) { Assert.Contains(teamId, teamsToAdd.Select(x => x.TeamId.Value)); } } }
public async Task Create_club_succeeds() { var club = new Club { ClubName = "New club " + Guid.NewGuid(), MemberGroupKey = Guid.NewGuid(), MemberGroupName = "Test group" }; var route = "/clubs/" + Guid.NewGuid(); var routeGenerator = new Mock <IRouteGenerator>(); routeGenerator.Setup(x => x.GenerateUniqueRoute("/clubs", club.ClubName, NoiseWords.ClubRoute, It.IsAny <Func <string, Task <int> > >())).Returns(Task.FromResult(route)); var copier = new Mock <IStoolballEntityCopier>(); copier.Setup(x => x.CreateAuditableCopy(club)).Returns(club); var repo = new SqlServerClubRepository(_databaseFixture.ConnectionFactory, Mock.Of <IAuditRepository>(), Mock.Of <ILogger>(), routeGenerator.Object, Mock.Of <IRedirectsRepository>(), copier.Object); var createdClub = await repo.CreateClub(club, Guid.NewGuid(), "Person 1").ConfigureAwait(false); using (var connection = _databaseFixture.ConnectionFactory.CreateDatabaseConnection()) { var clubResult = await connection.QuerySingleOrDefaultAsync <Club>($"SELECT ClubId, MemberGroupKey, MemberGroupName, ClubRoute FROM {Tables.Club} WHERE ClubId = @ClubId", new { createdClub.ClubId }).ConfigureAwait(false); Assert.NotNull(clubResult); Assert.Equal(club.MemberGroupKey, clubResult.MemberGroupKey); Assert.Equal(club.MemberGroupName, clubResult.MemberGroupName); Assert.Equal(club.ClubRoute, clubResult.ClubRoute); var versionResult = await connection.QuerySingleOrDefaultAsync <ClubVersion>($"SELECT ClubName, ComparableName, FromDate FROM {Tables.ClubVersion} WHERE ClubId = @ClubId", new { createdClub.ClubId }).ConfigureAwait(false); Assert.NotNull(versionResult); Assert.Equal(club.ClubName, versionResult.ClubName); Assert.Equal(club.ComparableName(), versionResult.ComparableName); Assert.Equal(DateTime.UtcNow.Date, versionResult.FromDate.Date); } }
public async Task Create_club_throws_ArgumentNullException_if_memberName_is_empty_string() { var repo = new SqlServerClubRepository(_databaseFixture.ConnectionFactory, Mock.Of <IAuditRepository>(), Mock.Of <ILogger>(), Mock.Of <IRouteGenerator>(), Mock.Of <IRedirectsRepository>(), Mock.Of <IStoolballEntityCopier>()); await Assert.ThrowsAsync <ArgumentNullException>(async() => await repo.CreateClub(new Club(), Guid.NewGuid(), string.Empty).ConfigureAwait(false)).ConfigureAwait(false); }