using System; using System.Linq; using NUnit.Framework; using ShareeBike.Model.Bikes.BikeInfoNS.BluetoothLock; using ShareeBike.Services.Geolocation; namespace SharedBusinessLogic.Tests.Fixtures.ObjectTests.Bike.BluetoothLock { [TestFixture] public class TestLockInfoMutable { [Test] public void TestCtor() { var lockInfo = new LockInfoMutable( 1, new Guid("00000000-0000-0000-0000-e57e6b9aee16"), new byte[] { 1, 2, 3 }, // User key new byte[] { 1, 23 }, // Admin key new byte[] { 1, 12 }, // Seed LockingState.Closed); Assert.That(lockInfo.Id, Is.EqualTo(1)); Assert.That(lockInfo.Guid, Is.EqualTo(new Guid("00000000-0000-0000-0000-e57e6b9aee16"))); Assert.That((new byte[] { 1, 2, 3 }).SequenceEqual(lockInfo.UserKey), Is.True); Assert.That((new byte[] { 1, 23 }).SequenceEqual(lockInfo.AdminKey), Is.True); Assert.That((new byte[] { 1, 12 }).SequenceEqual(lockInfo.Seed), Is.True); Assert.That(lockInfo.State, Is.EqualTo(LockingState.Closed)); } [Test] public void TestSetGuid() { var lockInfo = new LockInfoMutable(1, new Guid(), new byte[] { 1, 2, 3 }, new byte[] { 1, 23 }, new byte[] { 1, 12 }, LockingState.Closed); lockInfo.Guid = new Guid("00000000-0000-0000-0000-e57e6b9aee16"); Assert.That(lockInfo.Guid, Is.EqualTo(new Guid("00000000-0000-0000-0000-e57e6b9aee16"))); } [Test] public void TestLoad() { var lockInfo = new LockInfoMutable( 2, new Guid(), new byte[] { 5, 4 }, // User key new byte[] { 14, 223 }, // Admin key new byte[] { 3, 4, 5 }, // Seed LockingState.Closed); lockInfo.Load( 1, new Guid("00000000-0000-0000-0000-e57e6b9aee16"), new byte[] { 1, 12 }, // Seed new byte[] { 1, 2, 3 }, // User key) new byte[] { 1, 23 }); Assert.That(lockInfo.Id, Is.EqualTo(1)); Assert.That(lockInfo.Guid, Is.EqualTo(new Guid("00000000-0000-0000-0000-e57e6b9aee16"))); Assert.That((new byte[] { 1, 2, 3 }).SequenceEqual(lockInfo.UserKey), Is.True); Assert.That((new byte[] { 1, 23 }).SequenceEqual(lockInfo.AdminKey), Is.True); Assert.That((new byte[] { 1, 12 }).SequenceEqual(lockInfo.Seed), Is.True); Assert.That(lockInfo.State, Is.EqualTo(LockingState.Closed)); } [Test] public void TestLastLockingStateChange() => Assert.That( new LockInfoMutable(1, new Guid(), null, null, null, LockingState.Open, () => new DateTime(2023, 03, 13)).LastLockingStateChange, Is.Null); [Test] public void TestLastLockingStateChangeCangeCtor() { var lockInfo = new LockInfoMutable(1, new Guid(), null, null, null, LockingState.Open, () => new DateTime(2023, 03, 13)); lockInfo.State = LockingState.Closed; Assert.That( lockInfo.LastLockingStateChange, Is.EqualTo(new DateTime(2023, 03, 13))); } [Test] public void TestLocationCtor() => Assert.That( new LockInfoMutable(1, new Guid(), null, null, null, LockingState.Open, () => new DateTime(2023, 03, 13)).Location, Is.Null); [Test] public void TestLocation() { var lockInfo = new LockInfoMutable(1, new Guid(), null, null, null, LockingState.Open, () => new DateTime(2023, 03, 13)); lockInfo.Location = new Geolocation.Builder { Latitude = 47.99, Longitude = 7.78}.Build(); // Verify that location is kept because bike might be returned later. Assert.That( lockInfo.Location.Latitude, Is.EqualTo(47.99).Within(0.001)); Assert.That( lockInfo.Location.Longitude, Is.EqualTo(7.78).Within(0.001)); } [Test] public void TestLocationStateChange() { var lockInfo = new LockInfoMutable(1, new Guid(), null, null, null, LockingState.Open, () => new DateTime(2023, 03, 13)); lockInfo.Location = new Geolocation.Builder { Latitude = 47.99, Longitude = 7.78 }.Build(); lockInfo.State = LockingState.Closed; // Verify that location is kept because bike might be returned later. Assert.That( lockInfo.Location, Is.Null); } } }