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);
            }
        }
示例#3
0
 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);
        }
示例#9
0
        /// <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();
        }
示例#10
0
        // 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);
            }
        }
示例#16
0
        /// <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);
            }
        }
示例#18
0
        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);
     }
 }
        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);
            }
        }
示例#24
0
        /// <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 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 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);
            }
        }
示例#29
0
        /// <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());
            }
        }
        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);
        }