diff --git a/WotBlitzStatisticsPro.Blazor.Tests/Services/GraphQlBackendServiceTests.cs b/WotBlitzStatisticsPro.Blazor.Tests/Services/GraphQlBackendServiceTests.cs index 5d7392d..64b711e 100644 --- a/WotBlitzStatisticsPro.Blazor.Tests/Services/GraphQlBackendServiceTests.cs +++ b/WotBlitzStatisticsPro.Blazor.Tests/Services/GraphQlBackendServiceTests.cs @@ -92,7 +92,7 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services players.Should().NotBeNull(); players.Should().NotBeEmpty(); _findPlayersQueryMock.Verify(q => q.ExecuteAsync(expectedSearch, expectedRealm, It.IsAny(), It.IsAny()), Times.Once); - _notificationServiceMock.Verify(n => n.ReportError(It.IsAny(), It.IsAny()), Times.Never); + _notificationServiceMock.Verify(n => n.ReportError(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] @@ -107,7 +107,7 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services players.Should().BeNull(); _findPlayersQueryMock.Verify(q => q.ExecuteAsync(expectedSearch, expectedRealm, It.IsAny(), It.IsAny()), Times.Once); - _notificationServiceMock.Verify(n => n.ReportError(It.IsAny(), It.IsAny()), Times.Once); + _notificationServiceMock.Verify(n => n.ReportError(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } @@ -123,7 +123,7 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services clans.Should().NotBeNull(); clans.Should().NotBeEmpty(); _findClanQueryMock.Verify(q => q.ExecuteAsync(expectedSearch, expectedRealm, It.IsAny(), It.IsAny()), Times.Once); - _notificationServiceMock.Verify(n => n.ReportError(It.IsAny(), It.IsAny()), Times.Never); + _notificationServiceMock.Verify(n => n.ReportError(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } @@ -139,7 +139,7 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services players.Should().BeNull(); _findClanQueryMock.Verify(q => q.ExecuteAsync(expectedSearch, expectedRealm, It.IsAny(), It.IsAny()), Times.Once); - _notificationServiceMock.Verify(n => n.ReportError(It.IsAny(), It.IsAny()), Times.Once); + _notificationServiceMock.Verify(n => n.ReportError(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } [Test] @@ -156,7 +156,7 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services playerInfoResponse.achievementsBySection.Should().NotBeEmpty(); _playerQueryMock.Verify(q => q.ExecuteAsync(CurrentAccountId, expectedRealm, It.IsAny(), It.IsAny()), Times.Once); - _notificationServiceMock.Verify(n => n.ReportError(It.IsAny(), It.IsAny()), Times.Never); + _notificationServiceMock.Verify(n => n.ReportError(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } [Test] @@ -172,7 +172,7 @@ namespace WotBlitzStatisticsPro.Blazor.Tests.Services playerInfoResponse.achievementsBySection.Should().BeNull(); _playerQueryMock.Verify(q => q.ExecuteAsync(CurrentAccountId, expectedRealm, It.IsAny(), It.IsAny()), Times.Once); - _notificationServiceMock.Verify(n => n.ReportError(It.IsAny(), It.IsAny()), Times.Once); + _notificationServiceMock.Verify(n => n.ReportError(It.IsAny(), It.IsAny(), It.IsAny()), Times.Once); } private async Task SetUpFindPlayers() diff --git a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoLayoutBase.cs b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoLayoutBase.cs index 9fe4ff3..4fa15ef 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoLayoutBase.cs +++ b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoLayoutBase.cs @@ -57,7 +57,7 @@ namespace WotBlitzStatisticsPro.Blazor.Pages } catch (System.Exception e) { - Notifications.ReportError("Can not get data from backend", e.Message); + Notifications.ReportError("Can not get data from backend", e.Message, e.StackTrace); } } } diff --git a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs index bf3be93..32b0cc3 100644 --- a/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs +++ b/WotBlitzStatisticsPro.Blazor/Pages/PlayerInfoTanksTreeBase.cs @@ -76,7 +76,7 @@ namespace WotBlitzStatisticsPro.Blazor.Pages { TreeItems.Clear(); Connections.Clear(); - var vehiclesTree = VehiclesLibrary.Where(v => v.IsPremium == false).ToList(); + var vehiclesTree = VehiclesLibrary?.Where(v => v != null && v.IsPremium == false).ToList(); for (int tier = 1; tier < 11; tier++) { var vehiclesByTier = vehiclesTree.Where(v => v.Tier == tier).ToList(); @@ -279,7 +279,7 @@ namespace WotBlitzStatisticsPro.Blazor.Pages } catch (System.Exception e) { - Notifications.ReportError("Can not get data from backend", e.Message); + Notifications.ReportError("Can not get data from backend", e.Message, e.StackTrace); } } diff --git a/WotBlitzStatisticsPro.Blazor/Services/GraphQlBackendService.cs b/WotBlitzStatisticsPro.Blazor/Services/GraphQlBackendService.cs index 0207389..6270a51 100644 --- a/WotBlitzStatisticsPro.Blazor/Services/GraphQlBackendService.cs +++ b/WotBlitzStatisticsPro.Blazor/Services/GraphQlBackendService.cs @@ -132,6 +132,10 @@ namespace WotBlitzStatisticsPro.Blazor.Services { messages.Add(message.ToString()); } + else + { + messages.Add(realError); + } } } } @@ -140,7 +144,7 @@ namespace WotBlitzStatisticsPro.Blazor.Services if (messages.Count > 0) { - _notificationsService.ReportError("Backend error",string.Join(";", messages)); + _notificationsService.ReportError("Backend error",string.Join(";", messages), null); } } } diff --git a/WotBlitzStatisticsPro.Blazor/Services/INotificationsService.cs b/WotBlitzStatisticsPro.Blazor/Services/INotificationsService.cs index 54cfceb..773249d 100644 --- a/WotBlitzStatisticsPro.Blazor/Services/INotificationsService.cs +++ b/WotBlitzStatisticsPro.Blazor/Services/INotificationsService.cs @@ -14,6 +14,6 @@ namespace WotBlitzStatisticsPro.Blazor.Services void ReportInfo(string summary, string message); void ReportWarning(string summary, string message); - void ReportError(string summary, string message); + void ReportError(string summary, string message, string? stacktrace); } } \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Blazor/Services/NotificationsService.cs b/WotBlitzStatisticsPro.Blazor/Services/NotificationsService.cs index 0bbfae5..0dfde7e 100644 --- a/WotBlitzStatisticsPro.Blazor/Services/NotificationsService.cs +++ b/WotBlitzStatisticsPro.Blazor/Services/NotificationsService.cs @@ -39,13 +39,14 @@ namespace WotBlitzStatisticsPro.Blazor.Services _jsRuntime.InvokeVoidAsync("console.warn", summary, message); } - public void ReportError(string summary, string message) + public void ReportError(string summary, string message, string? stacktrace) { Type = NotificationType.Error; Message = message; Summary = summary; MessageArrived?.Invoke(); - _jsRuntime.InvokeVoidAsync("console.error", summary, message); + Console.WriteLine(message); + _jsRuntime.InvokeVoidAsync("console.error", summary, string.IsNullOrEmpty(stacktrace) ? message : $"{message}; {stacktrace}"); } } } \ No newline at end of file diff --git a/WotBlitzStatisticsPro.Logic/Mappers/VehicleDictionaryProfile.cs b/WotBlitzStatisticsPro.Logic/Mappers/VehicleDictionaryProfile.cs index 534d295..90b9b61 100644 --- a/WotBlitzStatisticsPro.Logic/Mappers/VehicleDictionaryProfile.cs +++ b/WotBlitzStatisticsPro.Logic/Mappers/VehicleDictionaryProfile.cs @@ -42,10 +42,10 @@ namespace WotBlitzStatisticsPro.Logic.Mappers CreateMap() .ForMember(v => v.Name, o => o.MapFrom((src, dest, destMember, context) => - src.Name.FirstOrDefault(l => l.Language == (RequestLanguage) context.Items["language"])?.Value)) + src.Name.FirstOrDefault(l => l.Language == (RequestLanguage) context.Items["language"])?.Value ?? string.Empty)) .ForMember(v => v.Description, o => o.MapFrom((src, dest, destMember, context) => - src.Description.FirstOrDefault(l => l.Language == (RequestLanguage) context.Items["language"])?.Value)) + src.Description.FirstOrDefault(l => l.Language == (RequestLanguage) context.Items["language"])?.Value ?? string.Empty)) .ForMember(v => v.NexTanksInTree, o => o.MapFrom(src => src.NexTanksInTree.Select(t => t.TankId).ToList())) ;