public void Can_Undo_RenameAndMove_Operation()
        {
            // arrange
            var file = Path.GetTempFileName();
            var operation = new RenameAndMoveOperation(
                new FileInfo(file),
                new DirectoryInfo(Path.GetTempPath()),
                DateTimeGenerator.AnyDateBetween(
                    DateTimeGenerator.FirstDayOfThisMonth(),
                    DateTimeGenerator.LastDayOfThisMonth()),
               Guid.NewGuid().ToString());
            var newFilename = Path.Combine(
                operation.TargetDirectory.FullName, operation.NewFilename);
            operation.Do();

            // assume
            File.Exists(file).ShouldBe(false);
            File.Exists(newFilename).ShouldBe(true);

            // act
            operation.Undo();

            // assert
            File.Exists(file).ShouldBe(true);
            File.Exists(newFilename).ShouldBe(false);
        }
        public void RenameAndMoveDocument()
        {
            if (!DocumentDate.HasValue)
                return;

            try
            {
                //var extension = Path.GetExtension(SelectedSourceFile.Name);
                //var filename = $"{DocumentDate:yyyy.MM.dd} - {DocumentTitle}{extension}";
                //var fullFilename = Path.Combine(SelectedTargetDirectory.FullName, filename);
                //var newFile = new FileInfo(fullFilename);
                var operation = new RenameAndMoveOperation(
                    SelectedSourceFile,
                    SelectedTargetDirectory,
                    DocumentDate.Value,
                    DocumentTitle);
                OperationsStack.DoOperation(operation);

                AfterAction();
            }
            catch (Exception ex)
            {
                Log.Error("Error renameing / moving document.", ex);
                MessageBox.Show("Error:" + ex.Message);
            }
        }