github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/automation/trigger/cron_test.go (about)

     1  package trigger_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/qri-io/qri/automation/spec"
     9  	"github.com/qri-io/qri/automation/trigger"
    10  	"github.com/qri-io/qri/automation/workflow"
    11  	"github.com/qri-io/qri/event"
    12  )
    13  
    14  func TestCronTrigger(t *testing.T) {
    15  	prevNowFunc := trigger.NowFunc
    16  	trigger.NowFunc = func() time.Time {
    17  		ti := time.Unix(1627830000, 0).UTC()
    18  		return ti
    19  	}
    20  	defer func() {
    21  		trigger.NowFunc = prevNowFunc
    22  	}()
    23  
    24  	opts := map[string]interface{}{
    25  		"type":        trigger.CronType,
    26  		"id":          "test_1",
    27  		"active":      true,
    28  		"periodicity": "R/2021-07-13T21:15:00.000Z/P1H",
    29  	}
    30  	ct, err := trigger.NewCronTrigger(opts)
    31  	if err != nil {
    32  		t.Fatal(err)
    33  	}
    34  	adv := map[string]interface{}{
    35  		"type":         trigger.CronType,
    36  		"id":           "test_1",
    37  		"active":       true,
    38  		"periodicity":  "R/2021-07-13T21:15:00Z/P1H",
    39  		"nextRunStart": "2021-08-01T16:00:00Z",
    40  	}
    41  	spec.AssertTrigger(t, ct, adv)
    42  }
    43  
    44  func TestCronListener(t *testing.T) {
    45  	wf := &workflow.Workflow{
    46  		ID:      "test_workflow_id",
    47  		OwnerID: "test Owner id",
    48  		Active:  true,
    49  		Triggers: []map[string]interface{}{
    50  			{
    51  				"id":          "trigger1",
    52  				"active":      true,
    53  				"type":        trigger.CronType,
    54  				"periodicity": "R/2021-07-13T11:30:00.000Z/P1H",
    55  			},
    56  		},
    57  	}
    58  	prevNowFunc := trigger.NowFunc
    59  	defer func() {
    60  		trigger.NowFunc = prevNowFunc
    61  	}()
    62  	timeIsNoon := func() time.Time {
    63  		ti, err := time.Parse(time.RFC3339, "2021-07-13T12:00:00.000Z")
    64  		if err != nil {
    65  			t.Fatal("error parsing time midnight")
    66  		}
    67  		return ti
    68  	}
    69  	listenerConstructor := func(ctx context.Context, bus event.Bus) (trigger.Listener, func(), func()) {
    70  		trigger.NowFunc = timeIsNoon
    71  		cl := trigger.NewCronListenerInterval(bus, time.Millisecond*100)
    72  		if err := cl.Listen(wf); err != nil {
    73  			t.Fatalf("CronListener.Listen error, %s", err)
    74  		}
    75  		activateTrigger := func() {}
    76  		advanceTrigger := func() {
    77  			wf.Triggers[0]["periodicity"] = "R/2021-07-13T12:30:00.000Z/P1H"
    78  			if err := cl.Listen(wf); err != nil {
    79  				t.Fatalf("CronListener.Listen error, %s", err)
    80  			}
    81  		}
    82  		return cl, activateTrigger, advanceTrigger
    83  	}
    84  	spec.AssertListener(t, listenerConstructor)
    85  }