public void GivenTokenAndLastTemplateMatches_WhenGetMeasurements_MeasurementsReturned_Test()
        {
            var m1 = new Measurement();

            var template       = new CollectionContentTemplate();
            var innerTemplate1 = Substitute.For <IContentTemplate>();

            innerTemplate1.GetMeasurements(null).ReturnsForAnyArgs(t => Enumerable.Empty <Measurement>());
            var innerTemplate2 = Substitute.For <IContentTemplate>();

            innerTemplate2.GetMeasurements(null).ReturnsForAnyArgs(t => new[] { m1 });

            template.RegisterTemplate(innerTemplate1)
            .RegisterTemplate(innerTemplate2);

            var token = JToken.FromObject(new object());

            var measurements = template.GetMeasurements(token);

            Assert.Collection(measurements, m =>
            {
                Assert.Equal(m1, m);
            });

            innerTemplate1.Received(1).GetMeasurements(Arg.Is <JToken>(t => t == token));
            innerTemplate2.Received(1).GetMeasurements(Arg.Is <JToken>(t => t == token));
        }
        public void GivenTokenAndNoTemplates_WhenGetMeasurements_EmptyCollectionReturned_Test()
        {
            var template = new CollectionContentTemplate();
            var token    = JToken.FromObject(new object());

            var measurements = template.GetMeasurements(token);

            Assert.Empty(measurements);
        }
        public void GivenTokenAndAllTemplatesMatchAndMultipleResultsGeneratedPerTemplate_WhenGetMeasurements_MeasurementsReturned_Test()
        {
            var m1 = new Measurement();
            var m2 = new Measurement();
            var m3 = new Measurement();

            var template       = new CollectionContentTemplate();
            var innerTemplate1 = Substitute.For <IContentTemplate>();

            innerTemplate1.GetMeasurements(null).ReturnsForAnyArgs(t => new[] { m1 });
            var innerTemplate2 = Substitute.For <IContentTemplate>();

            innerTemplate2.GetMeasurements(null).ReturnsForAnyArgs(t => new[] { m2, m3 });

            template.RegisterTemplate(innerTemplate1)
            .RegisterTemplate(innerTemplate2);

            var token = JToken.FromObject(new object());

            var measurements = template.GetMeasurements(token);

            Assert.Collection(
                measurements,
                m =>
            {
                Assert.Equal(m1, m);
            },
                m =>
            {
                Assert.Equal(m2, m);
            },
                m =>
            {
                Assert.Equal(m3, m);
            });

            innerTemplate1.Received(1).GetMeasurements(Arg.Is <JToken>(t => t == token));
            innerTemplate2.Received(1).GetMeasurements(Arg.Is <JToken>(t => t == token));
        }
        public void GivenTokenAndNoMatchingTemplates_WhenGetMeasurements_EmptyCollectionReturned_Test()
        {
            var template       = new CollectionContentTemplate();
            var innerTemplate1 = Substitute.For <IContentTemplate>();

            innerTemplate1.GetMeasurements(null).ReturnsForAnyArgs(t => Enumerable.Empty <Measurement>());
            var innerTemplate2 = Substitute.For <IContentTemplate>();

            innerTemplate2.GetMeasurements(null).ReturnsForAnyArgs(t => Enumerable.Empty <Measurement>());

            template.RegisterTemplate(innerTemplate1)
            .RegisterTemplate(innerTemplate2);

            var token = JToken.FromObject(new object());

            var measurements = template.GetMeasurements(token);

            Assert.Empty(measurements);

            innerTemplate1.Received(1).GetMeasurements(Arg.Is <JToken>(t => t == token));
            innerTemplate2.Received(1).GetMeasurements(Arg.Is <JToken>(t => t == token));
        }