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)); }
/// <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)); }
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)); }
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()); } }