github.com/getgauge/gauge@v1.6.9/execution/scenarioExecutor_test.go (about) 1 /*---------------------------------------------------------------- 2 * Copyright (c) ThoughtWorks, Inc. 3 * Licensed under the Apache License, Version 2.0 4 * See LICENSE in the project root for license information. 5 *----------------------------------------------------------------*/ 6 7 package execution 8 9 import ( 10 "testing" 11 12 "github.com/getgauge/gauge/execution/result" 13 "github.com/getgauge/gauge/gauge" 14 15 "github.com/getgauge/gauge-proto/go/gauge_messages" 16 ) 17 18 func TestNotifyBeforeScenarioShouldAddBeforeScenarioHookMessages(t *testing.T) { 19 r := &mockRunner{} 20 h := &mockPluginHandler{NotifyPluginsfunc: func(m *gauge_messages.Message) {}, GracefullyKillPluginsfunc: func() {}} 21 r.ExecuteAndGetStatusFunc = func(m *gauge_messages.Message) *gauge_messages.ProtoExecutionResult { 22 if m.MessageType == gauge_messages.Message_ScenarioExecutionStarting { 23 return &gauge_messages.ProtoExecutionResult{ 24 Message: []string{"Before Scenario Called"}, 25 Failed: false, 26 ExecutionTime: 10, 27 } 28 } 29 return &gauge_messages.ProtoExecutionResult{} 30 } 31 ei := &gauge_messages.ExecutionInfo{} 32 sce := newScenarioExecutor(r, h, ei, nil, nil, nil, 0) 33 scenario := &gauge.Scenario{ 34 Heading: &gauge.Heading{Value: "A scenario"}, 35 Span: &gauge.Span{Start: 2, End: 10}, 36 } 37 scenarioResult := result.NewScenarioResult(gauge.NewProtoScenario(scenario)) 38 sce.notifyBeforeScenarioHook(scenarioResult) 39 gotMessages := scenarioResult.ProtoScenario.PreHookMessages 40 41 if len(gotMessages) != 1 { 42 t.Errorf("Expected 1 message, got : %d", len(gotMessages)) 43 } 44 if gotMessages[0] != "Before Scenario Called" { 45 t.Errorf("Expected `Before Scenario Called` message, got : %s", gotMessages[0]) 46 } 47 } 48 49 func TestNotifyAfterScenarioShouldAddAfterScenarioHookMessages(t *testing.T) { 50 r := &mockRunner{} 51 h := &mockPluginHandler{NotifyPluginsfunc: func(m *gauge_messages.Message) {}, GracefullyKillPluginsfunc: func() {}} 52 r.ExecuteAndGetStatusFunc = func(m *gauge_messages.Message) *gauge_messages.ProtoExecutionResult { 53 if m.MessageType == gauge_messages.Message_ScenarioExecutionEnding { 54 return &gauge_messages.ProtoExecutionResult{ 55 Message: []string{"After Scenario Called"}, 56 Failed: false, 57 ExecutionTime: 10, 58 } 59 } 60 return &gauge_messages.ProtoExecutionResult{} 61 } 62 ei := &gauge_messages.ExecutionInfo{} 63 sce := newScenarioExecutor(r, h, ei, nil, nil, nil, 0) 64 scenario := &gauge.Scenario{ 65 Heading: &gauge.Heading{Value: "A scenario"}, 66 Span: &gauge.Span{Start: 2, End: 10}, 67 } 68 scenarioResult := result.NewScenarioResult(gauge.NewProtoScenario(scenario)) 69 sce.notifyAfterScenarioHook(scenarioResult) 70 gotMessages := scenarioResult.ProtoScenario.PostHookMessages 71 72 if len(gotMessages) != 1 { 73 t.Errorf("Expected 1 message, got : %d", len(gotMessages)) 74 } 75 if gotMessages[0] != "After Scenario Called" { 76 t.Errorf("Expected `After Scenario Called` message, got : %s", gotMessages[0]) 77 } 78 } 79 80 func TestNotifyBeforeScenarioShouldAddBeforeScenarioHookScreenshots(t *testing.T) { 81 r := &mockRunner{} 82 h := &mockPluginHandler{NotifyPluginsfunc: func(m *gauge_messages.Message) {}, GracefullyKillPluginsfunc: func() {}} 83 r.ExecuteAndGetStatusFunc = func(m *gauge_messages.Message) *gauge_messages.ProtoExecutionResult { 84 if m.MessageType == gauge_messages.Message_ScenarioExecutionStarting { 85 return &gauge_messages.ProtoExecutionResult{ 86 ScreenshotFiles: []string{"screenshot1.png", "screenshot2.png"}, 87 Failed: false, 88 ExecutionTime: 10, 89 } 90 } 91 return &gauge_messages.ProtoExecutionResult{} 92 } 93 ei := &gauge_messages.ExecutionInfo{} 94 sce := newScenarioExecutor(r, h, ei, nil, nil, nil, 0) 95 scenario := &gauge.Scenario{ 96 Heading: &gauge.Heading{Value: "A scenario"}, 97 Span: &gauge.Span{Start: 2, End: 10}, 98 } 99 scenarioResult := result.NewScenarioResult(gauge.NewProtoScenario(scenario)) 100 sce.notifyBeforeScenarioHook(scenarioResult) 101 beforeScenarioScreenShots := scenarioResult.ProtoScenario.PreHookScreenshotFiles 102 expected := []string{"screenshot1.png", "screenshot2.png"} 103 104 if len(beforeScenarioScreenShots) != len(expected) { 105 t.Errorf("Expected 2 screenshots, got : %d", len(beforeScenarioScreenShots)) 106 } 107 108 for i, e := range expected { 109 if string(beforeScenarioScreenShots[i]) != e { 110 t.Errorf("Expected `%s` screenshot, got : %s", e, beforeScenarioScreenShots[i]) 111 } 112 } 113 } 114 115 func TestNotifyAfterScenarioShouldAddAfterScenarioHookScreenshots(t *testing.T) { 116 r := &mockRunner{} 117 h := &mockPluginHandler{NotifyPluginsfunc: func(m *gauge_messages.Message) {}, GracefullyKillPluginsfunc: func() {}} 118 r.ExecuteAndGetStatusFunc = func(m *gauge_messages.Message) *gauge_messages.ProtoExecutionResult { 119 if m.MessageType == gauge_messages.Message_ScenarioExecutionEnding { 120 return &gauge_messages.ProtoExecutionResult{ 121 ScreenshotFiles: []string{"screenshot1.png", "screenshot2.png"}, 122 Failed: false, 123 ExecutionTime: 10, 124 } 125 } 126 return &gauge_messages.ProtoExecutionResult{} 127 } 128 ei := &gauge_messages.ExecutionInfo{} 129 sce := newScenarioExecutor(r, h, ei, nil, nil, nil, 0) 130 scenario := &gauge.Scenario{ 131 Heading: &gauge.Heading{Value: "A scenario"}, 132 Span: &gauge.Span{Start: 2, End: 10}, 133 } 134 scenarioResult := result.NewScenarioResult(gauge.NewProtoScenario(scenario)) 135 sce.notifyAfterScenarioHook(scenarioResult) 136 afterScenarioScreenShots := scenarioResult.ProtoScenario.PostHookScreenshotFiles 137 expected := []string{"screenshot1.png", "screenshot2.png"} 138 139 if len(afterScenarioScreenShots) != len(expected) { 140 t.Errorf("Expected 2 screenshots, got : %d", len(afterScenarioScreenShots)) 141 } 142 143 for i, e := range expected { 144 if string(afterScenarioScreenShots[i]) != e { 145 t.Errorf("Expected `%s` screenshot, got : %s", e, afterScenarioScreenShots[i]) 146 } 147 } 148 }