diff --git a/Directory.Packages.props b/Directory.Packages.props
index 5faf22f..49b280c 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -35,7 +35,7 @@
-
+
diff --git a/PhoneAssistant.Tests/Features/AddItem/AddItemValidatorTests.cs b/PhoneAssistant.Tests/Features/AddItem/AddItemValidatorTests.cs
index a9de5d1..3d63e7d 100644
--- a/PhoneAssistant.Tests/Features/AddItem/AddItemValidatorTests.cs
+++ b/PhoneAssistant.Tests/Features/AddItem/AddItemValidatorTests.cs
@@ -1,4 +1,5 @@
-using FluentValidation.TestHelper;
+using FluentValidation;
+using FluentValidation.TestHelper;
using Moq;
using Moq.AutoMock;
@@ -17,6 +18,12 @@ public sealed class AddItemValidatorTests
public AddItemValidatorTests()
{
_mocker = new AutoMocker();
+ Mock phones = _mocker.GetMock();
+ var validator = new AddItemValidator(phones.Object);
+ var serviceProviderMock = _mocker.GetMock();
+ serviceProviderMock
+ .Setup(sp => sp.GetService(typeof(IValidator)))
+ .Returns(validator);
_validator = _mocker.CreateInstance();
_sut = _mocker.CreateInstance();
}
diff --git a/PhoneAssistant.Tests/Features/AddItem/AddItemViewModelTests.cs b/PhoneAssistant.Tests/Features/AddItem/AddItemViewModelTests.cs
index e18342b..1dc8afe 100644
--- a/PhoneAssistant.Tests/Features/AddItem/AddItemViewModelTests.cs
+++ b/PhoneAssistant.Tests/Features/AddItem/AddItemViewModelTests.cs
@@ -1,52 +1,46 @@
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
-
using CommunityToolkit.Mvvm.Messaging;
-
using FluentValidation;
-
using Moq;
using Moq.AutoMock;
-
using PhoneAssistant.Model;
using PhoneAssistant.Tests.Shared;
using PhoneAssistant.WPF.Features.AddItem;
+using System.ComponentModel;
namespace PhoneAssistant.Tests.Features.AddItem;
public partial class AddItemViewModelTests
{
private readonly AutoMocker _mocker = new();
- [Test]
- public async Task AddItemViewModel_DefaultOEMAndModelAsync()
+ private Mock MockValidator()
{
- AddItemViewModel sut = _mocker.CreateInstance();
-
- await Assert.That((Manufacturer)sut.OEM).IsEqualTo(Manufacturer.Apple);
- await Assert.That(sut.Model).IsEqualTo("iPhone SE 2022");
+ Mock phones = _mocker.GetMock();
+ var validator = new AddItemValidator(phones.Object);
+ var serviceProviderMock = _mocker.GetMock();
+ serviceProviderMock
+ .Setup(sp => sp.GetService(typeof(IValidator)))
+ .Returns(validator);
+ return phones;
}
[Test]
- [Arguments(Manufacturer.Apple,"iPhone SE 2022")]
- [Arguments(Manufacturer.Nokia, "110 4G")]
- [Arguments(Manufacturer.Other, "")]
- [Arguments(Manufacturer.Samsung, "A32")]
- public async Task OnOEMChanged_ShouldChangeModelAsync(Manufacturer oem, string model)
+ public async Task AddItemViewModel_DefaultOEMAndModel()
{
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
- sut.OEM = oem;
-
- await Assert.That(sut.Model).IsEqualTo(model);
+ await Assert.That((Manufacturer)sut.OEM).IsEqualTo(Manufacturer.Apple);
+ await Assert.That(sut.Model).IsEqualTo("iPhone SE 2022");
}
[Test]
- public async Task CanSavePhone_ShouldBeEnabled_WhenNoErrors_WithPhoneHasSimAsync()
+ public async Task CanSavePhone_ShouldBeEnabled_WhenNoErrors_WithPhoneHasSim()
{
Mock sims = _mocker.GetMock();
#pragma warning disable CS8600 // Converting null literal or possible null value to non-nullable type.
sims.Setup(r => r.GetSimNumberAsync("07123456789")).ReturnsAsync((string)null);
#pragma warning restore CS8600 // Converting null literal or possible null value to non-nullable type.
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
sut.Condition = "condition";
@@ -63,13 +57,8 @@ public async Task CanSavePhone_ShouldBeEnabled_WhenNoErrors_WithPhoneHasSimAsync
[Test]
public async Task CanSavePhone_ShouldBeEnabled_WhenNoErrors_WithPhoneInStockAsync()
{
- Mock phones = _mocker.GetMock();
+ var phones = MockValidator();
phones.Setup(r => r.AssetTagUniqueAsync("MP00001")).ReturnsAsync(true);
- var validator = new AddItemValidator(phones.Object);
- var serviceProviderMock = _mocker.GetMock();
- serviceProviderMock
- .Setup(sp => sp.GetService(typeof(IValidator)))
- .Returns(validator);
AddItemViewModel sut = _mocker.CreateInstance();
sut.AssetTag = "MP00001";
@@ -84,8 +73,9 @@ public async Task CanSavePhone_ShouldBeEnabled_WhenNoErrors_WithPhoneInStockAsyn
}
[Test]
- public async Task CanSavePhone_ShouldBeEnabled_WhenNoErrors_WithPhoneOnlyAsync()
+ public async Task CanSavePhone_ShouldBeEnabled_WhenNoErrors_WithPhoneOnly()
{
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
sut.Condition = "condition";
@@ -97,104 +87,82 @@ public async Task CanSavePhone_ShouldBeEnabled_WhenNoErrors_WithPhoneOnlyAsync()
await Assert.That(sut.CanSavePhone()).IsTrue();
}
- [Test]
- [Arguments("12345")]
- [Arguments("12345678")]
- [Arguments("1A345")]
- public async Task Ticket_should_have_Error_when_invalid_format(string ticket)
- {
- Mock phones = _mocker.GetMock();
- var validator = new AddItemValidator(phones.Object);
- var serviceProviderMock = _mocker.GetMock();
- serviceProviderMock
- .Setup(sp => sp.GetService(typeof(IValidator)))
- .Returns(validator);
- AddItemViewModel sut = _mocker.CreateInstance();
+ //[Test]
+ //public async Task Imei_should_not_have_Error_when_present()
+ //{
+ // AddItemViewModel sut = _mocker.CreateInstance();
- sut.Ticket = ticket;
+ // sut.Imei = "355808981147090";
- await Assert.That(sut.HasErrors).IsTrue();
- await Assert.That(sut.GetErrors(nameof(sut.Ticket))).IsNotEmpty();
- }
+ // await Assert.That(sut.GetErrors(nameof(sut.Imei))).IsEmpty();
+ //}
- [Test]
- [Arguments(null)]
- [Arguments("")]
- public async Task Ticket_should_not_have_Error_when_Null_or_empty(string? actual)
- {
- Mock phones = _mocker.GetMock();
- var validator = new AddItemValidator(phones.Object);
- var serviceProviderMock = _mocker.GetMock();
- serviceProviderMock
- .Setup(sp => sp.GetService(typeof(IValidator)))
- .Returns(validator);
- AddItemViewModel sut = _mocker.CreateInstance();
+ //[Test]
+ //[Arguments(null)]
+ //[Arguments("")]
+ //public async Task PhoneNumber_should_not_have_Error_when_Null_or_empty(string? actual)
+ //{
+ // AddItemViewModel sut = _mocker.CreateInstance();
- sut.Ticket = actual;
+ // sut.PhoneNumber = actual;
- await Assert.That(sut.GetErrors(nameof(sut.Ticket))).IsEmpty();
- }
-
- [Test]
- public async Task Imei_should_not_have_Error_when_present()
- {
- AddItemViewModel sut = _mocker.CreateInstance();
+ // await Assert.That(sut.GetErrors(nameof(sut.PhoneNumber))).IsEmpty();
+ //}
- sut.Imei = "355808981147090";
+ //[Test]
+ //public async Task PhoneNumber_should_not_have_Error_when_present()
+ //{
+ // AddItemViewModel sut = _mocker.CreateInstance();
- await Assert.That(sut.GetErrors(nameof(sut.Imei))).IsEmpty();
- }
+ // sut.PhoneNumber = "07123456789";
- [Test]
- [Arguments(null)]
- [Arguments("")]
- public async Task PhoneNumber_should_not_have_Error_when_Null_or_empty(string? actual)
- {
- AddItemViewModel sut = _mocker.CreateInstance();
+ // await Assert.That(sut.GetErrors(nameof(sut.PhoneNumber))).IsEmpty();
+ //}
- sut.PhoneNumber = actual;
+ //[Test]
+ //public async Task GetErrors_ShouldBeEmpty_WhenSimNumberNullAsync()
+ //{
+ // AddItemViewModel sut = _mocker.CreateInstance();
- await Assert.That(sut.GetErrors(nameof(sut.PhoneNumber))).IsEmpty();
- }
+ // sut.SimNumber = null;
- [Test]
- public async Task PhoneNumber_should_not_have_Error_when_present()
- {
- AddItemViewModel sut = _mocker.CreateInstance();
-
- sut.PhoneNumber = "07123456789";
+ // await Assert.That(sut.GetErrors(nameof(sut.SimNumber))).IsEmpty();
+ //}
- await Assert.That(sut.GetErrors(nameof(sut.PhoneNumber))).IsEmpty();
- }
-
- [Test]
- public async Task GetErrors_ShouldBeEmpty_WhenSimNumberNullAsync()
- {
- AddItemViewModel sut = _mocker.CreateInstance();
+ //[Test]
+ //public async Task GetErrors_ShouldBeEmpty_WhenSimNumberSetAsync()
+ //{
+ // AddItemViewModel sut = _mocker.CreateInstance();
- sut.SimNumber = null;
+ // sut.SimNumber = "8944122605566849402";
- await Assert.That(sut.GetErrors(nameof(sut.SimNumber))).IsEmpty();
- }
+ // await Assert.That(sut.GetErrors(nameof(sut.SimNumber))).IsEmpty();
+ //}
[Test]
- public async Task GetErrors_ShouldBeEmpty_WhenSimNumberSetAsync()
+ public async Task LoadAsync_ShouldReturn_TaskCompleted()
{
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
- sut.SimNumber = "8944122605566849402";
+ Task result = sut.LoadAsync();
- await Assert.That(sut.GetErrors(nameof(sut.SimNumber))).IsEmpty();
+ await Assert.That(result).IsCompleted();
}
[Test]
- public async Task LoadAsync_ShouldReturn_TaskCompleted()
+ [Arguments(Manufacturer.Apple, "iPhone SE 2022")]
+ [Arguments(Manufacturer.Nokia, "110 4G")]
+ [Arguments(Manufacturer.Other, "")]
+ [Arguments(Manufacturer.Samsung, "A32")]
+ public async Task OEM_should_change_Model(Manufacturer oem, string model)
{
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
- Task result = sut.LoadAsync();
+ sut.OEM = oem;
- await Assert.That(result).IsCompleted();
+ await Assert.That(sut.Model).IsEqualTo(model);
}
[Test]
@@ -202,6 +170,7 @@ public async Task OnPhoneNumberChanged_ShouldSetSimNumber_WhenSimExistsAsync()
{
Mock repository = _mocker.GetMock();
repository.Setup(r => r.GetSimNumberAsync("07123456789")).ReturnsAsync("sim number");
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
sut.PhoneNumber = "07123456789";
@@ -213,12 +182,7 @@ public async Task OnPhoneNumberChanged_ShouldSetSimNumber_WhenSimExistsAsync()
[Test]
public async Task PhoneClearCommand_ShouldDisablePhoneSaveAsync()
{
- Mock repository = _mocker.GetMock();
- var validator = new AddItemValidator(repository.Object);
- var serviceProviderMock = _mocker.GetMock();
- serviceProviderMock
- .Setup(sp => sp.GetService(typeof(IValidator)))
- .Returns(validator);
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
sut.PhoneClearCommand.Execute(null);
@@ -229,6 +193,7 @@ public async Task PhoneClearCommand_ShouldDisablePhoneSaveAsync()
[Test]
public async Task PhoneClearCommand_ShouldResetAllPropertiesAsync()
{
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
ArrangeSetAllPhoneProperties(sut);
@@ -240,8 +205,9 @@ public async Task PhoneClearCommand_ShouldResetAllPropertiesAsync()
[Test]
[Description("Issue #65")]
- public async Task PhoneSaveCommand_WithConditionN_ShouldLogNewAsync()
+ public async Task PhoneSaveCommand_should_Log_New_when_Condition_N()
{
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
sut.Condition = ApplicationConstants.Conditions[0][..1];
@@ -255,11 +221,12 @@ public async Task PhoneSaveCommand_WithConditionN_ShouldLogNewAsync()
var actual = sut.LogItems.First();
await Assert.That(actual).Contains("New");
}
-
+
[Test]
[Description("Issue #65")]
- public async Task PhoneSaveCommand_WithConditionR_ShouldLogRepurposedAsync()
+ public async Task PhoneSaveCommand_should_Log_Repurposed_when_Condition_R()
{
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
sut.Condition = ApplicationConstants.Conditions[1].Substring(0, 1);
@@ -290,14 +257,9 @@ public async Task PhoneSaveCommand_WithPhoneAndSim_ShouldCallRepositoryAsync()
OEM = Manufacturer.Apple,
Status = "status"
};
- Mock repository = _mocker.GetMock();
+ var repository = MockValidator();
repository.Setup(r => r.AssetTagUniqueAsync("MP00001")).ReturnsAsync(true);
repository.Setup(r => r.CreateAsync(It.IsAny())).Callback((p) => actual = p);
- var validator = new AddItemValidator(repository.Object);
- var serviceProviderMock = _mocker.GetMock();
- serviceProviderMock
- .Setup(sp => sp.GetService(typeof(IValidator)))
- .Returns(validator);
AddItemViewModel sut = _mocker.CreateInstance();
sut.AssetTag = expectedAssetTag;
@@ -330,14 +292,9 @@ public async Task PhoneSaveCommand_WithPhoneOnly_ShouldCallRepositoryAsync()
OEM = Manufacturer.Apple,
Status = "status"
};
- Mock repository = _mocker.GetMock();
+ var repository = MockValidator();
repository.Setup(r => r.AssetTagUniqueAsync("MP00001")).ReturnsAsync(true);
repository.Setup(r => r.CreateAsync(It.IsAny())).Callback((p) => actual = p);
- var validator = new AddItemValidator(repository.Object);
- var serviceProviderMock = _mocker.GetMock();
- serviceProviderMock
- .Setup(sp => sp.GetService(typeof(IValidator)))
- .Returns(validator);
AddItemViewModel sut = _mocker.CreateInstance();
sut.AssetTag = expectedAssetTag;
@@ -355,15 +312,9 @@ public async Task PhoneSaveCommand_WithPhoneOnly_ShouldCallRepositoryAsync()
}
[Test]
- public async Task PhoneSaveCommand_ShouldDisablePhoneSaveAsync()
+ public async Task PhoneSaveCommand_hould_disable_PhoneSaveCommand()
{
- Mock repository = _mocker.GetMock();
- var validator = new AddItemValidator(repository.Object);
- var serviceProviderMock = _mocker.GetMock();
- serviceProviderMock
- .Setup(sp => sp.GetService(typeof(IValidator)))
- .Returns(validator);
-
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
sut.PhoneSaveCommand.Execute(null);
@@ -372,8 +323,9 @@ public async Task PhoneSaveCommand_ShouldDisablePhoneSaveAsync()
}
[Test]
- public async Task PhoneSaveCommand_ShouldResetAllPhonePropertiesAsync()
+ public async Task PhoneSaveCommand_should_reset_all_Phone_properties()
{
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
ArrangeSetAllPhoneProperties(sut);
@@ -387,6 +339,7 @@ public void PhoneSaveCommand_ShouldSendPhoneMessage()
{
Mock message = _mocker.GetMock();
message.Setup(m => m.Send(It.IsAny(), It.IsAny()));
+ _ = MockValidator();
AddItemViewModel sut = _mocker.CreateInstance();
sut.AssetTag = "MP00001";
@@ -398,7 +351,20 @@ public void PhoneSaveCommand_ShouldSendPhoneMessage()
message.Verify(x => x.Send(It.IsAny(), It.IsAny()), Times.Once);
}
- private void ArrangeSetAllPhoneProperties(AddItemViewModel sut)
+ [Test]
+ [Arguments(null)]
+ [Arguments("")]
+ public async Task Ticket_should_not_have_Error_when_Null_or_empty(string? actual)
+ {
+ _ = MockValidator();
+ AddItemViewModel sut = _mocker.CreateInstance();
+
+ sut.Ticket = actual;
+
+ await Assert.That(sut.GetErrors(nameof(sut.Ticket))).IsEmpty();
+ }
+
+ private static void ArrangeSetAllPhoneProperties(AddItemViewModel sut)
{
sut.AssetTag = "MP00000";
sut.Condition = "condition";
@@ -411,7 +377,7 @@ private void ArrangeSetAllPhoneProperties(AddItemViewModel sut)
sut.Ticket = 7654321.ToString();
}
- private async Task AssertResetAllPhonePropertiesAsync(AddItemViewModel sut)
+ private static async Task AssertResetAllPhonePropertiesAsync(AddItemViewModel sut)
{
await Assert.That(sut.AssetTag).IsNull();
await Assert.That(sut.Condition).IsEqualTo(ApplicationConstants.Conditions[1].Substring(0, 1));
diff --git a/PhoneAssistant.Tests/Features/MainWindow/MainWindowViewModelTests.cs b/PhoneAssistant.Tests/Features/MainWindow/MainWindowViewModelTests.cs
index 7f7b0c4..4b6ef16 100644
--- a/PhoneAssistant.Tests/Features/MainWindow/MainWindowViewModelTests.cs
+++ b/PhoneAssistant.Tests/Features/MainWindow/MainWindowViewModelTests.cs
@@ -59,10 +59,11 @@ public async Task UpdateViewAsync_WithValidViewModelType_CallUpdateAsync(ViewMod
switch (viewModelType)
{
case ViewModelType.None:
- dashboard.Verify(vm => vm.LoadAsync(), Times.Exactly(2));
+ dashboard.Verify(vm => vm.LoadAsync(), Times.Never);
+ settings.Verify(vm => vm.LoadAsync(), Times.Exactly(2));
break;
case ViewModelType.Dashboard:
- dashboard.Verify(vm => vm.LoadAsync(), Times.Exactly(2));
+ dashboard.Verify(vm => vm.LoadAsync(), Times.Once);
break;
case ViewModelType.Phones:
phones.Verify(vm => vm.LoadAsync(), Times.Once);
@@ -71,7 +72,7 @@ public async Task UpdateViewAsync_WithValidViewModelType_CallUpdateAsync(ViewMod
sims.Verify(vm => vm.LoadAsync(), Times.Once);
break;
case ViewModelType.Settings:
- settings.Verify(vm => vm.LoadAsync(), Times.Once);
+ settings.Verify(vm => vm.LoadAsync(), Times.Exactly(2));
break;
case ViewModelType.Users:
users.Verify(vm => vm.LoadAsync(), Times.Once);
diff --git a/PhoneAssistant.Tests/Features/Phones/PhonesMainViewModelTests.cs b/PhoneAssistant.Tests/Features/Phones/PhonesMainViewModelTests.cs
index 928ed71..60cb4b9 100644
--- a/PhoneAssistant.Tests/Features/Phones/PhonesMainViewModelTests.cs
+++ b/PhoneAssistant.Tests/Features/Phones/PhonesMainViewModelTests.cs
@@ -273,7 +273,6 @@ public async Task LoadAsync_should_call_GetActivePhones_when_IncludeDisposals_fa
new Phone() { Imei = "2" , AssetTag = "Tag B2", Model = "", Condition = "", OEM = Manufacturer.Samsung, Status = "In Repair"},
new Phone() { Imei = "3" , AssetTag = "Tag C3", Model = "", Condition = "", OEM = Manufacturer.Nokia, Status = "Production"},
];
- int index = 0;
AutoMocker mocker = new();
Mock settings = mocker.GetMock();
settings.Setup(s => s.ApplicationSettings).Returns(new ApplicationSettings());
@@ -284,8 +283,7 @@ public async Task LoadAsync_should_call_GetActivePhones_when_IncludeDisposals_fa
Mock messenger = mocker.GetMock();
Mock factory = mocker.GetMock();
factory.Setup(r => r.Create(It.IsAny()))
- .Returns(() => new PhonesItemViewModel(settings.Object, baseReport.Object, repository.Object, messenger.Object, phones[index]))
- .Callback(() => index++);
+ .Returns((Phone p) => new PhonesItemViewModel(settings.Object, baseReport.Object, repository.Object, messenger.Object, p));
PhonesMainViewModel vm = mocker.CreateInstance();
vm.IncludeDisposals = false;
@@ -305,25 +303,23 @@ public async Task LoadAsync_should_call_GetAllPhones_when_IncludeDisposals_true(
new Phone() { Imei = "4" , AssetTag = "Tag D4", Model = "", Condition = "", OEM = Manufacturer.Other, Status = "Decommissioned"},
new Phone() { Imei = "5" , AssetTag = "Tag E5", Model = "", Condition = "", OEM = Manufacturer.Apple, Status = "Disposed"},
];
- int index = 0;
AutoMocker mocker = new();
Mock settings = mocker.GetMock();
settings.Setup(s => s.ApplicationSettings).Returns(new ApplicationSettings());
Mock repository = mocker.GetMock();
repository.Setup(r => r.GetActivePhonesAsync()).ReturnsAsync(() => { return phones; });
repository.Setup(r => r.GetAllPhonesAsync()).ReturnsAsync(() => { return phones; });
- Mock sims = mocker.GetMock();
+ Mock baseReport = mocker.GetMock();
Mock messenger = mocker.GetMock();
Mock factory = mocker.GetMock();
factory.Setup(r => r.Create(It.IsAny()))
- .Returns(() => new PhonesItemViewModel(settings.Object, sims.Object, repository.Object, messenger.Object, phones[index]))
- .Callback(() => index++);
+ .Returns((Phone p) => new PhonesItemViewModel(settings.Object, baseReport.Object, repository.Object, messenger.Object, p));
PhonesMainViewModel vm = mocker.CreateInstance();
vm.IncludeDisposals = true;
await vm.LoadAsync();
- repository.Verify(r => r.GetAllPhonesAsync(), Times.Once());
+ repository.Verify(r => r.GetAllPhonesAsync(), Times.Once);
repository.Verify(r => r.GetActivePhonesAsync(), Times.Never());
}
diff --git a/PhoneAssistant.Tests/Features/Sims/SimValidatorTests.cs b/PhoneAssistant.Tests/Features/Sims/SimValidatorTests.cs
index 488ab82..68dc081 100644
--- a/PhoneAssistant.Tests/Features/Sims/SimValidatorTests.cs
+++ b/PhoneAssistant.Tests/Features/Sims/SimValidatorTests.cs
@@ -1,5 +1,7 @@
-using FluentValidation.TestHelper;
+using FluentValidation;
+using FluentValidation.TestHelper;
using Moq.AutoMock;
+using PhoneAssistant.Model;
using PhoneAssistant.WPF.Features.Sims;
namespace PhoneAssistant.Tests.Features.Sims;
@@ -13,9 +15,15 @@ internal sealed class SimValidatorTests
public SimValidatorTests()
{
_mocker = new AutoMocker();
- _validator = _mocker.CreateInstance();
+ var phones = _mocker.GetMock();
+ _validator = new SimValidator(phones.Object);
+ _mocker.Use>(_validator);
+ var serviceProviderMock = _mocker.GetMock();
+ serviceProviderMock
+ .Setup(sp => sp.GetService(typeof(IValidator)));
_vm = _mocker.CreateInstance();
}
+
[Test]
[Arguments(null)]
[Arguments("")]
@@ -41,6 +49,7 @@ public async Task NewUser_should_not_have_Error_when_Present()
// Phone number validation is tested in ValidationRules_PhoneNumberTests
// Sim number validation is tested in ValidationRules_SimNumberTests
// Ticket validation is tested in ValidationRules_TicketTests - except for the case when ticket is required
+
[Test]
[Arguments(null)]
[Arguments("")]
diff --git a/PhoneAssistant.Tests/Features/Sims/SimsMainViewModelTests.cs b/PhoneAssistant.Tests/Features/Sims/SimsMainViewModelTests.cs
index 8e38b9e..dd1b7bb 100644
--- a/PhoneAssistant.Tests/Features/Sims/SimsMainViewModelTests.cs
+++ b/PhoneAssistant.Tests/Features/Sims/SimsMainViewModelTests.cs
@@ -14,18 +14,24 @@ namespace PhoneAssistant.Tests.Features.Sims;
public sealed class SimsMainViewModelTests
{
- [Test]
- public async Task HasErrors_should_be_false_when_required_fields_supplied()
- {
- AutoMocker mocker = new();
- var phonesRepository = mocker.GetMock();
+ private readonly AutoMocker _mocker = new();
+
+ private void MockValidator()
+ {
+ var phonesRepository = _mocker.GetMock();
var validator = new SimValidator(phonesRepository.Object);
- mocker.Use>(validator);
- var serviceProviderMock = mocker.GetMock();
+ _mocker.Use>(validator);
+ var serviceProviderMock = _mocker.GetMock();
serviceProviderMock
.Setup(sp => sp.GetService(typeof(IValidator)))
.Returns(validator);
- var vm = mocker.CreateInstance();
+ }
+
+ [Test]
+ public async Task HasErrors_should_be_false_when_required_fields_supplied()
+ {
+ MockValidator();
+ var vm = _mocker.CreateInstance();
vm.NewUser = "Rosie Lane";
vm.PhoneNumber = "07814209742";
@@ -37,16 +43,8 @@ public async Task HasErrors_should_be_false_when_required_fields_supplied()
[Test]
public async Task HasErrors_should_be_true_when_required_fields_missing()
{
- AutoMocker mocker = new();
- var phonesRepository = mocker.GetMock();
- var validator = new SimValidator(phonesRepository.Object);
- mocker.Use>(validator);
- var serviceProviderMock = mocker.GetMock();
- serviceProviderMock
- .Setup(sp => sp.GetService(typeof(IValidator)))
- .Returns(validator);
-
- var vm = mocker.CreateInstance();
+ MockValidator();
+ var vm = _mocker.CreateInstance();
await Assert.That(vm.HasErrors).IsTrue();
@@ -63,38 +61,24 @@ public async Task HasErrors_should_be_true_when_required_fields_missing()
[Test]
public async Task PhoneNumber_changed_should_set_SimNumber_when_SIM_exists()
{
- AutoMocker mocker = new();
- Mock baseRepository = mocker.GetMock();
+ MockValidator();
+ Mock baseRepository = _mocker.GetMock();
baseRepository.Setup(r => r.GetSimNumberAsync("01234567890")).ReturnsAsync("sim number");
- var phonesRepository = mocker.GetMock();
- var validator = new SimValidator(phonesRepository.Object);
- var serviceProviderMock = mocker.GetMock();
- serviceProviderMock
- .Setup(sp => sp.GetService(typeof(IValidator)))
- .Returns(validator);
+ var vm = _mocker.CreateInstance();
- var vm = mocker.CreateInstance();
vm.NewUser = "Alice";
vm.PhoneNumber = "01234567890";
vm.Ticket = "654321";
- mocker.VerifyAll();
+ _mocker.VerifyAll();
await Assert.That(vm.SimNumber).IsEqualTo("sim number");
}
[Test]
public async Task PrintEnvelopeCommand_should_be_disabled_when_Errors()
{
- AutoMocker mocker = new();
- var phonesRepository = mocker.GetMock();
- var validator = new SimValidator(phonesRepository.Object);
- mocker.Use>(validator);
- var serviceProviderMock = mocker.GetMock();
- serviceProviderMock
- .Setup(sp => sp.GetService(typeof(IValidator)))
- .Returns(validator);
-
- var vm = mocker.CreateInstance();
+ MockValidator();
+ var vm = _mocker.CreateInstance();
await Assert.That(vm.HasErrors).IsTrue();
await Assert.That(vm.PrintEnvelopeCommand.CanExecute(null)).IsFalse();
@@ -103,14 +87,8 @@ public async Task PrintEnvelopeCommand_should_be_disabled_when_Errors()
[Test]
public async Task PrintEnvelopeCommand_should_be_enabled_when_all_properties_supplied()
{
- AutoMocker mocker = new();
- var phonesRepository = mocker.GetMock();
- var validator = new SimValidator(phonesRepository.Object);
- var serviceProviderMock = mocker.GetMock();
- serviceProviderMock
- .Setup(sp => sp.GetService(typeof(IValidator)))
- .Returns(validator);
- var vm = mocker.CreateInstance();
+ MockValidator();
+ var vm = _mocker.CreateInstance();
vm.NewUser = "Alice";
vm.PhoneNumber = "01234567890";
@@ -124,17 +102,17 @@ public async Task PrintEnvelopeCommand_should_be_enabled_when_all_properties_sup
[Test]
public async Task PrintEnvelopeCommand_should_call_PrintEnvelope_Execute_with_OrderDetails()
{
- AutoMocker mocker = new();
+ MockValidator();
+ var vm = _mocker.CreateInstance();
OrderDetails? actual = null;
- var vm = mocker.CreateInstance();
+ var printEnvelope = _mocker.GetMock();
+ printEnvelope
+ .Setup(p => p.Execute(It.IsAny()))
+ .Callback(o => actual = o);
vm.NewUser = "Rosie Lane";
vm.PhoneNumber = "07814209742";
vm.SimNumber = "8944122605563572205";
vm.Ticket = "262281";
- var printEnvelope = mocker.GetMock();
- printEnvelope
- .Setup(p => p.Execute(It.IsAny()))
- .Callback(o => actual = o);
await vm.PrintEnvelopeCommand.ExecuteAsync(null);
diff --git a/PhoneAssistant.WPF/Features/MainWindow/MainWindowViewModel.cs b/PhoneAssistant.WPF/Features/MainWindow/MainWindowViewModel.cs
index af703fe..ca7b1c5 100644
--- a/PhoneAssistant.WPF/Features/MainWindow/MainWindowViewModel.cs
+++ b/PhoneAssistant.WPF/Features/MainWindow/MainWindowViewModel.cs
@@ -1,8 +1,6 @@
-using System.Windows;
-
+
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
-
using PhoneAssistant.Model;
using PhoneAssistant.WPF.Features.AddItem;
using PhoneAssistant.WPF.Features.BaseReport;
@@ -14,6 +12,7 @@
using PhoneAssistant.WPF.Features.Sims;
using PhoneAssistant.WPF.Features.Users;
using PhoneAssistant.WPF.Shared;
+using System.Windows;
namespace PhoneAssistant.WPF.Features.MainWindow;
@@ -88,11 +87,9 @@ public MainWindowViewModel(IAddItemViewModel addItemViewModel,
[RelayCommand]
private async Task UpdateViewAsync(ViewModelType selectedViewModelType)
{
- ArgumentNullException.ThrowIfNull(selectedViewModelType);
-
SelectedViewModel = selectedViewModelType switch
{
- ViewModelType.None => _dashboardMainViewModel,
+ ViewModelType.None => _settingsMainViewModel,
ViewModelType.AddItem => _addItemViewModel,
ViewModelType.BaseReport => _baseReportMainViewModel,
ViewModelType.Dashboard => _dashboardMainViewModel,
diff --git a/PhoneAssistant.WPF/Features/Users/UsersItemViewModel.cs b/PhoneAssistant.WPF/Features/Users/UsersItemViewModel.cs
index 6c61b66..55788d6 100644
--- a/PhoneAssistant.WPF/Features/Users/UsersItemViewModel.cs
+++ b/PhoneAssistant.WPF/Features/Users/UsersItemViewModel.cs
@@ -9,10 +9,7 @@ public sealed partial class UsersItemViewModel
public UsersItemViewModel(User user)
{
- if (user is null)
- {
- throw new ArgumentNullException(nameof(user));
- }
+ ArgumentNullException.ThrowIfNull(user);
User = user;
}
@@ -25,7 +22,7 @@ public void CopyNameToClipboard()
[RelayCommand(CanExecute =nameof(CanCopyEmailToClipbaord))]
public void CopyEmailToClipboard()
{
- Clipboard.SetText(User.Email);
+ Clipboard.SetText(User.Email!);
}
private bool CanCopyEmailToClipbaord() => !string.IsNullOrEmpty(User.Email);
diff --git a/PhoneAssistant.WPF/Resources/TrackingNumber.png b/PhoneAssistant.WPF/Resources/TrackingNumber.png
new file mode 100644
index 0000000..f5c1940
Binary files /dev/null and b/PhoneAssistant.WPF/Resources/TrackingNumber.png differ