66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from mock import patch
 | 
						|
 | 
						|
from tests.base import JenkinsTestBase
 | 
						|
from tests.helper import build_response_mock
 | 
						|
 | 
						|
 | 
						|
class JenkinsCheckJenkinsfileSyntax(JenkinsTestBase):
 | 
						|
 | 
						|
    @patch('jenkins.requests.Session.send', autospec=True)
 | 
						|
    def test_check_syntax_of_a_valid_file(self, session_send_mock):
 | 
						|
 | 
						|
        valid_jenkinsfile_content = """
 | 
						|
        pipeline {
 | 
						|
            agent any ;
 | 
						|
            stages {
 | 
						|
                stage("blah")
 | 
						|
                {
 | 
						|
                    stexps {
 | 
						|
                        sh("pwd")
 | 
						|
                    }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
        """
 | 
						|
 | 
						|
        valid_response = {
 | 
						|
            "status": "ok",
 | 
						|
            "data": {
 | 
						|
                "result": "success"
 | 
						|
            }
 | 
						|
        }
 | 
						|
        session_send_mock.side_effect = iter([
 | 
						|
            build_response_mock(200, self.crumb_data),  # crumb
 | 
						|
            build_response_mock(200, valid_response)  # request
 | 
						|
        ])
 | 
						|
        response = self.j.check_jenkinsfile_syntax(valid_jenkinsfile_content)
 | 
						|
        self.assertEqual(response, [])
 | 
						|
 | 
						|
    @patch('jenkins.requests.Session.send', autospec=True)
 | 
						|
    def test_check_syntax_of_an_invalid_file(self, session_send_mock):
 | 
						|
 | 
						|
        invalid_jenkinsfile_content = """node {  "pwd" } """
 | 
						|
 | 
						|
        invalid_response = {
 | 
						|
         "status": "ok",
 | 
						|
         "data": {
 | 
						|
          "result": "failure",
 | 
						|
          "errors": [
 | 
						|
           {
 | 
						|
            "error": [
 | 
						|
             "Unknown stage section \"stexps\". Starting with version 0.5, steps in a stage must be" +
 | 
						|
             " in a \"steps\" block. @ line 5, column 9.",
 | 
						|
             "Expected one of \"steps\", \"stages\", or \"parallel\" for stage \"blah\" @ line 5, column 9."
 | 
						|
            ]
 | 
						|
           }
 | 
						|
          ]
 | 
						|
         }
 | 
						|
        }
 | 
						|
 | 
						|
        session_send_mock.side_effect = iter([
 | 
						|
            build_response_mock(200, self.crumb_data),  # crumb
 | 
						|
            build_response_mock(200, invalid_response)  # request
 | 
						|
        ])
 | 
						|
        response = self.j.check_jenkinsfile_syntax(invalid_jenkinsfile_content)
 | 
						|
        self.assertEqual(response, invalid_response["data"]["errors"])
 |