private async Task GetFromIdQueryable(int id, IMEIToCallsign expectedResult) { var imeis = CreateMockIMEIDbSet(); var context = CreateMockIMEIContext(imeis.Object); var locationService = CreateMockLocationService(); var service = new IMEIService(context.Object, locationService.Object); var res = await service.GetFromIdQueryable(id); Assert.IsAssignableFrom <IQueryable <IMEIToCallsign> >(res); if (expectedResult == null) { Assert.False(res.Any()); } else { Assert.Equal(1, res.Count()); var actual = res.First(); Assert.Equal(expectedResult.Id, actual.Id); Assert.Equal(expectedResult.CallSign, actual.CallSign); Assert.Equal(expectedResult.IMEI, actual.IMEI); Assert.Equal(expectedResult.Type, actual.Type); } }
private async Task RegisterCallsignCreate(string imei, string callsign, VehicleType?type, bool shouldCreate = true) { var imeis = CreateMockIMEIDbSet(); var context = CreateMockIMEIContext(imeis.Object); var locationService = CreateMockLocationService(); var service = new IMEIService(context.Object, locationService.Object); await service.RegisterCallsign(imei, callsign, type); if (shouldCreate) { var expectedItem = new IMEIToCallsign { IMEI = imei, CallSign = callsign ?? IMEIService.DefaultCallsign, Type = type ?? VehicleType.Unknown }; imeis.Verify(i => i.Add(It.Is <IMEIToCallsign>(c => c.IMEI == expectedItem.IMEI && c.CallSign == expectedItem.CallSign && c.Type == expectedItem.Type))); context.Verify(c => c.SaveChangesAsync()); } else { imeis.Verify(i => i.Add(It.IsAny <IMEIToCallsign>()), Times.Never); context.Verify(c => c.SaveChangesAsync(), Times.Never); } }
public IMEIControllerTests() { TestCallsigns = new List <IMEIToCallsign>(Fixture.CreateMany <IMEIToCallsign>()); BadId = Fixture.Create <int>(); TestCallsign = TestCallsigns.First(); TestId = TestCallsign.Id; BadCallsign = Fixture.Create <string>(); TestUsername = Fixture.Create <string>(); }
public IMEIControllerTests() { TestCallsigns = new List<IMEIToCallsign>(Fixture.CreateMany<IMEIToCallsign>()); BadId = Fixture.Create<int>(); TestCallsign = TestCallsigns.First(); TestId = TestCallsign.Id; BadCallsign = Fixture.Create<string>(); TestUsername = Fixture.Create<string>(); }
public LocationServiceTests() { GoodLocations = new List<LocationRecord>(Fixture.CreateMany<LocationRecord>()); GoodLocation = GoodLocations.First(); BadLandmark = Fixture.Create<Landmark>(); GoodCallsign = Fixture.Create<IMEIToCallsign>(); UnknownIMEI = Fixture.Create<string>(); GoodLandmarks = new List<Landmark>(Fixture.CreateMany<Landmark>()); GoodLandmark = GoodLandmarks.First(); }
public LocationServiceTests() { GoodLocations = new List <LocationRecord>(Fixture.CreateMany <LocationRecord>()); GoodLocation = GoodLocations.First(); BadLandmark = Fixture.Create <Landmark>(); GoodCallsign = Fixture.Create <IMEIToCallsign>(); UnknownIMEI = Fixture.Create <string>(); GoodLandmarks = new List <Landmark>(Fixture.CreateMany <Landmark>()); GoodLandmark = GoodLandmarks.First(); }
private static bool ValidateLocationRecord(LocationRecord record, IMEIToCallsign imei, decimal latitude, decimal longitude, DateTimeOffset readingTime, DateTimeOffset receivedTime) { Assert.Equal(latitude, record.Latitude); Assert.Equal(longitude, record.Longitude); Assert.Equal(readingTime, record.ReadingTime); Assert.Equal(receivedTime, record.ReceiveTime); Assert.Equal(imei.CallSign, record.Callsign); Assert.Equal(imei.Type, record.Type); return(true); }
private async Task DeleteIMEIByID(int id, IMEIToCallsign imeiObj = null, bool tryDelete = true) { var imeis = CreateMockIMEIDbSet(); var context = CreateMockIMEIContext(imeis.Object); var locationService = CreateMockLocationService(); var service = new IMEIService(context.Object, locationService.Object); await service.DeleteIMEIById(id); ConfirmDelete(imeis, context, locationService, imeiObj, tryDelete); }
/// <summary> /// Deletes the provided IMEIToCallsign relationship from the data context. /// </summary> /// <param name="imei">The IMEI to delete.</param> /// This method will not return an error if the IMEI is null or does not exist. /// It will also trigger any location reports in the data context associated with that callsign /// to be expired to try and cut down on duplicate reports. private async Task DeleteIMEI(IMEIToCallsign imei) { if (imei == null) { return; } await LocationService.ExpireLocation(imei.CallSign); _dataContext.IMEIToCallsigns.Remove(imei); await _dataContext.SaveChangesAsync(); }
// POST: odata/IMEI public async Task <IHttpActionResult> Post(IMEIToCallsign imeiToCallsign) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } await _imeiService.RegisterCallsign(imeiToCallsign.IMEI, imeiToCallsign.CallSign, imeiToCallsign.Type); var newIMEI = await _imeiService.GetFromIMEI(imeiToCallsign.IMEI); await _logService.LogIMEIRegistered(User.Identity.GetUserName(), newIMEI.IMEI, newIMEI.CallSign, newIMEI.Type); return(Created(newIMEI)); }
// POST: odata/IMEI public async Task<IHttpActionResult> Post(IMEIToCallsign imeiToCallsign) { if (!ModelState.IsValid) { return BadRequest(ModelState); } await _imeiService.RegisterCallsign(imeiToCallsign.IMEI, imeiToCallsign.CallSign, imeiToCallsign.Type); var newIMEI = await _imeiService.GetFromIMEI(imeiToCallsign.IMEI); await _logService.LogIMEIRegistered(User.Identity.GetUserName(), newIMEI.IMEI, newIMEI.CallSign, newIMEI.Type); return Created(newIMEI); }
private async Task DeleteIMEI(string imei, IMEIToCallsign imeiObj = null, bool tryDelete = true) { var imeis = CreateMockIMEIDbSet(); var context = CreateMockIMEIContext(imeis.Object); var locationService = CreateMockLocationService(); var container = new UnityContainer(); container.RegisterInstance(locationService.Object); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); var service = new IMEIService(context.Object); await service.DeleteIMEI(imei); ConfirmDelete(imeis, context, locationService, imeiObj, tryDelete); }
private async Task RegisterCallsignUpdate(string imei, string callsign, VehicleType?type, IMEIToCallsign linkedObject, bool shouldUpdate = true) { var oldValues = new IMEIToCallsign { CallSign = linkedObject.CallSign, Id = linkedObject.Id, IMEI = linkedObject.IMEI, Type = linkedObject.Type }; var imeis = CreateMockIMEIDbSet(); var context = CreateMockIMEIContext(imeis.Object); var locationService = CreateMockLocationService(); var service = new IMEIService(context.Object, locationService.Object); await service.RegisterCallsign(imei, callsign, type); if (string.IsNullOrWhiteSpace(callsign)) { locationService.Verify(l => l.ExpireLocation(It.IsAny <string>()), Times.Never); } else { locationService.Verify(l => l.ExpireLocation(oldValues.CallSign)); } if (shouldUpdate) { Assert.Equal(imei, linkedObject.IMEI); Assert.Equal(string.IsNullOrWhiteSpace(callsign) ? oldValues.CallSign : callsign, linkedObject.CallSign); Assert.Equal(type ?? oldValues.Type, linkedObject.Type); context.Verify(c => c.SaveChangesAsync()); } else { Assert.Equal(imei, linkedObject.IMEI); Assert.Equal(oldValues.CallSign, linkedObject.CallSign); Assert.Equal(oldValues.Type, linkedObject.Type); context.Verify(c => c.SaveChangesAsync(), Times.Never); } }
private async Task RegisterLocation(IMEIToCallsign imei, DateTimeOffset readingTime, DateTimeOffset receivedTime, decimal latitude, decimal longitude, bool shouldStore = true, bool shouldUseResolver = false) { var locations = MockHelpers.CreateMockLocationDbSet(GoodLocations); var context = CreateMockLocationContext(locations.Object); var imeiService = CreateMockIMEIService(); var container = new UnityContainer(); container.RegisterInstance(imeiService.Object); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); var service = new LocationService(context.Object, shouldUseResolver ? null : imeiService.Object); await service.RegisterLocation(imei.IMEI, readingTime, receivedTime, latitude, longitude); if (shouldStore) { locations.Verify(l => l.Add(It.Is <LocationRecord>(lr => ValidateLocationRecord(lr, imei, latitude, longitude, readingTime, receivedTime)))); context.Verify(c => c.SaveChangesAsync()); } }
private async Task GetFromId(int id, IMEIToCallsign expectedResult) { var imeis = CreateMockIMEIDbSet(); var context = CreateMockIMEIContext(imeis.Object); var locationService = CreateMockLocationService(); var service = new IMEIService(context.Object, locationService.Object); var res = await service.GetFromId(id); if (expectedResult == null) { Assert.Null(res); } else { Assert.Equal(expectedResult.Id, res.Id); Assert.Equal(expectedResult.CallSign, res.CallSign); Assert.Equal(expectedResult.IMEI, res.IMEI); Assert.Equal(expectedResult.Type, res.Type); } }
/// <summary> /// Asynchronously registers an IMEI to callsign relationship with the service. /// </summary> /// <param name="imei">The IMEI to register.</param> /// <param name="callsign">The associated callsign.</param> /// <param name="type">The type of vehicle the callsign is attached to.</param> /// <returns></returns> public async Task RegisterCallsign(string imei, string callsign = null, VehicleType?type = null) { if (imei == null) { throw new ArgumentNullException(nameof(imei)); } if (string.IsNullOrWhiteSpace(imei)) { throw new ArgumentException("{0} must not be empty or only whitespace", nameof(imei)); } var iToC = await _dataContext.IMEIToCallsigns.FirstOrDefaultAsync(i => i.IMEI == imei); if (iToC != null) { if (!string.IsNullOrWhiteSpace(callsign)) { await LocationService.ExpireLocation(iToC.CallSign); } iToC.CallSign = string.IsNullOrWhiteSpace(callsign) ? iToC.CallSign : callsign; iToC.Type = type ?? iToC.Type; await _dataContext.SaveChangesAsync(); } else { iToC = new IMEIToCallsign { CallSign = callsign ?? DefaultCallsign, IMEI = imei, Type = type ?? VehicleType.Unknown }; _dataContext.IMEIToCallsigns.Add(iToC); await _dataContext.SaveChangesAsync(); } }
private async Task GetFromIMEI(string imei, IMEIToCallsign expectedResult = null, bool shouldReturn = true, bool shouldRegister = false) { var imeis = CreateMockIMEIDbSet(); var context = CreateMockIMEIContext(imeis.Object); var locationService = CreateMockLocationService(); var service = new IMEIService(context.Object, locationService.Object); var res = await service.GetFromIMEI(imei); if (shouldRegister) { imeis.Verify(i => i.Add(It.Is <IMEIToCallsign>(c => c.IMEI == imei && c.CallSign == IMEIService.DefaultCallsign && c.Type == VehicleType.Unknown))); locationService.Verify(s => s.ExpireLocation(IMEIService.DefaultCallsign), Times.Never); context.Verify(c => c.SaveChangesAsync()); } else { imeis.Verify(i => i.Add(It.IsAny <IMEIToCallsign>()), Times.Never); locationService.Verify(s => s.ExpireLocation(It.IsAny <string>()), Times.Never); context.Verify(c => c.SaveChangesAsync(), Times.Never); } if (shouldReturn) { Assert.NotNull(res); Assert.NotNull(expectedResult); if (!shouldRegister) { // If the system is expected to register the item, ID won't have been generated Assert.Equal(expectedResult.Id, res.Id); } Assert.Equal(expectedResult.CallSign, res.CallSign); Assert.Equal(expectedResult.IMEI, res.IMEI); Assert.Equal(expectedResult.Type, res.Type); } }
private async Task PostIMEIToCallsign(string callsign, string imei, VehicleType type, ResultType expectedResult = ResultType.Success) { var service = CreateMockIMEIService(); var logService = CreateMockLogService(); var controller = new IMEIController(service.Object, logService.Object); var config = new Mock <HttpConfiguration>(); var principal = MockHelpers.CreateMockPrincipal(TestUsername); controller.User = principal.Object; controller.Configuration = config.Object; var imeiToCallsign = new IMEIToCallsign { CallSign = callsign, IMEI = imei, Type = type }; MockHelpers.Validate(imeiToCallsign, controller); var res = await controller.Post(imeiToCallsign); switch (expectedResult) { case ResultType.ModelError: Assert.IsType <InvalidModelStateResult>(res); logService.Verify(l => l.LogIMEIRegistered(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <VehicleType>()), Times.Never); break; case ResultType.Success: Assert.IsType <CreatedODataResult <IMEIToCallsign> >(res); service.Verify(i => i.RegisterCallsign(imei, callsign, type)); logService.Verify(l => l.LogIMEIRegistered(TestUsername, imei, callsign, type)); break; } }
private async Task GetFromIdQueryable(int id, IMEIToCallsign expectedResult) { var imeis = CreateMockIMEIDbSet(); var context = CreateMockIMEIContext(imeis.Object); var locationService = CreateMockLocationService(); var service = new IMEIService(context.Object, locationService.Object); var res = await service.GetFromIdQueryable(id); Assert.IsAssignableFrom<IQueryable<IMEIToCallsign>>(res); if (expectedResult == null) { Assert.False(res.Any()); } else { Assert.Equal(1, res.Count()); var actual = res.First(); Assert.Equal(expectedResult.Id, actual.Id); Assert.Equal(expectedResult.CallSign, actual.CallSign); Assert.Equal(expectedResult.IMEI, actual.IMEI); Assert.Equal(expectedResult.Type, actual.Type); } }
public IMEIServiceTests() { GoodCallsigns = new List<IMEIToCallsign>(Fixture.CreateMany<IMEIToCallsign>()); GoodCallsign = GoodCallsigns.First(); BadCallsign = Fixture.Create<IMEIToCallsign>(); }
private async Task GetFromIMEI(string imei, IMEIToCallsign expectedResult = null, bool shouldReturn = true, bool shouldRegister = false) { var imeis = CreateMockIMEIDbSet(); var context = CreateMockIMEIContext(imeis.Object); var locationService = CreateMockLocationService(); var service = new IMEIService(context.Object, locationService.Object); var res = await service.GetFromIMEI(imei); if (shouldRegister) { imeis.Verify(i => i.Add(It.Is<IMEIToCallsign>(c => c.IMEI == imei && c.CallSign == IMEIService.DefaultCallsign && c.Type == VehicleType.Unknown))); locationService.Verify(s => s.ExpireLocation(IMEIService.DefaultCallsign), Times.Never); context.Verify(c => c.SaveChangesAsync()); } else { imeis.Verify(i => i.Add(It.IsAny<IMEIToCallsign>()), Times.Never); locationService.Verify(s => s.ExpireLocation(It.IsAny<string>()), Times.Never); context.Verify(c => c.SaveChangesAsync(), Times.Never); } if (shouldReturn) { Assert.NotNull(res); Assert.NotNull(expectedResult); if (!shouldRegister) { // If the system is expected to register the item, ID won't have been generated Assert.Equal(expectedResult.Id, res.Id); } Assert.Equal(expectedResult.CallSign, res.CallSign); Assert.Equal(expectedResult.IMEI, res.IMEI); Assert.Equal(expectedResult.Type, res.Type); } }
private static void ConfirmDelete(Mock <DbSet <IMEIToCallsign> > imeis, Mock <IIMEIContext> context, Mock <ILocationService> locationService, IMEIToCallsign imeiObj, bool tryDelete) { if (tryDelete) { imeis.Verify(i => i.Remove(imeiObj)); locationService.Verify(s => s.ExpireLocation(imeiObj.CallSign)); context.Verify(c => c.SaveChangesAsync()); } else { imeis.Verify(i => i.Remove(It.IsAny <IMEIToCallsign>()), Times.Never); locationService.Verify(s => s.ExpireLocation(It.IsAny <string>()), Times.Never); context.Verify(c => c.SaveChangesAsync(), Times.Never); } }
/// <summary> /// Asynchronously registers an IMEI to callsign relationship with the service. /// </summary> /// <param name="imei">The IMEI to register.</param> /// <param name="callsign">The associated callsign.</param> /// <param name="type">The type of vehicle the callsign is attached to.</param> /// <returns></returns> public async Task RegisterCallsign(string imei, string callsign = null, VehicleType? type = null) { if (imei == null) throw new ArgumentNullException(nameof(imei)); if (string.IsNullOrWhiteSpace(imei)) throw new ArgumentException("{0} must not be empty or only whitespace", nameof(imei)); var iToC = await _dataContext.IMEIToCallsigns.FirstOrDefaultAsync(i => i.IMEI == imei); if (iToC != null) { if (!string.IsNullOrWhiteSpace(callsign)) { await LocationService.ExpireLocation(iToC.CallSign); } iToC.CallSign = string.IsNullOrWhiteSpace(callsign) ? iToC.CallSign : callsign; iToC.Type = type ?? iToC.Type; await _dataContext.SaveChangesAsync(); } else { iToC = new IMEIToCallsign { CallSign = callsign ?? DefaultCallsign, IMEI = imei, Type = type ?? VehicleType.Unknown }; _dataContext.IMEIToCallsigns.Add(iToC); await _dataContext.SaveChangesAsync(); } }
private async Task RegisterCallsignCreate(string imei, string callsign, VehicleType? type, bool shouldCreate = true) { var imeis = CreateMockIMEIDbSet(); var context = CreateMockIMEIContext(imeis.Object); var locationService = CreateMockLocationService(); var service = new IMEIService(context.Object, locationService.Object); await service.RegisterCallsign(imei, callsign, type); if (shouldCreate) { var expectedItem = new IMEIToCallsign { IMEI = imei, CallSign = callsign ?? IMEIService.DefaultCallsign, Type = type ?? VehicleType.Unknown }; imeis.Verify(i => i.Add(It.Is<IMEIToCallsign>(c => c.IMEI == expectedItem.IMEI && c.CallSign == expectedItem.CallSign && c.Type == expectedItem.Type))); context.Verify(c => c.SaveChangesAsync()); } else { imeis.Verify(i => i.Add(It.IsAny<IMEIToCallsign>()), Times.Never); context.Verify(c => c.SaveChangesAsync(), Times.Never); } }
private async Task PostIMEIToCallsign(string callsign, string imei, VehicleType type, ResultType expectedResult = ResultType.Success) { var service = CreateMockIMEIService(); var logService = CreateMockLogService(); var controller = new IMEIController(service.Object, logService.Object); var config = new Mock<HttpConfiguration>(); var principal = MockHelpers.CreateMockPrincipal(TestUsername); controller.User = principal.Object; controller.Configuration = config.Object; var imeiToCallsign = new IMEIToCallsign { CallSign = callsign, IMEI = imei, Type = type }; MockHelpers.Validate(imeiToCallsign, controller); var res = await controller.Post(imeiToCallsign); switch (expectedResult) { case ResultType.ModelError: Assert.IsType<InvalidModelStateResult>(res); logService.Verify(l => l.LogIMEIRegistered(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<VehicleType>()), Times.Never); break; case ResultType.Success: Assert.IsType<CreatedODataResult<IMEIToCallsign>>(res); service.Verify(i => i.RegisterCallsign(imei, callsign, type)); logService.Verify(l => l.LogIMEIRegistered(TestUsername, imei, callsign, type)); break; } }
private async Task RegisterCallsignUpdate(string imei, string callsign, VehicleType? type, IMEIToCallsign linkedObject, bool shouldUpdate = true) { var oldValues = new IMEIToCallsign { CallSign = linkedObject.CallSign, Id = linkedObject.Id, IMEI = linkedObject.IMEI, Type = linkedObject.Type }; var imeis = CreateMockIMEIDbSet(); var context = CreateMockIMEIContext(imeis.Object); var locationService = CreateMockLocationService(); var service = new IMEIService(context.Object, locationService.Object); await service.RegisterCallsign(imei, callsign, type); if (string.IsNullOrWhiteSpace(callsign)) { locationService.Verify(l => l.ExpireLocation(It.IsAny<string>()), Times.Never); } else { locationService.Verify(l => l.ExpireLocation(oldValues.CallSign)); } if (shouldUpdate) { Assert.Equal(imei, linkedObject.IMEI); Assert.Equal(string.IsNullOrWhiteSpace(callsign) ? oldValues.CallSign : callsign, linkedObject.CallSign); Assert.Equal(type ?? oldValues.Type, linkedObject.Type); context.Verify(c => c.SaveChangesAsync()); } else { Assert.Equal(imei, linkedObject.IMEI); Assert.Equal(oldValues.CallSign, linkedObject.CallSign); Assert.Equal(oldValues.Type, linkedObject.Type); context.Verify(c => c.SaveChangesAsync(), Times.Never); } }
/// <summary> /// Deletes the provided IMEIToCallsign relationship from the data context. /// </summary> /// <param name="imei">The IMEI to delete.</param> /// This method will not return an error if the IMEI is null or does not exist. /// It will also trigger any location reports in the data context associated with that callsign /// to be expired to try and cut down on duplicate reports. private async Task DeleteIMEI(IMEIToCallsign imei) { if (imei == null) return; await LocationService.ExpireLocation(imei.CallSign); _dataContext.IMEIToCallsigns.Remove(imei); await _dataContext.SaveChangesAsync(); }
private static void ConfirmDelete(Mock<DbSet<IMEIToCallsign>> imeis, Mock<IIMEIContext> context, Mock<ILocationService> locationService, IMEIToCallsign imeiObj, bool tryDelete) { if (tryDelete) { imeis.Verify(i => i.Remove(imeiObj)); locationService.Verify(s => s.ExpireLocation(imeiObj.CallSign)); context.Verify(c => c.SaveChangesAsync()); } else { imeis.Verify(i => i.Remove(It.IsAny<IMEIToCallsign>()), Times.Never); locationService.Verify(s => s.ExpireLocation(It.IsAny<string>()), Times.Never); context.Verify(c => c.SaveChangesAsync(), Times.Never); } }
private static bool ValidateLocationRecord(LocationRecord record, IMEIToCallsign imei, decimal latitude, decimal longitude, DateTimeOffset readingTime, DateTimeOffset receivedTime) { Assert.Equal(latitude, record.Latitude); Assert.Equal(longitude, record.Longitude); Assert.Equal(readingTime, record.ReadingTime); Assert.Equal(receivedTime, record.ReceiveTime); Assert.Equal(imei.CallSign, record.Callsign); Assert.Equal(imei.Type, record.Type); return true; }
public IMEIServiceTests() { GoodCallsigns = new List <IMEIToCallsign>(Fixture.CreateMany <IMEIToCallsign>()); GoodCallsign = GoodCallsigns.First(); BadCallsign = Fixture.Create <IMEIToCallsign>(); }
private async Task RegisterLocation(IMEIToCallsign imei, DateTimeOffset readingTime, DateTimeOffset receivedTime, decimal latitude, decimal longitude, bool shouldStore = true, bool shouldUseResolver = false) { var locations = MockHelpers.CreateMockLocationDbSet(GoodLocations); var context = CreateMockLocationContext(locations.Object); var imeiService = CreateMockIMEIService(); var container = new UnityContainer(); container.RegisterInstance(imeiService.Object); DependencyResolver.SetResolver(new UnityDependencyResolver(container)); var service = new LocationService(context.Object, shouldUseResolver ? null : imeiService.Object); await service.RegisterLocation(imei.IMEI, readingTime, receivedTime, latitude, longitude); if (shouldStore) { locations.Verify(l => l.Add(It.Is<LocationRecord>(lr => ValidateLocationRecord(lr, imei, latitude, longitude, readingTime, receivedTime)))); context.Verify(c => c.SaveChangesAsync()); } }