Exemplo n.º 1
0
        public async Task <ActionResult> PutAsync(SelfReportRequest request, CancellationToken cancellationToken = default)
        {
            // Get server timestamp at request immediately
            long serverTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();

            try
            {
                // Parse request
                Entities.Geospatial.Region         region = this._map.Map <Entities.Geospatial.Region>(request.Region);
                IEnumerable <BluetoothSeedMessage> seeds  = request.Seeds
                                                            .Select(s => this._map.Map <BluetoothSeedMessage>(s));

                // Store submitted data
                await this._reportService.PublishAsync(seeds, region, serverTimestamp, cancellationToken);

                return(Ok());
            }
            catch (RequestValidationFailedException ex)
            {
                // Only return validation results
                return(BadRequest(ex.ValidationResult));
            }
            catch (ArgumentNullException)
            {
                return(BadRequest());
            }
        }
        public async Task PutAsync_BadRequestObjectWithInvalidSeed()
        {
            // Arrange
            SelfReportRequest requestObj = new SelfReportRequest
            {
                Region = new Region
                {
                    LatitudePrefix  = 10.1234,
                    LongitudePrefix = 10.1234,
                    Precision       = 4
                }
            };

            requestObj.Seeds.Add(new BlueToothSeed
            {
                Seed              = "Invalid seed format!",
                SequenceEndTime   = 1,
                SequenceStartTime = 0
            });

            // 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
            SelfReportRequest requestObj = new SelfReportRequest
            {
                Region = new Region
                {
                    LatitudePrefix  = 10.1234,
                    LongitudePrefix = 10.1234,
                    Precision       = 4
                }
            };

            requestObj.Seeds.Add(new BlueToothSeed
            {
                SequenceEndTime   = DateTimeOffset.UtcNow.AddHours(1).ToUnixTimeMilliseconds(),
                SequenceStartTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(),
                Seed = "00000000-0000-0000-0000-000000000001"
            });

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

            // Assert
            Assert.IsNotNull(controllerResponse);
            Assert.IsInstanceOfType(controllerResponse, typeof(OkResult));
        }
Exemplo n.º 4
0
        /// <inheritdoc/>
        public async Task <string> PublishAsync(SelfReportRequest request, long timeAtRequest, CancellationToken cancellationToken = default)
        {
            // Validate inputs
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            RequestValidationResult validationResult = request.Validate();

            validationResult.Combine(Validator.ValidateTimestamp(timeAtRequest));

            if (validationResult.Passed)
            {
                // Build MatchMessage from submitted content
                MatchMessage   message = new MatchMessage();
                BluetoothMatch matches = new BluetoothMatch();
                matches.Seeds.AddRange(request.Seeds);

                // Store in data repository
                message.BluetoothMatches.Add(matches);
                return(await this._messageRepo.InsertAsync(message, request.Region, cancellationToken));
            }
            else
            {
                throw new RequestValidationFailedException(validationResult);
            }
        }
        public async Task PutAsync_BadRequestObjectWithNoRegion()
        {
            // Arrange
            SelfReportRequest requestObj = new SelfReportRequest();

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

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

            // Assert
            Assert.IsNotNull(controllerResponse);
            Assert.IsInstanceOfType(controllerResponse, typeof(BadRequestObjectResult));
        }
Exemplo n.º 6
0
        public async Task PutAsync_BadRequestWithNoRegion()
        {
            // Arrange
            SelfReportRequest requestObj = new SelfReportRequest();

            requestObj.Seeds.Add(new BlueToothSeed
            {
                Seed              = "00000000-0000-0000-0000-000000000001",
                SequenceEndTime   = DateTimeOffset.UtcNow.AddHours(1).ToUnixTimeMilliseconds(),
                SequenceStartTime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
            });

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

            // Assert
            Assert.IsNotNull(controllerResponse);
            Assert.IsInstanceOfType(controllerResponse, typeof(BadRequestResult));
        }
        public async Task PutAsync_BadRequestObjectWithNoSeeds()
        {
            // Arrange
            SelfReportRequest requestObj = new SelfReportRequest
            {
                Region = new Region
                {
                    LatitudePrefix  = 10.1234,
                    LongitudePrefix = 10.1234,
                    Precision       = 4
                }
            };

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

            // Assert
            Assert.IsNotNull(controllerResponse);
            Assert.IsInstanceOfType(controllerResponse, typeof(BadRequestObjectResult));
        }
Exemplo n.º 8
0
        public async Task <ActionResult> PutAsync(SelfReportRequest request, CancellationToken cancellationToken = default)
        {
            // Get server timestamp at request immediately
            long serverTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();

            try
            {
                await this._messageService.PublishAsync(request, serverTimestamp, cancellationToken);

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