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  }