github.com/MontFerret/ferret@v0.18.0/pkg/stdlib/objects/has_test.go (about)

     1  package objects_test
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/MontFerret/ferret/pkg/runtime/values"
     8  	"github.com/MontFerret/ferret/pkg/stdlib/objects"
     9  
    10  	. "github.com/smartystreets/goconvey/convey"
    11  )
    12  
    13  func TestHas(t *testing.T) {
    14  	Convey("When key exists", t, func() {
    15  		obj := values.NewObjectWith(
    16  			values.NewObjectProperty("key", values.NewString("val")),
    17  		)
    18  
    19  		val, err := objects.Has(context.Background(), obj, values.NewString("key"))
    20  		valBool := val.(values.Boolean)
    21  
    22  		So(err, ShouldEqual, nil)
    23  		So(valBool, ShouldEqual, values.NewBoolean(true))
    24  		So(bool(valBool), ShouldEqual, true)
    25  	})
    26  
    27  	Convey("When key doesn't exists", t, func() {
    28  		obj := values.NewObjectWith(
    29  			values.NewObjectProperty("anyOtherKey", values.NewString("val")),
    30  		)
    31  
    32  		val, err := objects.Has(context.Background(), obj, values.NewString("key"))
    33  		valBool := val.(values.Boolean)
    34  
    35  		So(err, ShouldEqual, nil)
    36  		So(valBool, ShouldEqual, values.NewBoolean(false))
    37  		So(bool(valBool), ShouldEqual, false)
    38  	})
    39  
    40  	Convey("When there are no keys", t, func() {
    41  		obj := values.NewObject()
    42  
    43  		val, err := objects.Has(context.Background(), obj, values.NewString("key"))
    44  		valBool := val.(values.Boolean)
    45  
    46  		So(err, ShouldEqual, nil)
    47  		So(valBool, ShouldEqual, values.NewBoolean(false))
    48  		So(bool(valBool), ShouldEqual, false)
    49  	})
    50  
    51  	Convey("Not enought arguments", t, func() {
    52  		val, err := objects.Has(context.Background())
    53  
    54  		So(err, ShouldBeError)
    55  		So(val, ShouldEqual, values.None)
    56  
    57  		val, err = objects.Has(context.Background(), values.NewObject())
    58  
    59  		So(err, ShouldBeError)
    60  		So(val, ShouldEqual, values.None)
    61  	})
    62  
    63  	Convey("When keyName isn't string", t, func() {
    64  		obj := values.NewObject()
    65  		key := values.NewInt(1)
    66  
    67  		val, err := objects.Has(context.Background(), obj, key)
    68  
    69  		So(err, ShouldBeError)
    70  		So(val, ShouldEqual, values.None)
    71  	})
    72  
    73  	Convey("When first argument isn't object", t, func() {
    74  		notObj := values.NewInt(1)
    75  
    76  		val, err := objects.Has(context.Background(), notObj, values.NewString("key"))
    77  
    78  		So(err, ShouldBeError)
    79  		So(val, ShouldEqual, values.None)
    80  	})
    81  }