コード例 #1
0
ファイル: RadioShould.cs プロジェクト: dublow/CqrsRadio
        public void RaiseMessageWhenCreateRadio()
        {
            var stream      = new MemoryEventStream();
            var publisher   = new EventBus(stream);
            var radioEngine = RadioEngineBuilder.Create().Build();

            Radio.Create(stream, publisher, radioEngine, "djam", "http://djamradio.fr");

            Assert.IsTrue(stream.GetEvents().Contains(new RadioCreated("djam", new Uri("http://djamradio.fr"))));
        }
コード例 #2
0
ファイル: Bootstrapper.cs プロジェクト: dublow/CqrsRadio
        public Bootstrapper(IUnityContainer container)
        {
            var stream   = new MemoryEventStream();
            var eventBus = new EventBus(stream);

            container.RegisterInstance <IEventStream>(stream);
            container.RegisterInstance(eventBus);

            _container = container;
        }
コード例 #3
0
        public void RaiseMessageWhenCreateUser()
        {
            var stream             = new MemoryEventStream();
            var publisher          = new EventBus(stream);
            var deezerApi          = DeezerApiBuilder.Create().Build();
            var songRepository     = SongRepositoryBuilder.Create().Build();
            var playlistRepository = PlaylistRepositoryBuilder.Create().Build();

            User.Create(stream, publisher, deezerApi, songRepository, playlistRepository, "*****@*****.**", "dublow", "12345", "accessToken");

            var identity = Identity.Parse("*****@*****.**", "dublow", "12345", "accessToken");

            Assert.IsTrue(stream.GetEvents().Contains(new UserCreated(identity)));
        }
コード例 #4
0
ファイル: RadioShould.cs プロジェクト: dublow/CqrsRadio
        public void RaiseMessageWhenParseRadioSong()
        {
            var stream      = new MemoryEventStream();
            var publisher   = new EventBus(stream);
            var radioEngine = RadioEngineBuilder
                              .Create()
                              .SetParser("title", "artist")
                              .Build();

            var radio = Radio.Create(stream, publisher, radioEngine, "djam", "http://djamradio.fr");

            radio.SearchSong();

            Assert.IsTrue(stream.GetEvents().Contains(new RadioSongParsed("djam", "title", "artist")));
        }
コード例 #5
0
ファイル: RadioShould.cs プロジェクト: dublow/CqrsRadio
        public void RaiseMessageWhenParseRadioErrorOccured()
        {
            var stream = new MemoryEventStream();

            stream.Add(new RadioCreated("djam", new Uri("http://djamradio.fr")));
            var publisher   = new EventBus(stream);
            var radioEngine = RadioEngineBuilder
                              .Create()
                              .SetException(new Exception("error"))
                              .Build();

            var radio = new Radio(stream, publisher, radioEngine);

            radio.SearchSong();

            Assert.IsTrue(stream.GetEvents().Contains(new RadioSongError("djam", "error")));
        }
コード例 #6
0
        public void RaiseMessageWhenAddPlaylistToUser()
        {
            var stream         = new MemoryEventStream();
            var deezerApi      = DeezerApiBuilder.Create().SetCreatePlaylist(PlaylistId.Parse("100")).Build();
            var songRepository = SongRepositoryBuilder.Create()
                                 .SetRandomSongs(1, new[] { new Song(SongId.Parse("100"), "title", "artist") }).Build();
            var playlistRepository = PlaylistRepositoryBuilder.Create().Build();

            stream.Add(new UserCreated(Identity.Parse("*****@*****.**", "dublow", "12345", "accessToken")));

            var publisher = new EventBus(stream);

            var user = new User(stream, publisher, deezerApi, songRepository, playlistRepository, 1);

            user.AddPlaylist("playlistName");

            Assert.IsTrue(stream.GetEvents().Contains(new PlaylistAdded(UserId.Parse("12345"), PlaylistId.Parse("100"), "playlistName")));
        }
コード例 #7
0
        public void NoRaiseMessageWhenTwiceDeleteUser()
        {
            var stream             = new MemoryEventStream();
            var deezerApi          = DeezerApiBuilder.Create().Build();
            var songRepository     = SongRepositoryBuilder.Create().Build();
            var playlistRepository = PlaylistRepositoryBuilder.Create().Build();

            stream.Add(new UserCreated(Identity.Parse("*****@*****.**", "dublow", "12345", "accessToken")));

            var publisher = new EventBus(stream);

            var user = new User(stream, publisher, deezerApi, songRepository, playlistRepository, 1);

            user.Delete();
            user.Delete();

            Assert.IsTrue(stream.GetEvents().Contains(new UserDeleted(UserId.Parse("12345"))));
        }
コード例 #8
0
        public void NoRaiseMessageWhenAddPlaylistWithDeletedUser()
        {
            var stream             = new MemoryEventStream();
            var deezerApi          = DeezerApiBuilder.Create().Build();
            var songRepository     = SongRepositoryBuilder.Create().Build();
            var playlistRepository = PlaylistRepositoryBuilder.Create().Build();

            stream.Add(new UserCreated(Identity.Parse("*****@*****.**", "dublow", "12345", "accessToken")));
            stream.Add(new UserDeleted(UserId.Parse("12345")));

            var publisher = new EventBus(stream);

            var user = new User(stream, publisher, deezerApi, songRepository, playlistRepository, 1);

            user.AddPlaylist("playlistName");

            Assert.AreEqual(0, stream.GetEvents().OfType <PlaylistAdded>().Count());
        }
コード例 #9
0
ファイル: RadioShould.cs プロジェクト: dublow/CqrsRadio
        public void NoRaiseMessageWhenParseRadioSongWithDeletedRadio()
        {
            var stream = new MemoryEventStream();

            stream.Add(new RadioCreated("djam", new Uri("http://djamradio.fr")));
            stream.Add(new RadioDeleted("djam"));
            var publisher   = new EventBus(stream);
            var radioEngine = RadioEngineBuilder
                              .Create()
                              .SetParser("title", "artist")
                              .Build();

            var radio = new Radio(stream, publisher, radioEngine);

            radio.SearchSong();

            Assert.AreEqual(0, stream.GetEvents().OfType <RadioSongParsed>().Count());
        }
コード例 #10
0
        public HomeModule(IDeezerApi deezerApi, ISongRepository songRepository,
                          IPlaylistRepository playlistRepository, Environment environment,
                          IMetric metric)
        {
            _deezerApi          = deezerApi;
            _songRepository     = songRepository;
            _playlistRepository = playlistRepository;
            _environment        = environment;
            _metric             = metric;
            var eventStream    = new MemoryEventStream();
            var eventPublisher = new EventBus(eventStream);

            eventPublisher.Subscribe(new PlaylistHandler(playlistRepository));

            Get["/"] = _ =>
            {
                using (var timer = _metric.Timer("home"))
                {
                    var model = new
                    {
                        appid   = _environment.AppId,
                        channel = _environment.Channel
                    };

                    return(View["index", model]);
                }
            };

            Get["/channel"] = _ =>
            {
                using (var timer = _metric.Timer("channel"))
                {
                    var cacheExpire = 60 * 60 * 24 * 365;

                    return(View["channel"]
                           .WithHeader("Pragma", "public")
                           .WithHeader("Cache-Control", $"maxage={cacheExpire}")
                           .WithHeader("Expires", DateTime.Now.AddMinutes(cacheExpire).ToString("F")));
                }
            };

            Post["/login"] = _ =>
            {
                using (var timer = _metric.Timer("createplaylist"))
                {
                    var model = this.Bind <LoginViewModel>();

                    var user = User.Create(eventStream, eventPublisher, _deezerApi, _songRepository,
                                           _playlistRepository, model.Email, model.Nickname, model.UserId, model.AccessToken,
                                           _environment.Size);

                    user.AddPlaylist(model.PlaylistName);
                    Console.WriteLine(user.Playlist.PlaylistId.Value);
                    return(Response.AsJson(new { playlistCreated = !user.Playlist.PlaylistId.IsEmpty }));
                }
            };

            Get["/canCreatePlaylist/{userId}"] = parameters =>
            {
                using (var timer = _metric.Timer("hasplaylist"))
                {
                    var userId            = UserId.Parse((string)parameters.userId);
                    var canCreatePlaylist = _playlistRepository
                                            .CanCreatePlaylist(userId, DateTime.UtcNow.AddDays(-1));

                    return(Response.AsJson(new { canCreatePlaylist }));
                }
            };
        }