From 7268a5bc0bb240a58a3f85d04076ad9ae13e2cb2 Mon Sep 17 00:00:00 2001 From: Reynier Ortiz Date: Fri, 6 Sep 2024 09:18:07 -0400 Subject: [PATCH 1/3] mock: in order mock calls --- mock/mock.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mock/mock.go b/mock/mock.go index d5eb1ef55..64464450b 100644 --- a/mock/mock.go +++ b/mock/mock.go @@ -273,6 +273,13 @@ func (c *Call) NotBefore(calls ...*Call) *Call { return c } +// InOrder defines the order in which the calls should be made +func InOrder(calls ...*Call) { + for i := 1; i < len(calls); i++ { + calls[i].NotBefore(calls[i-1]) + } +} + // Mock is the workhorse used to track activity on another object. // For an example of its usage, refer to the "Example Usage" section at the top // of this document. From bdb1271ed89c8de6881bc02cfe700bb91bc9a990 Mon Sep 17 00:00:00 2001 From: Reynier Ortiz Date: Fri, 6 Sep 2024 09:18:07 -0400 Subject: [PATCH 2/3] mock: in order mock calls --- mock/mock_test.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/mock/mock_test.go b/mock/mock_test.go index b80a8a75b..bc3c5ad2f 100644 --- a/mock/mock_test.go +++ b/mock/mock_test.go @@ -937,6 +937,30 @@ func Test_Mock_Return_NotBefore_In_Order(t *testing.T) { }) } +func Test_Mock_Return_InOrder_Uses_NotBefore(t *testing.T) { + var mockedService = new(TestExampleImplementation) + + b := mockedService. + On("TheExampleMethod", 1, 2, 3). + Return(4, nil) + c := mockedService. + On("TheExampleMethod2", true). + Return() + + InOrder( + b, + c, + ) + + require.Equal(t, []*Call{b, c}, mockedService.ExpectedCalls) + require.NotPanics(t, func() { + mockedService.TheExampleMethod(1, 2, 3) + }) + require.NotPanics(t, func() { + mockedService.TheExampleMethod2(true) + }) +} + func Test_Mock_Return_NotBefore_Out_Of_Order(t *testing.T) { var mockedService = new(TestExampleImplementation) @@ -967,6 +991,40 @@ TheExampleMethod(int,int,int) }) } +func Test_Mock_Return_InOrder_Uses_NotBefore_Out_Of_Order(t *testing.T) { + var mockedService = new(TestExampleImplementation) + + b := mockedService. + On("TheExampleMethod", 1, 2, 3). + Return(4, nil).Twice() + c := mockedService. + On("TheExampleMethod2", true). + Return() + + InOrder( + b, + c, + ) + + require.Equal(t, []*Call{b, c}, mockedService.ExpectedCalls) + + expectedPanicString := `mock: Unexpected Method Call +----------------------------- + +TheExampleMethod2(bool) + 0: true + +Must not be called before: + +TheExampleMethod(int,int,int) + 0: 1 + 1: 2 + 2: 3` + require.PanicsWithValue(t, expectedPanicString, func() { + mockedService.TheExampleMethod2(true) + }) +} + func Test_Mock_Return_NotBefore_Not_Enough_Times(t *testing.T) { var mockedService = new(TestExampleImplementation) @@ -1022,6 +1080,7 @@ func Test_Mock_Return_NotBefore_Different_Mock_In_Order(t *testing.T) { mockedService2.TheExampleMethod2(true) }) } + func Test_Mock_Return_NotBefore_Different_Mock_Out_Of_Order(t *testing.T) { var ( mockedService1 = new(TestExampleImplementation) From f17409f81f93ebd964caa7a36793134d68e23fdb Mon Sep 17 00:00:00 2001 From: Reynier Ortiz Date: Fri, 6 Sep 2024 09:18:07 -0400 Subject: [PATCH 3/3] mock: in order mock calls (requested changes applied) --- mock/mock.go | 7 +++++++ mock/mock_test.go | 33 ++++++++++++--------------------- 2 files changed, 19 insertions(+), 21 deletions(-) diff --git a/mock/mock.go b/mock/mock.go index 64464450b..920a87adc 100644 --- a/mock/mock.go +++ b/mock/mock.go @@ -274,6 +274,13 @@ func (c *Call) NotBefore(calls ...*Call) *Call { } // InOrder defines the order in which the calls should be made +// +// For example: +// +// InOrder( +// Mock.On("init").Return(nil), +// Mock.On("Do").Return(nil), +// ) func InOrder(calls ...*Call) { for i := 1; i < len(calls); i++ { calls[i].NotBefore(calls[i-1]) diff --git a/mock/mock_test.go b/mock/mock_test.go index bc3c5ad2f..4878b677e 100644 --- a/mock/mock_test.go +++ b/mock/mock_test.go @@ -940,19 +940,15 @@ func Test_Mock_Return_NotBefore_In_Order(t *testing.T) { func Test_Mock_Return_InOrder_Uses_NotBefore(t *testing.T) { var mockedService = new(TestExampleImplementation) - b := mockedService. - On("TheExampleMethod", 1, 2, 3). - Return(4, nil) - c := mockedService. - On("TheExampleMethod2", true). - Return() - InOrder( - b, - c, + mockedService. + On("TheExampleMethod", 1, 2, 3). + Return(4, nil), + mockedService. + On("TheExampleMethod2", true). + Return(), ) - require.Equal(t, []*Call{b, c}, mockedService.ExpectedCalls) require.NotPanics(t, func() { mockedService.TheExampleMethod(1, 2, 3) }) @@ -994,20 +990,15 @@ TheExampleMethod(int,int,int) func Test_Mock_Return_InOrder_Uses_NotBefore_Out_Of_Order(t *testing.T) { var mockedService = new(TestExampleImplementation) - b := mockedService. - On("TheExampleMethod", 1, 2, 3). - Return(4, nil).Twice() - c := mockedService. - On("TheExampleMethod2", true). - Return() - InOrder( - b, - c, + mockedService. + On("TheExampleMethod", 1, 2, 3). + Return(4, nil).Twice(), + mockedService. + On("TheExampleMethod2", true). + Return(), ) - require.Equal(t, []*Call{b, c}, mockedService.ExpectedCalls) - expectedPanicString := `mock: Unexpected Method Call -----------------------------