github.com/chenbh/concourse/v6@v6.4.2/fly/integration/format_pipeline_test.go (about)

     1  package integration_test
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"os/exec"
     7  
     8  	. "github.com/onsi/ginkgo"
     9  	. "github.com/onsi/gomega"
    10  
    11  	"github.com/onsi/gomega/gexec"
    12  )
    13  
    14  var _ = Describe("Fly CLI", func() {
    15  	Describe("format-pipeline", func() {
    16  		var (
    17  			configFile   *os.File
    18  			inputYaml    []byte
    19  			expectedYaml []byte
    20  		)
    21  
    22  		BeforeEach(func() {
    23  			var err error
    24  			configFile, err = ioutil.TempFile("", "format-pipeline-test-*.yml")
    25  			Expect(err).NotTo(HaveOccurred())
    26  
    27  			inputYaml, err = ioutil.ReadFile("fixtures/format-input.yml")
    28  			Expect(err).NotTo(HaveOccurred())
    29  
    30  			expectedYaml, err = ioutil.ReadFile("fixtures/format-expected.yml")
    31  			Expect(err).NotTo(HaveOccurred())
    32  
    33  			_, err = configFile.Write(inputYaml)
    34  			Expect(err).NotTo(HaveOccurred())
    35  
    36  			err = configFile.Close()
    37  			Expect(err).NotTo(HaveOccurred())
    38  		})
    39  
    40  		AfterEach(func() {
    41  			err := os.RemoveAll(configFile.Name())
    42  			Expect(err).NotTo(HaveOccurred())
    43  		})
    44  
    45  		It("prints the formatted pipeline YAML to stdout", func() {
    46  			flyCmd := exec.Command(
    47  				flyPath,
    48  				"format-pipeline",
    49  				"-c", configFile.Name(),
    50  			)
    51  
    52  			sess, err := gexec.Start(flyCmd, GinkgoWriter, GinkgoWriter)
    53  			Expect(err).NotTo(HaveOccurred())
    54  
    55  			<-sess.Exited
    56  			Expect(sess.ExitCode()).To(Equal(0))
    57  
    58  			Expect(sess.Out.Contents()).To(MatchYAML(expectedYaml))
    59  		})
    60  
    61  		It("preserves the original pipeline file", func() {
    62  			oldFileInfo, err := os.Stat(configFile.Name())
    63  			Expect(err).NotTo(HaveOccurred())
    64  
    65  			flyCmd := exec.Command(
    66  				flyPath,
    67  				"format-pipeline",
    68  				"-c", configFile.Name(),
    69  			)
    70  
    71  			sess, err := gexec.Start(flyCmd, GinkgoWriter, GinkgoWriter)
    72  			Expect(err).NotTo(HaveOccurred())
    73  
    74  			<-sess.Exited
    75  			Expect(sess.ExitCode()).To(Equal(0))
    76  
    77  			newFileInfo, err := os.Stat(configFile.Name())
    78  			Expect(err).NotTo(HaveOccurred())
    79  			Expect(newFileInfo.ModTime()).To(Equal(oldFileInfo.ModTime()))
    80  
    81  			newYaml, err := ioutil.ReadFile(configFile.Name())
    82  			Expect(err).NotTo(HaveOccurred())
    83  			Expect(newYaml).To(Equal(inputYaml))
    84  		})
    85  
    86  		Context("when given the -w option", func() {
    87  			It("overwrites the file in-place", func() {
    88  				flyCmd := exec.Command(
    89  					flyPath,
    90  					"format-pipeline",
    91  					"-c", configFile.Name(),
    92  					"-w",
    93  				)
    94  
    95  				sess, err := gexec.Start(flyCmd, GinkgoWriter, GinkgoWriter)
    96  				Expect(err).NotTo(HaveOccurred())
    97  
    98  				<-sess.Exited
    99  				Expect(sess.ExitCode()).To(Equal(0))
   100  
   101  				newYaml, err := ioutil.ReadFile(configFile.Name())
   102  				Expect(err).NotTo(HaveOccurred())
   103  				Expect(newYaml).To(MatchYAML(expectedYaml))
   104  			})
   105  
   106  			It("is idempotent", func() {
   107  				flyCmd := exec.Command(
   108  					flyPath,
   109  					"format-pipeline",
   110  					"-c", configFile.Name(),
   111  					"-w",
   112  				)
   113  
   114  				sess, err := gexec.Start(flyCmd, GinkgoWriter, GinkgoWriter)
   115  				Expect(err).NotTo(HaveOccurred())
   116  
   117  				<-sess.Exited
   118  				Expect(sess.ExitCode()).To(Equal(0))
   119  
   120  				firstPassYaml, err := ioutil.ReadFile(configFile.Name())
   121  				Expect(err).NotTo(HaveOccurred())
   122  
   123  				flyCmd2 := exec.Command(
   124  					flyPath,
   125  					"format-pipeline",
   126  					"-c", configFile.Name(),
   127  					"-w",
   128  				)
   129  
   130  				sess2, err := gexec.Start(flyCmd2, GinkgoWriter, GinkgoWriter)
   131  				Expect(err).NotTo(HaveOccurred())
   132  
   133  				<-sess2.Exited
   134  				Expect(sess2.ExitCode()).To(Equal(0))
   135  
   136  				secondPassYaml, err := ioutil.ReadFile(configFile.Name())
   137  				Expect(err).NotTo(HaveOccurred())
   138  
   139  				Expect(firstPassYaml).To(MatchYAML(secondPassYaml))
   140  			})
   141  		})
   142  	})
   143  })