github.com/benchkram/bob@v0.0.0-20240314204020-b7a57f2f9be9/test/e2e/ignore/ignore_test.go (about)

     1  package ignoretest
     2  
     3  import (
     4  	"context"
     5  	"io/fs"
     6  	"os"
     7  
     8  	"github.com/benchkram/bob/bob"
     9  	"github.com/benchkram/bob/bob/playbook"
    10  	"github.com/benchkram/errz"
    11  
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  var _ = Describe("Test bob build", func() {
    17  	Context("in a fresh environment", func() {
    18  		const (
    19  			taskname   = "ignoredInputs"
    20  			inputfile  = "fileToWatch"
    21  			ignorefile = "fileToIgnore"
    22  		)
    23  		It("initializes bob playground", func() {
    24  			Expect(bob.CreatePlayground(bob.PlaygroundOptions{Dir: dir})).NotTo(HaveOccurred())
    25  		})
    26  
    27  		It("create files for build task", func() {
    28  			someText := []byte("hello this is a text in a file\n")
    29  
    30  			err := os.WriteFile(inputfile, someText, fs.ModePerm)
    31  			Expect(err).NotTo(HaveOccurred())
    32  			err = os.WriteFile(ignorefile, someText, fs.ModePerm)
    33  			Expect(err).NotTo(HaveOccurred())
    34  		})
    35  
    36  		It("needs to be built the first time", func() {
    37  			ctx := context.Background()
    38  			Expect(b.Build(ctx, taskname)).NotTo(HaveOccurred())
    39  		})
    40  
    41  		It("needs no rebuild after that", func() {
    42  			checkTaskState(b, taskname, playbook.StateNoRebuildRequired)
    43  		})
    44  
    45  		It("change of ignored file doesn't need rebuild", func() {
    46  			someText := []byte("another line\n")
    47  
    48  			err := os.WriteFile(ignorefile, someText, fs.ModeAppend)
    49  			Expect(err).NotTo(HaveOccurred())
    50  
    51  			checkTaskState(b, taskname, playbook.StateNoRebuildRequired)
    52  		})
    53  
    54  		It("change of input file requires rebuild", func() {
    55  			someText := []byte("another line\n")
    56  
    57  			err := os.WriteFile(inputfile, someText, fs.ModeAppend)
    58  			Expect(err).NotTo(HaveOccurred())
    59  
    60  			// Check for completed since this function will call rerun
    61  			// Therefor this task will be in state completed afterwards
    62  			checkTaskState(b, taskname, playbook.StateCompleted)
    63  		})
    64  	})
    65  })
    66  
    67  func checkTaskState(b *bob.B, taskname string, expectedState playbook.State) {
    68  	aggregate, err := b.Aggregate()
    69  	Expect(err).NotTo(HaveOccurred())
    70  
    71  	err = b.Nix().BuildNixDependenciesInPipeline(aggregate, taskname)
    72  	errz.Fatal(err)
    73  
    74  	pb, err := aggregate.Playbook(taskname)
    75  	Expect(err).NotTo(HaveOccurred())
    76  
    77  	err = pb.Build(context.Background())
    78  	Expect(err).NotTo(HaveOccurred())
    79  
    80  	ts, err := pb.TaskStatus(taskname)
    81  	Expect(err).NotTo(HaveOccurred())
    82  
    83  	Expect(ts.State()).To(Equal(expectedState))
    84  }