public void LinkLeftElementWrongPositionsReturnsFalse()
        {
            var elementA = GetElementA();
            var elementB = GetElementB();
            var elementC = GetElementC();
            var model    = new SequenceModel(new MockEventAggregator());

            model.Tracks.Add(new Track {
                TrackType = TrackType.Visual
            });

            model.Tracks[0].Shots.Add(elementA);
            model.Tracks[0].Shots.Add(elementB);
            model.Tracks[0].Shots.Add(elementC);

            var result = model.LinkPreviousElement(elementC, elementA);
            var linkA  = model.GetElementLink(elementA);
            var linkB  = model.GetElementLink(elementB);

            Assert.IsFalse(result);
            Assert.AreEqual(Guid.Empty, linkA.PreviousElementId);
            Assert.AreEqual(Guid.Empty, linkA.NextElementId);
            Assert.AreEqual(Guid.Empty, linkB.PreviousElementId);
            Assert.AreEqual(Guid.Empty, linkB.NextElementId);
        }
        public void LinkLeftElement()
        {
            var elementA = GetElementA();
            var elementB = GetElementB();
            var model    = new SequenceModel(new MockEventAggregator());

            model.Tracks.Add(new Track {
                TrackType = TrackType.Visual
            });

            model.Tracks[0].Shots.Add(elementA);
            model.Tracks[0].Shots.Add(elementB);

            var result = model.LinkPreviousElement(elementB, elementA);
            var linkA  = model.GetElementLink(elementA);
            var linkB  = model.GetElementLink(elementB);

            Assert.IsTrue(result);
            Assert.IsNotNull(linkA);
            Assert.IsNotNull(linkB);
            Assert.AreEqual(elementB.Id, linkA.NextElementId);
            Assert.AreEqual(elementA.Id, linkB.PreviousElementId);
            Assert.AreEqual(Guid.Empty, linkA.PreviousElementId);
            Assert.AreEqual(Guid.Empty, linkB.NextElementId);
        }
        public void UnlinkMiddleElementRemovesAllLinks()
        {
            var elementA = GetElementA();
            var elementB = GetElementB();
            var elementC = GetElementC();
            var model    = new SequenceModel(new MockEventAggregator());

            model.Tracks.Add(new Track {
                TrackType = TrackType.Visual
            });

            model.Tracks[0].Shots.Add(elementA);
            model.Tracks[0].Shots.Add(elementB);
            model.Tracks[0].Shots.Add(elementC);

            // link
            var result = model.LinkNextElement(elementA, elementB);

            Assert.IsTrue(result);
            result = model.LinkNextElement(elementB, elementC);
            Assert.IsTrue(result);

            // unlink
            model.UnlinkElement(elementB);

            var linkA = model.GetElementLink(elementA);

            Assert.AreEqual(Guid.Empty, linkA.PreviousElementId);
            Assert.AreEqual(Guid.Empty, linkA.NextElementId);

            var linkB = model.GetElementLink(elementB);

            Assert.AreEqual(Guid.Empty, linkB.PreviousElementId);
            Assert.AreEqual(Guid.Empty, linkB.NextElementId);

            var linkC = model.GetElementLink(elementC);

            Assert.AreEqual(Guid.Empty, linkC.PreviousElementId);
            Assert.AreEqual(Guid.Empty, linkC.NextElementId);
        }