MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / TestEvaluateFunction

Function TestEvaluateFunction

db/import_test.go:769–821  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

767}
768
769func TestEvaluateFunction(t *testing.T) {
770 base.SetUpTestLogging(t, base.LevelInfo, base.KeyImport)
771 db, ctx := setupTestDB(t)
772 defer db.Close(ctx)
773
774 // Simulate unexpected error invoking import filter for document
775 body := Body{"key": "value", "version": "1a"}
776 source := "illegal function(doc) {}"
777 importFilterFunc := NewImportFilterFunction(base.TestCtx(t), source, 0)
778 result, err := importFilterFunc.EvaluateFunction(base.TestCtx(t), body)
779 assert.Error(t, err, "Unexpected token function error")
780 assert.False(t, result, "Function evaluation result should be false")
781
782 // Simulate boolean return value from import filter function
783 body = Body{"key": "value", "version": "2a"}
784 source = `function(doc) { if (doc.version == "2a") { return true; } else { return false; }}`
785 importFilterFunc = NewImportFilterFunction(base.TestCtx(t), source, 0)
786 result, err = importFilterFunc.EvaluateFunction(base.TestCtx(t), body)
787 assert.NoError(t, err, "Import filter function shouldn't throw any error")
788 assert.True(t, result, "Import filter function should return boolean value true")
789
790 // Simulate non-boolean return value from import filter function; default switch case
791 body = Body{"key": "value", "version": "2b"}
792 source = `function(doc) { if (doc.version == "2b") { return 1.01; } else { return 0.01; }}`
793 importFilterFunc = NewImportFilterFunction(base.TestCtx(t), source, 0)
794 result, err = importFilterFunc.EvaluateFunction(base.TestCtx(t), body)
795 assert.Error(t, err, "Import filter function returned non-boolean value")
796 assert.False(t, result, "Import filter function evaluation result should be false")
797
798 // Simulate string return value true from import filter function
799 body = Body{"key": "value", "version": "1a"}
800 source = `function(doc) { if (doc.version == "1a") { return "true"; } else { return "false"; }}`
801 importFilterFunc = NewImportFilterFunction(base.TestCtx(t), source, 0)
802 result, err = importFilterFunc.EvaluateFunction(base.TestCtx(t), body)
803 assert.NoError(t, err, "Import filter function shouldn't throw any error")
804 assert.True(t, result, "Import filter function should return true")
805
806 // Simulate string return value false from import filter function
807 body = Body{"key": "value", "version": "2a"}
808 source = `function(doc) { if (doc.version == "1a") { return "true"; } else { return "false"; }}`
809 importFilterFunc = NewImportFilterFunction(base.TestCtx(t), source, 0)
810 result, err = importFilterFunc.EvaluateFunction(base.TestCtx(t), body)
811 assert.NoError(t, err, "Import filter function shouldn't throw any error")
812 assert.False(t, result, "Import filter function should return false")
813
814 // Simulate strconv.ParseBool: parsing "TruE": invalid syntax
815 body = Body{"key": "value", "version": "1a"}
816 source = `function(doc) { if (doc.version == "1a") { return "TruE"; } else { return "FaLsE"; }}`
817 importFilterFunc = NewImportFilterFunction(base.TestCtx(t), source, 0)
818 result, err = importFilterFunc.EvaluateFunction(base.TestCtx(t), body)
819 assert.Error(t, err, `strconv.ParseBool: parsing "TruE": invalid syntax`)
820 assert.False(t, result, "Import filter function should return true")
821}
822
823func TestImportStampClusterUUID(t *testing.T) {
824 if !base.TestUseXattrs() {

Callers

nothing calls this directly

Calls 7

EvaluateFunctionMethod · 0.95
SetUpTestLoggingFunction · 0.92
TestCtxFunction · 0.92
setupTestDBFunction · 0.85
NewImportFilterFunctionFunction · 0.85
CloseMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected