public void GetAttribute_ClassWithAttributeGetAttributeFromInstance_ResultIsExpectedAttribute()
        {
            TestClassWithAttributes instance = new TestClassWithAttributes();

            Object actual = instance.GetAttribute <TestClassWithAttributes, TestDummyAttribute>();

            Assert.That(actual, Is.InstanceOf <TestDummyAttribute>());
        }
        public void GetAttribute_ClassWithAttributeGetAttributeFromInstanceMemberLowerCase_ResultIsExpectedAttribute(String name)
        {
            TestClassWithAttributes instance = new TestClassWithAttributes();

            Object actual = instance.GetAttribute <TestClassWithAttributes, TestDummyAttribute>(name.ToLower());

            Assert.That(actual, Is.InstanceOf <TestDummyAttribute>());
            Assert.That(((TestDummyAttribute)actual).Name, Is.EqualTo(name));
        }
        public void InitializesAllProperties()
        {
            var instance = new TestClassWithAttributes();

            instance.EventWithoutParameters.Should().NotBeNull();
            instance.EventWithOneParameter.Should().NotBeNull();
            instance.EventWithTwoParameters.Should().NotBeNull();
            instance.EventWithThreeParameters.Should().NotBeNull();
            instance.EventWithFourParameters.Should().NotBeNull();
        }
        public void TracksTheEventWithCorrectNameWithoutAnyParameters()
        {
            var instance = new TestClassWithAttributes();

            instance.EventWithoutParameters.Track();

            instance.AnalyticsService.Received().Track(
                "EventWithoutParameters",
                Arg.Is <Dictionary <string, string> >(dict => dict.Count == 0));
        }
        public void InitializesAllPropertiesToAnalyticsEventInstancesWithCorrectGenerics()
        {
            var instance = new TestClassWithAttributes();

            instance.EventWithoutParameters.Should().BeOfType <AnalyticsEvent>();
            instance.EventWithOneParameter.Should().BeOfType <AnalyticsEvent <int> >();
            instance.EventWithTwoParameters.Should().BeOfType <AnalyticsEvent <string, DateTimeOffset> >();
            instance.EventWithThreeParameters.Should().BeOfType <AnalyticsEvent <long, bool, object> >();
            instance.EventWithFourParameters.Should().BeOfType <AnalyticsEvent <long, bool, object, Exception> >();
        }
        public void TracksTheEventWithCorrectNameAndWithOneNamedParameter()
        {
            var instance = new TestClassWithAttributes();

            instance.EventWithOneParameter.Track(123);

            instance.AnalyticsService.Received().Track(
                "EventWithOneParameter",
                Arg.Is <Dictionary <string, string> >(dict =>
                                                      dict.ContainsKey("NameOfParameter") &&
                                                      dict["NameOfParameter"] == "123"));
        }
        public void TracksTheEventWithCorrectNameAndWithTwoNamedParameters()
        {
            var date     = new DateTimeOffset(2018, 01, 01, 12, 34, 56, TimeSpan.FromHours(4));
            var instance = new TestClassWithAttributes();

            instance.EventWithTwoParameters.Track("abcde", date);

            instance.AnalyticsService.Received().Track(
                "EventWithTwoParameters",
                Arg.Is <Dictionary <string, string> >(dict =>
                                                      dict.ContainsKey("NameOfParameterA") &&
                                                      dict.ContainsKey("NameOfParameterB") &&
                                                      dict["NameOfParameterA"] == "abcde" &&
                                                      dict["NameOfParameterB"] == date.ToString()));
        }
        public void TracksTheEventWithCorrectNameAndWithThreeNamedParameters()
        {
            var instance = new TestClassWithAttributes();

            instance.EventWithThreeParameters.Track(123L, true, string.Empty);

            instance.AnalyticsService.Received().Track(
                "EventWithThreeParameters",
                Arg.Is <Dictionary <string, string> >(dict =>
                                                      dict.ContainsKey("NameOfParameter1") &&
                                                      dict.ContainsKey("NameOfParameter2") &&
                                                      dict.ContainsKey("NameOfParameter3") &&
                                                      dict["NameOfParameter1"] == "123" &&
                                                      dict["NameOfParameter2"] == "True" &&
                                                      dict["NameOfParameter3"] == string.Empty));
        }
        public void TracksTheEventWithCorrectNameAndWithFourNamedParameters()
        {
            var exception = new InvalidOperationException();
            var instance  = new TestClassWithAttributes();

            instance.EventWithFourParameters.Track(123L, true, string.Empty, exception);

            instance.AnalyticsService.Received().Track(
                "EventWithFourParameters",
                Arg.Is <Dictionary <string, string> >(dict =>
                                                      dict.ContainsKey("NameOfParameterI") &&
                                                      dict.ContainsKey("NameOfParameterII") &&
                                                      dict.ContainsKey("NameOfParameterIII") &&
                                                      dict.ContainsKey("NameOfParameterIV") &&
                                                      dict["NameOfParameterI"] == "123" &&
                                                      dict["NameOfParameterII"] == "True" &&
                                                      dict["NameOfParameterIII"] == string.Empty &&
                                                      dict["NameOfParameterIV"] == exception.ToString()));
        }