public void EstablishAvailability_ThrowsOnCircularReferences()
        {
            var cooker0 = new TestSourceDataCookerReference
            {
                Path = new DataCookerPath("TestSourceParser", "Cooker0"),
            };

            var cooker1 = new TestSourceDataCookerReference
            {
                Path = new DataCookerPath("TestSourceParser", "Cooker1"),
            };

            var cooker2 = new TestSourceDataCookerReference
            {
                Path = new DataCookerPath("TestSourceParser", "Cooker2"),
            };

            // the repository has all source cookers
            var testRepo = new TestDataExtensionRepository();

            testRepo.sourceCookersByPath.Add(cooker0.Path, cooker0);
            testRepo.sourceCookersByPath.Add(cooker1.Path, cooker1);
            testRepo.sourceCookersByPath.Add(cooker2.Path, cooker2);

            // setup the requirements for the cookers
            cooker0.requiredDataCookers.Add(cooker1.Path);
            cooker1.requiredDataCookers.Add(cooker2.Path);
            cooker2.requiredDataCookers.Add(cooker0.Path);

            cooker0.ProcessDependencies(testRepo);

            Assert.IsTrue(cooker0.Availability == DataExtensionAvailability.Error);
            Assert.AreEqual(cooker0.DependencyState.Errors.Count, 1);
        }
        public void EstablishAvailability_OneErroredDataCooker()
        {
            var cooker0 = new TestSourceDataCookerReference
            {
                Path = new DataCookerPath("TestSourceParser", "Cooker0"),
            };

            var cooker1 = new TestSourceDataCookerReference(false)
            {
                Path         = new DataCookerPath("TestSourceParser", "Cooker1"),
                availability = DataExtensionAvailability.Error,
            };

            var testRepo = new TestDataExtensionRepository();

            testRepo.sourceCookersByPath.Add(cooker0.Path, cooker0);
            testRepo.sourceCookersByPath.Add(cooker1.Path, cooker1);

            cooker0.requiredDataCookers.Add(new DataCookerPath(cooker1.Path));

            cooker0.ProcessDependencies(testRepo);

            Assert.IsTrue(cooker0.Availability == DataExtensionAvailability.IndirectError);
            Assert.AreEqual(cooker0.DependencyState.Errors.Count, 1);
            Assert.AreEqual(cooker0.DependencyReferences.RequiredSourceDataCookerPaths.Count, 1);
        }
        public void EstablishAvailability_NoDependencies()
        {
            var testRepo = new TestDataExtensionRepository();

            var cooker0 = new TestSourceDataCookerReference
            {
                Path = new DataCookerPath("TestSourceParser", "Cooker0"),
            };

            cooker0.ProcessDependencies(testRepo);

            Assert.IsTrue(cooker0.Availability == DataExtensionAvailability.Available);
            Assert.AreEqual(cooker0.DependencyState.Errors.Count, 0);
            Assert.AreEqual(cooker0.DependencyReferences.RequiredSourceDataCookerPaths.Count, 0);
        }
        public void EstablishAvailability_MissingDependency()
        {
            var cooker0 = new TestSourceDataCookerReference
            {
                Path = new DataCookerPath("TestSourceParser", "Cooker0"),
            };

            // the repository has all source cookers
            var testRepo = new TestDataExtensionRepository();

            testRepo.sourceCookersByPath.Add(cooker0.Path, cooker0);

            // setup the requirements for the cookers
            cooker0.requiredDataCookers.Add(new DataCookerPath("TestSourceParser", "Cooker1"));

            cooker0.ProcessDependencies(testRepo);

            Assert.IsTrue(cooker0.Availability == DataExtensionAvailability.MissingRequirement);
            Assert.AreEqual(cooker0.DependencyState.Errors.Count, 0);
            Assert.AreEqual(cooker0.DependencyState.MissingDataCookers.Count, 1);
            Assert.AreEqual(cooker0.DependencyReferences.RequiredSourceDataCookerPaths.Count, 0);
        }
        public void EstablishAvailability_PerformAdditionalValidationIsCalled()
        {
            var cooker0 = new TestSourceDataCookerReference
            {
                Path = new DataCookerPath("TestSourceParser0", "Cooker0"),
            };

            var cooker1 = new TestSourceDataCookerReference
            {
                Path = new DataCookerPath("TestSourceParser1", "Cooker1"),
            };

            var testRepo = new TestDataExtensionRepository();

            testRepo.sourceCookersByPath.Add(cooker0.Path, cooker0);
            testRepo.sourceCookersByPath.Add(cooker1.Path, cooker1);

            cooker0.requiredDataCookers.Add(new DataCookerPath(cooker1.Path));

            cooker0.ProcessDependencies(testRepo);

            Assert.IsTrue(cooker0.Availability == DataExtensionAvailability.Error);
            Assert.AreEqual(cooker0.DependencyState.Errors.Count, 1);
        }