public async Task HandleDeleteDroid_WithNonExistantSerialNumber_ThrowsDroidNotFoundException()
        {
            // Arrange
            var droidHandler = new DroidHandler(_repoMock.Object, _repoArmMock.Object, _quoteMock.Object, _encryptionMock.Object);
            var deleteDroid  = new DeleteDroid(_serialNumber);
            var armIdList    = new List <ArmId>
            {
                Guid.NewGuid()
            };

            _repoArmMock
            .Setup(repo => repo.DeleteAsync(armIdList, It.IsAny <object>()))
            .Returns(Task.FromResult(true));
            var actions = DeleteArmListAction.CreateNew(armIdList, _repoArmMock.Object.DeleteAsync);

            _repoMock
            .Setup(repo => repo.DeleteAsync(_serialNumber, actions))
            .Returns(Task.FromResult(false));

            // Act
            var exception = await Record.ExceptionAsync(
                () => droidHandler.HandleAsync(deleteDroid));

            // Assert
            exception.Should().BeOfType <DroidNotFoundException>();
        }
        public async Task HandleDeleteDroid_WithValidSerialNumber_DeletedCallsSuccessfully()
        {
            // Arrange
            var droidHandler   = new DroidHandler(_repoMock.Object, _repoArmMock.Object, _quoteMock.Object, _encryptionMock.Object);
            var deleteDroid    = new DeleteDroid(_serialNumber);
            var getDroidResult = Task.FromResult(_droidDto);

            _repoMock
            .Setup(repo => repo.GetBySerialNumberAsync(_serialNumber, Droid.AssertExists))
            .Returns(getDroidResult);
            IReadOnlyCollection <IArmDto> arms = new List <ArmDto>();

            _repoArmMock
            .Setup(repo => repo.GetDroidArmsAsync(_serialNumber))
            .Returns(Task.FromResult(arms));
            _repoArmMock
            .Setup(repo => repo.DeleteAsync(It.IsAny <List <ArmId> >(), It.IsAny <object>()))
            .Returns(Task.FromResult(true));
            _repoMock
            .Setup(repo => repo.DeleteAsync(_serialNumber, It.IsAny <DeleteArmListAction>()))
            .Returns(Task.FromResult(true));

            // Act
            await droidHandler.HandleAsync(deleteDroid);

            // Assert
            _repoMock.Verify((r) => r.DeleteAsync(_serialNumber, It.IsAny <DeleteArmListAction>()), Times.Once);
        }