public async Task PutAsync_BadRequestWithNoUserMessage()
        {
            // Arrange
            AreaMatch requestObj = new AreaMatch();

            requestObj.Areas.Add(new Area
            {
                BeginTime = 0,
                EndTime   = 1,
                Location  = new Location
                {
                    Latitude  = 10.1234,
                    Longitude = 10.1234
                },
                RadiusMeters = 100
            });

            // Act
            ActionResult controllerResponse = await this._controller
                                              .PutAsync(requestObj, CancellationToken.None);

            // Assert
            Assert.IsNotNull(controllerResponse);
            Assert.IsInstanceOfType(controllerResponse, typeof(BadRequestObjectResult));
        }
        public async Task PutAsync_OkWithValidInputs()
        {
            // Arrange
            AreaMatch requestObj = new AreaMatch
            {
                UserMessage = "User message content"
            };

            requestObj.Areas.Add(new Area
            {
                BeginTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                EndTime   = DateTimeOffset.UtcNow.AddHours(1).ToUnixTimeMilliseconds(),
                Location  = new Location
                {
                    Latitude  = 10.1234,
                    Longitude = 10.1234
                },
                RadiusMeters = 100
            });

            // Act
            ActionResult controllerResponse = await this._controller
                                              .PutAsync(requestObj, CancellationToken.None);

            // Assert
            Assert.IsNotNull(controllerResponse);
            Assert.IsInstanceOfType(controllerResponse, typeof(OkResult));
        }
Example #3
0
        public async Task PublishAreaAsync_SucceedsOnValidInputs()
        {
            // Arrange
            AreaMatch request = new AreaMatch();

            request.Areas.Add(new Area
            {
                BeginTime = 0,
                EndTime   = 1,
                Location  = new Location
                {
                    Latitude  = 10.1234,
                    Longitude = -10.1234
                },
                RadiusMeters = 100
            });
            request.UserMessage = "Test user message!";
            string repoResponse = "00000000-0000-0000-0000-0000000000000";

            this._repo
            .Setup(r => r.InsertAsync(It.IsAny <MatchMessage>(), It.IsAny <Region>(), CancellationToken.None))
            .Returns(Task.FromResult(repoResponse));

            // Act
            await this._service.PublishAreaAsync(request, CancellationToken.None);

            // Assert
            // No exceptions thrown
        }
Example #4
0
        /// <inheritdoc/>
        public async Task PublishAreaAsync(AreaMatch areaMatch, CancellationToken cancellationToken = default)
        {
            // Validate inputs
            if (areaMatch == null)
            {
                throw new ArgumentNullException(nameof(areaMatch));
            }

            RequestValidationResult validationResult = areaMatch.Validate();

            if (validationResult.Passed)
            {
                // Build a MatchMessage containing the submitted areas
                MatchMessage message = new MatchMessage();
                message.AreaMatches.Add(areaMatch);

                // Define a regions for the published message
                IEnumerable <Region> messageRegions = RegionHelper.GetRegionsCoverage(areaMatch.Areas, this.RegionPrecision);

                // Publish
                await this._messageRepo.InsertAsync(message, messageRegions, cancellationToken);
            }
            else
            {
                throw new RequestValidationFailedException(validationResult);
            }
        }
Example #5
0
        public async Task PublishAsync_SucceedsOnValidMessage()
        {
            // Arrange
            string repoResponse = "00000000-0000-0000-0000-000000000001";
            Region region       = new Region
            {
                LatitudePrefix  = 10.1234,
                LongitudePrefix = -10.1234,
                Precision       = 4
            };
            MatchMessage request   = new MatchMessage();
            AreaMatch    areaMatch = new AreaMatch
            {
                UserMessage = "Test user message"
            };

            areaMatch.Areas.Add(new Area
            {
                BeginTime = 0,
                EndTime   = 1,
                Location  = new Location
                {
                    Latitude  = 10.1234,
                    Longitude = -10.1234
                },
                RadiusMeters = 100
            });
            request.AreaMatches.Add(areaMatch);
            BluetoothMatch btMatch = new BluetoothMatch
            {
                UserMessage = "Test BL message"
            };

            btMatch.Seeds.Add(new BlueToothSeed
            {
                Seed              = "00000000-0000-0000-0000-000000000000",
                SequenceEndTime   = 1,
                SequenceStartTime = 0
            });
            request.BluetoothMatches.Add(btMatch);

            this._repo
            .Setup(r => r.InsertAsync(It.IsAny <MatchMessage>(), It.IsAny <Region>(), CancellationToken.None))
            .Returns(Task.FromResult(repoResponse));

            // Act
            string result = await this._service
                            .PublishAsync(request, region, CancellationToken.None);

            // Assert
            Assert.IsNotNull(result);
            Assert.AreEqual(repoResponse, result);
        }
        public async Task PutAsync_BadRequestObjectWithNoAreas()
        {
            // Arrange
            AreaMatch requestObj = new AreaMatch
            {
                UserMessage = "This is a message"
            };

            // Act
            ActionResult controllerResponse = await this._controller
                                              .PutAsync(requestObj, CancellationToken.None);

            // Assert
            Assert.IsNotNull(controllerResponse);
            Assert.IsInstanceOfType(controllerResponse, typeof(BadRequestObjectResult));
        }
        public async Task <ActionResult> PutAsync([Required] AreaMatch request, CancellationToken cancellationToken = default)
        {
            try
            {
                // Publish area
                await this._messageService.PublishAreaAsync(request, cancellationToken);

                return(Ok());
            }
            catch (RequestValidationFailedException ex)
            {
                // Only return validation issues
                return(BadRequest(ex.ValidationResult));
            }
            catch (ArgumentNullException)
            {
                return(BadRequest());
            }
        }
Example #8
0
        public async Task PublishAsync_ArgumentNullOnNullRegion()
        {
            // Arrange
            MatchMessage request   = new MatchMessage();
            AreaMatch    areaMatch = new AreaMatch
            {
                UserMessage = "Test user message"
            };

            areaMatch.Areas.Add(new Area
            {
                BeginTime = 0,
                EndTime   = 1,
                Location  = new Location
                {
                    Latitude  = 10.1234,
                    Longitude = -10.1234
                },
                RadiusMeters = 100
            });
            request.AreaMatches.Add(areaMatch);
            BluetoothMatch btMatch = new BluetoothMatch
            {
                UserMessage = "Test BL message"
            };

            btMatch.Seeds.Add(new BlueToothSeed
            {
                Seed              = "00000000-0000-0000-0000-000000000000",
                SequenceEndTime   = 1,
                SequenceStartTime = 0
            });
            request.BluetoothMatches.Add(btMatch);

            // Act
            string result = await this._service
                            .PublishAsync(request, null, CancellationToken.None);

            // Assert
            // Exception caught by decorator
        }
        public async Task <ActionResult> PutAsync([Required] AreaMatch request, CancellationToken cancellationToken = default)
        {
            try
            {
                // Parse AreaMatch to AreaReport type
                NarrowcastMessage report = this._map.Map <NarrowcastMessage>(request);

                // Publish area
                await this._reportService.PublishAreaAsync(report, cancellationToken);

                return(Ok());
            }
            catch (RequestValidationFailedException ex)
            {
                // Only return validation issues
                return(BadRequest(ex.ValidationResult));
            }
            catch (ArgumentNullException)
            {
                return(BadRequest());
            }
        }