using System; using System.Collections.Generic; using System.Threading.Tasks; using NSubstitute; using NUnit.Framework; using Plugin.BLE.Abstractions.Contracts; using TestFramework.Model.Device; using TestFramework.Model.Services.Geolocation; using TestFramework.Model.User.Account; using TestFramework.Services.BluetoothLock; using TINK.Model; using TINK.Model.Bikes; using TINK.Model.Connector; using TINK.Model.Settings; using TINK.Model.Stations.StationNS; using TINK.Model.User; using TINK.Repository; using TINK.Services; using TINK.Services.BluetoothLock; using TINK.Services.Geolocation; using TINK.Services.Permissions; using TINK.ViewModel; using TINK.ViewModel.Settings; using static TINK.Repository.CopriCallsMemory; namespace TestTINKLib.Fixtures.UseCases.SelectStation { [TestFixture] public class TestTinkApp { /// /// Get all bikes at a given station from copri. /// private static async Task GetBikesAtStation( User user, TINK.Model.Connector.IConnector connector, IEnumerable stations, string selectedStationId) { var l_oBikesAtStation = new BikeCollectionMutable( Substitute.For(), Substitute.For(), () => false /* not connected */, (_) => Substitute.For(), () => Substitute.For()); var l_oBikesAvailable = (await connector.Query.GetBikesAsync()).Response; l_oBikesAtStation.Update(l_oBikesAvailable.GetAtStation(selectedStationId), stations); return l_oBikesAtStation; } [Test] public void TestBikesAtStation_AccountStoreMock_NoUser_CopriMock_Set2() { const string MERCH_ID = "MyMerchId"; var l_oConnector = new ConnectorCache( new AppContextInfo(MERCH_ID, "MyApp", new Version(1, 2)), null /*UI language */, string.Empty, string.Empty, server: new CopriCallsMemory(MERCH_ID, SampleSets.Set2, 1)); var l_oTinkApp = new TinkApp( new Settings( new TINK.ViewModel.Map.GroupFilterMapPage(new Dictionary { { "TINK", FilterState.On } }), new GroupFilterSettings(new Dictionary { { "TINK", FilterState.On }, { "Konrad", FilterState.On } }), new StartupSettings(), new Uri("https://shareeapp-primary.copri-bike.de/APIjsonserver"), new TINK.Settings.PollingParameters(new TimeSpan(10000), true), Serilog.Events.LogEventLevel.Error, activeLockService: typeof(LocksServiceMock).FullName, activeGeolocationService: typeof(GeolocationMock).FullName), new StoreMock(), isConnectedFunc: () => true, connectorFactory: (isConnected, uri, sessionCookie, mail, expiresAfter) => new ConnectorCache(new AppContextInfo(MERCH_ID, "MyApp", new Version(1, 2)), null /*UI language */, sessionCookie, mail, server: new CopriCallsMemory(MERCH_ID, SampleSets.Set2, 1)), merchantId: MERCH_ID, bluetoothService: Substitute.For(), locationPermissionsService: Substitute.For(), locationServicesContainer: Substitute.For>(), locksService: new LocksServiceMock(), // Cipher device: new DeviceMock(), specialFolder: new SpecialFolderMock(), cipher: null, theme: null, currentVersion: new Version(3, 2, 0, 115), lastVersion: new Version(3, 0, 173)); // Current app version. Must be larger or equal 3.0.173 to Assert.AreEqual(0, GetBikesAtStation(l_oTinkApp.ActiveUser, l_oConnector, l_oTinkApp.Stations, l_oTinkApp.SelectedStation.Id).Result.Count); l_oTinkApp.SelectedStation = new TINK.Model.Stations.StationNS.Station("5", new List(), null); Assert.AreEqual(3, GetBikesAtStation(l_oTinkApp.ActiveUser, l_oConnector, l_oTinkApp.Stations, l_oTinkApp.SelectedStation.Id).Result.Count); Assert.AreEqual("25", GetBikesAtStation(l_oTinkApp.ActiveUser, l_oConnector, l_oTinkApp.Stations, l_oTinkApp.SelectedStation.Id).Result.GetById("25").Id); Assert.AreEqual("11", GetBikesAtStation(l_oTinkApp.ActiveUser, l_oConnector, l_oTinkApp.Stations, l_oTinkApp.SelectedStation.Id).Result.GetById("11").Id); Assert.AreEqual("2", GetBikesAtStation(l_oTinkApp.ActiveUser, l_oConnector, l_oTinkApp.Stations, l_oTinkApp.SelectedStation.Id).Result.GetById("2").Id); l_oTinkApp.SelectedStation = new TINK.Model.Stations.StationNS.Station("10", new List(), null); Assert.AreEqual( 1, GetBikesAtStation(l_oTinkApp.ActiveUser, l_oConnector, l_oTinkApp.Stations, l_oTinkApp.SelectedStation.Id).Result.Count); Assert.AreEqual("18", GetBikesAtStation(l_oTinkApp.ActiveUser, l_oConnector, l_oTinkApp.Stations, l_oTinkApp.SelectedStation.Id).Result.GetById("18").Id); l_oTinkApp.SelectedStation = new TINK.Model.Stations.StationNS.Station("91345", new List(), null); Assert.AreEqual(0, GetBikesAtStation(l_oTinkApp.ActiveUser, l_oConnector, l_oTinkApp.Stations, l_oTinkApp.SelectedStation.Id).Result.Count); } } }