public void PlayVetoSound() { hasPlayedFinishHimForThisTrack = false; if (soundBoardSettings.IsEnabled) { bool firstblood = false; var lastVetoDateTime = new DateTime(); int skipCount = 0; var latestVetoInfo = soundBoardDataService.GetAll().FirstOrDefault(); if (latestVetoInfo != null) { lastVetoDateTime = latestVetoInfo.lastSkippedSongTime; skipCount = latestVetoInfo.skippedSongsCount; } else { latestVetoInfo = new SoundBoardInfo(); } //first veto of the day! if (!lastVetoDateTime.ToLocalTime().Date.Equals(nowHelper.Now.Date)) { firstblood = true; } var n = nowHelper.Now.ToUniversalTime(); var latestTime = lastVetoDateTime.AddSeconds(soundBoardSettings.SecondsBetweenSkipThreshold); if (DateTime.Compare(latestTime, n) > 0) { skipCount++; string fileName = GetVetoSound(skipCount); if (!string.IsNullOrEmpty(fileName)) { player.PlayFromFile(fileName); } } else { skipCount = 1; } latestVetoInfo.lastSkippedSongTime = nowHelper.Now; latestVetoInfo.skippedSongsCount = skipCount; soundBoardDataService.InsertOrUpdate(latestVetoInfo); //play the first blood sound if its the first veto of the day if (firstblood) { player.PlayFromFile(pathBuilder.BuildFilePath("firstblood.wav")); } } }
public void if_skipped_outside_seconds_between_skip_threshold_PlayVetoSound_resets_skipCount_and_plays_no_sound() { //arrange var settingsMock = GetMock <ISoundBoardSettings>(); settingsMock.Setup(m => m.IsEnabled).Returns(true); settingsMock.Setup(m => m.SecondsBetweenSkipThreshold).Returns(10); var pathBuilderMock = GetMock <IPathBuilder>(); pathBuilderMock.Setup(m => m.BuildFilePath(It.IsAny <string>())).Returns("\\\\apath\\sounds\\filename.wav"); var nowMock = GetMock <INowHelper>(); nowMock.Setup(m => m.Now).Returns(new DateTime(2013, 1, 2, 10, 0, 15)); //5 seconds outside of threshold var soundInfo = new SoundBoardInfo { lastSkippedSongTime = new DateTime(2013, 1, 2, 10, 0, 0).ToUniversalTime(), skippedSongsCount = 3 }; var dataServiceMock = GetMock <IDataService <SoundBoardInfo> >(); dataServiceMock.Setup(m => m.GetAll()) .Returns(new List <SoundBoardInfo>() { soundInfo }.AsQueryable()); var playerMock = GetMock <IStreamedPlayer>(); //act ClassUnderTest.PlayVetoSound(); soundInfo.skippedSongsCount = 1; //assert dataServiceMock.Verify(m => m.InsertOrUpdate(It.Is <SoundBoardInfo>(c => c.skippedSongsCount == 1)), Times.Once()); playerMock.Verify(m => m.PlayFromFile(It.IsAny <string>()), Times.Never()); }