github.com/hyperledger/aries-framework-go@v0.3.2/pkg/client/introduce/client_test.go (about) 1 /* 2 Copyright SecureKey Technologies Inc. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package introduce 8 9 import ( 10 "errors" 11 "fmt" 12 "testing" 13 14 "github.com/golang/mock/gomock" 15 "github.com/stretchr/testify/require" 16 17 "github.com/hyperledger/aries-framework-go/pkg/client/outofband" 18 "github.com/hyperledger/aries-framework-go/pkg/didcomm/common/service" 19 "github.com/hyperledger/aries-framework-go/pkg/didcomm/protocol/introduce" 20 mocksintroduce "github.com/hyperledger/aries-framework-go/pkg/internal/gomocks/client/introduce" 21 ) 22 23 const expectedPIID = "piid" 24 25 func TestNew(t *testing.T) { 26 const errMsg = "test err" 27 28 ctrl := gomock.NewController(t) 29 defer ctrl.Finish() 30 31 t.Run("get service error", func(t *testing.T) { 32 provider := mocksintroduce.NewMockProvider(ctrl) 33 provider.EXPECT().Service(gomock.Any()).Return(nil, errors.New(errMsg)) 34 _, err := New(provider) 35 require.EqualError(t, err, errMsg) 36 }) 37 38 t.Run("cast service error", func(t *testing.T) { 39 provider := mocksintroduce.NewMockProvider(ctrl) 40 provider.EXPECT().Service(gomock.Any()).Return(nil, nil) 41 _, err := New(provider) 42 require.EqualError(t, err, "cast service to Introduce Service failed") 43 }) 44 } 45 46 func TestClient_Actions(t *testing.T) { 47 ctrl := gomock.NewController(t) 48 defer ctrl.Finish() 49 50 t.Run("Success", func(t *testing.T) { 51 provider := mocksintroduce.NewMockProvider(ctrl) 52 53 svc := mocksintroduce.NewMockProtocolService(ctrl) 54 expected := []introduce.Action{{PIID: "1"}, {PIID: "2"}} 55 svc.EXPECT().Actions().Return(expected, nil) 56 57 provider.EXPECT().Service(gomock.Any()).Return(svc, nil) 58 client, err := New(provider) 59 require.NoError(t, err) 60 61 actions, err := client.Actions() 62 require.NoError(t, err) 63 // client Actions is an array of new type of Action, the test can't check for value equality since client Action 64 // is, even though it's anp service Action, is considered a different type therefore fails quality checks. Simply 65 // check for set values instead. 66 require.Equal(t, len(expected), len(actions)) 67 require.Equal(t, expected[0].PIID, actions[0].PIID) 68 require.Equal(t, expected[1].PIID, actions[1].PIID) 69 }) 70 } 71 72 func TestClient_SendProposal(t *testing.T) { 73 ctrl := gomock.NewController(t) 74 defer ctrl.Finish() 75 76 t.Run("Success", func(t *testing.T) { 77 provider := mocksintroduce.NewMockProvider(ctrl) 78 79 svc := mocksintroduce.NewMockProtocolService(ctrl) 80 svc.EXPECT(). 81 HandleOutbound(gomock.Any(), "firstMyDID", "firstTheirDID"). 82 DoAndReturn(func(msg service.DIDCommMsg, myDID, theirDID string) (string, error) { 83 require.Equal(t, msg.Type(), introduce.ProposalMsgType) 84 require.NotEmpty(t, msg.Metadata()) 85 86 return expectedPIID, nil 87 }) 88 svc.EXPECT(). 89 HandleOutbound(gomock.Any(), "secondMyDID", "secondTheirDID"). 90 DoAndReturn(func(msg service.DIDCommMsg, myDID, theirDID string) (string, error) { 91 require.Equal(t, msg.Type(), introduce.ProposalMsgType) 92 require.NotEmpty(t, msg.Metadata()) 93 94 return expectedPIID, nil 95 }) 96 97 provider.EXPECT().Service(gomock.Any()).Return(svc, nil) 98 client, err := New(provider) 99 require.NoError(t, err) 100 101 piid, err := client.SendProposal(&Recipient{ 102 MyDID: "firstMyDID", 103 TheirDID: "firstTheirDID", 104 }, &Recipient{ 105 MyDID: "secondMyDID", 106 TheirDID: "secondTheirDID", 107 }) 108 require.Equal(t, expectedPIID, piid) 109 require.NoError(t, err) 110 }) 111 112 t.Run("Error", func(t *testing.T) { 113 const errMsg = "test error" 114 115 provider := mocksintroduce.NewMockProvider(ctrl) 116 117 svc := mocksintroduce.NewMockProtocolService(ctrl) 118 svc.EXPECT(). 119 HandleOutbound(gomock.Any(), "firstMyDID", "firstTheirDID"). 120 Return("", errors.New(errMsg)) 121 122 provider.EXPECT().Service(gomock.Any()).Return(svc, nil) 123 client, err := New(provider) 124 require.NoError(t, err) 125 126 piid, err := client.SendProposal(&Recipient{ 127 MyDID: "firstMyDID", 128 TheirDID: "firstTheirDID", 129 }, &Recipient{}) 130 require.Empty(t, piid) 131 require.Contains(t, fmt.Sprintf("%v", err), errMsg) 132 }) 133 } 134 135 func TestClient_SendProposalWithOOBInvitation(t *testing.T) { 136 ctrl := gomock.NewController(t) 137 defer ctrl.Finish() 138 139 provider := mocksintroduce.NewMockProvider(ctrl) 140 141 svc := mocksintroduce.NewMockProtocolService(ctrl) 142 svc.EXPECT(). 143 HandleOutbound(gomock.Any(), "firstMyDID", "firstTheirDID"). 144 DoAndReturn(func(msg service.DIDCommMsg, myDID, theirDID string) (string, error) { 145 require.Equal(t, msg.Type(), introduce.ProposalMsgType) 146 require.NotEmpty(t, msg.Metadata()) 147 148 return expectedPIID, nil 149 }) 150 151 provider.EXPECT().Service(gomock.Any()).Return(svc, nil) 152 client, err := New(provider) 153 require.NoError(t, err) 154 155 req := &outofband.Invitation{} 156 piid, err := client.SendProposalWithOOBInvitation(req, &Recipient{ 157 MyDID: "firstMyDID", 158 TheirDID: "firstTheirDID", 159 }) 160 require.Equal(t, expectedPIID, piid) 161 require.NoError(t, err) 162 } 163 164 func TestClient_SendRequest(t *testing.T) { 165 ctrl := gomock.NewController(t) 166 defer ctrl.Finish() 167 168 provider := mocksintroduce.NewMockProvider(ctrl) 169 170 svc := mocksintroduce.NewMockProtocolService(ctrl) 171 svc.EXPECT(). 172 HandleOutbound(gomock.Any(), "firstMyDID", "firstTheirDID"). 173 DoAndReturn(func(msg service.DIDCommMsg, myDID, theirDID string) (string, error) { 174 require.Equal(t, msg.Type(), introduce.RequestMsgType) 175 require.Empty(t, msg.Metadata()) 176 177 return expectedPIID, nil 178 }) 179 180 provider.EXPECT().Service(gomock.Any()).Return(svc, nil) 181 client, err := New(provider) 182 require.NoError(t, err) 183 184 piid, err := client.SendRequest(&PleaseIntroduceTo{}, "firstMyDID", "firstTheirDID") 185 require.Equal(t, expectedPIID, piid) 186 require.NoError(t, err) 187 } 188 189 func TestClient_AcceptProposalWithOOBRequest(t *testing.T) { 190 t.Run("continues the process instance with the request", func(t *testing.T) { 191 expectedPIID := "abc123" 192 ctrl := gomock.NewController(t) 193 defer ctrl.Finish() 194 195 provider := mocksintroduce.NewMockProvider(ctrl) 196 svc := mocksintroduce.NewMockProtocolService(ctrl) 197 svc.EXPECT().ActionContinue( 198 gomock.AssignableToTypeOf(""), 199 gomock.AssignableToTypeOf(introduce.WithOOBInvitation(nil)), 200 ).DoAndReturn( 201 func(piid string, opt introduce.Opt) error { 202 require.Equal(t, expectedPIID, piid) 203 require.NotNil(t, opt) 204 205 return nil 206 }, 207 ) 208 provider.EXPECT().Service(gomock.Any()).Return(svc, nil) 209 210 client, err := New(provider) 211 require.NoError(t, err) 212 213 err = client.AcceptProposalWithOOBInvitation(expectedPIID, &outofband.Invitation{}) 214 require.NoError(t, err) 215 }) 216 } 217 218 func TestClient_AcceptProposal(t *testing.T) { 219 t.Run("continues the process instance", func(t *testing.T) { 220 const expectedPIID = "abc123" 221 222 ctrl := gomock.NewController(t) 223 defer ctrl.Finish() 224 225 svc := mocksintroduce.NewMockProtocolService(ctrl) 226 svc.EXPECT().ActionContinue(gomock.Eq(expectedPIID), gomock.Nil()).Return(nil) 227 228 provider := mocksintroduce.NewMockProvider(ctrl) 229 provider.EXPECT().Service(gomock.Any()).Return(svc, nil) 230 231 client, err := New(provider) 232 require.NoError(t, err) 233 234 require.NoError(t, client.AcceptProposal(expectedPIID)) 235 }) 236 } 237 238 func TestClient_AcceptRequestWithPublicOOBRequest(t *testing.T) { 239 t.Run("continues the process instance with the public request", func(t *testing.T) { 240 expectedPIID := "abc123" 241 ctrl := gomock.NewController(t) 242 defer ctrl.Finish() 243 244 provider := mocksintroduce.NewMockProvider(ctrl) 245 svc := mocksintroduce.NewMockProtocolService(ctrl) 246 svc.EXPECT().ActionContinue( 247 gomock.AssignableToTypeOf(""), 248 gomock.AssignableToTypeOf(introduce.WithPublicOOBInvitation(nil, nil)), 249 ).DoAndReturn( 250 func(piid string, opt introduce.Opt) error { 251 require.Equal(t, expectedPIID, piid) 252 require.NotNil(t, opt) 253 254 return nil 255 }, 256 ) 257 provider.EXPECT().Service(gomock.Any()).Return(svc, nil) 258 259 client, err := New(provider) 260 require.NoError(t, err) 261 262 err = client.AcceptRequestWithPublicOOBInvitation(expectedPIID, &outofband.Invitation{}, &To{}) 263 require.NoError(t, err) 264 }) 265 } 266 267 func TestClient_DeclineProposal(t *testing.T) { 268 ctrl := gomock.NewController(t) 269 defer ctrl.Finish() 270 271 provider := mocksintroduce.NewMockProvider(ctrl) 272 273 svc := mocksintroduce.NewMockProtocolService(ctrl) 274 svc.EXPECT().ActionStop("PIID", errors.New("the reason")).Return(nil) 275 276 provider.EXPECT().Service(gomock.Any()).Return(svc, nil) 277 client, err := New(provider) 278 require.NoError(t, err) 279 280 require.NoError(t, client.DeclineProposal("PIID", "the reason")) 281 } 282 283 func TestClient_DeclineRequest(t *testing.T) { 284 ctrl := gomock.NewController(t) 285 defer ctrl.Finish() 286 287 provider := mocksintroduce.NewMockProvider(ctrl) 288 289 svc := mocksintroduce.NewMockProtocolService(ctrl) 290 svc.EXPECT().ActionStop("PIID", errors.New("the reason")).Return(nil) 291 292 provider.EXPECT().Service(gomock.Any()).Return(svc, nil) 293 client, err := New(provider) 294 require.NoError(t, err) 295 296 require.NoError(t, client.DeclineRequest("PIID", "the reason")) 297 } 298 299 func TestClient_AcceptProblemReport(t *testing.T) { 300 ctrl := gomock.NewController(t) 301 defer ctrl.Finish() 302 303 provider := mocksintroduce.NewMockProvider(ctrl) 304 305 svc := mocksintroduce.NewMockProtocolService(ctrl) 306 svc.EXPECT().ActionContinue("PIID", gomock.Any()).Return(nil) 307 308 provider.EXPECT().Service(gomock.Any()).Return(svc, nil) 309 client, err := New(provider) 310 require.NoError(t, err) 311 312 require.NoError(t, client.AcceptProblemReport("PIID")) 313 }