...

Source file src/github.com/launchdarkly/go-sdk-events/v2/events_test.go

Documentation: github.com/launchdarkly/go-sdk-events/v2

     1  package ldevents
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/launchdarkly/go-sdk-common/v3/ldcontext"
     7  	"github.com/launchdarkly/go-sdk-common/v3/ldreason"
     8  	"github.com/launchdarkly/go-sdk-common/v3/ldtime"
     9  	"github.com/launchdarkly/go-sdk-common/v3/ldvalue"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  var defaultEventFactory = NewEventFactory(false, nil)
    15  
    16  var noReason = ldreason.EvaluationReason{}
    17  
    18  func TestEventFactory(t *testing.T) {
    19  	fakeTime := ldtime.UnixMillisecondTime(100000)
    20  	timeFn := func() ldtime.UnixMillisecondTime { return fakeTime }
    21  	withoutReasons := NewEventFactory(false, timeFn)
    22  	withReasons := NewEventFactory(true, timeFn)
    23  	context := Context(ldcontext.New("key"))
    24  
    25  	t.Run("NewSuccessfulEvalEvent", func(t *testing.T) {
    26  		flag := FlagEventProperties{Key: "flagkey", Version: 100}
    27  
    28  		expected := EvaluationData{
    29  			BaseEvent: BaseEvent{
    30  				CreationDate: fakeTime,
    31  				Context:      context,
    32  			},
    33  			Key:       flag.Key,
    34  			Version:   ldvalue.NewOptionalInt(flag.Version),
    35  			Variation: ldvalue.NewOptionalInt(1),
    36  			Value:     ldvalue.String("value"),
    37  			Default:   ldvalue.String("default"),
    38  			Reason:    ldreason.NewEvalReasonFallthrough(),
    39  			PrereqOf:  ldvalue.NewOptionalString("pre"),
    40  		}
    41  
    42  		event1 := withoutReasons.NewEvaluationData(flag, context,
    43  			ldreason.NewEvaluationDetail(expected.Value, expected.Variation.IntValue(), expected.Reason),
    44  			false, expected.Default, "pre")
    45  		assert.Equal(t, ldreason.EvaluationReason{}, event1.Reason)
    46  		event1.Reason = expected.Reason
    47  		assert.Equal(t, expected, event1)
    48  
    49  		event2 := withReasons.NewEvaluationData(flag, context,
    50  			ldreason.NewEvaluationDetail(expected.Value, expected.Variation.IntValue(), expected.Reason),
    51  			false, expected.Default, "pre")
    52  		assert.Equal(t, expected, event2)
    53  	})
    54  
    55  	t.Run("NewEvaluationData with tracking/debugging", func(t *testing.T) {
    56  		flag := FlagEventProperties{Key: "flagkey", Version: 100}
    57  
    58  		expected := EvaluationData{
    59  			BaseEvent: BaseEvent{
    60  				CreationDate: fakeTime,
    61  				Context:      context,
    62  			},
    63  			Key:       flag.Key,
    64  			Version:   ldvalue.NewOptionalInt(flag.Version),
    65  			Variation: ldvalue.NewOptionalInt(1),
    66  			Value:     ldvalue.String("value"),
    67  			Default:   ldvalue.String("default"),
    68  		}
    69  
    70  		flag1 := flag
    71  		flag1.RequireFullEvent = true
    72  		expected1 := expected
    73  		expected1.RequireFullEvent = true
    74  		event1 := withoutReasons.NewEvaluationData(flag1, context,
    75  			ldreason.NewEvaluationDetail(expected.Value, expected.Variation.IntValue(), ldreason.NewEvalReasonFallthrough()),
    76  			false, expected.Default, "")
    77  		assert.Equal(t, expected1, event1)
    78  
    79  		flag2 := flag
    80  		flag2.DebugEventsUntilDate = ldtime.UnixMillisecondTime(200000)
    81  		expected2 := expected
    82  		expected2.DebugEventsUntilDate = flag2.DebugEventsUntilDate
    83  		event2 := withoutReasons.NewEvaluationData(flag2, context,
    84  			ldreason.NewEvaluationDetail(expected.Value, expected.Variation.IntValue(), ldreason.NewEvalReasonFallthrough()),
    85  			false, expected.Default, "")
    86  		assert.Equal(t, expected2, event2)
    87  	})
    88  
    89  	t.Run("NewEvaluationData with experimentation", func(t *testing.T) {
    90  		flag := FlagEventProperties{Key: "flagkey", Version: 100}
    91  
    92  		expected := EvaluationData{
    93  			BaseEvent: BaseEvent{
    94  				CreationDate: fakeTime,
    95  				Context:      context,
    96  			},
    97  			Key:              flag.Key,
    98  			Version:          ldvalue.NewOptionalInt(flag.Version),
    99  			Variation:        ldvalue.NewOptionalInt(1),
   100  			Value:            ldvalue.String("value"),
   101  			Default:          ldvalue.String("default"),
   102  			Reason:           ldreason.NewEvalReasonFallthrough(),
   103  			RequireFullEvent: true,
   104  		}
   105  
   106  		event := withoutReasons.NewEvaluationData(flag, context,
   107  			ldreason.NewEvaluationDetail(expected.Value, expected.Variation.IntValue(), ldreason.NewEvalReasonFallthrough()),
   108  			true, expected.Default, "")
   109  		assert.Equal(t, expected, event)
   110  	})
   111  
   112  	t.Run("NewUnknownFlagEvaluationData", func(t *testing.T) {
   113  		expected := EvaluationData{
   114  			BaseEvent: BaseEvent{
   115  				CreationDate: fakeTime,
   116  				Context:      context,
   117  			},
   118  			Key:     "unknown-key",
   119  			Value:   ldvalue.String("default"),
   120  			Default: ldvalue.String("default"),
   121  			Reason:  ldreason.NewEvalReasonFallthrough(),
   122  		}
   123  
   124  		event1 := withoutReasons.NewUnknownFlagEvaluationData(expected.Key, context, expected.Default, expected.Reason)
   125  		assert.Equal(t, ldreason.EvaluationReason{}, event1.Reason)
   126  		event1.Reason = expected.Reason
   127  		assert.Equal(t, expected, event1)
   128  		assert.Equal(t, expected.BaseEvent.CreationDate, event1.CreationDate)
   129  
   130  		event2 := withReasons.NewUnknownFlagEvaluationData(expected.Key, context, expected.Default, expected.Reason)
   131  		assert.Equal(t, expected, event2)
   132  	})
   133  
   134  	t.Run("NewCustomEvent", func(t *testing.T) {
   135  		expected := CustomEventData{
   136  			BaseEvent: BaseEvent{
   137  				CreationDate: fakeTime,
   138  				Context:      context,
   139  			},
   140  			Key:         "event-key",
   141  			Data:        ldvalue.String("data"),
   142  			HasMetric:   true,
   143  			MetricValue: 2,
   144  		}
   145  
   146  		event := withoutReasons.NewCustomEventData(expected.Key, context, expected.Data, true, expected.MetricValue)
   147  		assert.Equal(t, expected, event)
   148  		assert.Equal(t, expected.BaseEvent.CreationDate, event.CreationDate)
   149  	})
   150  
   151  	t.Run("NewIdentifyEvent", func(t *testing.T) {
   152  		expected := IdentifyEventData{
   153  			BaseEvent: BaseEvent{
   154  				CreationDate: fakeTime,
   155  				Context:      context,
   156  			},
   157  		}
   158  
   159  		event := withoutReasons.NewIdentifyEventData(context)
   160  		assert.Equal(t, expected, event)
   161  		assert.Equal(t, expected.BaseEvent.CreationDate, event.CreationDate)
   162  	})
   163  }
   164  

View as plain text