github.com/mentimeter/morty@v1.2.2-0.20221012065510-5596adecd154/mortems/local_service_test.go (about)

     1  package mortems_test
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"os"
     8  	"os/exec"
     9  
    10  	. "github.com/mentimeter/morty/mortems"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Mortems", func() {
    16  	var mortems MortemCollector
    17  	var localFileService RepoFileService
    18  	var tmpDir string
    19  
    20  	BeforeEach(func() {
    21  		var err error
    22  		tmpDir, err = ioutil.TempDir("", "testlocalmortem")
    23  		Expect(err).NotTo(HaveOccurred())
    24  
    25  		_, err = copyDir("testdata/different-month-mortems/", tmpDir)
    26  		Expect(err).NotTo(HaveOccurred())
    27  
    28  		localFileService = NewLocalFileService(tmpDir)
    29  		mortems = NewMortemCollector(localFileService)
    30  	})
    31  
    32  	AfterEach(func() {
    33  		os.RemoveAll(tmpDir)
    34  	})
    35  
    36  	It("saves the correct metrics from the mortem", func() {
    37  		Expect(mortems.Collect()).To(Succeed())
    38  
    39  		mortemFiles, err := localFileService.GetFiles()
    40  		Expect(err).NotTo(HaveOccurred())
    41  
    42  		dbFile := mortemFiles.GetFile("mortems.json")
    43  		Expect(dbFile).NotTo(BeNil())
    44  
    45  		var mortemEntries []MortemData
    46  
    47  		dbFileBytes := []byte(dbFile.GetContent())
    48  		Expect(json.Unmarshal(dbFileBytes, &mortemEntries)).To(Succeed())
    49  
    50  		Expect(mortemEntries).To(ContainElement(FirstMortem()))
    51  		Expect(mortemEntries).To(ContainElement(ThirdMortem()))
    52  	})
    53  
    54  	It("creates the README in the root directory", func() {
    55  		Expect(mortems.Collect()).To(Succeed())
    56  
    57  		mortemFiles, err := localFileService.GetFiles()
    58  		Expect(err).NotTo(HaveOccurred())
    59  
    60  		fullReadmePath := "README.md"
    61  		Expect(mortemFiles.GetFile(fullReadmePath)).To(BeFileWithSubstring("Love Lost Globally: Jerry Develops Malicious App"))
    62  		Expect(mortemFiles.GetFile(fullReadmePath)).To(BeFileWithSubstring("Christmas Lighting Causes Near Death"))
    63  		Expect(mortemFiles.GetFile(fullReadmePath)).To(BeFileWithSubstring("July 2020"))
    64  		Expect(mortemFiles.GetFile(fullReadmePath)).To(BeFileWithSubstring("August 2020"))
    65  	})
    66  
    67  	It("creates the local morty install script", func() {
    68  		Expect(mortems.Collect()).To(Succeed())
    69  
    70  		mortemFiles, err := localFileService.GetFiles()
    71  		Expect(err).NotTo(HaveOccurred())
    72  
    73  		Expect(mortemFiles.GetFile("install_morty").GetContent()).To(ContainSubstring("wget"))
    74  		Expect(mortemFiles.GetFile("install_morty").GetMode()).To(Equal("100755"))
    75  	})
    76  })
    77  
    78  func copyDir(source, dest string) (string, error) {
    79  	output, err := exec.Command("/bin/sh", "-c", fmt.Sprintf("cp -R %s %s", source, dest)).Output()
    80  
    81  	return string(output), err
    82  }