DeviceBridgeTests/Controllers/MessagesControllerTests.cs (47 lines of code) (raw):
// Copyright (c) Microsoft Corporation. All rights reserved.
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using DeviceBridge.Models;
using DeviceBridge.Services;
using Microsoft.AspNetCore.Mvc;
using Moq;
using NLog;
using NUnit.Framework;
namespace DeviceBridge.Controllers.Tests
{
[TestFixture]
public class MessagesControllerTests
{
private const string MockDeviceId = "test-device";
private Mock<IBridgeService> _bridgeServiceMock;
private MessagesController _messagesController;
[SetUp]
public void Setup()
{
_bridgeServiceMock = new Mock<IBridgeService>();
_messagesController = new MessagesController(LogManager.GetCurrentClassLogger(), _bridgeServiceMock.Object);
}
[Test]
[Description("SendTelemetry should convert creation time to UTC, call BridgeService.SendTelemetry, and return a 200 Ok")]
public async Task SendMessage()
{
var mockBody = new MessageBody()
{
ComponentName = "MyComponent",
CreationTimeUtc = DateTime.Parse("02/10/2018 11:25:27 +08:00"),
Properties = new Dictionary<string, string>()
{
{ "prop", "val" },
},
Data = new Dictionary<string, object>()
{
{ "temperature", 4 },
},
};
var result = await _messagesController.SendMessage(MockDeviceId, mockBody);
Assert.That(result, Is.InstanceOf<OkResult>());
_bridgeServiceMock.Verify(p => p.SendTelemetry(It.IsAny<Logger>(), MockDeviceId, mockBody.Data, default, mockBody.Properties, mockBody.ComponentName, It.Is<DateTime>(d => d == mockBody.CreationTimeUtc && d.Kind == DateTimeKind.Utc)), Times.Once);
}
}
}