public SensorEvent AddOrUpdate(SensorEventPOST viewModel) { //try to get an existing meter, by looking in a local cache first var meteredSpace = _meteredSpacesService.Get(viewModel.MeteredSpace.MeterID); if (meteredSpace == null) { //record this meter in the db meteredSpace = _meteredSpacesService.AddOrUpdate(viewModel.MeteredSpace); } var posted = new SensorEvent() { ClientId = viewModel.ClientID, EventTime = DateTime.Parse(viewModel.EventTime), EventType = viewModel.EventType, MeteredSpace = meteredSpace, ReceivedTime = _clock.UtcNow, SessionId = long.Parse(viewModel.MeteredSpace.SessionID), TransmissionId = long.Parse(viewModel.TransmissionID), TransmissionTime = DateTime.Parse(viewModel.TransmissionDateTime) }; var existing = _sensorEventsRepo.Get(x => x.TransmissionId == posted.TransmissionId); if (existing == null) { _sensorEventsRepo.Create(posted); } else { posted.Id = existing.Id; _sensorEventsRepo.Update(posted); } return posted; }
public void Post_GivenViewModel_ReturnsCreatedSensorEventGETAtRoute() { _mockSensorEventsService .Setup(m => m.AddOrUpdate(It.IsAny <SensorEventPOST>())) .Returns <SensorEventPOST>(vm => new SensorEvent { TransmissionId = long.Parse(vm.TransmissionID), MeteredSpace = new MeteredSpace { MeterId = vm.MeteredSpace.MeterID }, SessionId = long.Parse(vm.MeteredSpace.SessionID), } ); var viewModel = new SensorEventPOST { TransmissionID = "1", MeteredSpace = new SensorEventMeteredSpacePOST { SessionID = "0", MeterID = "Pole1" } }; IHttpActionResult actionResult = _controller.Post(viewModel); var okResult = actionResult as OkNegotiatedContentResult <SensorEventGET>; Assert.IsNotNull(okResult); //Assert.AreEqual("SensorEvents", createdResult.RouteName); //Assert.AreEqual(1, createdResult.RouteValues["id"]); Assert.IsNotNull(okResult.Content); Assert.AreEqual(1, okResult.Content.EventId); Assert.AreEqual(0, okResult.Content.SessionId); Assert.AreEqual("Pole1", okResult.Content.MeterId); }
public void SensorEventXml_DeserializesTo_SensorEventPOST() { //arrange var serializer = new DataContractSerializer(typeof(SensorEventPOST)); string xml = @"<SensorEvent> <ClientID>XYZ123</ClientID> <TransmissionID>12345678</TransmissionID> <TransmissionDateTime>2015-01-26 17:00:00</TransmissionDateTime> <EventType>SE</EventType> <MeteredSpace> <MeterID>Pole1</MeterID> <SessionID>123</SessionID> </MeteredSpace> <EventTime>2015-01-26 17:00:00</EventTime> </SensorEvent>"; SensorEventPOST sensorEvent = null; //act using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(xml))) { sensorEvent = serializer.ReadObject(ms) as SensorEventPOST; } //assert Assert.NotNull(sensorEvent); Assert.AreEqual("XYZ123", sensorEvent.ClientID); Assert.AreEqual("12345678", sensorEvent.TransmissionID); Assert.AreEqual("2015-01-26 17:00:00", sensorEvent.TransmissionDateTime); Assert.AreEqual("SE", sensorEvent.EventType); Assert.NotNull(sensorEvent.MeteredSpace); Assert.AreEqual("Pole1", sensorEvent.MeteredSpace.MeterID); Assert.AreEqual("123", sensorEvent.MeteredSpace.SessionID); Assert.AreEqual("2015-01-26 17:00:00", sensorEvent.EventTime); }
public IHttpActionResult Post([FromBody] SensorEventPOST postedSensorEvent) { if (postedSensorEvent == null) { Logger.Warning("POST to {0} with null model.", RequestContext.RouteData.Route.RouteTemplate); return(BadRequest("Incoming data parsed to null entity model.")); } SensorEvent entity = null; try { entity = _sensorEventsService.AddOrUpdate(postedSensorEvent); } catch (Exception ex) { Logger.Error( ex, "Server error on POST to {0} with model:{1}{2}", RequestContext.RouteData.Route.RouteTemplate, Environment.NewLine, postedSensorEvent.ToXmlString() ); return(InternalServerError(ex)); } //temporary because WebApi routes are registered with Route.Name = null, hence cannot be looked up by name //we should return CreatedAtRoute (201 with a location header) //instead we just return 200 with the entity //return CreatedAtRoute( // "SensorEvents", // new { id = entity.Id }, // entity //); return(Ok(_sensorEventsService.GetViewModel(entity))); }
public SensorEvent AddOrUpdate(SensorEventPOST viewModel) { //try to get an existing meter, by looking in a local cache first var meteredSpace = _meteredSpacesService.Get(viewModel.MeteredSpace.MeterID); if (meteredSpace == null) { //record this meter in the db meteredSpace = _meteredSpacesService.AddOrUpdate(viewModel.MeteredSpace); } var posted = new SensorEvent() { ClientId = viewModel.ClientID, EventTime = DateTime.Parse(viewModel.EventTime), EventType = viewModel.EventType, MeteredSpace = meteredSpace, ReceivedTime = _clock.UtcNow, SessionId = long.Parse(viewModel.MeteredSpace.SessionID), TransmissionId = long.Parse(viewModel.TransmissionID), TransmissionTime = DateTime.Parse(viewModel.TransmissionDateTime) }; var existing = _sensorEventsRepo.Get(x => x.TransmissionId == posted.TransmissionId); if (existing == null) { _sensorEventsRepo.Create(posted); } else { posted.Id = existing.Id; _sensorEventsRepo.Update(posted); } return(posted); }
public void Post_GivenViewModel_ReturnsCreatedSensorEventGETAtRoute() { _mockSensorEventsService .Setup(m => m.AddOrUpdate(It.IsAny<SensorEventPOST>())) .Returns<SensorEventPOST>(vm => new SensorEvent { TransmissionId = long.Parse(vm.TransmissionID), MeteredSpace = new MeteredSpace { MeterId = vm.MeteredSpace.MeterID }, SessionId = long.Parse(vm.MeteredSpace.SessionID), } ); var viewModel = new SensorEventPOST { TransmissionID = "1", MeteredSpace = new SensorEventMeteredSpacePOST { SessionID = "0", MeterID = "Pole1" } }; IHttpActionResult actionResult = _controller.Post(viewModel); var okResult = actionResult as OkNegotiatedContentResult<SensorEventGET>; Assert.IsNotNull(okResult); //Assert.AreEqual("SensorEvents", createdResult.RouteName); //Assert.AreEqual(1, createdResult.RouteValues["id"]); Assert.IsNotNull(okResult.Content); Assert.AreEqual(1, okResult.Content.EventId); Assert.AreEqual(0, okResult.Content.SessionId); Assert.AreEqual("Pole1", okResult.Content.MeterId); }