public void GivenValidTemplate_WhenCreateObservationGroups_ThenCorrectProcessorInvoked_Test()
        {
            var template = Substitute.For <IFhirTemplate>();
            var lookup   = Substitute.For <ILookupTemplate <IFhirTemplate> >();

            lookup.GetTemplate("a").Returns(template);
            var measurementGroup = Substitute.For <IMeasurementGroup>();

            measurementGroup.MeasureType.Returns("a");

            var data = new IObservationGroup[] { };
            var p1   = Substitute.For <IFhirTemplateProcessor <IFhirTemplate, string> >();

            p1.SupportedTemplateType.Returns(template.GetType());
            p1.CreateObservationGroups(null, null).ReturnsForAnyArgs(data);

            var processor = new TestFhirLookupTemplateProcessor(p1);
            var result    = processor.CreateObservationGroups(lookup, measurementGroup);

            Assert.Equal(data, result);

            _ = measurementGroup.Received(1).MeasureType;
            lookup.Received(1).GetTemplate("a");
            template.Received(1).GetType();

            p1.Received(1).CreateObservationGroups(template, measurementGroup);
        }
        public void GivenValidTemplate_WhenMergeObservation_ThenCorrectProcessorInvoked_Test()
        {
            var template = Substitute.For <IFhirTemplate>();
            var lookup   = Substitute.For <ILookupTemplate <IFhirTemplate> >();

            lookup.GetTemplate("a").Returns(template);
            var observationGroup = Substitute.For <IObservationGroup>();

            observationGroup.Name.Returns("a");

            var p1 = Substitute.For <IFhirTemplateProcessor <IFhirTemplate, string> >();

            p1.SupportedTemplateType.Returns(template.GetType());
            p1.MergeObservation(null, null, null).ReturnsForAnyArgs("merge");

            var processor = new TestFhirLookupTemplateProcessor(p1);
            var result    = processor.MergeObservation(lookup, observationGroup, "data");

            Assert.Equal("merge", result);

            _ = observationGroup.Received(1).Name;
            lookup.Received(1).GetTemplate("a");
            template.Received(1).GetType();

            p1.Received(1).MergeObservation(template, observationGroup, "data");
        }
        public void GivenDefaultCtor_WhenSupportedValueTypeAccessed_ThenValueReturned_Test()
        {
            var p1 = Substitute.For <IFhirTemplateProcessor <IFhirTemplate, string> >();

            p1.SupportedTemplateType.Returns(typeof(IFhirTemplate));
            var processor = new TestFhirLookupTemplateProcessor(p1);

            Assert.NotNull(processor.SupportedTemplateType);
        }
        public void GivenTemplateWithNoMatchingProcessor_WhenCreateObservationGroups_ThenNotSupportedExceptionThrown_Test()
        {
            var p1 = Substitute.For <IFhirTemplateProcessor <IFhirTemplate, string> >();

            p1.SupportedTemplateType.Returns(typeof(IFhirTemplate));

            var template = Substitute.For <IFhirTemplate>();
            var lookup   = Substitute.For <ILookupTemplate <IFhirTemplate> >();

            lookup.GetTemplate("a").Returns(template);
            var measurementGroup = Substitute.For <IMeasurementGroup>();

            measurementGroup.MeasureType.Returns("a");

            var processor = new TestFhirLookupTemplateProcessor(p1);
            var ex        = Assert.Throws <NotSupportedException>(() => processor.CreateObservationGroups(lookup, measurementGroup));

            _ = measurementGroup.Received(1).MeasureType;
            lookup.Received(1).GetTemplate("a");
            template.Received(1).GetType();

            p1.DidNotReceiveWithAnyArgs().CreateObservationGroups(null, null);
        }
        public void GivenTemplateWithNoMatchingProcessor_WhenMergeObservation_ThenNotSupportedExceptionThrown_Test()
        {
            var p1 = Substitute.For <IFhirTemplateProcessor <IFhirTemplate, string> >();

            p1.SupportedTemplateType.Returns(typeof(IFhirTemplate));

            var template = Substitute.For <IFhirTemplate>();
            var lookup   = Substitute.For <ILookupTemplate <IFhirTemplate> >();

            lookup.GetTemplate("a").Returns(template);
            var observationGroup = Substitute.For <IObservationGroup>();

            observationGroup.Name.Returns("a");

            var processor = new TestFhirLookupTemplateProcessor(p1);
            var ex        = Assert.Throws <NotSupportedException>(() => processor.MergeObservation(lookup, observationGroup, "data"));

            _ = observationGroup.Received(1).Name;
            lookup.Received(1).GetTemplate("a");
            template.Received(1).GetType();

            p1.DidNotReceiveWithAnyArgs().MergeObservation(null, null, null);
        }