Exemple #1
0
        public void Detect_ReturnsNull_ForSourceRepoWithServerJs_NotInRootDirectory()
        {
            // Arrange
            var version  = "8.11.2";
            var detector = CreateNodePlatformDetector(
                supportedNodeVersions: new[] { version },
                defaultVersion: version,
                new NodeScriptGeneratorOptions());
            var repo = new MemorySourceRepo();

            repo.AddFile(SamplePackageJsonContents.SimpleServerJs, "subDir1", "server.js");
            var context = CreateContext(repo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.Null(result);
        }
Exemple #2
0
        public void Detect_ReturnsNull_IfIISStartupFileIsPresent(string iisStartupFileName)
        {
            // Arrange
            var version    = "8.11.2";
            var sourceRepo = new MemorySourceRepo();

            sourceRepo.AddFile("", iisStartupFileName);
            var detector = CreateNodePlatformDetector(
                supportedNodeVersions: new[] { version },
                defaultVersion: version,
                new NodeScriptGeneratorOptions());
            var context = CreateContext(sourceRepo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.Null(result);
        }
Exemple #3
0
        public void Detect_ReturnsLernaNpmClientName_IfLernaJsonFileExists()
        {
            // Arrange
            var sourceRepo = new MemorySourceRepo();

            sourceRepo.AddFile("", NodeConstants.PackageJsonFileName);
            sourceRepo.AddFile("", NodeConstants.YarnLockFileName);
            sourceRepo.AddFile(LernaJsonWithNpmClient, NodeConstants.LernaJsonFileName);
            var detector = CreateNodePlatformDetector();
            var context  = CreateContext(sourceRepo);

            // Act
            var result = (NodePlatformDetectorResult)detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.True(result.HasLernaJsonFile);
            Assert.Equal(result.LernaNpmClient, NodeConstants.YarnToolName);
        }
Exemple #4
0
        public void Detect_ReturnsVersionFromPackageJson_IfEnvironmentVariableValueIsNotPresent()
        {
            // Arrange
            var detector    = CreateNodePlatformDetector();
            var repo        = new MemorySourceRepo();
            var packageJson = PackageJsonTemplateWithNodeVersion.Replace("#VERSION_RANGE#", "6.11.0");

            repo.AddFile(packageJson, NodeConstants.PackageJsonFileName);
            var context = CreateContext(repo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal("nodejs", result.Platform);
            Assert.Equal("6.11.0", result.PlatformVersion);
            Assert.Equal(string.Empty, result.AppDirectory);
        }
Exemple #5
0
        public void Detect_ReturnsFalse_ForSourceRepoHasInvalidyamlYarnlockFile()
        {
            // Arrange
            var detector = CreateNodePlatformDetector();
            var repo     = new MemorySourceRepo();

            repo.AddFile(SampleInvalidYAMLYarnLockfile, NodeConstants.YarnLockFileName);
            var context = CreateContext(repo);

            // Act
            var result = (NodePlatformDetectorResult)detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal("nodejs", result.Platform);
            Assert.Null(result.PlatformVersion);
            Assert.Equal(string.Empty, result.AppDirectory);
            Assert.False(result.IsYarnLockFileValidYamlFormat);
        }
Exemple #6
0
        public void GeneratedScript_DoesNotZipNodeModules_IfZipNodeModulesEnvironmentVariable_False()
        {
            // Arrange
            var scriptGenerator = GetNodePlatform(
                defaultNodeVersion: NodeVersions.Node12Version,
                new BuildScriptGeneratorOptions {
                PlatformVersion = "8.2.1"
            },
                new NodeScriptGeneratorOptions());
            var repo = new MemorySourceRepo();

            repo.AddFile(PackageJsonWithBuildScript, NodeConstants.PackageJsonFileName);
            var context        = CreateScriptGeneratorContext(repo);
            var detectorResult = new NodePlatformDetectorResult
            {
                Platform        = NodeConstants.PlatformName,
                PlatformVersion = "10.10.10",
            };
            var expected = new NodeBashBuildSnippetProperties
            {
                PackageInstallCommand               = NpmInstallCommand,
                PackageInstallerVersionCommand      = NodeConstants.NpmVersionCommand,
                NpmRunBuildCommand                  = "npm run build",
                NpmRunBuildAzureCommand             = "npm run build:azure",
                HasProdDependencies                 = true,
                HasDevDependencies                  = true,
                ProductionOnlyPackageInstallCommand = string.Format(
                    NodeConstants.ProductionOnlyPackageInstallCommandTemplate,
                    NpmInstallCommand),
                CompressedNodeModulesFileName = null,
                CompressNodeModulesCommand    = null,
            };

            // Act
            var snippet = scriptGenerator.GenerateBashBuildScriptSnippet(context, detectorResult);

            // Assert
            Assert.NotNull(snippet);
            Assert.Equal(
                TemplateHelper.Render(TemplateHelper.TemplateResource.NodeBuildSnippet, expected),
                snippet.BashBuildScriptSnippet);
            Assert.True(scriptGenerator.IsCleanRepo(repo));
        }
Exemple #7
0
        public void GeneratedScript_ConfigureAppInsights_Condition_Satisfied(string version)
        {
            // Condition is node version have to be 8 or newer or node version is 6.12.0
            // As we don't support 6.12.0 in our build image we condition remains node 8 or newer
            // Arrange
            var otherEnvironment = new Dictionary <string, string> {
                { Constants.AppInsightsKey, "xyz" }
            };
            var scriptGenerator = GetNodePlatformInstance(
                defaultNodeVersion: version, otherEnvironment: otherEnvironment);
            var repo = new MemorySourceRepo();

            repo.AddFile(PackageJsonWithBuildScript, NodeConstants.PackageJsonFileName);
            var context = CreateScriptGeneratorContext(repo);

            context.NodeVersion = version;
            //context.LanguageVersion = version;
            var expected = new NodeBashBuildSnippetProperties(
                packageInstallCommand: NpmInstallCommand,
                runBuildCommand: "npm run build",
                runBuildAzureCommand: "npm run build:azure",
                hasProductionOnlyDependencies: true,
                productionOnlyPackageInstallCommand: string.Format(
                    NodeConstants.ProductionOnlyPackageInstallCommandTemplate,
                    NpmInstallCommand),
                compressedNodeModulesFileName: null,
                compressNodeModulesCommand: null,
                appInsightsInjectCommand: "npm install --save applicationinsights",
                appInsightsPackageName: "applicationinsights",
                appInsightsLoaderFileName: "oryx-appinsightsloader.js");

            // Act
            var snippet = scriptGenerator.GenerateBashBuildScriptSnippet(context);

            // Assert
            Assert.NotNull(snippet);
            Assert.Contains("applicationinsights", snippet.BashBuildScriptSnippet);
            Assert.Equal(
                TemplateHelper.Render(TemplateHelper.TemplateResource.NodeBuildSnippet, expected),
                snippet.BashBuildScriptSnippet);
            Assert.True(scriptGenerator.IsCleanRepo(repo));
        }
        public void Detect_Throws_WhenUnsupportedNodeVersion_IsDetected()
        {
            // Arrange
            var version  = "6.11.0";
            var detector = CreateNodePlatformDetector(
                supportedNodeVersions: new[] { version },
                defaultVersion: version,
                new NodeScriptGeneratorOptions());
            var repo    = new MemorySourceRepo();
            var context = CreateContext(repo);

            repo.AddFile(PakageJsonWithUnsupportedNodeVersion, NodeConstants.PackageJsonFileName);

            // Act & Assert
            var exception = Assert.Throws <UnsupportedVersionException>(() => detector.Detect(context));

            Assert.Equal(
                $"Platform '{NodeConstants.PlatformName}' version '20.20.20' is unsupported. Supported versions: {version}",
                exception.Message);
        }
        public void Detect_ReturnsResult_WithDefaultVersion_ForPackageJsonWithNoExplicitVersionsSpecified()
        {
            // Arrange
            var detector = CreateNodePlatformDetector(
                supportedNodeVersions: new[] { NodeConstants.NodeLtsVersion },
                defaultVersion: NodeConstants.NodeLtsVersion,
                new NodeScriptGeneratorOptions());
            var repo = new MemorySourceRepo();

            repo.AddFile(PackageJsonWithNoVersions, NodeConstants.PackageJsonFileName);
            var context = CreateContext(repo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal("nodejs", result.Platform);
            Assert.Equal(NodeConstants.NodeLtsVersion, result.PlatformVersion);
        }
        public void Detect_ReturnsDefaultVersionOfVersionProvider_IfNoVersionFoundInPackageJson_OrOptions()
        {
            // Arrange
            var detector = CreateNodePlatformDetector(
                supportedNodeVersions: new[] { "6.11.0", "8.11.2", "10.14.0" },
                defaultVersion: "8.11.2",
                new NodeScriptGeneratorOptions());
            var repo = new MemorySourceRepo();

            repo.AddFile(PackageJsonWithNoVersions, NodeConstants.PackageJsonFileName);
            var context = CreateContext(repo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal("nodejs", result.Platform);
            Assert.Equal("8.11.2", result.PlatformVersion);
        }
        public void Detect_ReturnsResult_WithDefaultVersion_ForSourceRepoOnlyWithAppJs()
        {
            // Arrange
            var detector = CreateNodePlatformDetector(
                supportedNodeVersions: new[] { NodeConstants.NodeLtsVersion },
                defaultVersion: NodeConstants.NodeLtsVersion,
                new NodeScriptGeneratorOptions());
            var repo = new MemorySourceRepo();

            repo.AddFile("app.js content", "app.js");
            var context = CreateContext(repo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal("nodejs", result.Platform);
            Assert.Equal(NodeConstants.NodeLtsVersion, result.PlatformVersion);
        }
        public void Detect_ReturnsResult_WithDefaultVersion_ForSourceRepoOnlyWithAppJs_AndNoPackageJson()
        {
            // Arrange
            var expectedVersion = "1.2.3";
            var detector        = CreateNodePlatform(
                supportedNodeVersions: new[] { expectedVersion },
                defaultVersion: expectedVersion);
            var repo = new MemorySourceRepo();

            repo.AddFile("app.js content", "app.js");
            var context = CreateContext(repo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(NodeConstants.PlatformName, result.Platform);
            Assert.Equal(expectedVersion, result.PlatformVersion);
        }
        public void Detect_ReturnsDefaultVersionOfVersionProvider_IfNoVersionFoundInPackageJson_OrOptions()
        {
            // Arrange
            var expectedVersion = "8.11.2";
            var detector        = CreateNodePlatform(
                supportedNodeVersions: new[] { "6.11.0", expectedVersion, "10.14.0" },
                defaultVersion: expectedVersion);
            var repo = new MemorySourceRepo();

            repo.AddFile(SamplePackageJsonContents.PackageJsonWithNoVersions, NodeConstants.PackageJsonFileName);
            var context = CreateContext(repo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(NodeConstants.PlatformName, result.Platform);
            Assert.Equal(expectedVersion, result.PlatformVersion);
        }
Exemple #14
0
        public void Detect_Returns_ForSourceRepoHasYarnrcYmlFile_InRootDirectory()
        {
            // Arrange
            var detector = CreateNodePlatformDetector();
            var repo     = new MemorySourceRepo();

            repo.AddFile(SampleValidYAMLYarnLockfile, NodeConstants.YarnLockFileName);
            repo.AddFile("", ".yarnrc.yml");
            var context = CreateContext(repo);

            // Act
            var result = (NodePlatformDetectorResult)detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal("nodejs", result.Platform);
            Assert.Null(result.PlatformVersion);
            Assert.Equal(string.Empty, result.AppDirectory);
            Assert.True(result.HasYarnrcYmlFile);
        }
        public void Detect_ReturnsVersion_FromVersionProvider_IfNoVersionFoundInComposerFile_OrEnvVariable()
        {
            // Arrange
            var environment = new TestEnvironment();
            var detector    = CreatePhpLanguageDetector(
                supportedPhpVersions: new[] { "7.3.14", "7.2.5", "5.6.0" },
                defaultVersion: "7.3.14",
                environment);
            var repo = new MemorySourceRepo();

            repo.AddFile("{}", PhpConstants.ComposerFileName);
            var context = CreateContext(repo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal("7.3.14", result.LanguageVersion);
        }
        public void Detect_ReturnsDefaultVersion_IfNoVersionFoundInComposerFile_OrOptions()
        {
            // Arrange
            var expectedVersion = "7.3.14";
            var platform        = CreatePhpPlatform(
                supportedPhpVersions: new[] { "5.6.0", expectedVersion, "7.2.5" },
                defaultVersion: expectedVersion);
            var repo = new MemorySourceRepo();

            repo.AddFile("{}", PhpConstants.ComposerFileName);
            var context = CreateContext(repo);

            // Act
            var result = platform.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(PhpConstants.PlatformName, result.Platform);
            Assert.Equal(expectedVersion, result.PlatformVersion);
        }
Exemple #17
0
        public void Detect_ReturnsDefaultVersion_ForSourceRepoOnlyWithServerJs_AndNoPackageJson()
        {
            // Arrange
            var expectedVersion = "1.2.3";
            var platform        = CreateNodePlatform(
                supportedNodeVersions: new[] { expectedVersion },
                defaultVersion: expectedVersion);
            var repo = new MemorySourceRepo();

            repo.AddFile(SamplePackageJsonContents.SimpleServerJs, "server.js");
            var context = CreateContext(repo);

            // Act
            var result = platform.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(NodeConstants.PlatformName, result.Platform);
            Assert.Equal(expectedVersion, result.PlatformVersion);
        }
        public void Detect_ReturnsNullVersion_ForPackageJsonWithOnlyNpmVersion()
        {
            // Node detector only looks for node version and not the NPM version. The individual script
            // generator looks for npm version.

            // Arrange
            var detector = CreateNodePlatformDetector();
            var repo     = new MemorySourceRepo();

            repo.AddFile(PackageJsonWithOnlyNpmVersion, NodeConstants.PackageJsonFileName);
            var context = CreateContext(repo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal("nodejs", result.Platform);
            Assert.Null(result.PlatformVersion);
        }
Exemple #19
0
        public void BuildScript_DoesNotHaveSdkInstallScript_IfDynamicInstallNotEnabled_AndSdkIsNotAlreadyInstalled()
        {
            // Arrange
            var nodePlatform = CreateNodePlatform(dynamicInstallIsEnabled: false, sdkAlreadyInstalled: false);
            var repo         = new MemorySourceRepo();

            repo.AddFile(string.Empty, NodeConstants.PackageJsonFileName);
            var context        = CreateContext(repo);
            var detectorResult = new NodePlatformDetectorResult
            {
                Platform        = NodeConstants.PlatformName,
                PlatformVersion = "10.10",
            };

            // Act
            var buildScriptSnippet = nodePlatform.GetInstallerScriptSnippet(context, detectorResult);

            // Assert
            Assert.Null(buildScriptSnippet);
        }
Exemple #20
0
        public void Detect_ReturnsPreviewVersion_UsingMaximumSatisfyingVersionRules(
            string[] supportedVersions,
            string versionInComposerFile,
            string expectedVersion)
        {
            // Arrange
            var platform = CreatePhpPlatform(
                detectedVersion: versionInComposerFile,
                supportedPhpVersions: supportedVersions);
            var repo    = new MemorySourceRepo();
            var context = CreateContext(repo);

            // Act
            var result = platform.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(PhpConstants.PlatformName, result.Platform);
            Assert.Equal(expectedVersion, result.PlatformVersion);
        }
        public void NodeDoesNotAddsBenv_IfNoPlatformVersionSupplied()
        {
            // Arrange
            var repo = new MemorySourceRepo();

            repo.AddFile(PackageJsonWithMainScript, NodeConstants.PackageJsonFileName);
            var options = new RunScriptGeneratorOptions();

            options.SourceRepo      = repo;
            options.DebuggingMode   = DebuggingMode.Standard;
            options.PlatformVersion = "10.15";
            var platform = GetPlatform();

            // Act
            var script = platform.GenerateBashRunScript(options);

            // Assert
            Assert.NotNull(script);
            Assert.Contains("source /usr/local/bin/benv node=10.15", script);
        }
        public void Detect_ReturnsVersion_FromComposerFile_IfOptionsDoesNotHaveValue()
        {
            // Arrange
            var detector = CreatePhpPlatformDetector(
                supportedPhpVersions: new[] { "7.3.14", "7.2.5", "5.6.0" },
                defaultVersion: "7.3.14",
                new PhpScriptGeneratorOptions());
            var repo    = new MemorySourceRepo();
            var version = "5.6.0";

            repo.AddFile("{\"require\":{\"php\":\"" + version + "\"}}", PhpConstants.ComposerFileName);
            var context = CreateContext(repo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal("5.6.0", result.PlatformVersion);
        }
Exemple #23
0
        public void GeneratedScript_DoesNotUseVenv()
        {
            // Arrange
            var scriptGenerator = CreatePlatform();
            var repo            = new MemorySourceRepo();

            repo.AddFile("", PythonConstants.RequirementsFileName);
            repo.AddFile("print(1)", "bla.py");
            var context = new BuildScriptGeneratorContext {
                SourceRepo = repo
            };

            // Act
            var snippet = scriptGenerator.GenerateBashBuildScriptSnippet(context);

            // Assert
            Assert.NotNull(snippet);
            Assert.Contains("Python Virtual Environment", snippet.BashBuildScriptSnippet);
            Assert.True(scriptGenerator.IsCleanRepo(repo));
        }
        public void GeneratedScript_UsesYarnInstallAndRunsNpmBuild_IfYarnLockIsPresent_AndHasBuildNodeUnderScripts()
        {
            // Arrange
            var scriptGenerator = GetNodePlatform(
                defaultNodeVersion: NodeVersions.Node12Version,
                new BuildScriptGeneratorOptions {
                PlatformVersion = "8.2.1"
            },
                new NodeScriptGeneratorOptions());
            var repo = new MemorySourceRepo();

            repo.AddFile(PackageJsonWithBuildScript, NodeConstants.PackageJsonFileName);
            repo.AddFile("Yarn lock file content here", NodeConstants.YarnLockFileName);
            var context = CreateScriptGeneratorContext(repo);

            var expected = new NodeBashBuildSnippetProperties
            {
                PackageInstallCommand               = YarnInstallCommand,
                PackageInstallerVersionCommand      = NodeConstants.YarnVersionCommand,
                NpmRunBuildCommand                  = "yarn run build",
                NpmRunBuildAzureCommand             = "yarn run build:azure",
                HasProdDependencies                 = true,
                HasDevDependencies                  = true,
                ProductionOnlyPackageInstallCommand = string.Format(
                    NodeConstants.ProductionOnlyPackageInstallCommandTemplate,
                    YarnInstallCommand),
                CompressedNodeModulesFileName = null,
                CompressNodeModulesCommand    = null,
                ConfigureYarnCache            = true,
            };

            // Act
            var snippet = scriptGenerator.GenerateBashBuildScriptSnippet(context);

            // Assert
            Assert.NotNull(snippet);
            Assert.Equal(
                TemplateHelper.Render(TemplateHelper.TemplateResource.NodeBuildSnippet, expected),
                snippet.BashBuildScriptSnippet);
            Assert.True(scriptGenerator.IsCleanRepo(repo));
        }
        public void Detect_ReturnsResult_WithPhpDefaultVersion_WithComposerFile(string composerFileContent)
        {
            // Arrange
            var expectedVersion = "10.10.10";
            var platform        = CreatePhpPlatform(
                supportedPhpVersions: new[] { expectedVersion },
                defaultVersion: expectedVersion);
            var repo = new MemorySourceRepo();

            repo.AddFile(composerFileContent, PhpConstants.ComposerFileName);
            repo.AddFile("<?php echo true; ?>", "foo.php");
            var context = CreateContext(repo);

            // Act
            var result = platform.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(PhpConstants.PlatformName, result.Platform);
            Assert.Equal(expectedVersion, result.PlatformVersion);
        }
        public void Detect_Throws_WhenUnsupportedPhpVersion_FoundInComposerFile()
        {
            // Arrange
            var unsupportedVersion = "0";
            var supportedVersion   = "7.3.5";
            var platform           = CreatePhpPlatform(
                supportedPhpVersions: new[] { supportedVersion },
                defaultVersion: supportedVersion);
            var repo = new MemorySourceRepo();

            repo.AddFile("{\"require\":{\"php\":\"" + unsupportedVersion + "\"}}", PhpConstants.ComposerFileName);
            var context = CreateContext(repo);

            // Act & Assert
            var exception = Assert.Throws <UnsupportedVersionException>(() => platform.Detect(context));

            Assert.Equal(
                $"Platform 'php' version '{unsupportedVersion}' is unsupported. " +
                $"Supported versions: {supportedVersion}",
                exception.Message);
        }
        public void Detect_ReturnsVersionFromPackageJson_IfEnvironmentVariableValueIsNotPresent()
        {
            // Arrange
            var detector = CreateNodePlatformDetector(
                supportedNodeVersions: new[] { "6.11.0", "8.11.2" },
                defaultVersion: "8.11.2",
                new NodeScriptGeneratorOptions());
            var repo        = new MemorySourceRepo();
            var packageJson = PackageJsonTemplateWithNodeVersion.Replace("#VERSION_RANGE#", "6.11.0");

            repo.AddFile(packageJson, NodeConstants.PackageJsonFileName);
            var context = CreateContext(repo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal("nodejs", result.Platform);
            Assert.Equal("6.11.0", result.PlatformVersion);
        }
        public void GeneratedScript_WritesNpmRc_WithCustomRegistry()
        {
            // Arrange
            var scriptGenerator = GetNodePlatformInstance(defaultNpmVersion: "6.0.0");
            var repo            = new MemorySourceRepo();

            repo.AddFile(PackageJsonWithNpmVersion, NodeConstants.PackageJsonFileName);
            var context = CreateScriptGeneratorContext(repo);

            context.LanguageVersion = "8.2.1";
            context.Properties[NodePlatform.RegistryUrlPropertyKey] = "https://example.com/registry/";

            // Act
            var snippet = scriptGenerator.GenerateBashBuildScriptSnippet(context);

            // Assert
            Assert.NotNull(snippet);
            Assert.Contains(
                $"echo \"registry={context.Properties[NodePlatform.RegistryUrlPropertyKey]}\" >> ~/.npmrc",
                snippet.BashBuildScriptSnippet);
        }
Exemple #29
0
        public void Detect_ReturnsTrue_IfBothConfigYmlFileAndGemfileExist_AndItsNotStaticWebApp()
        {
            // Arrange
            var detector = CreateRubyPlatformDetector();
            var repo     = new MemorySourceRepo();

            repo.AddFile("", RubyConstants.ConfigYmlFileName);
            repo.AddFile("", RubyConstants.GemFileName);
            var context = CreateContext(repo);

            // Act
            var result = (RubyPlatformDetectorResult)detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal(RubyConstants.PlatformName, result.Platform);
            Assert.Null(result.PlatformVersion);
            Assert.Equal(string.Empty, result.AppDirectory);
            Assert.True(result.GemfileExists);
            Assert.True(result.ConfigYmlFileExists);
        }
        public void Detect_ReturnsVersion_FromComposerFile_IfEnvironmentVariableDoesNotHaveValue()
        {
            // Arrange
            var environment = new TestEnvironment();
            var detector    = CreatePhpLanguageDetector(
                supportedPhpVersions: new[] { "7.3.14", "7.2.5", "5.6.0" },
                defaultVersion: "7.3.14",
                environment);
            var repo    = new MemorySourceRepo();
            var version = "5.6.0";

            repo.AddFile("{\"require\":{\"php\":\"" + version + "\"}}", PhpConstants.ComposerFileName);
            var context = CreateContext(repo);

            // Act
            var result = detector.Detect(context);

            // Assert
            Assert.NotNull(result);
            Assert.Equal("5.6.0", result.LanguageVersion);
        }