public void GivenValidTemplate_WhenCreateObservation_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.CreateObservation(null, null).ReturnsForAnyArgs("new");

            var processor = new TestFhirLookupTemplateProcessor(p1);
            var result    = processor.CreateObservation(lookup, observationGroup);

            Assert.Equal("new", result);

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

            p1.Received(1).CreateObservation(template, observationGroup);
        }
        public void GivenTemplateWithNoMatchingProcessor_WhenCreateObservation_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.CreateObservation(lookup, observationGroup));

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

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