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 }