예제 #1
0
        public void GetMostPopular_ShouldReturnTrackWithMostAttempts()
        {
            var options = GetDbOptions("GetMostPopular_Database");

            var dummyAttempt1 = new Attempt();
            var dummyAttempt2 = new Attempt();
            var dummyAttempt3 = new Attempt();

            var dummyTrack1 = new Track();
            var dummyTrack2 = new Track();

            dummyTrack1.Attempts.Add(dummyAttempt1);
            dummyTrack1.Attempts.Add(dummyAttempt2);
            dummyTrack2.Attempts.Add(dummyAttempt3);

            using (var context = new RiderDBContext(options))
            {
                context.Tracks.Add(dummyTrack1);
                context.Tracks.Add(dummyTrack2);
                context.SaveChanges();
            }

            Track actual;

            using (var context = new RiderDBContext(options))
            {
                var tracksService = new TracksService(context);
                actual = tracksService.GetMostPopular();
            }

            Assert.Equal(2, actual.Attempts.Count());
            Assert.Contains(actual.Attempts, x => x.Id == dummyAttempt1.Id);
            Assert.Contains(actual.Attempts, x => x.Id == dummyAttempt2.Id);
        }
예제 #2
0
        public void GetTrackById_ShouldReturnCorrectTrack()
        {
            var options = GetDbOptions("_Database");

            var dummyTrack1 = new Track();
            var dummyTrack2 = new Track();
            var dummyTrack3 = new Track();

            using (var context = new RiderDBContext(options))
            {
                context.Tracks.Add(dummyTrack1);
                context.Tracks.Add(dummyTrack2);
                context.Tracks.Add(dummyTrack3);
                context.SaveChanges();
            }

            Track actual;

            using (var context = new RiderDBContext(options))
            {
                var tracksService = new TracksService(context);
                actual = tracksService.GetTrackById(dummyTrack2.Id);
            }

            Assert.Equal(dummyTrack2.Id, actual.Id);
        }
예제 #3
0
        public void GetAllTracks_ShouldReturnAllTracks()
        {
            var options = GetDbOptions("GetAllTracks_Database");

            var dummyTrack1 = new Track();
            var dummyTrack2 = new Track();
            var dummyTrack3 = new Track();

            using (var context = new RiderDBContext(options))
            {
                context.Tracks.Add(dummyTrack1);
                context.Tracks.Add(dummyTrack2);
                context.Tracks.Add(dummyTrack3);
                context.SaveChanges();
            }

            List <Track> actual;

            using (var context = new RiderDBContext(options))
            {
                var tracksService = new TracksService(context);
                actual = tracksService.GetAllTracks().ToList();
            }

            Assert.Equal(3, actual.Count);
            Assert.Contains(actual, x => x.Id == dummyTrack1.Id);
            Assert.Contains(actual, x => x.Id == dummyTrack3.Id);
            Assert.Contains(actual, x => x.Id == dummyTrack2.Id);
        }
예제 #4
0
        public void EditTrack_ShouldSaveEditedTrack()
        {
            var options = GetDbOptions("EditTrack_Database");

            var dummyTrack = new Track();

            using (var context = new RiderDBContext(options))
            {
                context.Tracks.Add(dummyTrack);
                context.SaveChanges();
            }

            dummyTrack.Name        = "Edited";
            dummyTrack.Description = "Edited";
            dummyTrack.Distance    = 10;
            dummyTrack.Elevation   = 100;

            Track actual;

            using (var context = new RiderDBContext(options))
            {
                var tracksService = new TracksService(context);
                actual = tracksService.EditTrack(dummyTrack);
            }

            Assert.Equal("Edited", actual.Name);
            Assert.Equal("Edited", actual.Description);
            Assert.Equal(10, dummyTrack.Distance);
            Assert.Equal(100, dummyTrack.Elevation);
        }
        public void Returns_AllCategoriesOfATrack()
        {
            // Arrange
            var tracksRepositoryFake = new Mock <IEfRepository <Track> >();
            var mapperFake           = new Mock <IMappingProvider>();
            var service    = new TracksService(tracksRepositoryFake.Object, mapperFake.Object);
            var id         = Guid.NewGuid();
            var trackFake  = new Mock <Track>();
            var categories = new List <Category>
            {
                new Category {
                    TrackId = id
                },
                new Category {
                    TrackId = id
                }
            };

            trackFake.Setup(x => x.Categories).Returns(categories);
            tracksRepositoryFake.Setup(x => x.GetById(id)).Returns(trackFake.Object).Verifiable();

            // Act
            var actualReturnedCategories = service.GetCategoriesByTrackId(id);

            // Assert
            Assert.AreEqual(categories.Count, actualReturnedCategories.Count());
        }
예제 #6
0
        public void DeleteTrack_SuccessfulTrackAndEventsDeletion()
        {
            // arrange
            var tracksService = new TracksService(_trackRepository, _eventRepository);

            // act
            var result = tracksService.DeleteTrack(_testUserId, _testTrackId);

            // assert
            Assert.AreEqual(_testTrackId, result);
        }
예제 #7
0
        public void Call_TracksRepository_All()
        {
            // Arrange
            var tracksRepositoryFake = new Mock <IEfRepository <Track> >();
            var service         = new TracksService(tracksRepositoryFake.Object);
            var queryableTracks = this.GetIQueryable <Track>();

            tracksRepositoryFake.Setup(x => x.All).Returns(queryableTracks).Verifiable();

            // Act
            service.GetAll();

            // Assert
            tracksRepositoryFake.Verify(x => x.All, Times.AtLeastOnce);
        }
예제 #8
0
        public void CreateTrack_SuccessfulTrackCreation()
        {
            // arrange
            var tracksService = new TracksService(_trackRepository, _eventRepository);

            // act
            var result =
                tracksService.CreateTrack(_testUserId, _testTrack.Name, _testTrack.CreatedAt, _testTrack.AllowedCustomizations);

            // assert
            Assert.AreEqual(_testTrack.Name, result.Name);
            Assert.AreEqual(_testUserId, result.CreatorId);
            Assert.AreEqual(_testTrack.AllowedCustomizations, result.AllowedCustomizations);
            Assert.AreEqual(_testTrack.CreatedAt, result.CreatedAt);
        }
예제 #9
0
        public void EditTrack_SuccessfulTrackEditing()
        {
            // arrange
            var tracksService = new TracksService(_trackRepository, _eventRepository);
            var trackDto      = new TrackToEditDto(_testTrackUpdated.Id, _testTrackUpdated.Name, _testTrackUpdated.AllowedCustomizations);

            // act
            var result = tracksService.EditTrack(_testUserId, trackDto);

            // assert
            Assert.AreEqual(result.Id, _testTrackUpdated.Id);
            Assert.AreEqual(result.Name, _testTrackUpdated.Name);
            Assert.AreEqual(result.AllowedCustomizations, _testTrackUpdated.AllowedCustomizations);
            Assert.AreEqual(result.CreatedAt, _testTrackUpdated.CreatedAt);
            Assert.AreEqual(result.CreatorId, _testTrackUpdated.CreatorId);
        }
예제 #10
0
        public void GetTracks_SuccessfulTracksReceiving()
        {
            // arrange
            var tracksService = new TracksService(_trackRepository, _eventRepository);

            // act
            var result = tracksService.GetTracks(_testUserId);

            // assert
            var trackDtos = result.ToList();

            Assert.AreEqual(1, trackDtos.Count());
            Assert.AreEqual(_testTrack.Name, trackDtos.Single().Name);
            Assert.AreEqual(_testUserId, trackDtos.Single().CreatorId);
            Assert.AreEqual(_testTrack.AllowedCustomizations, trackDtos.Single().AllowedCustomizations);
            Assert.AreEqual(_testTrack.CreatedAt, trackDtos.Single().CreatedAt);
        }
예제 #11
0
        public void Call_TracksRepositoryGetById_WithCorrectId()
        {
            // Arrange
            var tracksRepositoryFake = new Mock <IEfRepository <Track> >();
            var service        = new TracksService(tracksRepositoryFake.Object);
            var id             = Guid.NewGuid();
            var trackFake      = new Mock <Track>();
            var categoriesFake = new Mock <ICollection <Category> >();

            trackFake.Setup(x => x.Categories).Returns(categoriesFake.Object);
            tracksRepositoryFake.Setup(x => x.GetById(id)).Returns(trackFake.Object).Verifiable();

            // Act
            service.GetCategoriesByTrackId(id);

            // Assert
            tracksRepositoryFake.Verify(x => x.GetById(id), Times.AtLeastOnce);
        }
 public SpotifyPlayerBotAccessors(ConversationState conversationState,
                                  OAuthService oAuthService,
                                  PlayerService playerService,
                                  CurrentTrackService currentTrackService,
                                  UIService uiService,
                                  SearchService searchService,
                                  ArtistsService artistsService,
                                  TracksService tracksService)
 {
     ConversationState   = conversationState ?? throw new ArgumentNullException(nameof(conversationState));
     OAuthService        = oAuthService ?? throw new ArgumentNullException(nameof(oAuthService));
     PlayerService       = playerService ?? throw new ArgumentNullException(nameof(playerService));
     CurrentTrackService = currentTrackService ?? throw new ArgumentNullException(nameof(currentTrackService));
     UIService           = uiService ?? throw new ArgumentNullException(nameof(uiService));
     SearchService       = searchService ?? throw new ArgumentNullException(nameof(searchService));
     ArtistsService      = artistsService ?? throw new ArgumentNullException(nameof(artistsService));
     TracksService       = tracksService ?? throw new ArgumentNullException(nameof(tracksService));
 }
예제 #13
0
        public void DeleteTrack_AccessDeny()
        {
            // arrange
            var             tracksService = new TracksService(_trackRepository, _eventRepository);
            DomainException exception     = null;

            // act
            try
            {
                var result = tracksService.DeleteTrack(_testInvalidUserId, _testTrackId);
            }
            catch (DomainException e)
            {
                exception = e;
            }

            // assert
            Assert.AreEqual(DomainExceptionType.TrackAccessDenied, exception.Type);
        }
예제 #14
0
        public void EditTrack_AccessDeny()
        {
            // arrange
            var             tracksService = new TracksService(_trackRepository, _eventRepository);
            var             trackDto      = new TrackToEditDto(_testTrack.Id, _testTrack.Name, _testTrack.AllowedCustomizations);
            DomainException exception     = null;

            // act
            try
            {
                var result = tracksService.EditTrack(_testInvalidUserId, trackDto);
            }
            catch (DomainException e)
            {
                exception = e;
            }

            // assert
            Assert.AreEqual(DomainExceptionType.TrackAccessDenied, exception.Type);
        }
예제 #15
0
        public void AddTrack_ShouldAddTrack()
        {
            var options = GetDbOptions("AddTrack_Database");

            var dummyTrack = new Track();

            using (var context = new RiderDBContext(options))
            {
                var tracksService = new TracksService(context);
                tracksService.AddTrack(dummyTrack);
            }

            List <Track> actual;

            using (var context = new RiderDBContext(options))
            {
                actual = context.Tracks.ToList();
            }

            Assert.NotNull(actual);
            Assert.Contains(actual, x => x.Id == dummyTrack.Id);
        }
예제 #16
0
        public void Call_ReturnsTheWholeCollection()
        {
            // Arrange
            var tracksRepositoryFake = new Mock <IEfRepository <Track> >();
            var service    = new TracksService(tracksRepositoryFake.Object);
            var tracksData = new List <Track>
            {
                new Mock <Track>().Object,
                new Mock <Track>().Object,
                new Mock <Track>().Object,
            };

            var queryableTracks = this.GetIQueryable <Track>(tracksData);

            tracksRepositoryFake.Setup(x => x.All).Returns(queryableTracks).Verifiable();

            // Act
            service.GetAll();

            // Assert
            tracksRepositoryFake.Verify(x => x.All, Times.AtLeastOnce);
        }
예제 #17
0
        public void ArchiveTrackById_ShouldSetIsArchivedTrue()
        {
            var options = GetDbOptions("ArchiveTrackById_Database");

            var dummyTrack = new Track();

            using (var context = new RiderDBContext(options))
            {
                context.Tracks.Add(dummyTrack);
                context.SaveChanges();
            }

            Track actual;

            using (var context = new RiderDBContext(options))
            {
                var tracksService = new TracksService(context);
                actual = tracksService.ArchiveTrackById(dummyTrack.Id);
            }

            Assert.NotNull(actual);
            Assert.True(actual.IsArchived);
        }
예제 #18
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.Configure <RazorViewEngineOptions>(o =>
            {
                o.ViewLocationFormats.Clear();
                o.ViewLocationFormats.Add("/Callback/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
            });

            var authorizationMapper = new AuthorizationMapper();

            services.AddSingleton(typeof(IAuthorizationMapper), authorizationMapper);
            services.AddBot <SpotifyPlayerBot>(options =>
            {
                var secretKey = Configuration.GetSection("botFileSecret")?.Value;

                var botConfig = BotConfiguration.Load(@".\Bots\SpotifyPlayerBot.bot", secretKey);
                services.AddSingleton(sp => botConfig);

                var service = botConfig.Services.Where(s => s.Type == "endpoint" && s.Name == "development").FirstOrDefault();
                if (!(service is EndpointService endpointService))
                {
                    throw new InvalidOperationException($"The .bot file does not contain a development endpoint.");
                }

                options.CredentialProvider = new SimpleCredentialProvider(endpointService.AppId, endpointService.AppPassword);

                options.OnTurnError = async(context, exception) =>
                {
                    await context.SendActivityAsync("Sorry, it looks like something went wrong.");
                };
            });

            var dataStore         = new MemoryStorage();
            var conversationState = new ConversationState(dataStore);

            var oAuthService        = new OAuthService(authorizationMapper, Configuration.GetSection("spotifyAppId")?.Value, Configuration.GetSection("spotifyAppSecret")?.Value);
            var playerService       = new PlayerService();
            var currentTrackService = new CurrentTrackService();
            var uiService           = new UIService(oAuthService.GetAuthorizeUrl());
            var searchService       = new SearchService();
            var artistsService      = new ArtistsService();
            var tracksService       = new TracksService();

            services.AddSingleton(serviceProvider => {
                var options   = serviceProvider.GetRequiredService <IOptions <BotFrameworkOptions> >().Value;
                var accessors = new SpotifyPlayerBotAccessors(conversationState,
                                                              oAuthService,
                                                              playerService,
                                                              currentTrackService,
                                                              uiService,
                                                              searchService,
                                                              artistsService,
                                                              tracksService)
                {
                    ConversationDialogState  = conversationState.CreateProperty <DialogState>("DialogState"),
                    OAuthServiceState        = conversationState.CreateProperty <OAuthService>("OAuthServiceState"),
                    PlayerServiceState       = conversationState.CreateProperty <PlayerService>("PlayerServiceState"),
                    CurrentTrackServiceState = conversationState.CreateProperty <CurrentTrackService>("CurrentServiceState"),
                    UIServiceState           = conversationState.CreateProperty <UIService>("UIServiceState"),
                    SearchServiceState       = conversationState.CreateProperty <SearchService>("SearchServiceState"),
                    ArtistsServiceState      = conversationState.CreateProperty <ArtistsService>("ArtistsServiceState"),
                    TracksServiceState       = conversationState.CreateProperty <TracksService>("TracksServiceState")
                };

                return(accessors);
            });
        }
예제 #19
0
 private static void TrackRoutineTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
 {
     TracksService.RemoveOldWorkers();
 }