public void GetScrumTeam_ExpiredTeamInRepository_ThrowsException() { // Arrange var timeProvider = new DateTimeProviderMock(); var configuration = new Mock <IPlanningPokerConfiguration>(MockBehavior.Strict); configuration.SetupGet(c => c.ClientInactivityTimeout).Returns(TimeSpan.FromMinutes(15)); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 0, 0, DateTimeKind.Utc)); var team = new ScrumTeam("team", timeProvider); var master = team.SetScrumMaster("master"); master.UpdateActivity(); var repository = new Mock <IScrumTeamRepository>(MockBehavior.Strict); repository.Setup(r => r.LoadScrumTeam("team")).Returns(team); repository.Setup(r => r.DeleteScrumTeam("team")); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 16, 0, DateTimeKind.Utc)); var target = CreatePlanningPokerController(timeProvider, configuration.Object, repository.Object); // Act target.GetScrumTeam("team"); }
public void GetScrumTeam_TeamAlreadyLoaded_NotLoadingAgain() { // Arrange var timeProvider = new DateTimeProviderMock(); var configuration = new Mock <IPlanningPokerConfiguration>(MockBehavior.Strict); configuration.SetupGet(c => c.ClientInactivityTimeout).Returns(TimeSpan.FromMinutes(15)); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 0, 0, DateTimeKind.Utc)); var team = new ScrumTeam("team"); var master = team.SetScrumMaster("master"); master.UpdateActivity(); var repository = new Mock <IScrumTeamRepository>(MockBehavior.Strict); repository.Setup(r => r.LoadScrumTeam("team")).Returns(team); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 14, 0, DateTimeKind.Utc)); var target = CreatePlanningPokerController(timeProvider, configuration.Object, repository.Object); // Act using (target.GetScrumTeam("team")) { } using (var teamLock = target.GetScrumTeam("team")) { // Verify Assert.AreEqual <ScrumTeam>(team, teamLock.Team); repository.Verify(r => r.LoadScrumTeam("team"), Times.Once()); repository.Verify(r => r.DeleteScrumTeam("team"), Times.Never()); } }
public void DisconnectInactiveObservers_InactiveObserver_ObserverIsDisconnected() { // Arrange var dateTimeProvider = new DateTimeProviderMock(); dateTimeProvider.SetUtcNow(new DateTime(2012, 1, 1, 3, 2, 20)); var target = CreatePlanningPokerController(dateTimeProvider: dateTimeProvider); ScrumTeam team; using (var teamLock = target.CreateScrumTeam("team", "master")) { team = teamLock.Team; team.Join("observer", true); } dateTimeProvider.SetUtcNow(new DateTime(2012, 1, 1, 3, 2, 55)); team.ScrumMaster.UpdateActivity(); // Act target.DisconnectInactiveObservers(TimeSpan.FromSeconds(30.0)); // Verify using (var teamLock = target.GetScrumTeam("team")) { Assert.AreEqual <int>(0, teamLock.Team.Observers.Count()); } }
public void CreateScrumTeam_ExpiredTeamInRepository_CreatesNewTeamAndDeletesOldOne() { // Arrange var timeProvider = new DateTimeProviderMock(); var configuration = new Mock <IPlanningPokerConfiguration>(MockBehavior.Strict); configuration.SetupGet(c => c.ClientInactivityTimeout).Returns(TimeSpan.FromMinutes(15)); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 0, 0, DateTimeKind.Utc)); var availableEstimations = DeckProvider.Default.GetDefaultDeck(); var team = new ScrumTeam("team", availableEstimations, timeProvider, null); var master = team.SetScrumMaster("master"); master.UpdateActivity(); var repository = new Mock <IScrumTeamRepository>(MockBehavior.Strict); repository.Setup(r => r.LoadScrumTeam("team")).Returns(team); repository.Setup(r => r.DeleteScrumTeam("team")); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 16, 0, DateTimeKind.Utc)); var target = CreatePlanningPokerController(timeProvider, configuration.Object, repository.Object); // Act using (var teamLock = target.CreateScrumTeam("team", "master", Deck.Standard)) { // Verify Assert.AreNotEqual <ScrumTeam>(team, teamLock.Team); repository.Verify(r => r.LoadScrumTeam("team"), Times.Once()); repository.Verify(r => r.DeleteScrumTeam("team"), Times.Once()); } }
public void AttachScrumTeam_TeamInRepository_DoesNotCreateNewTeam() { // Arrange var timeProvider = new DateTimeProviderMock(); var configuration = new Mock <IPlanningPokerConfiguration>(MockBehavior.Strict); configuration.SetupGet(c => c.ClientInactivityTimeout).Returns(TimeSpan.FromMinutes(15)); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 0, 0, DateTimeKind.Utc)); var team = new ScrumTeam("team"); var master = team.SetScrumMaster("master"); master.UpdateActivity(); var repository = new Mock <IScrumTeamRepository>(MockBehavior.Strict); repository.Setup(r => r.LoadScrumTeam("team")).Returns(team); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 14, 0, DateTimeKind.Utc)); var target = CreatePlanningPokerController(timeProvider, configuration.Object, repository.Object); var inputTeam = new ScrumTeam("team"); // Act Assert.ThrowsException <ArgumentException>(() => target.AttachScrumTeam(inputTeam)); }
public void DisconnectInactiveObservers_NoInactiveMembers_TeamIsUnchanged() { // Arrange var dateTimeProvider = new DateTimeProviderMock(); dateTimeProvider.SetUtcNow(new DateTime(2012, 1, 1, 3, 2, 20)); var target = new PlanningPokerController(dateTimeProvider, null, null); ScrumTeam team; using (var teamLock = target.CreateScrumTeam("team", "master")) { team = teamLock.Team; team.Join("member", false); } dateTimeProvider.SetUtcNow(new DateTime(2012, 1, 1, 3, 2, 40)); team.ScrumMaster.UpdateActivity(); // Act target.DisconnectInactiveObservers(TimeSpan.FromSeconds(30.0)); // Verify using (var teamLock = target.GetScrumTeam("team")) { Assert.AreEqual <int>(2, teamLock.Team.Members.Count()); } }
public void CreateScrumTeam_TeamInRepository_DoesNotDeleteOldTeam() { // Arrange var timeProvider = new DateTimeProviderMock(); var configuration = new Mock <IPlanningPokerConfiguration>(MockBehavior.Strict); configuration.SetupGet(c => c.ClientInactivityTimeout).Returns(TimeSpan.FromMinutes(15)); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 0, 0, DateTimeKind.Utc)); var team = new ScrumTeam("team"); var master = team.SetScrumMaster("master"); master.UpdateActivity(); var repository = new Mock <IScrumTeamRepository>(MockBehavior.Strict); repository.Setup(r => r.LoadScrumTeam("team")).Returns(team); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 14, 0, DateTimeKind.Utc)); var target = CreatePlanningPokerController(timeProvider, configuration.Object, repository.Object); // Act try { target.CreateScrumTeam("team", "master"); } catch (ArgumentException) { // expected exception when adding same team } // Verify repository.Verify(r => r.LoadScrumTeam("team"), Times.Once()); repository.Verify(r => r.DeleteScrumTeam("team"), Times.Never()); }
public void GetScrumTeam_TeamCreatedWhileLoading_DoesNotCreateNewTeam() { // Arrange var timeProvider = new DateTimeProviderMock(); var configuration = new Mock <IPlanningPokerConfiguration>(MockBehavior.Strict); configuration.SetupGet(c => c.ClientInactivityTimeout).Returns(TimeSpan.FromMinutes(15)); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 0, 0, DateTimeKind.Utc)); var team = new ScrumTeam("team"); var master = team.SetScrumMaster("master"); master.UpdateActivity(); bool firstLoad = true; bool firstReturn = true; PlanningPokerController target = null; ScrumTeam createdTeam = null; var repository = new Mock <IScrumTeamRepository>(MockBehavior.Strict); repository.Setup(r => r.LoadScrumTeam("team")) .Callback <string>(n => { if (firstLoad) { firstLoad = false; using (var teamLock = target.CreateScrumTeam("team", "master")) { createdTeam = teamLock.Team; } } }).Returns <string>(n => { if (firstReturn) { firstReturn = false; return(null); } else { return(team); } }); target = CreatePlanningPokerController(timeProvider, configuration.Object, repository.Object); // Act using (var teamLock = target.GetScrumTeam("team")) { // Verify Assert.AreNotEqual <ScrumTeam>(team, createdTeam); Assert.AreNotEqual <ScrumTeam>(team, teamLock.Team); Assert.AreEqual <ScrumTeam>(createdTeam, teamLock.Team); repository.Verify(r => r.LoadScrumTeam("team"), Times.Exactly(2)); repository.Verify(r => r.DeleteScrumTeam("team"), Times.Never()); } }
public void CreateScrumTeam_TeamCreatedWhileLoading_DoesNotCreateNewTeam() { // Arrange var timeProvider = new DateTimeProviderMock(); var configuration = new Mock <IPlanningPokerConfiguration>(MockBehavior.Strict); configuration.SetupGet(c => c.ClientInactivityTimeout).Returns(TimeSpan.FromMinutes(15)); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 0, 0, DateTimeKind.Utc)); var team = new ScrumTeam("team"); var master = team.SetScrumMaster("master"); master.UpdateActivity(); bool firstLoad = true; bool firstReturn = true; PlanningPokerController target = null; var repository = new Mock <IScrumTeamRepository>(MockBehavior.Strict); repository.Setup(r => r.LoadScrumTeam("team")) .Callback <string>(n => { if (firstLoad) { firstLoad = false; try { using (var teamLock = target.CreateScrumTeam("team", "master", Deck.Standard)) { Assert.AreNotEqual <ScrumTeam>(team, teamLock.Team); } } catch (ArgumentException) { // if ArgumentException is here, test should fail } } }).Returns <string>(n => { if (firstReturn) { firstReturn = false; return(null); } else { return(team); } }); target = CreatePlanningPokerController(timeProvider, configuration.Object, repository.Object); // Act Assert.ThrowsException <ArgumentException>(() => target.CreateScrumTeam("team", "master", Deck.Standard)); }
public void PlanningPokerController_SpecificDateTimeProvider_DateTimeProviderIsSet() { // Arrange var dateTimeProvider = new DateTimeProviderMock(); // Act var result = CreatePlanningPokerController(dateTimeProvider: dateTimeProvider); // Verify Assert.AreEqual <DateTimeProvider>(dateTimeProvider, result.DateTimeProvider); }
public async Task RunBeforeAnyTests() { // Create database container for integration tests var dockerSqlPort = await DockerDatabaseUtilities.EnsureDockerStartedAsync(); var dockerConnectionString = DockerDatabaseUtilities.GetSqlConnectionString(dockerSqlPort); // Build configuration, including the connection string from the database container var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", false, true) .AddInMemoryCollection(new Dictionary <string, string> { { "ConnectionStrings:Database", dockerConnectionString } }) .AddEnvironmentVariables(); _configuration = builder.Build(); _env = Mock.Of <IWebHostEnvironment>(); var startup = new Startup(_configuration, _env); var services = new ServiceCollection(); services.AddLogging(); startup.ConfigureServices(services); #region Register mocks var descriptorCurrentUserService = services.FirstOrDefault(d => d.ServiceType == typeof(ICurrentUserService)); services.Remove(descriptorCurrentUserService !); services.AddTransient(_ => CurrentUserServiceMock.Create(_user).Object); var descriptorDateTimeProvider = services.FirstOrDefault(d => d.ServiceType == typeof(IDateTimeProvider)); services.Remove(descriptorDateTimeProvider !); services.AddTransient(_ => DateTimeProviderMock.Create(DateTime.UtcNow).Object); var descriptorStorageService = services.FirstOrDefault(d => d.ServiceType == typeof(IStorageService)); services.Remove(descriptorStorageService !); services.AddTransient(_ => StorageServiceMock.Create().Object); #endregion _scopeFactory = services.BuildServiceProvider().GetService <IServiceScopeFactory>() ?? throw new InvalidOperationException(); _checkpoint = new Checkpoint { TablesToIgnore = new[] { "__EFMigrationsHistory" }, DbAdapter = DbAdapter.Postgres }; EnsureDatabase(); }
public void CreateScrumTeam_SpecificDateTimeProvider_CreatedTeamWithDateTimeProvider() { // Arrange var dateTimeProvider = new DateTimeProviderMock(); var target = CreatePlanningPokerController(dateTimeProvider: dateTimeProvider); // Act using (var teamLock = target.CreateScrumTeam("team", "master")) { // Verify Assert.AreEqual <DateTimeProvider>(dateTimeProvider, teamLock.Team.DateTimeProvider); } }
public void SerializeAndDeserialize_DateTimeProvider_DateTimeProviderIsSet() { // Arrange var team = new ScrumTeam("test"); team.SetScrumMaster("master"); var dateTimeProvider = new DateTimeProviderMock(); // Act var json = SerializeTeam(team); var result = DeserializeTeam(json, dateTimeProvider); // Verify Assert.AreEqual <DateTimeProvider>(dateTimeProvider, result.DateTimeProvider); }
private static BookingStatusRefreshService CreateBookingStatusRefreshService(IDistributedFlow flow, ISupplierBookingManagementService supplierService, List <Suppliers>?disabledSuppliers = null) { var context = CreateContext(); var dateTimeProvider = new DateTimeProviderMock(DateTimeNow); var monitor = Mock.Of <IOptionsMonitor <BookingStatusUpdateOptions> >(_ => _.CurrentValue == new BookingStatusUpdateOptions { DisabledSuppliers = disabledSuppliers ?? new List <Suppliers>() }); return(new BookingStatusRefreshService( flow, dateTimeProvider, supplierService, context, monitor )); }
public void TotalDays_CalculatedValue_ReturnsTermTotalDays() { // Arrange var termConfigurationMock = new Mock <IOptions <TermConfiguration> >(); termConfigurationMock.Setup(x => x.Value).Returns(CreateTermConfiguration()); var dateTimeProvider = new DateTimeProviderMock(); var term = new Term(dateTimeProvider.Object, termConfigurationMock.Object); // Act var result = term.TotalDays; // Assert Assert.IsType <int>(result); Assert.Equal(1461, result); }
public void EndingDate_CalculatedValue_ReturnsTermEndingDate() { // Arrange var termConfigurationMock = new Mock <IOptions <TermConfiguration> >(); termConfigurationMock.Setup(x => x.Value).Returns(CreateTermConfiguration()); var dateTimeProvider = new DateTimeProviderMock(); var term = new Term(dateTimeProvider.Object, termConfigurationMock.Object); // Act var result = term.EndingDate; // Assert Assert.IsType <DateTime>(result); Assert.Equal(new DateTime(2023, 12, 10), result); }
public void Progress_MidnightAfterLastTermDay_ReturnsCompletedProgress() { // Arrange var termConfigurationMock = new Mock <IOptions <TermConfiguration> >(); termConfigurationMock.Setup(x => x.Value).Returns(CreateTermConfiguration()); var dateTimeProvider = new DateTimeProviderMock() .MockNow(new DateTime(2023, 12, 10)); var term = new Term(dateTimeProvider.Object, termConfigurationMock.Object); // Act var result = term.Progress; // Assert Assert.IsType <double>(result); Assert.Equal(1, result); }
public void Progress_MidnightAfterFirstTermDay_ReturnsOneDayProgress() { // Arrange var termConfigurationMock = new Mock <IOptions <TermConfiguration> >(); termConfigurationMock.Setup(x => x.Value).Returns(CreateTermConfiguration()); var dateTimeProvider = new DateTimeProviderMock() .MockNow(new DateTime(2019, 12, 11)); var term = new Term(dateTimeProvider.Object, termConfigurationMock.Object); // Act var result = term.Progress; // Assert Assert.IsType <double>(result); Assert.Equal(0.0006844626967830253, result); }
public void RemainingDays_MidnightAfterFirstTermDay_ReturnsTotalDaysMinusOne() { // Arrange var termConfigurationMock = new Mock <IOptions <TermConfiguration> >(); termConfigurationMock.Setup(x => x.Value).Returns(CreateTermConfiguration()); var dateTimeProvider = new DateTimeProviderMock() .MockNow(new DateTime(2019, 12, 11)); var term = new Term(dateTimeProvider.Object, termConfigurationMock.Object); // Act var result = term.RemainingDays; // Assert Assert.IsType <int>(result); Assert.Equal(1460, result); }
public void ElapsedDays_MidnightAfterLastTermDay_ReturnsSameElapsedDaysAsPeriodTotalDays() { // Arrange var termConfigurationMock = new Mock <IOptions <TermConfiguration> >(); termConfigurationMock.Setup(x => x.Value).Returns(CreateTermConfiguration()); var dateTimeProvider = new DateTimeProviderMock() .MockNow(new DateTime(2023, 12, 10)); var term = new Term(dateTimeProvider.Object, termConfigurationMock.Object); // Act var result = term.ElapsedDays; // Assert Assert.IsType <int>(result); Assert.Equal(1461, result); }
public void DisconnectInactiveObservers_InactiveScrumMaster_TeamIsClosed() { // Arrange var dateTimeProvider = new DateTimeProviderMock(); dateTimeProvider.SetUtcNow(new DateTime(2012, 1, 1, 3, 2, 20)); var target = CreatePlanningPokerController(dateTimeProvider: dateTimeProvider); ScrumTeam team; using (var teamLock = target.CreateScrumTeam("team", "master")) { team = teamLock.Team; } dateTimeProvider.SetUtcNow(new DateTime(2012, 1, 1, 3, 2, 55)); // Act target.DisconnectInactiveObservers(TimeSpan.FromSeconds(30.0)); // Verify target.GetScrumTeam("team"); }
public void GetScrumTeam_DisconnectAfterwards_TeamIsRemovedFromRepository() { // Arrange var timeProvider = new DateTimeProviderMock(); var configuration = new Mock <IPlanningPokerConfiguration>(MockBehavior.Strict); configuration.SetupGet(c => c.ClientInactivityTimeout).Returns(TimeSpan.FromMinutes(15)); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 0, 0, DateTimeKind.Utc)); var team = new ScrumTeam("team"); var master = team.SetScrumMaster("master"); master.UpdateActivity(); var repository = new Mock <IScrumTeamRepository>(MockBehavior.Strict); repository.Setup(r => r.LoadScrumTeam("team")).Returns(team); repository.Setup(r => r.DeleteScrumTeam("team")); repository.SetupGet(r => r.ScrumTeamNames).Returns(Enumerable.Empty <string>()); timeProvider.SetUtcNow(new DateTime(2015, 1, 1, 10, 14, 0, DateTimeKind.Utc)); var target = CreatePlanningPokerController(timeProvider, configuration.Object, repository.Object); // Act using (var teamLock = target.GetScrumTeam("team")) { teamLock.Team.Disconnect(master.Name); var result = target.ScrumTeamNames; // Verify Assert.AreEqual <ScrumTeam>(team, teamLock.Team); Assert.IsFalse(result.Any()); repository.Verify(r => r.LoadScrumTeam("team"), Times.Once()); repository.Verify(r => r.DeleteScrumTeam("team"), Times.Once()); } }
public DateTimeProviderMockSteps(DateTimeProviderMock dateTimeProviderMock) { _dateTimeProviderMock = dateTimeProviderMock; }