示例#1
0
        public ReleaseNoteViewModel(IReleaseNoteRepositories repos, Guid id, IUserNotify notify, ISecurityContext ctx)
        {
            this.repos  = repos;
            this.notify = notify;
            this.ctx    = ctx;

            saveCommand   = ViewModelSource.Create(() => new SaveReleaseNoteCommand(this, repos, notify, ctx));
            shipCommand   = ViewModelSource.Create(() => new ShipReleaseNoteCommand(this, repos, notify, ctx));
            unshipCommand = ViewModelSource.Create(() => new UnshipReleaseNoteCommand(this, repos, notify, ctx));

            ReleaseNotePipes = new PlainPipeBindingList();
            if (id == Guid.Empty)
            {
                NewRailcar();
            }
            else
            {
                ReleaseNote = repos.ReleaseNoteRepo.Get(id);
                if (ReleaseNote == null)
                {
                    log.Error(string.Format("Release Note (id:{0}) does not exist.", id));
                    // TODO: user message? close document?
                }
                else
                {
                    IList <Pipe> pipes = repos.ReleaseNoteRepo.GetReleasedNotePipe(id);
                    foreach (var p in pipes)
                    {
                        ReleaseNotePipes.Add(new PlainPipe(p));
                    }
                }
            }
        }
        public ReleaseNoteViewModel(IReleaseNoteRepositories repos, Guid id, IUserNotify notify, ISecurityContext ctx)
        {
            try
            {
                this.repos  = repos;
                this.notify = notify;
                this.ctx    = ctx;

                saveCommand   = ViewModelSource.Create(() => new SaveReleaseNoteCommand(this, repos, notify, ctx));
                shipCommand   = ViewModelSource.Create(() => new ShipReleaseNoteCommand(this, repos, notify, ctx));
                unshipCommand = ViewModelSource.Create(() => new UnshipReleaseNoteCommand(this, repos, notify, ctx));

                ReleaseNotePipes = new PlainPipeBindingList();
                if (id == Guid.Empty)
                {
                    NewRailcar();
                }
                else
                {
                    ReleaseNote = repos.SimpleNoteRepo.Get(id);
                    if (ReleaseNote == null)
                    {
                        log.Error(string.Format("Release Note (id:{0}) does not exist.", id));
                        // TODO: user message? close document?
                    }
                    else
                    {
                        IList <SimplePipe> pipes = repos.SimpleNoteRepo.GetReleasedNotePipe(id);
                        foreach (var p in pipes)
                        {
                            ReleaseNotePipes.Add(new PlainPipe(p));
                        }
                    }
                }
            }
            catch (RepositoryException ex)
            {
                log.Warn(this.GetType().Name + " | " + ex.ToString());
                notify.ShowWarning(Program.LanguageManager.GetString(StringResources.Notification_Error_Db_Message),
                                   Program.LanguageManager.GetString(StringResources.Notification_Error_Db_Header));
            }
        }
        public void TestSaveNewRailcar()
        {
            //FIX: Test was broken!
            var notify = new Mock<IUserNotify>();
            var view = new Mock<IModifiable>();
            var railcarRepo = new Mock<IRailcarRepository>();
            var pipeRepo = new Mock<IPipeRepository>();
            var releaseRepo = new Mock<IReleaseNoteRepository>();
            var simpleReleaseRepo = new Mock<ISimpleNoteRepository>();
            //pipeRepo.Setup(x => x.GetStored()).Returns(new List<SimplePipe>() { new SimplePipe() });
            var repos = new Mock<IReleaseNoteRepositories>();
            var ctx = new Mock<ISecurityContext>();
            repos.SetupGet(_ => _.PipeRepo).Returns(pipeRepo.Object);
            repos.SetupGet(_ => _.RailcarRepo).Returns(railcarRepo.Object);
            repos.SetupGet(_ => _.ReleaseNoteRepo).Returns(releaseRepo.Object);
            repos.SetupGet(_ => _.SimpleNoteRepo).Returns(simpleReleaseRepo.Object);

            var viewModel = new ReleaseNoteViewModel(repos.Object, Guid.Empty, notify.Object,ctx.Object);
            viewModel.ModifiableView = new Mock<IModifiable>().Object;
            var validatable = new Mock<IValidatable>();
            validatable.Setup(x => x.Validate()).Returns(true);
            viewModel.validatableView = validatable.Object;
            viewModel.ReleaseNote = new SimpleNote();
            viewModel.Number = "Test Railcar";
            viewModel.Date = DateTime.Now;
            viewModel.ModifiableView = view.Object;
            viewModel.Railcar.Pipes.Add(new SimplePipe());
            var command = new SaveReleaseNoteCommand(viewModel, repos.Object, notify.Object, ctx.Object);

            command.Execute();

            repos.Verify(_ => _.BeginTransaction(), Times.Once());
            //railcarRepo.Verify(_ => _.SaveOrUpdate(viewModel.Railcar), Times.Once());
            repos.Verify(_ => _.Commit(), Times.Once());
            //railcarRepo.Verify(_ => _.Evict(viewModel.Railcar), Times.Once());
        }
        public void AddFileToRailcar()
        {
            if (!Directory.Exists(Directories.FilesToAttachFolder))
            {
                Directory.CreateDirectory(Directories.FilesToAttachFolder);
                DirectoryInfo directoryInfo = new DirectoryInfo(Directories.FilesToAttachFolder);
                directoryInfo.Attributes |= FileAttributes.Hidden;
            }
            using (FileStream fs = System.IO.File.Create(Directories.FilesToAttachFolder + "test.txt"))
            {
                Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
                fs.Write(info, 0, info.Length);
            }

            var notify = new Mock<IUserNotify>();
            var view = new Mock<IModifiable>();
            var railcarRepo = new Mock<IRailcarRepository>();
            var simpleNoteRepo = new Mock<ISimpleNoteRepository>();
            var pipeRepo = new Mock<IPipeRepository>();
            var ctx = new Mock<ISecurityContext>();
            pipeRepo.Setup(x => x.GetStored()).Returns(new List<Pipe>() { new Pipe() });
            var repos = new Mock<IReleaseNoteRepositories>();
            repos.SetupGet(_ => _.PipeRepo).Returns(pipeRepo.Object);
            repos.SetupGet(_ => _.RailcarRepo).Returns(railcarRepo.Object);
            repos.SetupGet(_ => _.SimpleNoteRepo).Returns(simpleNoteRepo.Object);

            var fileRepo = new Mock<IFileRepository>();
            var projectRepo = new Mock<IProjectRepository>();
            var externalFilesRepo = new Mock<IExternalFilesRepositories>();
            projectRepo.Setup(x => x.GetSingle()).Returns(new Project());
            externalFilesRepo.SetupGet(_ => _.FileRepo).Returns(fileRepo.Object);
            externalFilesRepo.SetupGet(_ => _.ProjectRepo).Returns(projectRepo.Object);

            var fileViewModel = new ExternalFilesViewModel(externalFilesRepo.Object, notify.Object);
            
            fileViewModel.FilesToAttach.Add("test.txt", "test.txt");

            var viewModel = new ReleaseNoteViewModel(repos.Object, Guid.Empty, notify.Object, ctx.Object);
            viewModel.ModifiableView = new Mock<IModifiable>().Object;
            var validatable = new Mock<IValidatable>();
            validatable.Setup(x => x.Validate()).Returns(true);
            viewModel.validatableView = validatable.Object;
            viewModel.Railcar.Number = "Test Railcar";
            viewModel.Number = "Test Railcar";
            viewModel.Date = DateTime.Now;
            viewModel.ModifiableView = view.Object;
            viewModel.FilesFormViewModel = fileViewModel;
            viewModel.Railcar.Pipes.Add(new SimplePipe());
            var command = new SaveReleaseNoteCommand(viewModel, repos.Object, notify.Object, ctx.Object);

            command.Execute();

            repos.Verify(_ => _.BeginTransaction(), Times.Once());
            simpleNoteRepo.Verify(_ => _.SaveOrUpdate(It.IsAny<SimpleNote>()), Times.Once());
            repos.Verify(_ => _.Rollback(), Times.AtMostOnce());
            repos.Verify(_ => _.Commit(), Times.Once());
            simpleNoteRepo.Verify(_ => _.Evict(It.IsAny<SimpleNote>()), Times.Once());

            if (Directory.Exists(Directories.TargetPath))
            {
                Directory.Delete(Directories.TargetPath, true);
            }
        }