System.Reactive.EventStreamSpec.WhenPatientReadmitted_ThenRaiseAlert C# (CSharp) Method

WhenPatientReadmitted_ThenRaiseAlert() private method

private WhenPatientReadmitted_ThenRaiseAlert ( ) : void
return void
        public void WhenPatientReadmitted_ThenRaiseAlert()
        {
            var events = new EventStream();
            var query =
                from discharged in events.Of<PatientLeftHospital>()
                from admitted in events.Of<PatientEnteredHospital>()
                where
                    admitted.PatientId == discharged.PatientId &&
                    (admitted.When - discharged.When).Days < 5
                select admitted;


            var readmitted = new List<int>();

            using (var subscription = query.Subscribe(e => readmitted.Add(e.PatientId)))
            {
                // Two patients come in.
                events.Push(new PatientEnteredHospital { PatientId = 1, When = new DateTime(2011, 1, 1) });
                events.Push(new PatientEnteredHospital { PatientId = 2, When = new DateTime(2011, 1, 1) });

                // Both leave same day.
                events.Push(new PatientLeftHospital { PatientId = 1, When = new DateTime(2011, 1, 15) });
                events.Push(new PatientLeftHospital { PatientId = 2, When = new DateTime(2011, 1, 15) });

                // One comes back before 5 days passed.
                events.Push(new PatientEnteredHospital { PatientId = 1, When = new DateTime(2011, 1, 18) });

                // The other comes back after 10 days passed.
                events.Push(new PatientEnteredHospital { PatientId = 1, When = new DateTime(2011, 1, 25) });
            }

            // We should have an alert for patient 1 who came back before 5 days passed.
            Assert.Equal(1, readmitted.Count);
            Assert.Equal(1, readmitted[0]);
        }