コード例 #1
0
        public void SettingValues()
        {
            var sut = new TestIDEEvent
            {
                Id             = "1",
                ActiveDocument = Names.Document("d d"),
                ActiveWindow   = Names.Window("w w"),
                // Duration is automatically set
                IDESessionUUID = "2",
                KaVEVersion    = "3",
                TriggeredAt    = new DateUtils().Today.AddDays(-1),
                TerminatedAt   = new DateUtils().Today,
                TriggeredBy    = EventTrigger.Click
            };

            Assert.AreEqual("1", sut.Id);
            Assert.AreEqual(Names.Document("d d"), sut.ActiveDocument);
            Assert.AreEqual(Names.Window("w w"), sut.ActiveWindow);
            Assert.AreEqual(TimeSpan.FromDays(1), sut.Duration);
            Assert.AreEqual("2", sut.IDESessionUUID);
            Assert.AreEqual("3", sut.KaVEVersion);
            Assert.AreEqual((DateTimeOffset)DateTime.Today, sut.TerminatedAt);
            Assert.AreEqual(((DateTimeOffset)DateTime.Today).AddDays(-1), sut.TriggeredAt);
            Assert.AreEqual(EventTrigger.Click, sut.TriggeredBy);
        }
コード例 #2
0
        public void Equality_ReallyTheSame()
        {
            var a = new TestIDEEvent
            {
                Id             = "1",
                ActiveDocument = Names.Document("d d"),
                ActiveWindow   = Names.Window("w w"),
                // Duration is automatically set
                IDESessionUUID = "2",
                KaVEVersion    = "3",
                TriggeredAt    = DateTime.Today.AddDays(-1),
                TerminatedAt   = DateTime.Today,
                TriggeredBy    = EventTrigger.Click
            };
            var b = new TestIDEEvent
            {
                Id             = "1",
                ActiveDocument = Names.Document("d d"),
                ActiveWindow   = Names.Window("w w"),
                // Duration is automatically set
                IDESessionUUID = "2",
                KaVEVersion    = "3",
                TriggeredAt    = DateTime.Today.AddDays(-1),
                TerminatedAt   = DateTime.Today,
                TriggeredBy    = EventTrigger.Click
            };

            Assert.AreEqual(a, b);
            Assert.AreEqual(a.GetHashCode(), b.GetHashCode());
        }
コード例 #3
0
        public void FiltersOldEvents()
        {
            var e0 = new TestIDEEvent
            {
                KaVEVersion  = "0.0-Default",
                TriggeredAt  = DateTime.Now,
                TerminatedAt = DateTime.Now
            };
            var e1 = new TestIDEEvent
            {
                KaVEVersion  = "0.1-Default",
                TriggeredAt  = DateTime.Now,
                TerminatedAt = DateTime.Now
            };
            var e2 = new TestIDEEvent
            {
                KaVEVersion  = "0.2-Default",
                TriggeredAt  = DateTime.Now,
                TerminatedAt = DateTime.Now
            };

            _firstVersionToInclude = 1;

            InitTransformer().TransformWithCustomTransformer(
                new[] { e0, e1, e2 },
                _testTransformer);

            Mock.Get(_fixer).Verify(f => f.FixAndFilter(It.IsAny <IEnumerable <IDEEvent> >()));

            CollectionAssert.AreEqual(new[] { e1, e2 }, _processedEvents);
        }
        public void ShouldUseSessionIdOfFilteredEventsToFindDeveloper()
        {
            var @event = new TestIDEEvent
            {
                IDESessionUUID = "sessionA",
                TestProperty   = "a",
                TriggeredAt    = new DateTimeOffset()
            };

            GivenInputArchive("0.zip").With("0.json", @event);
            GivenInputArchive("1.zip")
            .With("0.json", @event)
            .With("1.json", new TestIDEEvent {
                IDESessionUUID = "sessionB", TestProperty = "b"
            });

            WhenImportIsRun();

            var developers = TestFeedbackDatabase.GetDeveloperCollection().FindAll().ToList();

            Assert.AreEqual(1, developers.Count);
            var developer = developers[0];

            CollectionAssert.AreEquivalent(new[] { "sessionA", "sessionB" }, developer.SessionIds);
        }
コード例 #5
0
        public void ShouldAddNextEventWhenEnabled()
        {
            _uut.AddEventAfterBreakToStatistic = true;

            var triggeredAt = DateTimeFactory.SomeWorkingHoursDateTime();

            var someEvent = new TestIDEEvent
            {
                TriggeredAt = triggeredAt
            };
            var eventAfterBreak = new CommandEvent
            {
                TriggeredAt = triggeredAt + _uut.MinBreakTime
            };

            _uut.OnStreamStarts(new Developer());
            _uut.OnEvent(someEvent);
            _uut.OnEvent(eventAfterBreak);
            _uut.OnStreamEnds();

            var expectedStatistic = new Dictionary<string, Tuple<TimeSpan, int>>
            {
                {
                    String.Format(
                        "{0}{1}{2}",
                        EventMappingUtils.GetAbstractStringOf(new TestIDEEvent()),
                        AverageBreakAfterEventsCalculator.EventAfterBreakSeparator,
                        EventMappingUtils.GetAbstractStringOf(new CommandEvent())),
                    new Tuple<TimeSpan, int>(_uut.MinBreakTime, 1)
                }
            };
            CollectionAssert.AreEquivalent(expectedStatistic, _uut.Statistic);
        }
コード例 #6
0
        public void Equality_Default()
        {
            var a = new TestIDEEvent();
            var b = new TestIDEEvent();

            Assert.AreEqual(a, b);
            Assert.AreEqual(a.GetHashCode(), b.GetHashCode());
        }
コード例 #7
0
        protected TestIDEEvent GivenEventExists(String sessionId, String value = "", DateTime?triggeredAt = null)
        {
            var testIDEEvent = new TestIDEEvent {
                IDESessionUUID = sessionId, TestProperty = value, TriggeredAt = triggeredAt
            };
            var ideEventCollection = TestFeedbackDatabase.GetEventsCollection();

            ideEventCollection.Insert(testIDEEvent);
            return(testIDEEvent);
        }
コード例 #8
0
        public void ShouldHaveNoEndTimeWithoutDuration()
        {
            var ideEvent = new TestIDEEvent
            {
                TriggeredAt = DateTime.Now,
                Duration    = null
            };

            Assert.IsNull(ideEvent.TerminatedAt);
        }
コード例 #9
0
        public void CollectsActiveWindow()
        {
            var ideEvent = new TestIDEEvent {
                ActiveWindow = Names.Window("active window name")
            };

            Process(ideEvent);

            AssertNameCollected(ideEvent.ActiveWindow);
        }
コード例 #10
0
        public void CollectsActiveDocument()
        {
            var ideEvent = new TestIDEEvent {
                ActiveDocument = Names.Document("active document name")
            };

            Process(ideEvent);

            AssertNameCollected(ideEvent.ActiveDocument);
        }
コード例 #11
0
        public void ShouldHaveNoEndTimeWithoutStartTime()
        {
            var ideEvent = new TestIDEEvent
            {
                TriggeredAt = null,
                Duration    = TimeSpan.FromMinutes(9)
            };

            Assert.IsNull(ideEvent.TerminatedAt);
        }
コード例 #12
0
        public void Equality_DifferentId()
        {
            var a = new TestIDEEvent
            {
                Id = "1"
            };
            var b = new TestIDEEvent();

            Assert.AreNotEqual(a, b);
            Assert.AreNotEqual(a.GetHashCode(), b.GetHashCode());
        }
コード例 #13
0
        public void ShouldDeriveEndTimeFromStartTimeAndDuration()
        {
            var now      = DateTimeOffset.Now;
            var expected = now.AddSeconds(3);
            var ideEvent = new TestIDEEvent
            {
                TriggeredAt = now,
                Duration    = TimeSpan.FromSeconds(3)
            };

            Assert.AreEqual(expected, ideEvent.TerminatedAt);
        }
コード例 #14
0
        public void ShouldDeriveDurationFromStartAndEndTime()
        {
            var expected = TimeSpan.FromSeconds(1);
            var now      = DateTime.Now;
            var ideEvent = new TestIDEEvent
            {
                TriggeredAt  = now,
                TerminatedAt = now.AddSeconds(1)
            };

            Assert.AreEqual(expected, ideEvent.Duration);
        }
コード例 #15
0
        public void DefaultValues()
        {
            var sut = new TestIDEEvent();

            Assert.AreEqual(null, sut.Id);
            Assert.AreEqual(null, sut.ActiveDocument);
            Assert.AreEqual(null, sut.ActiveWindow);
            Assert.AreEqual(null, sut.Duration);
            Assert.AreEqual(null, sut.IDESessionUUID);
            Assert.AreEqual(null, sut.KaVEVersion);
            Assert.AreEqual(null, sut.TerminatedAt);
            Assert.AreEqual(null, sut.TriggeredAt);
            Assert.AreEqual(EventTrigger.Unknown, sut.TriggeredBy);
        }
コード例 #16
0
        public void ShouldRaiseEntryAddedOnAppend()
        {
            IDEEvent actual = null;

            _uut.EntryAppended += entry => actual = entry;

            var expected = new TestIDEEvent {
                TestProperty = "0xDEADBEEF"
            };

            _uut.Append(expected);

            Assert.AreEqual(expected, actual);
        }
        public void FiltersDuplicate()
        {
            var @event = new TestIDEEvent
            {
                IDESessionUUID = "sessionA",
                TestProperty   = "a",
                TriggeredAt    = new DateTimeOffset()
            };

            GivenInputArchive("0.zip").With("0.json", @event).With("1.json", @event);

            WhenImportIsRun();

            Assert.AreEqual(1, TestFeedbackDatabase.GetEventsCollection().FindAll().Count());
        }
コード例 #18
0
        public void ShouldSerializeAllFieldsOfEvent()
        {
            var ideEvent = new TestIDEEvent
            {
                IDESessionUUID = "0xDEADBEEF",
                KaVEVersion    = "1.2.3.4",
                ActiveDocument = Names.Document("d Random"),
                ActiveWindow   = Names.Window("w Random"),
                TriggeredBy    = EventTrigger.Click,
                TriggeredAt    = System.DateTime.Now,
                Duration       = TimeSpan.FromSeconds(5)
            };

            JsonAssert.SerializationPreservesData(ideEvent);
        }
コード例 #19
0
        public void ShouldCombineResultsForMultipleDeveloperStreams()
        {
            _uut.MaxEventsBeforeBreak = 2;

            var triggeredAt = DateTimeFactory.SomeWorkingHoursDateTime();

            var firstEvent = new TestIDEEvent
            {
                TriggeredAt = triggeredAt
            };
            var secondEvent = new CommandEvent
            {
                TriggeredAt = triggeredAt
            };
            var lateEvent = new TestIDEEvent
            {
                TriggeredAt = triggeredAt + _uut.MinBreakTime
            };

            var listOfEvents = new List<IDEEvent>
            {
                firstEvent,
                secondEvent,
                lateEvent
            };

            _uut.OnStreamStarts(new Developer());
            listOfEvents.ForEach(@event => _uut.OnEvent(@event));
            _uut.OnStreamEnds();

            _uut.OnStreamStarts(new Developer());
            listOfEvents.ForEach(@event => _uut.OnEvent(@event));
            _uut.OnStreamEnds();


            var expectedStatistic = new Dictionary<string, Tuple<TimeSpan, int>>
            {
                {
                    String.Format(
                        "{0}{1}{2}",
                        EventMappingUtils.GetAbstractStringOf(new TestIDEEvent()),
                        AverageBreakAfterEventsCalculator.StatisticStringSeparator,
                        EventMappingUtils.GetAbstractStringOf(new CommandEvent())),
                    new Tuple<TimeSpan, int>(_uut.MinBreakTime, 2)
                }
            };
            CollectionAssert.AreEquivalent(expectedStatistic, _uut.Statistic);
        }
コード例 #20
0
        public static IDEEvent SomeEventFor(Developer developer, DateTime?triggeredAt = null)
        {
            if (triggeredAt == null)
            {
                triggeredAt = DateTime.Now;
            }

            var ideEvent = new TestIDEEvent
            {
                IDESessionUUID = developer.SessionIds.First(),
                TriggeredAt    = triggeredAt,
                TestProperty   = _eventValue.ToString(CultureInfo.InvariantCulture)
            };

            _eventValue++;
            return(ideEvent);
        }
コード例 #21
0
        public void ShouldWriteEntriesOnAppend()
        {
            var evt1 = new TestIDEEvent {
                TestProperty = "23"
            };
            var evt2 = new TestIDEEvent {
                TestProperty = "42"
            };

            _uut.Append(evt1);
            _uut.Append(evt2);

            var expected = CreateLogString(evt1, evt2);
            var actual   = _memoryFile.Content;

            Assert.AreEqual(expected, actual);
        }
コード例 #22
0
        public void ShouldSerializeToString()
        {
            var ideEvent = new TestIDEEvent
            {
                ActiveDocument = Names.Document("d SomeDocument"),
                ActiveWindow   = Names.Window("w SomeWindow"),
                Duration       = new TimeSpan(0, 0, 1),
                IDESessionUUID = "0xDEADBEEF",
                KaVEVersion    = "1.2.3.4",
                TriggeredAt    = new DateTimeOffset(2010, 01, 01, 12, 30, 44, TimeSpan.FromHours(3)),
                TriggeredBy    = EventTrigger.Click
            };

            const string expected =
                "{\"$type\":\"KaVE.Commons.TestUtils.Model.Events.TestIDEEvent, KaVE.Commons.TestUtils\",\"IDESessionUUID\":\"0xDEADBEEF\",\"KaVEVersion\":\"1.2.3.4\",\"TriggeredAt\":\"2010-01-01T12:30:44+03:00\",\"TriggeredBy\":1,\"Duration\":\"00:00:01\",\"ActiveWindow\":\"0Win:w SomeWindow\",\"ActiveDocument\":\"0Doc:d SomeDocument\"}";

            JsonAssert.SerializesTo(ideEvent, expected);
        }
コード例 #23
0
        public void ShouldRaiseEntriesRemovedForRemovedEntries()
        {
            GivenWritableTempFile();
            var target = new TestIDEEvent {
                TestProperty = "B"
            };

            GivenTestLogContains(new TestIDEEvent {
                TestProperty = "A"
            }, target);

            IEnumerable <IDEEvent> actuals = null;

            _uut.EntriesRemoved += entries => actuals = entries;

            _uut.RemoveRange(new[] { target });

            CollectionAssert.AreEqual(new[] { target }, actuals);
        }
コード例 #24
0
        public void ShouldRemoveOldEntries()
        {
            var tempFile = GivenWritableTempFile();
            var evt1     = new TestIDEEvent {
                TriggeredAt = new DateTime(2014, 3, 10, 14, 0, 0)
            };
            var evt2 = new TestIDEEvent {
                TriggeredAt = new DateTime(2014, 3, 10, 16, 0, 0)
            };
            var evt3 = new TestIDEEvent {
                TriggeredAt = new DateTime(2014, 3, 10, 13, 0, 0)
            };

            GivenTestLogContains(evt1, evt2, evt3);

            _uut.RemoveEntriesOlderThan(new DateTime(2014, 3, 10, 15, 0, 0));

            AssertLogFileContent(tempFile, evt2);
            AssertThatLogWasReplacedWithTempFile();
        }
コード例 #25
0
        public void ShouldRemoveEntries()
        {
            var tempFile = GivenWritableTempFile();

            var evt1 = new TestIDEEvent {
                TestProperty = "1"
            };
            var evt2 = new TestIDEEvent {
                TestProperty = "2"
            };
            var evt3 = new TestIDEEvent {
                TestProperty = "3"
            };

            GivenTestLogContains(evt1, evt2, evt3);

            _uut.RemoveRange(new[] { evt1, evt3 });

            AssertLogFileContent(tempFile, evt2);
            AssertThatLogWasReplacedWithTempFile();
        }
        public void TreatsIDEStateEventAsAnonymousEventIfWholeArchiveIsAnonymous()
        {
            var anonymousEvent = new TestIDEEvent {
                IDESessionUUID = null
            };

            GivenInputArchive("0.zip")
            .With("0.json", anonymousEvent)
            .With("1.json", _brokenShutdownEvent);

            WhenImportIsRun();

            var onlyDeveloper = TestFeedbackDatabase.GetDeveloperCollection().FindAll().First();
            var expected      = new IDEStateEvent
            {
                IDESessionUUID    = onlyDeveloper.Id.ToString(),
                TriggeredAt       = _brokenShutdownEvent.TriggeredAt,
                IDELifecyclePhase = _brokenShutdownEvent.IDELifecyclePhase
            };

            CollectionAssert.Contains(TestFeedbackDatabase.GetEventsCollection().FindAll(), expected);
        }
コード例 #27
0
        public void ShouldNotUseMoreThanMaximumEventsBeforeBreakForStatistic()
        {
            _uut.MaxEventsBeforeBreak = 1;

            var triggeredAt = DateTimeFactory.SomeWorkingHoursDateTime();

            var firstEvent = new TestIDEEvent
            {
                TriggeredAt = triggeredAt
            };
            var secondEvent = new CommandEvent
            {
                TriggeredAt = triggeredAt
            };
            var lateEvent = new TestIDEEvent
            {
                TriggeredAt = triggeredAt + _uut.MinBreakTime
            };

            var listOfEvents = new List<IDEEvent>
            {
                firstEvent,
                secondEvent,
                lateEvent
            };

            _uut.OnStreamStarts(new Developer());
            listOfEvents.ForEach(@event => _uut.OnEvent(@event));
            _uut.OnStreamEnds();

            var expectedStatistic = new Dictionary<string, Tuple<TimeSpan, int>>
            {
                {
                    EventMappingUtils.GetAbstractStringOf(new CommandEvent()),
                    new Tuple<TimeSpan, int>(_uut.MinBreakTime, 1)
                }
            };
            CollectionAssert.AreEquivalent(expectedStatistic, _uut.Statistic);
        }
コード例 #28
0
        public void ShouldRaiseEntriesRemovedForRemovedOldEntries()
        {
            GivenWritableTempFile();
            var evt1 = new TestIDEEvent {
                TriggeredAt = new DateTime(2014, 3, 10, 5, 29, 0)
            };
            var evt2 = new TestIDEEvent {
                TriggeredAt = new DateTime(2014, 3, 10, 5, 42, 0)
            };
            var evt3 = new TestIDEEvent {
                TriggeredAt = new DateTime(2014, 3, 10, 5, 35, 0)
            };

            GivenTestLogContains(evt1, evt2, evt3);

            IEnumerable <IDEEvent> actuals = null;

            _uut.EntriesRemoved += entries => actuals = entries;

            _uut.RemoveEntriesOlderThan(new DateTime(2014, 3, 10, 5, 36, 0));

            CollectionAssert.AreEqual(new[] { evt1, evt3 }, actuals);
        }
コード例 #29
0
        public void DoesntProcessEventsWithInsufficientTimeData()
        {
            var goodEvent = new TestIDEEvent
            {
                KaVEVersion  = "0.0-Default",
                TriggeredAt  = DateTime.Now,
                TerminatedAt = DateTime.Now
            };
            var badEvent = new TestIDEEvent
            {
                KaVEVersion = "0.0-Default",
                TriggeredAt = DateTime.Now.AddMinutes(-1)
            };


            InitTransformer().TransformWithCustomTransformer(
                new[] { goodEvent, badEvent },
                _testTransformer);

            Mock.Get(_fixer).Verify(f => f.FixAndFilter(It.IsAny <IEnumerable <IDEEvent> >()));

            CollectionAssert.AreEqual(new[] { goodEvent }, _processedEvents);
        }