/// <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 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 <ActionResult <IEnumerable <MatchMessage> > > PostAsync([FromBody] MessageRequest request, CancellationToken cancellationToken = default) { try { // Submit request IEnumerable <MessageContainer> reports = await this._reportService .GetByIdsAsync( request.RequestedQueries.Select(r => r.MessageId), cancellationToken ); // Map MatchMessage types List <MatchMessage> messages = new List <MatchMessage>(); foreach (MessageContainer report in reports) { MatchMessage result = this._map.Map <MatchMessage>(report); // Get BLEs BluetoothMatch match = new BluetoothMatch(); match.Seeds.AddRange( report.BluetoothSeeds.Select(s => this._map.Map <BlueToothSeed>(s)) ); // Add converted BLE match result.BluetoothMatches.Add(match); // Add converted MatchMessage messages.Add(result); } // Return as expected proto type return(Ok(messages)); } catch (RequestValidationFailedException ex) { // Only return validation results return(BadRequest(ex.ValidationResult)); } catch (ArgumentNullException) { return(BadRequest()); } }
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 }