public void Create()
        {
            var context = new Mock <IContextAware>();
            {
                context.Setup(c => c.IsSynchronized)
                .Returns(true);
            }

            var command   = new Mock <ICommand>();
            var file      = new FileInfo(Assembly.GetExecutingAssembly().LocalFilePath());
            var collector = new Mock <ICollectFeedbackReports>();
            {
                collector.Setup(c => c.LocateFeedbackReports())
                .Returns(
                    new List <FileInfo>
                {
                    file
                });
            }

            var fileSystem = new Mock <IFileSystem>();

            var model = new ErrorReportsModel(context.Object, command.Object, collector.Object, fileSystem.Object);

            var wasRaised = false;

            model.PropertyChanged += (s, e) =>
            {
                wasRaised = true;
            };

            while (!wasRaised && !model.HasErrorReports)
            {
                Thread.Yield();
            }

            Assert.IsTrue(model.HasErrorReports);
            Assert.That(
                model.Reports,
                Is.EquivalentTo(
                    new List <FeedbackFileModel>
            {
                new FeedbackFileModel(context.Object, file.FullName, file.CreationTime)
            }));
        }
        public void Create()
        {
            var context = new Mock<IContextAware>();
            {
                context.Setup(c => c.IsSynchronized)
                    .Returns(true);
            }

            var command = new Mock<ICommand>();
            var file = new FileInfo(Assembly.GetExecutingAssembly().LocalFilePath());
            var collector = new Mock<ICollectFeedbackReports>();
            {
                collector.Setup(c => c.LocateFeedbackReports())
                    .Returns(
                        new List<FileInfo>
                            {
                                file
                            });
            }

            var fileSystem = new Mock<IFileSystem>();

            var model = new ErrorReportsModel(context.Object, command.Object, collector.Object, fileSystem.Object);

            var wasRaised = false;
            model.PropertyChanged += (s, e) =>
            {
                wasRaised = true;
            };

            while (!wasRaised && !model.HasErrorReports)
            {
                Thread.Yield();
            }

            Assert.IsTrue(model.HasErrorReports);
            Assert.That(
                model.Reports,
                Is.EquivalentTo(
                    new List<FeedbackFileModel>
                    {
                        new FeedbackFileModel(context.Object, file.FullName, file.CreationTime)
                    }));
        }
        public void SendReports()
        {
            var context = new Mock <IContextAware>();
            {
                context.Setup(c => c.IsSynchronized)
                .Returns(true);
            }

            var command = new Mock <ICommand>();
            {
                command.Setup(c => c.Execute(It.IsAny <object>()))
                .Verifiable();
            }

            var file = new FileInfo(Assembly.GetExecutingAssembly().LocalFilePath());

            var counter   = 0;
            var collector = new Mock <ICollectFeedbackReports>();
            {
                collector.Setup(c => c.LocateFeedbackReports())
                .Returns(
                    () =>
                {
                    counter++;
                    var result = new List <FileInfo>();
                    if (counter <= 1)
                    {
                        result.Add(file);
                    }

                    return(result);
                });
            }

            var mockFile   = new MockFile(file.FullName, "a");
            var fileSystem = new Mock <IFileSystem>();
            {
                fileSystem.Setup(f => f.File)
                .Returns(mockFile);
            }

            var model = new ErrorReportsModel(context.Object, command.Object, collector.Object, fileSystem.Object);

            while (!model.HasErrorReports)
            {
                Thread.Yield();
            }

            var wasRaised = false;

            model.PropertyChanged += (s, e) =>
            {
                wasRaised = true;
            };

            model.SendReports(
                new[]
            {
                new FeedbackFileModel(context.Object, file.FullName, file.CreationTime),
            });

            command.Verify(c => c.Execute(It.IsAny <object>()), Times.Once());

            while (!wasRaised)
            {
                Thread.Yield();
            }

            // For some reason in release mode this doesn't quite work, except if we slow things down a bit
            // so ....
            Thread.Sleep(50);
            Assert.IsFalse(model.HasErrorReports);
        }
        public void SendReports()
        {
            var context = new Mock<IContextAware>();
            {
                context.Setup(c => c.IsSynchronized)
                    .Returns(true);
            }

            var command = new Mock<ICommand>();
            {
                command.Setup(c => c.Execute(It.IsAny<object>()))
                    .Verifiable();
            }

            var file = new FileInfo(Assembly.GetExecutingAssembly().LocalFilePath());

            var counter = 0;
            var collector = new Mock<ICollectFeedbackReports>();
            {
                collector.Setup(c => c.LocateFeedbackReports())
                    .Returns(
                        () =>
                        {
                            counter++;
                            var result = new List<FileInfo>();
                            if (counter <= 1)
                            {
                                result.Add(file);
                            }

                            return result;
                        });
            }

            var mockFile = new MockFile(file.FullName, "a");
            var fileSystem = new Mock<IFileSystem>();
            {
                fileSystem.Setup(f => f.File)
                    .Returns(mockFile);
            }

            var model = new ErrorReportsModel(context.Object, command.Object, collector.Object, fileSystem.Object);
            while (!model.HasErrorReports)
            {
                Thread.Yield();
            }

            var wasRaised = false;
            model.PropertyChanged += (s, e) =>
            {
                wasRaised = true;
            };

            model.SendReports(
                new[]
                    {
                        new FeedbackFileModel(context.Object, file.FullName, file.CreationTime),
                    });

            command.Verify(c => c.Execute(It.IsAny<object>()), Times.Once());

            while (!wasRaised)
            {
                Thread.Yield();
            }

            // For some reason in release mode this doesn't quite work, except if we slow things down a bit
            // so ....
            Thread.Sleep(50);
            Assert.IsFalse(model.HasErrorReports);
        }