public void AddingInteractionNeededEventToQueueOnInteractionNeededException()
        {
            var localDetection  = new Mock <ISituationDetection <AbstractFolderEvent> >();
            var remoteDetection = new Mock <ISituationDetection <AbstractFolderEvent> >();
            int numberOfSolver  = Enum.GetNames(typeof(SituationType)).Length;

            ISolver[,] solver = new ISolver[numberOfSolver, numberOfSolver];
            var interactionNeededProducer = new Mock <ISolver>();
            var exception = new InteractionNeededException("reason");

            interactionNeededProducer.Setup(
                r =>
                r.Solve(
                    It.IsAny <IFileSystemInfo>(),
                    It.IsAny <IObjectId>(),
                    It.IsAny <ContentChangeType>(),
                    It.IsAny <ContentChangeType>())).Throws(exception);
            solver[(int)SituationType.NOCHANGE, (int)SituationType.NOCHANGE] = interactionNeededProducer.Object;
            var mechanism = this.CreateMechanism(localDetection.Object, remoteDetection.Object, solver);

            localDetection.Setup(d => d.Analyse(this.storage.Object, It.IsAny <AbstractFolderEvent>())).Returns(SituationType.NOCHANGE);
            remoteDetection.Setup(d => d.Analyse(this.storage.Object, It.IsAny <AbstractFolderEvent>())).Returns(SituationType.NOCHANGE);
            var folderEvent = new FolderEvent(Mock.Of <IDirectoryInfo>(), Mock.Of <IFolder>())
            {
                Local = MetaDataChangeType.NONE, Remote = MetaDataChangeType.NONE
            };

            Assert.That(mechanism.Handle(folderEvent), Is.True);

            this.queue.Verify(q => q.AddEvent(It.Is <InteractionNeededEvent>(e => e.Exception == exception)), Times.Once());
            this.queue.VerifyThatNoOtherEventIsAddedThan <InteractionNeededEvent>();
        }
        public void InitializeWithCmisException()
        {
            string errorContent = "error content";
            string message      = "message";
            var    ex           = new CmisBaseException(message, errorContent);
            var    exception    = new InteractionNeededException(message, ex);
            var    underTest    = new InteractionNeededEvent(exception);

            Assert.That(underTest.Description, Is.EqualTo(message));
            Assert.That(underTest.Details, Is.EqualTo(errorContent));
        }
        public void InitializeWithException()
        {
            var ex        = new InteractionNeededException();
            var underTest = new InteractionNeededEvent(ex);

            Assert.That(underTest.Exception, Is.EqualTo(ex));
            Assert.That(underTest.Actions, Is.Empty);
            Assert.That(underTest.AffectedFiles, Is.Empty);
            Assert.That(underTest.Title, Is.EqualTo(ex.GetType().Name));
            Assert.That(underTest.Description, Is.EqualTo(ex.Message));
            Assert.That(underTest.Details, Is.Not.Null);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="CmisSync.Lib.Events.InteractionNeededEvent"/> class.
        /// </summary>
        /// <param name="e">Exception which invokes a need for a user interaction.</param>
        public InteractionNeededEvent(InteractionNeededException e) : base(e)
        {
            if (e == null)
            {
                throw new ArgumentNullException("e");
            }

            this.AffectedFiles = new List <IFileSystemInfo>(e.AffectedFiles);
            this.Actions       = new Dictionary <string, Action>(e.Actions);
            this.Title         = e.Title;
            this.Description   = e.Description;
            this.Details       = e.Details;
        }
        public void InitializeActions()
        {
            int called = 0;
            var action = new Action(delegate() { called++; });
            var ex     = new InteractionNeededException();

            ex.Actions.Add("invoke", action);
            var underTest = new InteractionNeededEvent(ex);

            underTest.Actions["invoke"]();

            Assert.That(underTest.Actions.Count, Is.EqualTo(1));
            Assert.That(called, Is.EqualTo(1));
        }