You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2023/05/16 13:23:52 UTC

[plc4x] 01/02: test(plc4go/spi): add test for DefaultPlcBrowseRequest

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 2f0c93c49cce6bc7f25886545c049167297428b6
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Tue May 16 12:40:37 2023 +0200

    test(plc4go/spi): add test for DefaultPlcBrowseRequest
---
 plc4go/spi/model/DefaultPlcBrowseRequest_test.go | 154 ++++++++++++++++++-----
 plc4go/spi/model/mock_PlcBrowser_test.go         | 149 ++++++++++++++++++++++
 plc4go/spi/model/mock_requirements.go            |   5 +
 3 files changed, 279 insertions(+), 29 deletions(-)

diff --git a/plc4go/spi/model/DefaultPlcBrowseRequest_test.go b/plc4go/spi/model/DefaultPlcBrowseRequest_test.go
index 880d99fa79..d7a9fe2a55 100644
--- a/plc4go/spi/model/DefaultPlcBrowseRequest_test.go
+++ b/plc4go/spi/model/DefaultPlcBrowseRequest_test.go
@@ -22,6 +22,8 @@ package model
 import (
 	"context"
 	"fmt"
+	"github.com/pkg/errors"
+	"github.com/stretchr/testify/mock"
 	"testing"
 
 	apiModel "github.com/apache/plc4x/plc4go/pkg/api/model"
@@ -93,15 +95,50 @@ func TestDefaultPlcBrowseRequestBuilder_Build(t *testing.T) {
 		queryStrings map[string]string
 	}
 	tests := []struct {
-		name    string
-		fields  fields
-		want    apiModel.PlcBrowseRequest
-		wantErr assert.ErrorAssertionFunc
+		name      string
+		fields    fields
+		mockSetup func(t *testing.T, fields *fields)
+		want      apiModel.PlcBrowseRequest
+		wantErr   assert.ErrorAssertionFunc
 	}{
-		// TODO: Add test cases.
+		{
+			name:    "build it",
+			want:    NewDefaultPlcBrowseRequest(map[string]apiModel.PlcQuery{}, nil, nil),
+			wantErr: assert.NoError,
+		},
+		{
+			name: "build it with queries",
+			fields: fields{
+				queryNames:   nil,
+				queryStrings: map[string]string{"a": "a"},
+			},
+			mockSetup: func(t *testing.T, fields *fields) {
+				handler := NewMockPlcTagHandler(t)
+				handler.EXPECT().ParseQuery(mock.Anything).Return(nil, nil)
+				fields.tagHandler = handler
+			},
+			want:    NewDefaultPlcBrowseRequest(map[string]apiModel.PlcQuery{"a": nil}, nil, nil),
+			wantErr: assert.NoError,
+		},
+		{
+			name: "build it parse error",
+			fields: fields{
+				queryNames:   nil,
+				queryStrings: map[string]string{"a": "a"},
+			},
+			mockSetup: func(t *testing.T, fields *fields) {
+				handler := NewMockPlcTagHandler(t)
+				handler.EXPECT().ParseQuery(mock.Anything).Return(nil, errors.New("nope"))
+				fields.tagHandler = handler
+			},
+			wantErr: assert.Error,
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields)
+			}
 			d := &DefaultPlcBrowseRequestBuilder{
 				tagHandler:   tt.fields.tagHandler,
 				browser:      tt.fields.browser,
@@ -124,14 +161,25 @@ func TestDefaultPlcBrowseRequest_Execute(t *testing.T) {
 		queries    map[string]apiModel.PlcQuery
 	}
 	tests := []struct {
-		name   string
-		fields fields
-		want   <-chan apiModel.PlcBrowseRequestResult
+		name      string
+		fields    fields
+		mockSetup func(t *testing.T, fields *fields)
+		want      <-chan apiModel.PlcBrowseRequestResult
 	}{
-		// TODO: Add test cases.
+		{
+			name: "execute it",
+			mockSetup: func(t *testing.T, fields *fields) {
+				browser := NewMockPlcBrowser(t)
+				browser.EXPECT().Browse(mock.Anything, mock.Anything).Return(nil)
+				fields.browser = browser
+			},
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields)
+			}
 			d := &DefaultPlcBrowseRequest{
 				browser:    tt.fields.browser,
 				queryNames: tt.fields.queryNames,
@@ -152,15 +200,26 @@ func TestDefaultPlcBrowseRequest_ExecuteWithContext(t *testing.T) {
 		ctx context.Context
 	}
 	tests := []struct {
-		name   string
-		fields fields
-		args   args
-		want   <-chan apiModel.PlcBrowseRequestResult
+		name      string
+		fields    fields
+		args      args
+		mockSetup func(t *testing.T, fields *fields)
+		want      <-chan apiModel.PlcBrowseRequestResult
 	}{
-		// TODO: Add test cases.
+		{
+			name: "execute it",
+			mockSetup: func(t *testing.T, fields *fields) {
+				browser := NewMockPlcBrowser(t)
+				browser.EXPECT().Browse(mock.Anything, mock.Anything).Return(nil)
+				fields.browser = browser
+			},
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields)
+			}
 			d := &DefaultPlcBrowseRequest{
 				browser:    tt.fields.browser,
 				queryNames: tt.fields.queryNames,
@@ -181,15 +240,26 @@ func TestDefaultPlcBrowseRequest_ExecuteWithInterceptor(t *testing.T) {
 		interceptor func(result apiModel.PlcBrowseItem) bool
 	}
 	tests := []struct {
-		name   string
-		fields fields
-		args   args
-		want   <-chan apiModel.PlcBrowseRequestResult
+		name      string
+		fields    fields
+		args      args
+		mockSetup func(t *testing.T, fields *fields)
+		want      <-chan apiModel.PlcBrowseRequestResult
 	}{
-		// TODO: Add test cases.
+		{
+			name: "execute it",
+			mockSetup: func(t *testing.T, fields *fields) {
+				browser := NewMockPlcBrowser(t)
+				browser.EXPECT().BrowseWithInterceptor(mock.Anything, mock.Anything, mock.Anything).Return(nil)
+				fields.browser = browser
+			},
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields)
+			}
 			d := &DefaultPlcBrowseRequest{
 				browser:    tt.fields.browser,
 				queryNames: tt.fields.queryNames,
@@ -211,15 +281,26 @@ func TestDefaultPlcBrowseRequest_ExecuteWithInterceptorWithContext(t *testing.T)
 		interceptor func(result apiModel.PlcBrowseItem) bool
 	}
 	tests := []struct {
-		name   string
-		fields fields
-		args   args
-		want   <-chan apiModel.PlcBrowseRequestResult
+		name      string
+		fields    fields
+		args      args
+		mockSetup func(t *testing.T, fields *fields)
+		want      <-chan apiModel.PlcBrowseRequestResult
 	}{
-		// TODO: Add test cases.
+		{
+			name: "execute it",
+			mockSetup: func(t *testing.T, fields *fields) {
+				browser := NewMockPlcBrowser(t)
+				browser.EXPECT().BrowseWithInterceptor(mock.Anything, mock.Anything, mock.Anything).Return(nil)
+				fields.browser = browser
+			},
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
+			if tt.mockSetup != nil {
+				tt.mockSetup(t, &tt.fields)
+			}
 			d := &DefaultPlcBrowseRequest{
 				browser:    tt.fields.browser,
 				queryNames: tt.fields.queryNames,
@@ -245,7 +326,9 @@ func TestDefaultPlcBrowseRequest_GetQuery(t *testing.T) {
 		args   args
 		want   apiModel.PlcQuery
 	}{
-		// TODO: Add test cases.
+		{
+			name: "get it",
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
@@ -270,7 +353,9 @@ func TestDefaultPlcBrowseRequest_GetQueryNames(t *testing.T) {
 		fields fields
 		want   []string
 	}{
-		// TODO: Add test cases.
+		{
+			name: "get it",
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
@@ -295,7 +380,10 @@ func TestDefaultPlcBrowseRequest_IsAPlcMessage(t *testing.T) {
 		fields fields
 		want   bool
 	}{
-		// TODO: Add test cases.
+		{
+			name: "is it",
+			want: true,
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
@@ -320,7 +408,10 @@ func TestNewDefaultPlcBrowseRequest(t *testing.T) {
 		args args
 		want *DefaultPlcBrowseRequest
 	}{
-		// TODO: Add test cases.
+		{
+			name: "browse it",
+			want: &DefaultPlcBrowseRequest{},
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
@@ -339,7 +430,12 @@ func TestNewDefaultPlcBrowseRequestBuilder(t *testing.T) {
 		args args
 		want apiModel.PlcBrowseRequestBuilder
 	}{
-		// TODO: Add test cases.
+		{
+			name: "get it",
+			want: &DefaultPlcBrowseRequestBuilder{
+				queryStrings: map[string]string{},
+			},
+		},
 	}
 	for _, tt := range tests {
 		t.Run(tt.name, func(t *testing.T) {
diff --git a/plc4go/spi/model/mock_PlcBrowser_test.go b/plc4go/spi/model/mock_PlcBrowser_test.go
new file mode 100644
index 0000000000..dc62e6e940
--- /dev/null
+++ b/plc4go/spi/model/mock_PlcBrowser_test.go
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// Code generated by mockery v2.27.1. DO NOT EDIT.
+
+package model
+
+import (
+	context "context"
+
+	apimodel "github.com/apache/plc4x/plc4go/pkg/api/model"
+
+	mock "github.com/stretchr/testify/mock"
+)
+
+// MockPlcBrowser is an autogenerated mock type for the PlcBrowser type
+type MockPlcBrowser struct {
+	mock.Mock
+}
+
+type MockPlcBrowser_Expecter struct {
+	mock *mock.Mock
+}
+
+func (_m *MockPlcBrowser) EXPECT() *MockPlcBrowser_Expecter {
+	return &MockPlcBrowser_Expecter{mock: &_m.Mock}
+}
+
+// Browse provides a mock function with given fields: ctx, browseRequest
+func (_m *MockPlcBrowser) Browse(ctx context.Context, browseRequest apimodel.PlcBrowseRequest) <-chan apimodel.PlcBrowseRequestResult {
+	ret := _m.Called(ctx, browseRequest)
+
+	var r0 <-chan apimodel.PlcBrowseRequestResult
+	if rf, ok := ret.Get(0).(func(context.Context, apimodel.PlcBrowseRequest) <-chan apimodel.PlcBrowseRequestResult); ok {
+		r0 = rf(ctx, browseRequest)
+	} else {
+		if ret.Get(0) != nil {
+			r0 = ret.Get(0).(<-chan apimodel.PlcBrowseRequestResult)
+		}
+	}
+
+	return r0
+}
+
+// MockPlcBrowser_Browse_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Browse'
+type MockPlcBrowser_Browse_Call struct {
+	*mock.Call
+}
+
+// Browse is a helper method to define mock.On call
+//   - ctx context.Context
+//   - browseRequest apimodel.PlcBrowseRequest
+func (_e *MockPlcBrowser_Expecter) Browse(ctx interface{}, browseRequest interface{}) *MockPlcBrowser_Browse_Call {
+	return &MockPlcBrowser_Browse_Call{Call: _e.mock.On("Browse", ctx, browseRequest)}
+}
+
+func (_c *MockPlcBrowser_Browse_Call) Run(run func(ctx context.Context, browseRequest apimodel.PlcBrowseRequest)) *MockPlcBrowser_Browse_Call {
+	_c.Call.Run(func(args mock.Arguments) {
+		run(args[0].(context.Context), args[1].(apimodel.PlcBrowseRequest))
+	})
+	return _c
+}
+
+func (_c *MockPlcBrowser_Browse_Call) Return(_a0 <-chan apimodel.PlcBrowseRequestResult) *MockPlcBrowser_Browse_Call {
+	_c.Call.Return(_a0)
+	return _c
+}
+
+func (_c *MockPlcBrowser_Browse_Call) RunAndReturn(run func(context.Context, apimodel.PlcBrowseRequest) <-chan apimodel.PlcBrowseRequestResult) *MockPlcBrowser_Browse_Call {
+	_c.Call.Return(run)
+	return _c
+}
+
+// BrowseWithInterceptor provides a mock function with given fields: ctx, browseRequest, interceptor
+func (_m *MockPlcBrowser) BrowseWithInterceptor(ctx context.Context, browseRequest apimodel.PlcBrowseRequest, interceptor func(apimodel.PlcBrowseItem) bool) <-chan apimodel.PlcBrowseRequestResult {
+	ret := _m.Called(ctx, browseRequest, interceptor)
+
+	var r0 <-chan apimodel.PlcBrowseRequestResult
+	if rf, ok := ret.Get(0).(func(context.Context, apimodel.PlcBrowseRequest, func(apimodel.PlcBrowseItem) bool) <-chan apimodel.PlcBrowseRequestResult); ok {
+		r0 = rf(ctx, browseRequest, interceptor)
+	} else {
+		if ret.Get(0) != nil {
+			r0 = ret.Get(0).(<-chan apimodel.PlcBrowseRequestResult)
+		}
+	}
+
+	return r0
+}
+
+// MockPlcBrowser_BrowseWithInterceptor_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'BrowseWithInterceptor'
+type MockPlcBrowser_BrowseWithInterceptor_Call struct {
+	*mock.Call
+}
+
+// BrowseWithInterceptor is a helper method to define mock.On call
+//   - ctx context.Context
+//   - browseRequest apimodel.PlcBrowseRequest
+//   - interceptor func(apimodel.PlcBrowseItem) bool
+func (_e *MockPlcBrowser_Expecter) BrowseWithInterceptor(ctx interface{}, browseRequest interface{}, interceptor interface{}) *MockPlcBrowser_BrowseWithInterceptor_Call {
+	return &MockPlcBrowser_BrowseWithInterceptor_Call{Call: _e.mock.On("BrowseWithInterceptor", ctx, browseRequest, interceptor)}
+}
+
+func (_c *MockPlcBrowser_BrowseWithInterceptor_Call) Run(run func(ctx context.Context, browseRequest apimodel.PlcBrowseRequest, interceptor func(apimodel.PlcBrowseItem) bool)) *MockPlcBrowser_BrowseWithInterceptor_Call {
+	_c.Call.Run(func(args mock.Arguments) {
+		run(args[0].(context.Context), args[1].(apimodel.PlcBrowseRequest), args[2].(func(apimodel.PlcBrowseItem) bool))
+	})
+	return _c
+}
+
+func (_c *MockPlcBrowser_BrowseWithInterceptor_Call) Return(_a0 <-chan apimodel.PlcBrowseRequestResult) *MockPlcBrowser_BrowseWithInterceptor_Call {
+	_c.Call.Return(_a0)
+	return _c
+}
+
+func (_c *MockPlcBrowser_BrowseWithInterceptor_Call) RunAndReturn(run func(context.Context, apimodel.PlcBrowseRequest, func(apimodel.PlcBrowseItem) bool) <-chan apimodel.PlcBrowseRequestResult) *MockPlcBrowser_BrowseWithInterceptor_Call {
+	_c.Call.Return(run)
+	return _c
+}
+
+type mockConstructorTestingTNewMockPlcBrowser interface {
+	mock.TestingT
+	Cleanup(func())
+}
+
+// NewMockPlcBrowser creates a new instance of MockPlcBrowser. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
+func NewMockPlcBrowser(t mockConstructorTestingTNewMockPlcBrowser) *MockPlcBrowser {
+	mock := &MockPlcBrowser{}
+	mock.Mock.Test(t)
+
+	t.Cleanup(func() { mock.AssertExpectations(t) })
+
+	return mock
+}
diff --git a/plc4go/spi/model/mock_requirements.go b/plc4go/spi/model/mock_requirements.go
index 0adb840f1e..64f4f31497 100644
--- a/plc4go/spi/model/mock_requirements.go
+++ b/plc4go/spi/model/mock_requirements.go
@@ -26,6 +26,11 @@ import (
 
 // Note this file is a Helper for mockery to generate use mocks from other package
 
+// Deprecated: don't use it in productive code
+type PlcBrowser interface {
+	spi.PlcBrowser
+}
+
 // Deprecated: don't use it in productive code
 type PlcTagHandler interface {
 	spi.PlcTagHandler