/// <summary>
        /// DELETE /api/employees/{id}
        /// </summary>
        /// <param name="id"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public HttpResponseMessage Delete(int id, EmployeeModel model)
        {
            var context = this.DbContext;
            var entity  = context.Employees.Find(id);

            if (entity == null)
            {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound));
            }

            if (!this.User.CanDelete(entity))
            {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Forbidden));
            }

            // create the web event
            var webEvent = new EmployeeDeletedEvent(entity);

            // delete the entity
            context.Employees.Remove(entity);

            // persist changes to the database
            context.SaveChanges();

            // fire the web event
            webEvent.Raise();

            return(new HttpResponseMessage(HttpStatusCode.NoContent));
        }
Exemplo n.º 2
0
        public void EmployeeDeletedEventShouldReturnListOfCompanyProviders()
        {
            //Act
            var eae = new EmployeeDeletedEvent(_employeeWithProviders, DateTime.Now);

            //Assert
            Assert.IsNotNull(eae.IntegrationTypes);
            Assert.AreEqual(1, eae.IntegrationTypes.Count);
        }
Exemplo n.º 3
0
        public void EmployeeDeletedEventShouldReturnEmptyListForCompanyWithNoIntegrationTypes()
        {
            //Act
            var eae = new EmployeeDeletedEvent(_employee, DateTime.Now);

            //Assert
            Assert.IsNotNull(eae.IntegrationTypes);
            Assert.AreEqual(0, eae.IntegrationTypes.Count);
        }
        public async Task GeotabShouldHandleEmployeeDeletedEvent()
        {
            //Arrange
            var logger           = new Mock <ILogger>();
            var employeeProvider = new Mock <IEmployeeWriteProvider>();
            var geotab           = new Trucking.Business.Providers.Geotab.Geotab(logger.Object, employeeProvider.Object);
            var handler          = geotab as IHandle <EmployeeDeletedEvent>;
            var e = new EmployeeDeletedEvent(_employeeWithProviders, DateTime.Now);

            //Act
            await handler.Handle(e);

            //Assert
            employeeProvider.Verify(f => f.DeleteEmployee(_employeeWithProviders), Times.Once);
            logger.Verify(f => f.LogMessage(e), Times.Once);
        }
        public async Task KeepTruckinShouldHandleEmployeeDeletedEvent()
        {
            //Arrange
            var logger           = new Mock <ILogger>();
            var employeeProvider = new Mock <IEmployeeWriteProvider>();
            var keepTruckin      = new KeepTruckin(logger.Object, employeeProvider.Object);
            var handler          = keepTruckin as IHandle <EmployeeDeletedEvent>;
            var e = new EmployeeDeletedEvent(_employeeWithProviders, DateTime.Now);

            //Act
            await handler.Handle(e);

            //Assert
            employeeProvider.Verify(f => f.DeleteEmployee(_employeeWithProviders), Times.Once);
            logger.Verify(f => f.LogMessage(e), Times.Once);
        }
Exemplo n.º 6
0
        public async Task ShouldLogAllHandledEventsAndNotLogEventsThatWereNotHandled()
        {
            var tasks     = new ConcurrentBag <Task>();
            var sw        = new Stopwatch();
            var container = Core.IoC.Container;

            TestIoC.InitBusiness(container);

            #region events
            var e = new EmployeeAddedEvent(
                new Employee(
                    new Company(2, "", new List <EldProvider>()
            {
                new KeepTruckinEldProvider("1234567890")
            }), 1,
                    "James", "Kesinger", "jakesinger"), DateTime.UtcNow);

            var f = new EmployeeDeletedEvent(
                new Employee(
                    new Company(2, "", new List <EldProvider>()
            {
                new GeotabEldProvider("jkes", "sdlkj", "company")
            }), 3,
                    "Justin", "Kesinger", "jukesinger"), DateTime.UtcNow);

            var g = new EmployeeUpdatedEvent(
                new Employee(
                    new Company(3, "", new List <EldProvider>()
            {
                new JjKellerEldProvider("654654654")
            }), 2,
                    "Jason", "Kesinger", "jkesinger"), DateTime.UtcNow);

            var h = new TruckAddedEvent(
                new Truck(1, new Company(3, "Unit 204", new List <EldProvider>()
            {
                new KeepTruckinEldProvider("654654654")
            })), DateTime.UtcNow);
            #endregion

            var publisher = Core.IoC.Container.Resolve <IEventPublisher>();

            sw.Start();
            Parallel.For(0, 2000, (i) =>
            {
                if (i % 2 == 0)
                {
                    tasks.Add(publisher.Publish(e));
                }
                else if (i % 3 == 0)
                {
                    tasks.Add(publisher.Publish(g));
                }
                else
                {
                    tasks.Add(publisher.Publish(f));
                }

                tasks.Add(publisher.Publish(h)); //no one listening to this event
            });

            await Task.WhenAll(tasks);

            sw.Stop();

            FakeLogger.Dictionary.TryGetValue(e, out var addCnt);
            FakeLogger.Dictionary.TryGetValue(g, out var updateCnt);
            FakeLogger.Dictionary.TryGetValue(f, out var deleteCnt);
            var hasHEvents = FakeLogger.Dictionary.TryGetValue(h, out var hCnt);

            Assert.AreEqual(1000, addCnt);
            Assert.AreEqual(333, updateCnt);
            Assert.AreEqual(667, deleteCnt);
            Assert.IsFalse(hasHEvents);
            Assert.AreEqual(0, hCnt);
            Assert.IsTrue(sw.Elapsed.TotalSeconds < 60);
        }
Exemplo n.º 7
0
        public async Task Handle(EmployeeDeletedEvent domainEvent)
        {
            await _logger.LogMessage(domainEvent);

            await _employeeProvider.DeleteEmployee(domainEvent.Employee);
        }