Ejemplo n.º 1
0
        public IQueryable <Event> Get(EventType?type, bool includeAll = true)
        {
            switch (type)
            {
            case EventType.Concert:
            {
                return(ConcertRepository.Get(null, includeProperties: includeAll?_concertsIncludes: string.Empty));
            }

            case EventType.Exhibition:
            {
                return(ExhibitionRepository.Get(null, includeProperties: includeAll?_exhibitionsIncludes: string.Empty));
            }

            case EventType.Movie:
            {
                return(MovieRepository.Get(null, includeProperties: includeAll?_moviesIncludes: string.Empty));
            }

            case EventType.Performance:
            {
                return(PerformanceRepository.Get(null, includeProperties: includeAll?_performancesIncludes: string.Empty));
            }

            case EventType.Sport:
            {
                return(SportRepository.Get(null, includeProperties: includeAll?_sportIncludes: string.Empty));
            }

            default: return(GetAll(includeAll));
            }
        }
        public void ConcertRepository_TryFindBy_True()
        {
            Mock <IStoreEvents>       storeEvents    = new Mock <IStoreEvents>();
            Mock <IEventStream>       eventStream    = new Mock <IEventStream>();
            ConcertCreatedDomainEvent concertCreated = new ConcertCreatedDomainEvent(3, "SPENS", DateTime.Now, "Koncert godine", Guid.NewGuid());

            eventStream.Setup(x => x.CommittedEvents).Returns(new List <EventMessage>()
            {
                new EventMessage()
                {
                    Body = concertCreated
                }
            });

            Mock <IConcertFactory> concertFactory = new Mock <IConcertFactory>();

            concertFactory.Setup(x => x.Create()).Returns(new Concert());
            storeEvents.Setup(x => x.OpenStream(It.IsAny <string>(), It.IsAny <string>(), 0, int.MaxValue)).Returns(eventStream.Object);

            ConcertRepository repository = new ConcertRepository(storeEvents.Object, concertFactory.Object);
            Concert           concert;

            bool result = repository.TryFindBy(Guid.NewGuid(), out concert);

            Assert.True(result);
        }
        public Task Consume(ConsumeContext <BuyConcertTicketsCommand> context)
        {
            BuyConcertTicketsCommand command = context.Message;

            Logger.LogInformation($"Processing command Buy concert tickets: Tickets to buy:{command.NumberOfTicketsToBuy}, User id: {command.UserId}, Concert id: {command.ConcertId} - started. ");

            try
            {
                /// kod unutar try bloka bi trebao da ide u poseban hendler
                Concert concert;

                if (!ConcertRepository.TryFindBy(command.ConcertId, out concert))
                {
                    return(Task.CompletedTask);
                }

                concert.BuyTickets(command.NumberOfTicketsToBuy, command.UserId);

                ConcertRepository.Save(concert);

                foreach (var @event in concert.Changes)
                {
                    var handler = EventHandlerFactory.CreatePublisher(@event);
                    handler.Publish(@event, context);
                }

                Logger.LogInformation($"Processing command Buy concert tickets: Tickets to buy:{command.NumberOfTicketsToBuy}, User id: {command.UserId}, Concert id: {command.ConcertId} - finished succesfully. ");
            } catch (MaximumNumberOfTicketsReached ticketsReachedException)
            {
                Logger.LogError($"{ticketsReachedException.Message}. Can not execute command Buy concert tickets: Tickets to buy:{command.NumberOfTicketsToBuy}, User id: {command.UserId}, Concert id: {command.ConcertId}.Command rejected. ");
            }
            return(Task.CompletedTask);
        }
        public Task Consume(ConsumeContext <CreateConcertCommand> context)
        {
            CreateConcertCommand command = context.Message;

            Logger.LogInformation($"Processing command Create concert: Maximum number of tickets:{command.MaximumNumberOfTickets}, Place: {command.Place}, Title: {command.Title} - started. ");

            try
            {
                Concert concert = ConcertFactory.Create(command.Place, command.MaximumNumberOfTickets, command.Date, command.Title, ConcertRepository.GetNextId());

                ConcertRepository.Add(concert);

                foreach (var @event in concert.Changes)
                {
                    var publisher = EventHandlerFactory.CreatePublisher(@event);
                    publisher.Publish(@event, context);
                }

                Logger.LogInformation($"Processing command Create concert: Maximum number of tickets:{command.MaximumNumberOfTickets}, Place: {command.Place}, Title: {command.Title} - finished successfully. ");
            }
            catch (IntialTicketsCapacityNotSet ticketsCapacityNotSetException)
            {
                Logger.LogError($"{ticketsCapacityNotSetException.Message}. Can not execute command Create concert: Maximum number of tickets:{command.MaximumNumberOfTickets}, Place: {command.Place}, Title: {command.Title}.Command rejected. ");
            }
            return(Task.CompletedTask);
        }
Ejemplo n.º 5
0
 public UnitOfWork(ApplicationDbContext context)
 {
     _context          = context;
     Concerts          = new ConcertRepository(context);
     Attendances       = new AttendanceRepository(context);
     Followings        = new FollowingRepository(context);
     Genres            = new GenreRepository(context);
     Users             = new ApplicationUserRepository(context);
     Notifications     = new NotificationRepository(context);
     UserNotifications = new UserNotificationRepository(context);
 }
Ejemplo n.º 6
0
        public void Repository_CheckGet_ReturnsNullIfIdIsInvalid()
        {
            // Arrange
            var repository = new ConcertRepository();

            // Act
            var sut = repository.GetById(100);

            // Assert
            sut.Should().BeNull();
        }
Ejemplo n.º 7
0
        public void Repository_CheckGet_ReturnsCorrectValues()
        {
            // Arrange
            var repository = new ConcertRepository();

            // Act
            var sut = repository.GetById(1);

            // Assert
            sut.Id.Should().Be(1);
        }
        public void ConcertRepository_Add()
        {
            Mock <IStoreEvents>    storeEvents    = new Mock <IStoreEvents>();
            Mock <IEventStream>    eventStream    = new Mock <IEventStream>();
            Mock <IConcertFactory> concertFactory = new Mock <IConcertFactory>();

            storeEvents.Setup(x => x.CreateStream(It.IsAny <string>(), It.IsAny <string>())).Returns(eventStream.Object);
            Concert           concert    = new Concert("SPENS", 50, DateTime.Now, "Koncert godine", Guid.NewGuid());
            ConcertRepository repository = new ConcertRepository(storeEvents.Object, concertFactory.Object);

            repository.Add(concert);
            eventStream.Verify(x => x.Add(It.IsAny <EventMessage>()), Times.Once);
            eventStream.Verify(x => x.CommitChanges(It.IsAny <Guid>()), Times.Once);
        }
Ejemplo n.º 9
0
        public void Repository_AddItem_SetsIdCorrectly()
        {
            // Arrange
            var repository = new ConcertRepository();
            var concert    = new Concert()
            {
                Artist = "New Artist",
            };

            // Act
            var sut = repository.Insert(concert);

            // Assert
            sut.Should().Be(5);
        }
Ejemplo n.º 10
0
        public void Repository_AddItem_IsSuccessfullySaved()
        {
            // Arrange
            var repository = new ConcertRepository();
            var concert    = new Concert()
            {
                Artist = "New Artist",
            };
            var originalCount = repository.Count();

            // Act
            var result = repository.Insert(concert);

            // Assert
            repository.Count().Should().Be(originalCount + 1);
        }
        public void ConcertRepository_TryFindBy_False()
        {
            Mock <IStoreEvents> storeEvents = new Mock <IStoreEvents>();
            Mock <IEventStream> eventStream = new Mock <IEventStream>();

            eventStream.Setup(x => x.CommittedEvents).Returns(new List <EventMessage>());
            Mock <IConcertFactory> concertFactory = new Mock <IConcertFactory>();

            concertFactory.Setup(x => x.Create()).Returns(new Concert());
            storeEvents.Setup(x => x.OpenStream(It.IsAny <string>(), It.IsAny <string>(), 0, int.MaxValue)).Returns(eventStream.Object);

            ConcertRepository repository = new ConcertRepository(storeEvents.Object, concertFactory.Object);
            Concert           concert;

            bool result = repository.TryFindBy(Guid.NewGuid(), out concert);

            Assert.False(result);
        }
Ejemplo n.º 12
0
        public IQueryable <Event> GetAll(bool includeAll = true)
        {
            //temporary solution caused by ef bug
            IEnumerable <Event> events = new List <Event>();

            events = events.Concat(ConcertRepository
                                   .Get(null, includeProperties: includeAll ? _concertsIncludes : string.Empty)
                                   .ToList())
                     .Concat(MovieRepository
                             .Get(null, includeProperties: includeAll ? _moviesIncludes : string.Empty)
                             .ToList())
                     .Concat(SportRepository
                             .Get(null, includeProperties: includeAll ? _sportIncludes : string.Empty)
                             .ToList())
                     .Concat(PerformanceRepository
                             .Get(null, includeProperties: includeAll ? _performancesIncludes : string.Empty)
                             .ToList())
                     .Concat(ExhibitionRepository
                             .Get(null, includeProperties: includeAll ? _exhibitionsIncludes : string.Empty)
                             .ToList());
            return(events.AsQueryable());
        }